From 5a46a42e00cbbfadcff788dbb5c1ea12630d38c8 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 22 Jul 2014 13:24:27 +0200 Subject: [PATCH] =?UTF-8?q?generic=20debugger=20settings:=20step=203=20?= =?UTF-8?q?=E2=80=94=20root=20settings=20(Debugger=20node=20content)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit at first, JS debugger root settings transformed --- .../xdebugger/settings/XDebuggerSettings.java | 8 ++- .../impl/settings/DebuggerConfigurable.java | 68 +++++++++++++++---- .../settings/MergedCompositeConfigurable.java | 11 ++- 3 files changed, 67 insertions(+), 20 deletions(-) diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java index 0bc11c9f9185..20640e730b88 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java @@ -30,12 +30,12 @@ import org.jetbrains.annotations.Nullable; * <extensions defaultExtensionNs="com.intellij">
*   <xdebugger.settings implementation="qualified-class-name"/>
* </extensions> - * + * * @author nik */ public abstract class XDebuggerSettings implements PersistentStateComponent { public enum Category { - ROOT, DATA_VIEWS, STEPPING; + ROOT, DATA_VIEWS, STEPPING } public static final ExtensionPointName EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.settings"); @@ -55,7 +55,9 @@ public abstract class XDebuggerSettings implements PersistentStateComponent providers = DebuggerConfigurableProvider.getSortedProviders(); - List configurables = new ArrayList(); + List configurables = new SmartList(); configurables.add(new DataViewsConfigurable()); List steppingConfigurables = DebuggerConfigurableProvider.getConfigurables(XDebuggerSettings.Category.STEPPING, providers); @@ -76,19 +78,7 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { configurables.add(new SteppingConfigurable(steppingConfigurables)); } - Configurable rootConfigurable = null; - for (DebuggerSettingsPanelProvider provider : providers) { - configurables.addAll(provider.getConfigurables()); - Configurable aRootConfigurable = provider.getRootConfigurable(); - if (aRootConfigurable != null) { - if (rootConfigurable != null) { - configurables.add(aRootConfigurable); - } - else { - rootConfigurable = aRootConfigurable; - } - } - } + Configurable rootConfigurable = computeRootConfigurable(providers, configurables); if (configurables.isEmpty() && rootConfigurable == null) { myChildren = EMPTY_CONFIGURABLES; @@ -103,6 +93,54 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { } } + @Nullable + private static Configurable computeRootConfigurable(@NotNull List providers, @NotNull List configurables) { + Configurable deprecatedRootConfigurable = null; + for (DebuggerSettingsPanelProvider provider : providers) { + configurables.addAll(provider.getConfigurables()); + Configurable providerRootConfigurable = provider.getRootConfigurable(); + if (providerRootConfigurable != null) { + if (deprecatedRootConfigurable == null) { + deprecatedRootConfigurable = providerRootConfigurable; + } + else { + configurables.add(providerRootConfigurable); + } + } + } + + List rootConfigurables = DebuggerConfigurableProvider.getConfigurables(XDebuggerSettings.Category.ROOT, providers); + if (rootConfigurables.isEmpty()) { + return deprecatedRootConfigurable; + } + else { + Configurable[] mergedRootConfigurables = new Configurable[rootConfigurables.size() + (deprecatedRootConfigurable == null ? 0 : 1)]; + rootConfigurables.toArray(mergedRootConfigurables); + if (deprecatedRootConfigurable != null) { + System.arraycopy(mergedRootConfigurables, 0, mergedRootConfigurables, 1, mergedRootConfigurables.length - 1); + mergedRootConfigurables[0] = deprecatedRootConfigurable; + } + return new MergedCompositeConfigurable(mergedRootConfigurables) { + @Override + protected boolean isUseTitledBorder() { + return false; + } + + @NotNull + @Override + public String getId() { + throw new UnsupportedOperationException(); + } + + @Nls + @Override + public String getDisplayName() { + throw new UnsupportedOperationException(); + } + }; + } + } + @Override public void apply() throws ConfigurationException { for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java index a4252968769c..165de68ad14b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java @@ -5,6 +5,7 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.ui.IdeBorderFactory; +import com.intellij.ui.TitledSeparator; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -18,6 +19,10 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable { this.children = children; } + protected boolean isUseTitledBorder() { + return true; + } + @Nullable @Override public Runnable enableSearch(String option) { @@ -38,11 +43,13 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable { rootComponent = children[0].createComponent(); } else { - JPanel panel = new JPanel(new VerticalFlowLayout(0, 0)); + JPanel panel = new JPanel(new VerticalFlowLayout(0, isUseTitledBorder() ? 0 : TitledSeparator.TOP_INSET)); for (Configurable child : children) { JComponent component = child.createComponent(); assert component != null; - component.setBorder(IdeBorderFactory.createTitledBorder(child.getDisplayName(), false)); + if (isUseTitledBorder()) { + component.setBorder(IdeBorderFactory.createTitledBorder(child.getDisplayName(), false)); + } panel.add(component); } rootComponent = panel;