From 59db5c461ccbc3cd9728d5564efc898a427d2a00 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Wed, 16 Mar 2016 16:53:05 +0300 Subject: [PATCH] FIXED IDEA-149066 Code style is not per project (confusing "Per project" message) --- .../options/CodeStyleSchemesConfigurable.java | 7 ++++++- .../intellij/openapi/options/Configurable.java | 12 ++++++++++++ .../options/newEditor/SettingsTreeView.java | 15 +++++++++++---- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java index 9925189f703c..6dcd4037f7f2 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java @@ -34,7 +34,7 @@ import javax.swing.*; import java.util.*; public class CodeStyleSchemesConfigurable extends SearchableConfigurable.Parent.Abstract - implements OptionsContainingConfigurable, Configurable.NoMargin, Configurable.NoScroll { + implements OptionsContainingConfigurable, Configurable.NoMargin, Configurable.NoScroll, Configurable.VariableProjectAppLevel { private CodeStyleSchemesPanel myRootSchemesPanel; private CodeStyleSchemesModel myModel; @@ -323,6 +323,11 @@ public class CodeStyleSchemesConfigurable extends SearchableConfigurable.Parent. return result; } + @Override + public boolean isProjectLevel() { + return myModel != null && myModel.isUsePerProjectSettings(); + } + private class CodeStyleConfigurableWrapper implements SearchableConfigurable, NoMargin, NoScroll, OptionsContainingConfigurable { private boolean myInitialResetInvoked; private CodeStyleMainPanel myPanel; diff --git a/platform/platform-api/src/com/intellij/openapi/options/Configurable.java b/platform/platform-api/src/com/intellij/openapi/options/Configurable.java index 87d2862b5d65..554c9b04374e 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/Configurable.java +++ b/platform/platform-api/src/com/intellij/openapi/options/Configurable.java @@ -186,4 +186,16 @@ public interface Configurable extends UnnamedConfigurable { interface NoMargin { // see ConfigurableCardPanel#create(Configurable) } + + /** + * Allows to dynamically define if current configurable settings apply to current project or to the IDE and update "For current project" + * indicator accordingly. + */ + interface VariableProjectAppLevel { + /** + * @return True if current settings apply to the current project (enable "For current project" indicator), false for application-level + * (IDE) settings. + */ + boolean isProjectLevel(); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java index 7ab87fb64207..5795c5393db0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java @@ -269,8 +269,7 @@ final class SettingsTreeView extends JComponent implements Accessible, Disposabl @Nullable Project findConfigurableProject(@Nullable Configurable configurable) { if (configurable instanceof ConfigurableWrapper) { - ConfigurableWrapper wrapper = (ConfigurableWrapper)configurable; - return wrapper.getExtensionPoint().getProject(); + return getProjectFromWrapper((ConfigurableWrapper)configurable); } return findConfigurableProject(findNode(configurable)); } @@ -280,8 +279,7 @@ final class SettingsTreeView extends JComponent implements Accessible, Disposabl if (node != null) { Configurable configurable = node.myConfigurable; if (configurable instanceof ConfigurableWrapper) { - ConfigurableWrapper wrapper = (ConfigurableWrapper)configurable; - return wrapper.getExtensionPoint().getProject(); + return getProjectFromWrapper((ConfigurableWrapper)configurable); } SimpleNode parent = node.getParent(); if (parent instanceof MyNode) { @@ -290,6 +288,15 @@ final class SettingsTreeView extends JComponent implements Accessible, Disposabl } return null; } + + @Nullable + private static Project getProjectFromWrapper(@NotNull ConfigurableWrapper wrapper) { + UnnamedConfigurable wrapped = wrapper.getConfigurable(); + if (wrapped instanceof Configurable.VariableProjectAppLevel && !((Configurable.VariableProjectAppLevel)wrapped).isProjectLevel()) { + return null; + } + return wrapper.getExtensionPoint().getProject(); + } private static int getLeftMargin(int level) { return 3 + level * (11 + ICON_GAP);