blob: 06f2685fceb12e3a59278bb2000b38e31acfdcb5 [file] [log] [blame]
package com.intellij.tasks.config;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.options.binding.BindControl;
import com.intellij.openapi.options.binding.BindableConfigurable;
import com.intellij.openapi.options.binding.ControlBinder;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.tasks.TaskManager;
import com.intellij.tasks.impl.TaskManagerImpl;
import com.intellij.ui.GuiUtils;
import com.intellij.ui.components.JBCheckBox;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Dmitry Avdeev
*/
@SuppressWarnings({"UnusedDeclaration"})
public class TaskConfigurable extends BindableConfigurable implements SearchableConfigurable.Parent, Configurable.NoScroll {
private JPanel myPanel;
@BindControl("updateEnabled")
private JCheckBox myUpdateCheckBox;
@BindControl("updateIssuesCount")
private JTextField myUpdateCount;
@BindControl("updateInterval")
private JTextField myUpdateInterval;
@BindControl("taskHistoryLength")
private JTextField myHistoryLength;
private JPanel myCacheSettings;
@BindControl("saveContextOnCommit")
private JCheckBox mySaveContextOnCommit;
@BindControl("changelistNameFormat")
private JTextField myChangelistNameFormat;
private JBCheckBox myAlwaysDisplayTaskCombo;
private JTextField myConnectionTimeout;
private final Project myProject;
private Configurable[] myConfigurables;
private final NotNullLazyValue<ControlBinder> myControlBinder = new NotNullLazyValue<ControlBinder>() {
@NotNull
@Override
protected ControlBinder compute() {
return new ControlBinder(getConfig());
}
};
public TaskConfigurable(Project project) {
super();
myProject = project;
myUpdateCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
enableCachePanel();
}
});
}
private TaskManagerImpl.Config getConfig() {
return ((TaskManagerImpl)TaskManager.getManager(myProject)).getState();
}
@Override
protected ControlBinder getBinder() {
return myControlBinder.getValue();
}
private void enableCachePanel() {
GuiUtils.enableChildren(myCacheSettings, myUpdateCheckBox.isSelected());
}
@Override
public void reset() {
super.reset();
enableCachePanel();
myAlwaysDisplayTaskCombo.setSelected(TaskSettings.getInstance().ALWAYS_DISPLAY_COMBO);
myConnectionTimeout.setText(Integer.toString(TaskSettings.getInstance().CONNECTION_TIMEOUT));
}
@Override
public void apply() throws ConfigurationException {
boolean oldUpdateEnabled = getConfig().updateEnabled;
super.apply();
TaskManager manager = TaskManager.getManager(myProject);
if (getConfig().updateEnabled && !oldUpdateEnabled) {
manager.updateIssues(null);
}
TaskSettings.getInstance().ALWAYS_DISPLAY_COMBO = myAlwaysDisplayTaskCombo.isSelected();
int oldConnectionTimeout = TaskSettings.getInstance().CONNECTION_TIMEOUT;
Integer connectionTimeout = Integer.valueOf(myConnectionTimeout.getText());
TaskSettings.getInstance().CONNECTION_TIMEOUT = connectionTimeout;
if (manager instanceof TaskManagerImpl && connectionTimeout != oldConnectionTimeout) {
((TaskManagerImpl)manager).reconfigureRepositoryClients();
}
}
@Override
public boolean isModified() {
return super.isModified() ||
TaskSettings.getInstance().ALWAYS_DISPLAY_COMBO != myAlwaysDisplayTaskCombo.isSelected() ||
TaskSettings.getInstance().CONNECTION_TIMEOUT != Integer.valueOf(myConnectionTimeout.getText());
}
@Nls
public String getDisplayName() {
return "Tasks";
}
public String getHelpTopic() {
return "reference.settings.project.tasks";
}
public JComponent createComponent() {
bindAnnotations();
return myPanel;
}
public void disposeUIResources() {
}
@NotNull
public String getId() {
return "tasks";
}
public Runnable enableSearch(String option) {
return null;
}
public boolean hasOwnContent() {
return true;
}
public boolean isVisible() {
return true;
}
public Configurable[] getConfigurables() {
if (myConfigurables == null) {
myConfigurables = new Configurable[] { new TaskRepositoriesConfigurable(myProject) };
}
return myConfigurables;
}
}