Fix ConfigurableGroup selection in the new Settings tree.
authorSergey Malenkov <sergey.malenkov@jetbrains.com>
Tue, 19 Aug 2014 14:52:42 +0000 (18:52 +0400)
committerSergey Malenkov <sergey.malenkov@jetbrains.com>
Tue, 19 Aug 2014 14:54:17 +0000 (18:54 +0400)
platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java

index f1411cf3551d0b7d9a81f2a695ff75709e90f76b..32be2a88aac3aed377fccf746dc339c17f278824 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.openapi.options.ex;
 
 import com.intellij.openapi.options.Configurable;
 import com.intellij.openapi.options.ConfigurableGroup;
 
 import com.intellij.openapi.options.Configurable;
 import com.intellij.openapi.options.ConfigurableGroup;
+import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.options.OptionsBundle;
 import com.intellij.openapi.options.SearchableConfigurable;
 
 import com.intellij.openapi.options.OptionsBundle;
 import com.intellij.openapi.options.SearchableConfigurable;
 
@@ -24,8 +25,9 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map.Entry;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map.Entry;
+import javax.swing.JComponent;
 
 
-public final class MixedConfigurableGroup implements ConfigurableGroup {
+public final class MixedConfigurableGroup implements Configurable, ConfigurableGroup {
   private final String myGroupId;
   private Configurable[] myConfigurables;
 
   private final String myGroupId;
   private Configurable[] myConfigurables;
 
@@ -40,6 +42,34 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
     this(groupId, configurables.remove(groupId));
   }
 
     this(groupId, configurables.remove(groupId));
   }
 
+  @Override
+  public JComponent createComponent() {
+    return null;
+  }
+
+  @Override
+  public boolean isModified() {
+    return false;
+  }
+
+  @Override
+  public void apply() throws ConfigurationException {
+  }
+
+  @Override
+  public void reset() {
+  }
+
+  @Override
+  public void disposeUIResources() {
+    myConfigurables = null;
+  }
+
+  @Override
+  public String getHelpTopic() {
+    return "configurable.group." + myGroupId + ".help.topic";
+  }
+
   @Override
   public String getDisplayName() {
     return OptionsBundle.message("configurable.group." + myGroupId + ".settings.display.name");
   @Override
   public String getDisplayName() {
     return OptionsBundle.message("configurable.group." + myGroupId + ".settings.display.name");
index 9269da7ab967841855ea49b243aa8a0ea178765c..31c4272c7a4774324feac4f3c98a85b840f6e24a 100644 (file)
@@ -435,20 +435,21 @@ final class SettingsTreeView extends JComponent implements Disposable, OptionsEd
       myConfigurable = configurable;
       String name = configurable.getDisplayName();
       myDisplayName = name != null ? name.replace("\n", " ") : "{ " + configurable.getClass().getSimpleName() + " }";
       myConfigurable = configurable;
       String name = configurable.getDisplayName();
       myDisplayName = name != null ? name.replace("\n", " ") : "{ " + configurable.getClass().getSimpleName() + " }";
-
-      myConfigurableToNodeMap.put(configurable, this);
     }
 
     private MyNode(CachingSimpleNode parent, ConfigurableGroup group) {
       super(parent);
       myComposite = group;
     }
 
     private MyNode(CachingSimpleNode parent, ConfigurableGroup group) {
       super(parent);
       myComposite = group;
-      myConfigurable = null;
+      myConfigurable = group instanceof Configurable ? (Configurable)group : null;
       String name = group.getDisplayName();
       myDisplayName = name != null ? name.replace("\n", " ") : "{ " + group.getClass().getSimpleName() + " }";
     }
 
     @Override
     protected SimpleNode[] buildChildren() {
       String name = group.getDisplayName();
       myDisplayName = name != null ? name.replace("\n", " ") : "{ " + group.getClass().getSimpleName() + " }";
     }
 
     @Override
     protected SimpleNode[] buildChildren() {
+      if (myConfigurable != null) {
+        myConfigurableToNodeMap.put(myConfigurable, this);
+      }
       if (myComposite == null) {
         return NO_CHILDREN;
       }
       if (myComposite == null) {
         return NO_CHILDREN;
       }