diff --git a/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java b/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java index 56dedea0c7ca..9ec9109d9db7 100644 --- a/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java +++ b/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java @@ -28,6 +28,8 @@ import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -35,7 +37,7 @@ import javax.swing.*; import java.util.HashMap; import java.util.Map; -public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColorSettingsPage { +public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColorSettingsPage, DisplayPrioritySortable { private static final AttributesDescriptor[] ourDescriptors = { new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.keyword"), SyntaxHighlighterColors.KEYWORD), new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.number"), SyntaxHighlighterColors.NUMBER), @@ -187,4 +189,9 @@ public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColor public Map getAdditionalHighlightingTagToDescriptorMap() { return ourTags; } + + @Override + public DisplayPriority getPriority() { + return DisplayPriority.KEY_LANGUAGE_SETTINGS; + } } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPrioritySortable.java b/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPrioritySortable.java new file mode 100644 index 000000000000..9518fedbe10e --- /dev/null +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPrioritySortable.java @@ -0,0 +1,24 @@ +/* + * Copyright 2000-2012 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.psi.codeStyle; + +/** + * Allows to define in which order settings items must be shown. + * @author Rustam Vishnyakov + */ +public interface DisplayPrioritySortable { + DisplayPriority getPriority(); +} diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 9f441d74e790..6219a97f8cdd 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -52,6 +52,8 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.FileStatusFactory; import com.intellij.openapi.vcs.FileStatusManager; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.psi.search.scope.packageSet.PackageSet; @@ -322,11 +324,12 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract protected List createPanelFactories() { ArrayList result = new ArrayList(); result.add(new FontConfigurableFactory()); - result.add(new ConsoleFontConfigurableFactory()); + List extensions = new ArrayList(); + extensions.add(new ConsoleFontConfigurableFactory()); ColorSettingsPage[] pages = ColorSettingsPages.getInstance().getRegisteredPages(); for (final ColorSettingsPage page : pages) { - result.add(new ColorAndFontPanelFactory() { + extensions.add(new ColorAndFontPanelFactoryEx() { @NotNull public NewColorAndFontPanel createPanel(@NotNull ColorAndFontOptions options) { final SimpleEditorPreview preview = new SimpleEditorPreview(options, page); @@ -337,9 +340,37 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract public String getPanelDisplayName() { return page.getDisplayName(); } + + @Override + public DisplayPriority getPriority() { + if (page instanceof DisplayPrioritySortable) { + return ((DisplayPrioritySortable)page).getPriority(); + } + return DisplayPriority.LANGUAGE_SETTINGS; + } }); } - Collections.addAll(result, Extensions.getExtensions(ColorAndFontPanelFactory.EP_NAME)); + Collections.addAll(extensions, Extensions.getExtensions(ColorAndFontPanelFactory.EP_NAME)); + Collections.sort(extensions, new Comparator() { + @Override + public int compare(ColorAndFontPanelFactory f1, ColorAndFontPanelFactory f2) { + if (f1 instanceof DisplayPrioritySortable) { + if (f2 instanceof DisplayPrioritySortable) { + int result = ((DisplayPrioritySortable)f1).getPriority().compareTo(((DisplayPrioritySortable)f2).getPriority()); + if (result != 0) return result; + } + else { + return 1; + } + } + else if (f2 instanceof DisplayPrioritySortable) { + return -1; + } + return f1.getPanelDisplayName().compareTo(f2.getPanelDisplayName()); + } + }); + result.addAll(extensions); + result.add(new DiffColorsPageFactory()); result.add(new FileStatusColorsPageFactory()); result.add(new ScopeColorsPageFactory()); @@ -365,7 +396,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } } - private static class ConsoleFontConfigurableFactory implements ColorAndFontPanelFactory { + private static class ConsoleFontConfigurableFactory implements ColorAndFontPanelFactoryEx { @NotNull public NewColorAndFontPanel createPanel(@NotNull ColorAndFontOptions options) { FontEditorPreview previewPanel = new FontEditorPreview(options, false) { @@ -386,7 +417,12 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract public String getPanelDisplayName() { return "Console Font"; } - } + + @Override + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; + } + } private class DiffColorsPageFactory implements ColorAndFontPanelFactory { @NotNull diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontPanelFactoryEx.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontPanelFactoryEx.java new file mode 100644 index 000000000000..38edb458864c --- /dev/null +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontPanelFactoryEx.java @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2012 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.application.options.colors; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; +import org.jetbrains.annotations.NotNull; + +/** + * @author Rustam Vishnyakov + */ +public interface ColorAndFontPanelFactoryEx extends ColorAndFontPanelFactory, DisplayPrioritySortable { + +} diff --git a/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/ANSIColoredConsoleColorsPage.java b/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/ANSIColoredConsoleColorsPage.java index 953d2ceb1798..5993ef66f2bd 100644 --- a/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/ANSIColoredConsoleColorsPage.java +++ b/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/ANSIColoredConsoleColorsPage.java @@ -10,6 +10,8 @@ import com.intellij.openapi.options.OptionsBundle; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -20,7 +22,7 @@ import java.util.Map; /** * @author oleg, Roman.Chernyatchik */ -public class ANSIColoredConsoleColorsPage implements ColorSettingsPage { +public class ANSIColoredConsoleColorsPage implements ColorSettingsPage, DisplayPrioritySortable { private static final String DEMO_TEXT = "C:\\command.com\n" + @@ -120,4 +122,8 @@ public class ANSIColoredConsoleColorsPage implements ColorSettingsPage { return DEMO_TEXT; } + @Override + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; + } } diff --git a/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/CustomColorsPage.java b/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/CustomColorsPage.java index c5533019688e..cf1fc2bc1fdd 100644 --- a/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/CustomColorsPage.java +++ b/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/CustomColorsPage.java @@ -24,6 +24,8 @@ import com.intellij.openapi.options.OptionsBundle; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -31,7 +33,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.Map; -public class CustomColorsPage implements ColorSettingsPage { +public class CustomColorsPage implements ColorSettingsPage, DisplayPrioritySortable { private static final AttributesDescriptor[] ATTRS = { new AttributesDescriptor(OptionsBundle.message("options.custom.attribute.descriptor.keyword1"), CustomHighlighterColors.CUSTOM_KEYWORD1_ATTRIBUTES), new AttributesDescriptor(OptionsBundle.message("options.custom.attribute.descriptor.keyword2"), CustomHighlighterColors.CUSTOM_KEYWORD2_ATTRIBUTES), @@ -108,4 +110,9 @@ public class CustomColorsPage implements ColorSettingsPage { public Map getAdditionalHighlightingTagToDescriptorMap() { return null; } + + @Override + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; + } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java b/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java index 755d819d6627..260938b917b5 100644 --- a/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java +++ b/platform/lang-impl/src/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java @@ -32,13 +32,15 @@ import com.intellij.openapi.options.OptionsBundle; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.HashMap; import java.util.Map; -public class GeneralColorsPage implements ColorSettingsPage, InspectionColorSettingsPage { +public class GeneralColorsPage implements ColorSettingsPage, InspectionColorSettingsPage, DisplayPrioritySortable { private static final String ADDITIONAL_DEMO_TEXT = "\n" + "//TODO: Visit JB Web resources:\n"+ @@ -188,6 +190,11 @@ public class GeneralColorsPage implements ColorSettingsPage, InspectionColorSett return ADDITIONAL_HIGHLIGHT_DESCRIPTORS; } + @Override + public DisplayPriority getPriority() { + return DisplayPriority.GENERAL_SETTINGS; + } + private static String getCustomSeveritiesDemoText() { final StringBuilder buff = new StringBuilder(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerColorsPage.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerColorsPage.java index b52ddfb124ff..eb2e4228fd7e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerColorsPage.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerColorsPage.java @@ -23,6 +23,8 @@ import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; import com.intellij.openapi.util.IconLoader; +import com.intellij.psi.codeStyle.DisplayPriority; +import com.intellij.psi.codeStyle.DisplayPrioritySortable; import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.ui.DebuggerColors; import org.jetbrains.annotations.NonNls; @@ -35,7 +37,7 @@ import java.util.Map; /** * @author max */ -public class DebuggerColorsPage implements ColorSettingsPage { +public class DebuggerColorsPage implements ColorSettingsPage, DisplayPrioritySortable { @NotNull public String getDisplayName() { return XDebuggerBundle.message("xdebugger.colors.page.name"); @@ -76,4 +78,9 @@ public class DebuggerColorsPage implements ColorSettingsPage { public Map getAdditionalHighlightingTagToDescriptorMap() { return null; } + + @Override + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; + } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleColorAndFontPanelFactory.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleColorAndFontPanelFactory.java index d8d2a124154d..d9a1cb058ced 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleColorAndFontPanelFactory.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleColorAndFontPanelFactory.java @@ -1,6 +1,7 @@ package org.jetbrains.plugins.gradle.config; import com.intellij.application.options.colors.*; +import com.intellij.psi.codeStyle.DisplayPriority; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.gradle.util.GradleBundle; @@ -8,7 +9,7 @@ import org.jetbrains.plugins.gradle.util.GradleBundle; * @author Denis Zhdanov * @since 1/19/12 11:32 AM */ -public class GradleColorAndFontPanelFactory implements ColorAndFontPanelFactory { +public class GradleColorAndFontPanelFactory implements ColorAndFontPanelFactoryEx { @NotNull @Override @@ -25,4 +26,9 @@ public class GradleColorAndFontPanelFactory implements ColorAndFontPanelFactory public String getPanelDisplayName() { return GradleBundle.message("gradle.name"); } + + @Override + public DisplayPriority getPriority() { + return DisplayPriority.LANGUAGE_SETTINGS; + } }