package org.dlangplugin.config;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.TextComponentAccessor;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import org.dlangplugin.DLangBundle;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/* UI Panel with DLang plugin settings.
* See "DLangSettingsPanel.form" for details.
* It has a single edit field for DLangGeneralSettings.state.dubExecutablePath
*/
public class DLangSettingsPanel implements SearchableConfigurable {
private final DLangGeneralSettings settings;
private final Project project;
private JPanel panel;
private TextFieldWithBrowseButton pathDubExecutable;
public DLangSettingsPanel(@NotNull Project project, @NotNull DLangGeneralSettings settings) {
this.settings = settings;
this.project = project;
}
@NotNull
@Override
public String getId() {
return DLangSettingsPanel.class.getCanonicalName();
}
@Nullable
@Override
public Runnable enableSearch(String s) {
return null;
}
@Nls
@Override
public String getDisplayName() {
return DLangBundle.message("settings.label");
}
@Nullable
@Override
public String getHelpTopic() {
return null;
}
@Nullable
@Override
public JComponent createComponent() {
FileChooserDescriptor fcd = FileChooserDescriptorFactory.createSingleFileOrExecutableAppDescriptor();
fcd.setShowFileSystemRoots(true);
fcd.setTitle(DLangBundle.message("dub.config.selectexecutable.title"));
fcd.setDescription(DLangBundle.message("dub.config.selectexecutable.description"));
fcd.setHideIgnored(false);
pathDubExecutable.addBrowseFolderListener(null,
new TextFieldWithBrowseButton.BrowseFolderActionListener<JTextField>(fcd.getTitle(), fcd.getDescription(),
pathDubExecutable, null, fcd, TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT) );
return panel;
}
@Override
public boolean isModified() {
DLangGeneralSettings formData = new DLangGeneralSettings();
readForm(formData);
return !formData.equals(settings);
}
@Override
public void apply() throws ConfigurationException {
readForm(settings);
}
@Override
public void reset() {
updateForm(settings);
}
@Override
public void disposeUIResources() {
}
private void readForm(DLangGeneralSettings settings) {
settings.setDubExecutablePath(pathDubExecutable.getText());
}
private void updateForm(DLangGeneralSettings settings) {
pathDubExecutable.setText(settings.getDubExecutablePath());
}
}