Settings: allow to make a group from any configurable.

This commit is contained in:
Sergey Malenkov
2014-09-01 15:01:54 +04:00
parent 4a3c425a10
commit 8488dea93a
3 changed files with 32 additions and 14 deletions
@@ -55,9 +55,11 @@ public class ConfigurableWrapper implements SearchableConfigurable {
return null; // it is allowed to return null from provider
}
}
return ep.children != null || ep.childrenEPName != null || ep.dynamic
? (T)new CompositeWrapper(ep, configurable)
: (T)new ConfigurableWrapper(ep, configurable);
return !ep.dynamic && ep.children == null && ep.childrenEPName == null
? (T)new ConfigurableWrapper(ep, configurable)
: "itself".equals(ep.groupId)
? (T)new GroupWrapper(ep, configurable)
: (T)new CompositeWrapper(ep, configurable);
}
else {
return ep.createConfigurable();
@@ -231,4 +233,15 @@ public class ConfigurableWrapper implements SearchableConfigurable {
return this;
}
}
private static final class GroupWrapper extends CompositeWrapper implements ConfigurableGroup {
private GroupWrapper(@NotNull ConfigurableEP ep, @Nullable UnnamedConfigurable configurable, Configurable... kids) {
super(ep, configurable, kids);
}
@Override
public String getShortName() {
return getDisplayName();
}
}
}
@@ -102,17 +102,23 @@ public final class MixedConfigurableGroup implements SearchableConfigurable, Con
}
public static ConfigurableGroup[] getGroups(Configurable... configurables) {
ArrayList<ConfigurableGroup> groups = new ArrayList<ConfigurableGroup>();
HashMap<String, ArrayList<Configurable>> map = new HashMap<String, ArrayList<Configurable>>();
for (Configurable configurable : configurables) {
String groupId = null;
if (configurable instanceof ConfigurableWrapper) {
groupId = ((ConfigurableWrapper)configurable).getExtensionPoint().groupId;
if (configurable instanceof ConfigurableGroup) {
groups.add((ConfigurableGroup)configurable);
}
ArrayList<Configurable> list = map.get(groupId);
if (list == null) {
map.put(groupId, list = new ArrayList<Configurable>());
else {
String groupId = null;
if (configurable instanceof ConfigurableWrapper) {
groupId = ((ConfigurableWrapper)configurable).getExtensionPoint().groupId;
}
ArrayList<Configurable> list = map.get(groupId);
if (list == null) {
map.put(groupId, list = new ArrayList<Configurable>());
}
list.add(configurable);
}
list.add(configurable);
}
ArrayList<Configurable> buildList = map.get("build");
if (buildList != null) {
@@ -124,9 +130,8 @@ public final class MixedConfigurableGroup implements SearchableConfigurable, Con
buildList.add(0, buildTools);
}
}
ArrayList<ConfigurableGroup> groups = new ArrayList<ConfigurableGroup>(map.size());
groups.add(new MixedConfigurableGroup("appearance", map));
groups.add(new MixedConfigurableGroup("editor", map));
groups.add(0, new MixedConfigurableGroup("appearance", map));
groups.add(1, new MixedConfigurableGroup("editor", map));
groups.add(new MixedConfigurableGroup("project", map));
groups.add(new MixedConfigurableGroup("build", map));
groups.add(new MixedConfigurableGroup("language", map));
@@ -25,7 +25,7 @@
<selectInTarget implementation="com.intellij.openapi.vcs.changes.SelectInChangesViewTarget"/>
<projectConfigurable groupId="project" groupWeight="110" dynamic="true" key="version.control.main.configurable.name" bundle="messages.VcsBundle" instance="com.intellij.openapi.vcs.configurable.VcsManagerConfigurable" id="vcs"/>
<projectConfigurable groupId="itself" groupWeight="110" dynamic="true" key="version.control.main.configurable.name" bundle="messages.VcsBundle" instance="com.intellij.openapi.vcs.configurable.VcsManagerConfigurable" id="vcs"/>
<changesViewContent tabName="Repository" className="com.intellij.openapi.vcs.changes.committed.CommittedChangesViewManager"
predicateClassName="com.intellij.openapi.vcs.changes.committed.CommittedChangesVisibilityPredicate"/>