diff options
Diffstat (limited to 'plugins/coverage-common/src/com/intellij/coverage/CoverageOptionsConfigurable.java')
-rw-r--r-- | plugins/coverage-common/src/com/intellij/coverage/CoverageOptionsConfigurable.java | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/plugins/coverage-common/src/com/intellij/coverage/CoverageOptionsConfigurable.java b/plugins/coverage-common/src/com/intellij/coverage/CoverageOptionsConfigurable.java new file mode 100644 index 000000000000..4257791d25cf --- /dev/null +++ b/plugins/coverage-common/src/com/intellij/coverage/CoverageOptionsConfigurable.java @@ -0,0 +1,179 @@ +package com.intellij.coverage; + +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.options.Configurable; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.SearchableConfigurable; +import com.intellij.openapi.project.Project; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; +import java.util.List; + +/** + * User: anna + * Date: 12/16/10 + */ +public class CoverageOptionsConfigurable implements SearchableConfigurable, Configurable.NoScroll { + private CoverageOptionsPanel myPanel; + private final CoverageOptionsProvider myManager; + private Project myProject; + + public CoverageOptionsConfigurable(CoverageOptionsProvider manager, Project project) { + myManager = manager; + myProject = project; + } + + @NotNull + @Override + public String getId() { + return "coverage"; + } + + @Override + public Runnable enableSearch(String option) { + return null; + } + + @Nls + @Override + public String getDisplayName() { + return "Coverage"; + } + + @Override + public String getHelpTopic() { + return "reference.project.settings.coverage"; + } + + @Override + public JComponent createComponent() { + myPanel = new CoverageOptionsPanel(); + + List<JComponent> extensionPanels = collectExtensionOptionsComponents(); + + if (extensionPanels.size() > 0) { + return createCompositePanel(extensionPanels); + } + else { + return myPanel.myWholePanel; + } + } + + private List<JComponent> collectExtensionOptionsComponents() { + List<JComponent> additionalPanels = ContainerUtil.newArrayList(); + for (CoverageOptions coverageOptions : getExtensions()) { + additionalPanels.add(coverageOptions.getComponent()); + } + return additionalPanels; + } + + private JComponent createCompositePanel(List<JComponent> additionalPanels) { + final JPanel panel = new JPanel(new GridBagLayout()); + final GridBagConstraints c = new GridBagConstraints(); + c.anchor = GridBagConstraints.NORTHWEST; + c.gridx = 0; + c.gridy = GridBagConstraints.RELATIVE; + c.weightx = 1; + c.fill = GridBagConstraints.HORIZONTAL; + panel.add(myPanel.myWholePanel, c); + for (JComponent p : additionalPanels) { + panel.add(p, c); + } + c.fill = GridBagConstraints.BOTH; + c.weightx = 1; + c.weighty = 1; + panel.add(Box.createVerticalBox(), c); + return panel; + } + + private CoverageOptions[] getExtensions() { + return Extensions.getExtensions(CoverageOptions.EP_NAME, myProject); + } + + @Override + public boolean isModified() { + if (myManager.getOptionToReplace() != getSelectedValue()) { + return true; + } + + if (myManager.activateViewOnRun() != myPanel.myActivateCoverageViewCB.isSelected()) { + return true; + } + + for (CoverageOptions coverageOptions : getExtensions()) { + if (coverageOptions.isModified()) { + return true; + } + } + + return false; + } + + @Override + public void apply() throws ConfigurationException { + myManager.setOptionsToReplace(getSelectedValue()); + myManager.setActivateViewOnRun(myPanel.myActivateCoverageViewCB.isSelected()); + for (CoverageOptions coverageOptions : getExtensions()) { + coverageOptions.apply(); + } + } + + private int getSelectedValue() { + if (myPanel.myReplaceRB.isSelected()) { + return 0; + } + else if (myPanel.myAddRB.isSelected()) { + return 1; + } + else if (myPanel.myDoNotApplyRB.isSelected()) { + return 2; + } + return 3; + } + + @Override + public void reset() { + final int addOrReplace = myManager.getOptionToReplace(); + switch (addOrReplace) { + case 0: + myPanel.myReplaceRB.setSelected(true); + break; + case 1: + myPanel.myAddRB.setSelected(true); + break; + case 2: + myPanel.myDoNotApplyRB.setSelected(true); + break; + default: + myPanel.myShowOptionsRB.setSelected(true); + } + + myPanel.myActivateCoverageViewCB.setSelected(myManager.activateViewOnRun()); + for (CoverageOptions coverageOptions : getExtensions()) { + coverageOptions.reset(); + } + } + + @Override + public void disposeUIResources() { + myPanel = null; + + for (CoverageOptions coverageOptions : getExtensions()) { + coverageOptions.disposeUIResources(); + } + } + + private static class CoverageOptionsPanel { + private JRadioButton myShowOptionsRB; + private JRadioButton myReplaceRB; + private JRadioButton myAddRB; + private JRadioButton myDoNotApplyRB; + + private JPanel myWholePanel; + private JCheckBox myActivateCoverageViewCB; + } +} |