summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java
diff options
context:
space:
mode:
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.java112
1 files changed, 63 insertions, 49 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 7e31726d5f97..4df11f7261ca 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * 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.
@@ -22,6 +22,7 @@ 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.newEditor.OptionsEditor;
@@ -29,6 +30,7 @@ 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.util.ui.update.Activatable;
import com.intellij.util.ui.update.UiNotifyConnector;
@@ -47,11 +49,62 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil {
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.actions.ShowSettingsUtilImpl");
private AtomicBoolean myShown = new AtomicBoolean(false);
+ @NotNull
+ private static Project getProject(@Nullable Project project) {
+ return project != null ? project : ProjectManager.getInstance().getDefaultProject();
+ }
+
+ @NotNull
+ private static DialogWrapper getDialog(@Nullable Project project, @NotNull ConfigurableGroup[] groups, @Nullable Configurable toSelect) {
+ 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);
+ }
+
+ @NotNull
+ public static ConfigurableGroup[] getConfigurableGroups(@Nullable Project project, boolean withIdeSettings) {
+ ConfigurableGroup[] groups = !withIdeSettings
+ ? new ConfigurableGroup[]{new ProjectConfigurablesGroup(getProject(project))}
+ : (project == null)
+ ? new ConfigurableGroup[]{new IdeConfigurablesGroup()}
+ : new ConfigurableGroup[]{
+ new ProjectConfigurablesGroup(project),
+ new IdeConfigurablesGroup()};
+
+ return Registry.is("ide.file.settings.order.new")
+ ? MixedConfigurableGroup.getGroups(getConfigurables(groups, true))
+ : groups;
+ }
+
+ @NotNull
+ public static Configurable[] getConfigurables(@Nullable Project project, boolean withGroupReverseOrder) {
+ return getConfigurables(getConfigurableGroups(project, true), withGroupReverseOrder);
+ }
+
+ @NotNull
+ private static Configurable[] getConfigurables(@NotNull ConfigurableGroup[] groups, boolean withGroupReverseOrder) {
+ Configurable[][] arrays = new Configurable[groups.length][];
+ int length = 0;
+ for (int i = 0; i < groups.length; i++) {
+ arrays[i] = groups[withGroupReverseOrder ? groups.length - 1 - i : i].getConfigurables();
+ length += arrays[i].length;
+ }
+ Configurable[] configurables = new Configurable[length];
+ int offset = 0;
+ for (Configurable[] array : arrays) {
+ System.arraycopy(array, 0, configurables, offset, array.length);
+ offset += array.length;
+ }
+ return configurables;
+ }
+
@Override
public void showSettingsDialog(@NotNull Project project, @NotNull ConfigurableGroup[] group) {
try {
myShown.set(true);
- _showSettingsDialog(project, group, null);
+ getDialog(project, group, null).show();
}
catch (Exception e) {
LOG.error(e);
@@ -61,41 +114,17 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil {
}
}
- private static void _showSettingsDialog(@NotNull final Project project, @NotNull ConfigurableGroup[] group, @Nullable Configurable toSelect) {
- group = filterEmptyGroups(group);
- if (Registry.is("ide.perProjectModality")) {
- new OptionsEditorDialog(project, group, toSelect, true).show();
- } else {
- if (Registry.is("ide.new.preferences")) {
- new PreferencesDialog(project, group).show();
- } else {
- new OptionsEditorDialog(project, group, toSelect).show();
- }
- }
- }
-
@Override
public void showSettingsDialog(@Nullable final Project project, final Class configurableClass) {
assert Configurable.class.isAssignableFrom(configurableClass) : "Not a configurable: " + configurableClass.getName();
- ConfigurableGroup[] groups;
- IdeConfigurablesGroup commonGroup = new IdeConfigurablesGroup();
- ProjectConfigurablesGroup projectGroup = project == null ? null : new ProjectConfigurablesGroup(project);
- if (projectGroup == null) {
- groups = new ConfigurableGroup[] {commonGroup};
- } else {
- groups = new ConfigurableGroup[] {projectGroup, commonGroup};
- }
+ ConfigurableGroup[] groups = getConfigurableGroups(project, true);
- Configurable config = findByClass(commonGroup.getConfigurables(), configurableClass);
- if (config == null && projectGroup != null) {
- config = findByClass(projectGroup.getConfigurables(), configurableClass);
- }
+ Configurable config = findByClass(getConfigurables(groups, true), configurableClass);
assert config != null : "Cannot find configurable: " + configurableClass.getName();
- @NotNull Project nnProject = project != null ? project : ProjectManager.getInstance().getDefaultProject();
- _showSettingsDialog(nnProject, groups, config);
+ getDialog(project, groups, config).show();
}
@Nullable
@@ -110,15 +139,9 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil {
@Override
public void showSettingsDialog(@Nullable final Project project, @NotNull final String nameToSelect) {
- ConfigurableGroup[] group;
- if (project == null) {
- group = new ConfigurableGroup[]{new IdeConfigurablesGroup()};
- }
- else {
- group = new ConfigurableGroup[]{new ProjectConfigurablesGroup(project), new IdeConfigurablesGroup()};
- }
+ ConfigurableGroup[] group = getConfigurableGroups(project, true);
- Project actualProject = project != null ? project : ProjectManager.getInstance().getDefaultProject();
+ Project actualProject = getProject(project);
group = filterEmptyGroups(group);
@@ -133,15 +156,9 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil {
}
public static void showSettingsDialog(@Nullable Project project, final String id2Select, final String filter) {
- ConfigurableGroup[] group;
- if (project == null) {
- group = new ConfigurableGroup[]{new IdeConfigurablesGroup()};
- }
- else {
- group = new ConfigurableGroup[]{new ProjectConfigurablesGroup(project), new IdeConfigurablesGroup()};
- }
+ ConfigurableGroup[] group = getConfigurableGroups(project, true);
- Project actualProject = project != null ? project : ProjectManager.getInstance().getDefaultProject();
+ Project actualProject = getProject(project);
group = filterEmptyGroups(group);
final Configurable configurable2Select = findConfigurable2Select(id2Select, group);
@@ -191,10 +208,7 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil {
@Override
public void showSettingsDialog(@NotNull final Project project, final Configurable toSelect) {
- _showSettingsDialog(project, new ConfigurableGroup[]{
- new ProjectConfigurablesGroup(project),
- new IdeConfigurablesGroup()
- }, toSelect);
+ getDialog(project, getConfigurableGroups(project, true), toSelect).show();
}
@NotNull