diff options
Diffstat (limited to 'platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java')
-rw-r--r-- | platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java | 115 |
1 files changed, 62 insertions, 53 deletions
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java index 4df11f7261ca..2c5cc5b02282 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java @@ -15,23 +15,20 @@ */ package com.intellij.ide.actions; +import com.intellij.ide.ui.search.SearchUtil; +import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurableGroup; -import com.intellij.openapi.options.SearchableConfigurable; -import com.intellij.openapi.options.ShowSettingsUtil; -import com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil; -import com.intellij.openapi.options.ex.IdeConfigurablesGroup; -import com.intellij.openapi.options.ex.MixedConfigurableGroup; -import com.intellij.openapi.options.ex.ProjectConfigurablesGroup; -import com.intellij.openapi.options.ex.SingleConfigurableEditor; +import com.intellij.openapi.options.*; +import com.intellij.openapi.options.ex.*; +import com.intellij.openapi.options.newEditor.IdeSettingsDialog; import com.intellij.openapi.options.newEditor.OptionsEditor; import com.intellij.openapi.options.newEditor.OptionsEditorDialog; -import com.intellij.openapi.options.newEditor.PreferencesDialog; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.ui.navigation.Place; import com.intellij.util.ui.update.Activatable; import com.intellij.util.ui.update.UiNotifyConnector; import org.jetbrains.annotations.NotNull; @@ -47,7 +44,7 @@ import java.util.concurrent.atomic.AtomicBoolean; */ public class ShowSettingsUtilImpl extends ShowSettingsUtil { private static final Logger LOG = Logger.getInstance("#com.intellij.ide.actions.ShowSettingsUtilImpl"); - private AtomicBoolean myShown = new AtomicBoolean(false); + private final AtomicBoolean myShown = new AtomicBoolean(false); @NotNull private static Project getProject(@Nullable Project project) { @@ -55,12 +52,16 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { } @NotNull - private static DialogWrapper getDialog(@Nullable Project project, @NotNull ConfigurableGroup[] groups, @Nullable Configurable toSelect) { + public static DialogWrapper getDialog(@Nullable Project project, @NotNull ConfigurableGroup[] groups, @Nullable Configurable toSelect) { + project = getProject(project); + final ConfigurableGroup[] filteredGroups = filterEmptyGroups(groups); + if (Registry.is("ide.new.settings.dialog")) { + return new IdeSettingsDialog(project, filteredGroups, toSelect); + } + //noinspection deprecation return Registry.is("ide.perProjectModality") - ? new OptionsEditorDialog(getProject(project), filterEmptyGroups(groups), toSelect, true) - : Registry.is("ide.new.preferences") - ? new PreferencesDialog(getProject(project), filterEmptyGroups(groups)) - : new OptionsEditorDialog(getProject(project), filterEmptyGroups(groups), toSelect); + ? new OptionsEditorDialog(project, filteredGroups, toSelect, true) + : new OptionsEditorDialog(project, filteredGroups, toSelect); } @NotNull @@ -73,7 +74,7 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { new ProjectConfigurablesGroup(project), new IdeConfigurablesGroup()}; - return Registry.is("ide.file.settings.order.new") + return Registry.is("ide.new.settings.dialog") ? MixedConfigurableGroup.getGroups(getConfigurables(groups, true)) : groups; } @@ -139,41 +140,34 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { @Override public void showSettingsDialog(@Nullable final Project project, @NotNull final String nameToSelect) { - ConfigurableGroup[] group = getConfigurableGroups(project, true); - + ConfigurableGroup[] groups = getConfigurableGroups(project, true); Project actualProject = getProject(project); - group = filterEmptyGroups(group); + groups = filterEmptyGroups(groups); + getDialog(actualProject, groups, findPreselectedByDisplayName(nameToSelect, groups)).show(); + } - OptionsEditorDialog dialog; - if (Registry.is("ide.perProjectModality")) { - dialog = new OptionsEditorDialog(actualProject, group, nameToSelect, true); - } - else { - dialog = new OptionsEditorDialog(actualProject, group, nameToSelect); + @Nullable + private static Configurable findPreselectedByDisplayName(final String preselectedConfigurableDisplayName, ConfigurableGroup[] groups) { + final List<Configurable> all = SearchUtil.expand(groups); + for (Configurable each : all) { + if (preselectedConfigurableDisplayName.equals(each.getDisplayName())) return each; } - dialog.show(); + return null; } public static void showSettingsDialog(@Nullable Project project, final String id2Select, final String filter) { ConfigurableGroup[] group = getConfigurableGroups(project, true); - Project actualProject = getProject(project); - group = filterEmptyGroups(group); final Configurable configurable2Select = findConfigurable2Select(id2Select, group); - final OptionsEditorDialog dialog; - if (Registry.is("ide.perProjectModality")) { - dialog = new OptionsEditorDialog(actualProject, group, configurable2Select, true); - } else { - dialog = new OptionsEditorDialog(actualProject, group, configurable2Select); - } + final DialogWrapper dialog = getDialog(project, group, configurable2Select); new UiNotifyConnector.Once(dialog.getContentPane(), new Activatable.Adapter() { @Override public void showNotify() { - final OptionsEditor editor = (OptionsEditor)dialog.getData(OptionsEditor.KEY.getName()); + final OptionsEditor editor = (OptionsEditor)((DataProvider)dialog).getData(OptionsEditor.KEY.getName()); LOG.assertTrue(editor != null); editor.select(configurable2Select, filter); } @@ -234,37 +228,53 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { @Override public <T extends Configurable> T findProjectConfigurable(final Project project, final Class<T> confClass) { + //noinspection deprecation return ConfigurableExtensionPointUtil.findProjectConfigurable(project, confClass); } @Override public boolean editConfigurable(Project project, String dimensionServiceKey, @NotNull Configurable configurable) { - return editConfigurable(null, project, configurable, dimensionServiceKey, null); + return editConfigurable(project, dimensionServiceKey, configurable, isWorthToShowApplyButton(configurable)); + } + + private static boolean isWorthToShowApplyButton(@NotNull Configurable configurable) { + return configurable instanceof Place.Navigator || + configurable instanceof Composite || + configurable instanceof TabbedConfigurable; + } + + @Override + public boolean editConfigurable(Project project, String dimensionServiceKey, @NotNull Configurable configurable, boolean showApplyButton) { + return editConfigurable(null, project, configurable, dimensionServiceKey, null, showApplyButton); } @Override public boolean editConfigurable(Project project, Configurable configurable, Runnable advancedInitialization) { - return editConfigurable(null, project, configurable, createDimensionKey(configurable), advancedInitialization); + return editConfigurable(null, project, configurable, createDimensionKey(configurable), advancedInitialization, isWorthToShowApplyButton(configurable)); } @Override - public boolean editConfigurable(Component parent, Configurable configurable) { + public boolean editConfigurable(@Nullable Component parent, @NotNull Configurable configurable) { return editConfigurable(parent, configurable, null); } @Override - public boolean editConfigurable(final Component parent, final Configurable configurable, @Nullable final Runnable advancedInitialization) { - return editConfigurable(parent, null, configurable, createDimensionKey(configurable), advancedInitialization); + public boolean editConfigurable(@Nullable Component parent, @NotNull Configurable configurable, @Nullable Runnable advancedInitialization) { + return editConfigurable(parent, null, configurable, createDimensionKey(configurable), advancedInitialization, isWorthToShowApplyButton(configurable)); } - private static boolean editConfigurable(final @Nullable Component parent, @Nullable Project project, final Configurable configurable, final String dimensionKey, - @Nullable final Runnable advancedInitialization) { - SingleConfigurableEditor editor; - if (parent != null) { - editor = new SingleConfigurableEditor(parent, configurable, dimensionKey); + private static boolean editConfigurable(@Nullable Component parent, + @Nullable Project project, + @NotNull Configurable configurable, + String dimensionKey, + @Nullable final Runnable advancedInitialization, + boolean showApplyButton) { + final SingleConfigurableEditor editor; + if (parent == null) { + editor = new SingleConfigurableEditor(project, configurable, dimensionKey, showApplyButton); } else { - editor = new SingleConfigurableEditor(project, configurable, dimensionKey); + editor = new SingleConfigurableEditor(parent, configurable, dimensionKey, showApplyButton); } if (advancedInitialization != null) { new UiNotifyConnector.Once(editor.getContentPane(), new Activatable.Adapter() { @@ -278,15 +288,14 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { return editor.isOK(); } - public static String createDimensionKey(Configurable configurable) { - String displayName = configurable.getDisplayName(); - displayName = displayName.replaceAll("\n", "_").replaceAll(" ", "_"); - return "#" + displayName; + @NotNull + public static String createDimensionKey(@NotNull Configurable configurable) { + return '#' + StringUtil.replaceChar(StringUtil.replaceChar(configurable.getDisplayName(), '\n', '_'), ' ', '_'); } @Override - public boolean editConfigurable(Component parent, String dimensionServiceKey,Configurable configurable) { - return editConfigurable(parent, null, configurable, dimensionServiceKey, null); + public boolean editConfigurable(Component parent, String dimensionServiceKey, Configurable configurable) { + return editConfigurable(parent, null, configurable, dimensionServiceKey, null, isWorthToShowApplyButton(configurable)); } public boolean isAlreadyShown() { |