package org.elixir_lang.mix.runner; import com.intellij.application.options.ModulesComboBox; import com.intellij.execution.ui.CommonProgramParametersPanel; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SettingsEditor; import org.elixir_lang.module.ElixirModuleType; import org.elixir_lang.sdk.ElixirSystemUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Created by zyuyou on 15/7/8. * * @link https://github.com/ignatov/intellij-erlang/blob/master/src/org/intellij/erlang/rebar/runner/RebarRunConfigurationEditorForm.java */ public final class MixRunConfigurationEditorForm extends SettingsEditor<MixRunConfigurationBase>{ private JPanel myComponent; private JCheckBox myRunInModuleCheckBox; private JCheckBox mySkipDependenciesCheckBox; private ModulesComboBox myModulesComboBox; private CommonProgramParametersPanel commonProgramParametersPanel; public MixRunConfigurationEditorForm(){ myRunInModuleCheckBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { myModulesComboBox.setEnabled(myRunInModuleCheckBox.isSelected()); } }); myModulesComboBox.setVisible(!ElixirSystemUtil.isSmallIde()); myRunInModuleCheckBox.setVisible(!ElixirSystemUtil.isSmallIde()); } @Override protected void resetEditorFrom(@NotNull MixRunConfigurationBase configuration) { reset(configuration); } public void reset(@NotNull MixRunConfigurationBase configuration) { mySkipDependenciesCheckBox.setSelected(configuration.isSkipDependencies()); Module module = null; if(!ElixirSystemUtil.isSmallIde()){ myModulesComboBox.fillModules(configuration.getProject(), ElixirModuleType.getInstance()); module = configuration.getConfigurationModule().getModule(); } if(module != null){ setRunInModuleSelected(true); myModulesComboBox.setSelectedModule(module); }else{ setRunInModuleSelected(false); } commonProgramParametersPanel.reset(configuration); } @Override protected void applyEditorTo(@NotNull MixRunConfigurationBase mixRunConfiguration) throws ConfigurationException { Module selectedModule = myRunInModuleCheckBox.isSelected() ? myModulesComboBox.getSelectedModule() : null; mixRunConfiguration.setModule(selectedModule); mixRunConfiguration.setSkipDependencies(mySkipDependenciesCheckBox.isSelected()); commonProgramParametersPanel.applyTo(mixRunConfiguration); } @NotNull @Override protected JComponent createEditor() { return myComponent; } @Override protected void disposeEditor() { myComponent.setVisible(false); } private void setRunInModuleSelected(boolean b){ if(b){ if(!myRunInModuleCheckBox.isSelected()){ myRunInModuleCheckBox.doClick(); } }else{ if(myRunInModuleCheckBox.isSelected()){ myRunInModuleCheckBox.doClick(); } } } }