package de.janthomae.leiningenplugin.settings;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.ui.UserActivityListener;
import com.intellij.ui.UserActivityWatcher;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.JBLabel;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import de.janthomae.leiningenplugin.LeiningenIcons;
import de.janthomae.leiningenplugin.run.LeiningenRunnerSettings;
import org.jetbrains.annotations.Nls;
import javax.swing.*;
import java.awt.*;
/**
* @author <a href="janthomae@janthomae.de">Jan Thomä</a>
* @version $Id:$
*/
public class LeiningenSettings implements Configurable {
public static final String DISPLAY_NAME = "Leiningen";
private TextFieldWithBrowseButton leinBinSelectorField;
private TextFieldWithBrowseButton leinHomeSelectorField;
private JBCheckBox overrideLeinHome;
private TextFieldWithBrowseButton leinJarSelectorField;
private JBCheckBox overrideLeinJar;
private UserActivityWatcher myWatcher;
private boolean changed = false;
@Nls
public String getDisplayName() {
return DISPLAY_NAME;
}
public Icon getIcon() {
return LeiningenIcons.PROJECT_ICON;
}
public String getHelpTopic() {
return null;
}
public JComponent createComponent() {
JPanel outerPanel = new JPanel(new BorderLayout());
JPanel leinPanel = new JPanel(new FormLayout("80dlu, fill:80dlu:grow, 20dlu, 80dlu", "p,p,p"));
CellConstraints c = new CellConstraints();
int row = 1;
leinPanel.add(new JBLabel("Leiningen executable:"), c.xy(1,row));
this.leinBinSelectorField = new TextFieldWithBrowseButton();
leinBinSelectorField
.addBrowseFolderListener("Select the Leiningen executable", "'lein' on Linux/MacOS, 'lein.bat' on Windows. ", null,
new FileChooserDescriptor(true, false, false, false, false, false));
leinPanel.add(leinBinSelectorField, c.xy(2,row));
row++;
leinPanel.add(new JBLabel("Leiningen Home:"), c.xy(1,row));
this.leinHomeSelectorField = new TextFieldWithBrowseButton();
leinHomeSelectorField
.addBrowseFolderListener("Select the Leiningen home directory", "usually at $USER_HOME/.lein", null,
new FileChooserDescriptor(false, true, false, false, false, false));
leinPanel.add(leinHomeSelectorField, c.xy(2,row));
this.overrideLeinHome = new JBCheckBox();
leinPanel.add(overrideLeinHome, c.xy(3,row));
leinPanel.add(new JBLabel("Override"), c.xy(4,row));
row++;
leinPanel.add(new JBLabel("Leiningen Jar:"), c.xy(1,row));
this.leinJarSelectorField = new TextFieldWithBrowseButton();
leinJarSelectorField
.addBrowseFolderListener("Select the Leiningen Jar", "usually at $USER_HOME/.lein/self-installs/leinigen-VERSION-standalone.jar", null,
new FileChooserDescriptor(true, false, true, true, false, false));
leinPanel.add(leinJarSelectorField, c.xy(2,row));
this.overrideLeinJar = new JBCheckBox();
leinPanel.add(overrideLeinJar, c.xy(3,row));
leinPanel.add(new JBLabel("Override"), c.xy(4,row));
outerPanel.add(leinPanel, BorderLayout.NORTH);
myWatcher = new UserActivityWatcher();
myWatcher.register(outerPanel);
myWatcher.addUserActivityListener(new UserActivityListener() {
public void stateChanged() {
changed = true;
leinJarSelectorField.setEnabled(overrideLeinJar.isSelected());
leinHomeSelectorField.setEnabled(overrideLeinHome.isSelected());
}
});
return outerPanel;
}
public boolean isModified() {
return changed;
}
public void apply() throws ConfigurationException {
LeiningenRunnerSettings settings = LeiningenRunnerSettings.getInstance();
settings.leiningenPath = leinBinSelectorField.getText();
settings.leiningenHome = leinHomeSelectorField.getText();
settings.leiningenJar = leinJarSelectorField.getText();
settings.overrideLeiningenHome = overrideLeinHome.isSelected();
settings.overrideLeiningenJar = overrideLeinJar.isSelected();
changed = false;
}
public void reset() {
changed = false;
LeiningenRunnerSettings settings = LeiningenRunnerSettings.getInstance();
leinBinSelectorField.setText(settings.leiningenPath);
leinHomeSelectorField.setText(settings.getRealLeiningenHome());
leinJarSelectorField.setText(settings.getRealLeiningenJar());
overrideLeinHome.setSelected(settings.overrideLeiningenHome);
overrideLeinJar.setSelected((settings.overrideLeiningenJar));
}
public void disposeUIResources() {
myWatcher = null;
}
}