package org.dlangplugin.run; import com.intellij.application.options.ModulesComboBox; import com.intellij.execution.configuration.EnvironmentVariablesComponent; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.ui.TextComponentAccessor; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.ui.RawCommandLineEditor; import org.dlangplugin.DLangBundle; import org.dlangplugin.module.DLangModuleType; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.Map; /** DUB build system configuration UI. * @see https://github.com/D-Programming-Language/dub */ public class DLangRunDubConfigurationEditor extends SettingsEditor<DLangRunDubConfiguration>{ private JPanel myMainPanel; private ModulesComboBox comboModule; private JCheckBox cbRunAfterBuild; private JCheckBox cbVerbose; private JCheckBox cbQuiet; private TextFieldWithBrowseButton pathWorkingDir; private RawCommandLineEditor textParameters; private EnvironmentVariablesComponent envVariables; /** Update editor UI with data of DLangRunDubConfiguration. * All components must be changed according to "config" data. */ @Override protected void resetEditorFrom(DLangRunDubConfiguration config) { comboModule.fillModules(config.getProject(), DLangModuleType.getInstance()); comboModule.setSelectedModule(config.getConfigurationModule().getModule()); cbRunAfterBuild.setSelected(config.isRunAfterBuild()); cbVerbose.setSelected(config.isVerbose()); cbQuiet.setSelected(config.isQuiet()); pathWorkingDir.setText(config.getWorkingDir()); textParameters.setText(config.getAdditionalParams()); Map<String,String> envVars = config.getEnvVars(); if(envVars != null) { envVariables.setEnvs(config.getEnvVars()); } } /** Save state of editor UI to DLangRunDubConfiguration instance. */ @Override protected void applyEditorTo(DLangRunDubConfiguration config) throws ConfigurationException { config.setModule(comboModule.getSelectedModule()); config.setRunAfterBuild(cbRunAfterBuild.isSelected()); config.setVerbose(cbVerbose.isSelected()); config.setQuiet(cbQuiet.isSelected()); config.setWorkingDir(pathWorkingDir.getText()); config.setAdditionalParams(textParameters.getText()); config.setEnvVars(envVariables.getEnvs()); } @NotNull @Override protected JComponent createEditor() { FileChooserDescriptor fcd = FileChooserDescriptorFactory.createSingleFolderDescriptor(); fcd.setShowFileSystemRoots(true); fcd.setTitle(DLangBundle.message("dmd.run.config.selectworkingdir.title")); fcd.setDescription(DLangBundle.message("dmd.run.config.selectworkingdir.description")); fcd.setHideIgnored(false); pathWorkingDir.addBrowseFolderListener(null, new TextFieldWithBrowseButton.BrowseFolderActionListener<JTextField>(fcd.getTitle(), fcd.getDescription(), pathWorkingDir, null, fcd, TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT) ); return myMainPanel; } @Override protected void disposeEditor() { } }