summaryrefslogtreecommitdiff
path: root/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings
diff options
context:
space:
mode:
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings')
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java6
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java173
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java86
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java23
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java51
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java78
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java41
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java20
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java74
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java70
10 files changed, 267 insertions, 355 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java
index d140a74f35c8..6ee307cfa573 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java
@@ -17,7 +17,7 @@ package com.intellij.xdebugger.impl.settings;
import com.intellij.openapi.options.Configurable;
import com.intellij.xdebugger.XDebuggerBundle;
-import com.intellij.xdebugger.settings.XDebuggerSettings;
+import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -41,8 +41,8 @@ class DataViewsConfigurable extends SubCompositeConfigurable implements Configur
@NotNull
@Override
- protected XDebuggerSettings.Category getCategory() {
- return XDebuggerSettings.Category.DATA_VIEWS;
+ protected DebuggerSettingsCategory getCategory() {
+ return DebuggerSettingsCategory.DATA_VIEWS;
}
@NotNull
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
index a3f4e847288c..58896a87f596 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
@@ -20,26 +20,23 @@ import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.SmartList;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.impl.DebuggerSupport;
-import com.intellij.xdebugger.settings.XDebuggerSettings;
-import org.jetbrains.annotations.Nls;
+import com.intellij.xdebugger.settings.DebuggerConfigurableProvider;
+import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
-/**
- * @author Eugene Belyaev & Eugene Zhuravlev
- */
public class DebuggerConfigurable implements SearchableConfigurable.Parent {
public static final String DISPLAY_NAME = XDebuggerBundle.message("debugger.configurable.display.name");
static final Configurable[] EMPTY_CONFIGURABLES = new Configurable[0];
+ private static final DebuggerSettingsCategory[] MERGED_CATEGORIES = {DebuggerSettingsCategory.STEPPING, DebuggerSettingsCategory.HOTSWAP};
private Configurable myRootConfigurable;
private Configurable[] myChildren;
@@ -71,89 +68,84 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
return;
}
- List<DebuggerSettingsPanelProvider> providers = DebuggerConfigurableProvider.getSortedProviders();
-
List<Configurable> configurables = new SmartList<Configurable>();
configurables.add(new DataViewsConfigurable());
- List<Configurable> steppingConfigurables = DebuggerConfigurableProvider.getConfigurables(XDebuggerSettings.Category.STEPPING, providers);
- if (!steppingConfigurables.isEmpty()) {
- configurables.add(new SteppingConfigurable(steppingConfigurables));
+ DebuggerConfigurableProvider[] providers = DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions();
+ computeMergedConfigurables(providers, configurables);
+
+ //noinspection deprecation
+ for (DebuggerSettingsPanelProvider provider : getSortedProviders()) {
+ configurables.addAll(provider.getConfigurables());
+ @SuppressWarnings("deprecation")
+ Configurable providerRootConfigurable = provider.getRootConfigurable();
+ if (providerRootConfigurable != null) {
+ configurables.add(providerRootConfigurable);
+ }
}
- Configurable rootConfigurable = computeRootConfigurable(providers, configurables);
+ for (DebuggerConfigurableProvider provider : providers) {
+ configurables.addAll(provider.getConfigurables(DebuggerSettingsCategory.ROOT));
+ }
- if (configurables.isEmpty() && rootConfigurable == null) {
+ MergedCompositeConfigurable mergedGeneralConfigurable = computeGeneralConfigurables(providers);
+ if (configurables.isEmpty() && mergedGeneralConfigurable == null) {
+ myRootConfigurable = null;
myChildren = EMPTY_CONFIGURABLES;
}
- else if (rootConfigurable == null && configurables.size() == 1) {
- myRootConfigurable = configurables.get(0);
- myChildren = EMPTY_CONFIGURABLES;
+ else if (configurables.size() == 1) {
+ Configurable firstConfigurable = configurables.get(0);
+ if (mergedGeneralConfigurable == null) {
+ myRootConfigurable = firstConfigurable;
+ myChildren = EMPTY_CONFIGURABLES;
+ }
+ else {
+ Configurable[] generalConfigurables = mergedGeneralConfigurable.children;
+ Configurable[] mergedArray = new Configurable[generalConfigurables.length + 1];
+ System.arraycopy(generalConfigurables, 0, mergedArray, 0, generalConfigurables.length);
+ mergedArray[generalConfigurables.length] = firstConfigurable;
+ myRootConfigurable = new MergedCompositeConfigurable("", "", mergedArray);
+ myChildren = firstConfigurable instanceof SearchableConfigurable.Parent ? ((Parent)firstConfigurable).getConfigurables() : EMPTY_CONFIGURABLES;
+ }
}
else {
myChildren = configurables.toArray(new Configurable[configurables.size()]);
- myRootConfigurable = rootConfigurable;
+ myRootConfigurable = mergedGeneralConfigurable;
}
}
- @Nullable
- private static Configurable computeRootConfigurable(@NotNull List<DebuggerSettingsPanelProvider> providers, @NotNull List<Configurable> configurables) {
- Configurable deprecatedRootConfigurable = null;
- for (DebuggerSettingsPanelProvider provider : providers) {
- configurables.addAll(provider.getConfigurables());
- @SuppressWarnings("deprecation")
- Configurable providerRootConfigurable = provider.getRootConfigurable();
- if (providerRootConfigurable != null) {
- if (deprecatedRootConfigurable == null) {
- deprecatedRootConfigurable = providerRootConfigurable;
- }
- else {
- configurables.add(providerRootConfigurable);
- }
+ private static void computeMergedConfigurables(@NotNull DebuggerConfigurableProvider[] providers, @NotNull List<Configurable> result) {
+ for (DebuggerSettingsCategory category : MERGED_CATEGORIES) {
+ List<Configurable> configurables = getConfigurables(category, providers);
+ if (!configurables.isEmpty()) {
+ String id = category.name().toLowerCase(Locale.ENGLISH);
+ result.add(new MergedCompositeConfigurable("debugger." + id, XDebuggerBundle.message("debugger." + id + ".display.name"),
+ configurables.toArray(new Configurable[configurables.size()])));
}
}
+ }
- List<Configurable> rootConfigurables = DebuggerConfigurableProvider.getConfigurables(XDebuggerSettings.Category.ROOT, providers);
+ @Nullable
+ private static MergedCompositeConfigurable computeGeneralConfigurables(@NotNull DebuggerConfigurableProvider[] providers) {
+ List<Configurable> rootConfigurables = getConfigurables(DebuggerSettingsCategory.GENERAL, providers);
if (rootConfigurables.isEmpty()) {
- return deprecatedRootConfigurable;
+ return null;
}
- else {
- Configurable[] mergedRootConfigurables = new Configurable[rootConfigurables.size() + (deprecatedRootConfigurable == null ? 0 : 1)];
- rootConfigurables.toArray(mergedRootConfigurables);
- if (deprecatedRootConfigurable != null) {
- mergedRootConfigurables[rootConfigurables.size()] = deprecatedRootConfigurable;
- }
-
- // move unnamed to top
- Arrays.sort(mergedRootConfigurables, new Comparator<Configurable>() {
- @Override
- public int compare(Configurable o1, Configurable o2) {
- boolean c1e = StringUtil.isEmpty(o1.getDisplayName());
- return c1e == StringUtil.isEmpty(o2.getDisplayName()) ? 0 : (c1e ? -1 : 1);
- }
- });
-
- return new MergedCompositeConfigurable(mergedRootConfigurables) {
- @NotNull
- @Override
- public String getId() {
- throw new UnsupportedOperationException();
- }
- @Nls
- @Override
- public String getDisplayName() {
- throw new UnsupportedOperationException();
- }
- };
- }
+ Configurable[] mergedRootConfigurables = rootConfigurables.toArray(new Configurable[rootConfigurables.size()]);
+ // move unnamed to top
+ Arrays.sort(mergedRootConfigurables, new Comparator<Configurable>() {
+ @Override
+ public int compare(@NotNull Configurable o1, @NotNull Configurable o2) {
+ boolean c1e = StringUtil.isEmpty(o1.getDisplayName());
+ return c1e == StringUtil.isEmpty(o2.getDisplayName()) ? 0 : (c1e ? -1 : 1);
+ }
+ });
+ return new MergedCompositeConfigurable("", "", mergedRootConfigurables);
}
@Override
public void apply() throws ConfigurationException {
- for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) {
- support.getSettingsPanelProvider().apply();
- }
if (myRootConfigurable != null) {
myRootConfigurable.apply();
}
@@ -206,4 +198,51 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
public String getId() {
return "project.propDebugger";
}
+
+ @SuppressWarnings("deprecation")
+ @NotNull
+ private static List<DebuggerSettingsPanelProvider> getSortedProviders() {
+ List<DebuggerSettingsPanelProvider> providers = null;
+ for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) {
+ DebuggerSettingsPanelProvider provider = support.getSettingsPanelProvider();
+ if (providers == null) {
+ providers = new SmartList<DebuggerSettingsPanelProvider>();
+ }
+ providers.add(provider);
+ }
+
+ if (ContainerUtil.isEmpty(providers)) {
+ return Collections.emptyList();
+ }
+
+ if (providers.size() > 1) {
+ Collections.sort(providers, new Comparator<DebuggerSettingsPanelProvider>() {
+ @Override
+ public int compare(@NotNull DebuggerSettingsPanelProvider o1, @NotNull DebuggerSettingsPanelProvider o2) {
+ return o2.getPriority() - o1.getPriority();
+ }
+ });
+ }
+ return providers;
+ }
+
+ @NotNull
+ static List<Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category) {
+ return getConfigurables(category, DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions());
+ }
+
+ @NotNull
+ private static List<Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category, @NotNull DebuggerConfigurableProvider[] providers) {
+ List<Configurable> configurables = null;
+ for (DebuggerConfigurableProvider provider : providers) {
+ Collection<? extends Configurable> providerConfigurables = provider.getConfigurables(category);
+ if (!providerConfigurables.isEmpty()) {
+ if (configurables == null) {
+ configurables = new SmartList<Configurable>();
+ }
+ configurables.addAll(providerConfigurables);
+ }
+ }
+ return ContainerUtil.notNullize(configurables);
+ }
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java
deleted file mode 100644
index 80651cadc830..000000000000
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2000-2010 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.xdebugger.impl.settings;
-
-import com.intellij.openapi.options.Configurable;
-import com.intellij.openapi.options.ConfigurableProvider;
-import com.intellij.util.SmartList;
-import com.intellij.util.containers.ContainerUtil;
-import com.intellij.xdebugger.impl.DebuggerSupport;
-import com.intellij.xdebugger.settings.XDebuggerSettings;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * @author nik
- */
-public class DebuggerConfigurableProvider extends ConfigurableProvider {
- @NotNull
- static List<DebuggerSettingsPanelProvider> getSortedProviders() {
- List<DebuggerSettingsPanelProvider> providers = null;
- for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) {
- DebuggerSettingsPanelProvider provider = support.getSettingsPanelProvider();
- if (providers == null) {
- providers = new SmartList<DebuggerSettingsPanelProvider>();
- }
- providers.add(provider);
- }
-
- if (ContainerUtil.isEmpty(providers)) {
- return Collections.emptyList();
- }
-
- if (providers.size() > 1) {
- Collections.sort(providers, new Comparator<DebuggerSettingsPanelProvider>() {
- @Override
- public int compare(DebuggerSettingsPanelProvider o1, DebuggerSettingsPanelProvider o2) {
- return o2.getPriority() - o1.getPriority();
- }
- });
- }
- return providers;
- }
-
- @Override
- public Configurable createConfigurable() {
- return new DebuggerConfigurable();
- }
-
- @NotNull
- static List<Configurable> getConfigurables(@NotNull XDebuggerSettings.Category category) {
- List<DebuggerSettingsPanelProvider> providers = getSortedProviders();
- return providers.isEmpty() ? Collections.<Configurable>emptyList() : getConfigurables(category, providers);
- }
-
- @NotNull
- static List<Configurable> getConfigurables(@NotNull XDebuggerSettings.Category category, @NotNull List<DebuggerSettingsPanelProvider> providers) {
- List<Configurable> configurables = null;
- for (DebuggerSettingsPanelProvider provider : providers) {
- Collection<? extends Configurable> providerConfigurables = provider.getConfigurable(category);
- if (!providerConfigurables.isEmpty()) {
- if (configurables == null) {
- configurables = new SmartList<Configurable>();
- }
- configurables.addAll(providerConfigurables);
- }
- }
- return ContainerUtil.notNullize(configurables);
- }
-}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java
index 68e6de064b9a..5b0dde609e0c 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java
@@ -16,15 +16,15 @@
package com.intellij.xdebugger.impl.settings;
import com.intellij.openapi.options.Configurable;
-import com.intellij.xdebugger.settings.XDebuggerSettings;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
+@Deprecated
/**
- * @author nik
+ * @deprecated Use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider}
*/
public abstract class DebuggerSettingsPanelProvider {
public int getPriority() {
@@ -36,23 +36,20 @@ public abstract class DebuggerSettingsPanelProvider {
return Collections.emptyList();
}
+ @Deprecated
+ /**
+ * @deprecated Please use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider#generalApplied(com.intellij.xdebugger.settings.DebuggerSettingsCategory)}
+ */
public void apply() {
}
@Nullable
@Deprecated
- public Configurable getRootConfigurable() {
- return null;
- }
-
- @NotNull
- public Collection<? extends Configurable> getConfigurable(@NotNull XDebuggerSettings.Category category) {
- return Collections.emptyList();
- }
-
/**
- * General settings of category were applied
+ * @deprecated Please use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider#getConfigurables(com.intellij.xdebugger.settings.DebuggerSettingsCategory)} and
+ * check {@link com.intellij.xdebugger.settings.DebuggerSettingsCategory#GENERAL}
*/
- public void generalApplied(@NotNull XDebuggerSettings.Category category) {
+ public Configurable getRootConfigurable() {
+ return null;
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java
deleted file mode 100644
index 466279bce977..000000000000
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2000-2014 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.xdebugger.impl.settings;
-
-import com.intellij.openapi.options.ConfigurableBase;
-import org.jetbrains.annotations.Nls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-class GeneralConfigurable extends ConfigurableBase<GeneralConfigurableUi, XDebuggerGeneralSettings> {
- @Override
- protected XDebuggerGeneralSettings getSettings() {
- return XDebuggerSettingsManager.getInstanceImpl().getGeneralSettings();
- }
-
- @Override
- protected GeneralConfigurableUi createUi() {
- return new GeneralConfigurableUi();
- }
-
- @NotNull
- @Override
- public String getId() {
- return "debugger.general";
- }
-
- @Nls
- @Override
- public String getDisplayName() {
- return "";
- }
-
- @Nullable
- @Override
- public String getHelpTopic() {
- return null;
- }
-} \ No newline at end of file
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 be0bdbf0ab2f..ccfc2708cb9e 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
@@ -7,6 +7,8 @@ import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.TitledSeparator;
+import com.intellij.xdebugger.settings.DebuggerConfigurableProvider;
+import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -14,18 +16,34 @@ import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
-abstract class MergedCompositeConfigurable implements SearchableConfigurable {
+class MergedCompositeConfigurable implements SearchableConfigurable {
static final EmptyBorder BOTTOM_INSETS = new EmptyBorder(0, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0);
+ private static final Insets FIRST_COMPONENT_INSETS = new Insets(0, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0);
+ private static final Insets N_COMPONENT_INSETS = new Insets(IdeBorderFactory.TITLED_BORDER_TOP_INSET, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0);
+
protected final Configurable[] children;
protected JComponent rootComponent;
- protected MergedCompositeConfigurable(@NotNull Configurable[] children) {
+ private final String id;
+ private final String displayName;
+
+ public MergedCompositeConfigurable(@NotNull String id, @NotNull String displayName, @NotNull Configurable[] children) {
this.children = children;
+ this.id = id;
+ this.displayName = displayName;
}
- protected boolean isUseTitledBorder() {
- return true;
+ @NotNull
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ @Nls
+ @Override
+ public String getDisplayName() {
+ return displayName;
}
@Nullable
@@ -40,26 +58,47 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable {
return children.length == 1 ? children[0].getHelpTopic() : null;
}
+ /**
+ * false by default.
+ *
+ * If Ruby general settings will be without titled border in RubyMine, user could think that all other debugger categories also about Ruby.
+ */
+ protected boolean isUseTargetedProductPolicyIfSeveralChildren() {
+ return false;
+ }
+
@Nullable
@Override
public JComponent createComponent() {
if (rootComponent == null) {
+ Configurable firstConfigurable = children[0];
if (children.length == 1) {
- rootComponent = children[0].createComponent();
+ rootComponent = firstConfigurable.createComponent();
+ String rootComponentDisplayName = firstConfigurable.getDisplayName();
+ if (!StringUtil.isEmpty(rootComponentDisplayName) && !isTargetedToProduct(firstConfigurable)) {
+ rootComponent.setBorder(IdeBorderFactory.createTitledBorder(rootComponentDisplayName, false, FIRST_COMPONENT_INSETS));
+ }
}
else {
- JPanel panel = createPanel(isUseTitledBorder());
- for (Configurable child : children) {
- JComponent component = child.createComponent();
+ boolean isFirstNamed = true;
+ JPanel panel = createPanel(true);
+ for (Configurable configurable : children) {
+ JComponent component = configurable.createComponent();
assert component != null;
- if (isUseTitledBorder()) {
- String displayName = child.getDisplayName();
- if (StringUtil.isEmpty(displayName)) {
- component.setBorder(BOTTOM_INSETS);
+ String displayName = configurable.getDisplayName();
+ if (StringUtil.isEmpty(displayName)) {
+ component.setBorder(BOTTOM_INSETS);
+ }
+ else {
+ boolean addBorder = true;
+ if (isUseTargetedProductPolicyIfSeveralChildren() && isFirstNamed) {
+ isFirstNamed = false;
+ if (isTargetedToProduct(configurable)) {
+ addBorder = false;
+ }
}
- else {
- Insets insets = new Insets(children[0] == child ? 0 : IdeBorderFactory.TITLED_BORDER_TOP_INSET, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0);
- component.setBorder(IdeBorderFactory.createTitledBorder(displayName, false, insets));
+ if (addBorder) {
+ component.setBorder(IdeBorderFactory.createTitledBorder(displayName, false, firstConfigurable == configurable ? FIRST_COMPONENT_INSETS : N_COMPONENT_INSETS));
}
}
panel.add(component);
@@ -70,6 +109,15 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable {
return rootComponent;
}
+ static boolean isTargetedToProduct(@NotNull Configurable configurable) {
+ for (DebuggerConfigurableProvider provider : DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions()) {
+ if (provider.isTargetedToProduct(configurable)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@NotNull
static JPanel createPanel(boolean isUseTitledBorder) {
int verticalGap = TitledSeparator.TOP_INSET;
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java
deleted file mode 100644
index 5f16424c1790..000000000000
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2000-2014 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.xdebugger.impl.settings;
-
-import com.intellij.openapi.options.Configurable;
-import com.intellij.xdebugger.XDebuggerBundle;
-import org.jetbrains.annotations.Nls;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.List;
-
-class SteppingConfigurable extends MergedCompositeConfigurable {
- public SteppingConfigurable(@NotNull List<Configurable> configurables) {
- super(configurables.toArray(new Configurable[configurables.size()]));
- }
-
- @NotNull
- @Override
- public String getId() {
- return "debugger.stepping";
- }
-
- @Nls
- @Override
- public String getDisplayName() {
- return XDebuggerBundle.message("debugger.stepping.display.name");
- }
-} \ No newline at end of file
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java
index 489e4bd80307..f06b6bcc1107 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java
@@ -20,8 +20,8 @@ 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.xdebugger.impl.DebuggerSupport;
-import com.intellij.xdebugger.settings.XDebuggerSettings;
+import com.intellij.xdebugger.settings.DebuggerConfigurableProvider;
+import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -77,7 +77,7 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent
protected abstract DataViewsConfigurableUi createRootUi();
@NotNull
- protected abstract XDebuggerSettings.Category getCategory();
+ protected abstract DebuggerSettingsCategory getCategory();
private boolean isChildrenMerged() {
return children != null && children.length == 1;
@@ -86,7 +86,7 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent
@Override
public final Configurable[] getConfigurables() {
if (children == null) {
- List<Configurable> configurables = DebuggerConfigurableProvider.getConfigurables(getCategory());
+ List<Configurable> configurables = DebuggerConfigurable.getConfigurables(getCategory());
children = configurables.toArray(new Configurable[configurables.size()]);
}
return isChildrenMerged() ? DebuggerConfigurable.EMPTY_CONFIGURABLES : children;
@@ -115,10 +115,12 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent
c.setBorder(MergedCompositeConfigurable.BOTTOM_INSETS);
panel.add(c);
}
- for (Configurable child : children) {
- JComponent component = child.createComponent();
+ for (Configurable configurable : children) {
+ JComponent component = configurable.createComponent();
if (component != null) {
- component.setBorder(IdeBorderFactory.createTitledBorder(child.getDisplayName(), false));
+ if (children[0] != configurable || !MergedCompositeConfigurable.isTargetedToProduct(configurable)) {
+ component.setBorder(IdeBorderFactory.createTitledBorder(configurable.getDisplayName(), false));
+ }
panel.add(component);
}
}
@@ -164,8 +166,8 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent
public final void apply() throws ConfigurationException {
if (root != null) {
root.apply(getSettings());
- for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) {
- support.getSettingsPanelProvider().generalApplied(getCategory());
+ for (DebuggerConfigurableProvider provider : DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions()) {
+ provider.generalApplied(getCategory());
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java
new file mode 100644
index 000000000000..2a7f636784c4
--- /dev/null
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java
@@ -0,0 +1,74 @@
+package com.intellij.xdebugger.impl.settings;
+
+import com.intellij.openapi.options.Configurable;
+import com.intellij.openapi.options.SimpleConfigurable;
+import com.intellij.openapi.util.Getter;
+import com.intellij.util.SmartList;
+import com.intellij.util.containers.ContainerUtil;
+import com.intellij.xdebugger.settings.DebuggerConfigurableProvider;
+import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
+import com.intellij.xdebugger.settings.XDebuggerSettings;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collection;
+import java.util.List;
+
+class XDebuggerConfigurableProvider extends DebuggerConfigurableProvider {
+ @NotNull
+ @Override
+ public Collection<? extends Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category) {
+ List<Configurable> list;
+ if (category == DebuggerSettingsCategory.GENERAL) {
+ list = new SmartList<Configurable>(SimpleConfigurable.create("debugger.general", "", GeneralConfigurableUi.class, new Getter<XDebuggerGeneralSettings>() {
+ @Override
+ public XDebuggerGeneralSettings get() {
+ return XDebuggerSettingsManager.getInstanceImpl().getGeneralSettings();
+ }
+ }));
+ }
+ else {
+ list = null;
+ }
+
+ for (XDebuggerSettings<?> settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
+ Collection<? extends Configurable> configurables = settings.createConfigurables(category);
+ if (!configurables.isEmpty()) {
+ if (list == null) {
+ list = new SmartList<Configurable>();
+ }
+ list.addAll(configurables);
+ }
+ }
+
+ if (category == DebuggerSettingsCategory.ROOT) {
+ for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
+ @SuppressWarnings("deprecation")
+ Configurable configurable = settings.createConfigurable();
+ if (configurable != null) {
+ if (list == null) {
+ list = new SmartList<Configurable>();
+ }
+ list.add(configurable);
+ }
+ }
+ }
+ return ContainerUtil.notNullize(list);
+ }
+
+ @Override
+ public void generalApplied(@NotNull DebuggerSettingsCategory category) {
+ for (XDebuggerSettings<?> settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
+ settings.generalApplied(category);
+ }
+ }
+
+ @Override
+ public boolean isTargetedToProduct(@NotNull Configurable configurable) {
+ for (XDebuggerSettings<?> settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
+ if (settings.isTargetedToProduct(configurable)) {
+ return true;
+ }
+ }
+ return super.isTargetedToProduct(configurable);
+ }
+} \ No newline at end of file
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java
deleted file mode 100644
index 2e20230198c6..000000000000
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2000-2014 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.xdebugger.impl.settings;
-
-import com.intellij.openapi.options.Configurable;
-import com.intellij.util.SmartList;
-import com.intellij.util.containers.ContainerUtil;
-import com.intellij.xdebugger.settings.XDebuggerSettings;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author nik
- */
-public class XDebuggerSettingsPanelProviderImpl extends DebuggerSettingsPanelProvider {
- @NotNull
- @Override
- public Collection<? extends Configurable> getConfigurables() {
- List<Configurable> list = new SmartList<Configurable>();
- for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
- ContainerUtil.addIfNotNull(list, settings.createConfigurable());
- }
- return list;
- }
-
- @NotNull
- @Override
- public Collection<? extends Configurable> getConfigurable(@NotNull XDebuggerSettings.Category category) {
- List<Configurable> list;
- if (category == XDebuggerSettings.Category.ROOT) {
- list = new SmartList<Configurable>(new GeneralConfigurable());
- }
- else {
- list = null;
- }
-
- for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
- Configurable configurable = settings.createConfigurable(category);
- if (configurable != null) {
- if (list == null) {
- list = new SmartList<Configurable>();
- }
- list.add(configurable);
- }
- }
- return ContainerUtil.notNullize(list);
- }
-
- @Override
- public void generalApplied(@NotNull XDebuggerSettings.Category category) {
- for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) {
- settings.generalApplied(category);
- }
- }
-}