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; /** Run Compiled DLang application. Assert that application was build with "Run DMD" coonfiguration. */ public class DLangRunAppConfigurationEditor extends SettingsEditor<DLangRunAppConfiguration>{ private JPanel myMainPanel; private ModulesComboBox comboModule; private RawCommandLineEditor textParameters; private JPanel appPathPanel; private EnvironmentVariablesComponent envVariables; private TextFieldWithBrowseButton pathWorkingDir; private JLabel appPathLabel; /** Update editor UI with data of DLangRunAppConfiguration. * All components must be changed according to "config" data. */ @Override protected void resetEditorFrom(DLangRunAppConfiguration config) { comboModule.fillModules(config.getProject(), DLangModuleType.getInstance()); comboModule.setSelectedModule(config.getConfigurationModule().getModule()); pathWorkingDir.setText(config.getWorkDir()); textParameters.setText(config.getAdditionalParams()); Map<String,String> envVars = config.getEnvVars(); if(envVars != null) { envVariables.setEnvs(config.getEnvVars()); } appPathLabel.setText(config.getExecutablePath()); } /** Save state of editor UI to DLangRunAppConfiguration instance. */ @Override protected void applyEditorTo(DLangRunAppConfiguration config) throws ConfigurationException { config.setModule(comboModule.getSelectedModule()); config.setWorkDir(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() { } }