From d10da7a6b510741da0f087b930283d6c1416aec2 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Fri, 10 Aug 2018 12:02:47 +0300 Subject: [PATCH] Move custom ShowExcludedFiles to ProjectViewImpl (IDEA-196319) --- .../intellij/ide/projectView/ProjectView.java | 4 ++ .../ide/projectView/ProjectViewSettings.java | 4 +- .../ide/projectView/impl/ProjectViewImpl.java | 41 +++++++++++++++ .../ide/projectView/impl/ProjectViewPane.java | 39 +------------- .../impl/ProjectViewSharedSettings.kt | 1 + .../impl/ProjectViewToggleAction.java | 51 +++++++++++++++++++ .../impl/ShowExcludedFilesAction.java | 30 +++++++++++ 7 files changed, 131 insertions(+), 39 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewToggleAction.java create mode 100644 platform/lang-impl/src/com/intellij/ide/projectView/impl/ShowExcludedFilesAction.java diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/ProjectView.java b/platform/lang-impl/src/com/intellij/ide/projectView/ProjectView.java index 8e5569bb025e..dc941722f5c5 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/ProjectView.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/ProjectView.java @@ -85,6 +85,10 @@ public abstract class ProjectView { public void setCompactDirectories(boolean compactDirectories, @NotNull String paneId) { } + public boolean isShowExcludedFiles(String paneId) { + return true; + } + public abstract boolean isShowLibraryContents(String paneId); public abstract void setShowLibraryContents(boolean showLibraryContents, @NotNull String paneId); diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/ProjectViewSettings.java b/platform/lang-impl/src/com/intellij/ide/projectView/ProjectViewSettings.java index e4a6c5e31e3c..4684bb9feecc 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/ProjectViewSettings.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/ProjectViewSettings.java @@ -77,8 +77,8 @@ public interface ProjectViewSettings extends ViewSettings { @Override public boolean isShowExcludedFiles() { - ProjectViewSettings settings = getProjectViewSettings(); - return settings != null && settings.isShowExcludedFiles(); + ProjectView view = getProjectView(); + return view != null && view.isShowExcludedFiles(getPaneID(view)); } @Override diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java index 58f42852d143..cd6e5e842c93 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java @@ -120,6 +120,8 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo private static final boolean ourShowModulesDefaults = true; private final Map myFlattenModules = new THashMap<>(); private static final boolean ourFlattenModulesDefaults = false; + private final Map myShowExcludedFiles = new THashMap<>(); + private static final boolean ourShowExcludedFilesDefaults = true; private final Map myShowLibraryContents = new THashMap<>(); private static final boolean ourShowLibraryContentsDefaults = true; private final Map myHideEmptyPackages = new THashMap<>(); @@ -162,6 +164,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo @NonNls private static final String ELEMENT_FLATTEN_PACKAGES = "flattenPackages"; @NonNls private static final String ELEMENT_SHOW_MEMBERS = "showMembers"; @NonNls private static final String ELEMENT_SHOW_MODULES = "showModules"; + @NonNls private static final String ELEMENT_SHOW_EXCLUDED_FILES = "showExcludedFiles"; @NonNls private static final String ELEMENT_SHOW_LIBRARY_CONTENTS = "showLibraryContents"; @NonNls private static final String ELEMENT_HIDE_EMPTY_PACKAGES = "hideEmptyPackages"; @NonNls private static final String ELEMENT_COMPACT_DIRECTORIES = "compactDirectories"; @@ -690,6 +693,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo myActionGroup.addAction(new ManualOrderAction()).setAsSecondary(true); myActionGroup.addAction(new SortByTypeAction()).setAsSecondary(true); myActionGroup.addAction(new FoldersAlwaysOnTopAction()).setAsSecondary(true); + myActionGroup.addAction(ShowExcludedFilesAction.INSTANCE).setAsSecondary(true); if (!myAutoScrollFromSourceHandler.isAutoScrollEnabled()) { titleActions.add(new ScrollFromSourceAction()); @@ -1370,6 +1374,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo readOption(navigatorElement.getChild(ELEMENT_FLATTEN_PACKAGES), myFlattenPackages); readOption(navigatorElement.getChild(ELEMENT_SHOW_MEMBERS), myShowMembers); readOption(navigatorElement.getChild(ELEMENT_SHOW_MODULES), myShowModules); + readOption(navigatorElement.getChild(ELEMENT_SHOW_EXCLUDED_FILES), myShowExcludedFiles); readOption(navigatorElement.getChild(ELEMENT_SHOW_LIBRARY_CONTENTS), myShowLibraryContents); readOption(navigatorElement.getChild(ELEMENT_HIDE_EMPTY_PACKAGES), myHideEmptyPackages); readOption(navigatorElement.getChild(ELEMENT_COMPACT_DIRECTORIES), myCompactDirectories); @@ -1449,6 +1454,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo writeOption(navigatorElement, myFlattenPackages, ELEMENT_FLATTEN_PACKAGES); writeOption(navigatorElement, myShowMembers, ELEMENT_SHOW_MEMBERS); writeOption(navigatorElement, myShowModules, ELEMENT_SHOW_MODULES); + writeOption(navigatorElement, myShowExcludedFiles, ELEMENT_SHOW_EXCLUDED_FILES); writeOption(navigatorElement, myShowLibraryContents, ELEMENT_SHOW_LIBRARY_CONTENTS); writeOption(navigatorElement, myHideEmptyPackages, ELEMENT_HIDE_EMPTY_PACKAGES); writeOption(navigatorElement, myCompactDirectories, ELEMENT_COMPACT_DIRECTORIES); @@ -1620,6 +1626,41 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo return getPaneOptionValue(myAbbreviatePackageNames, paneId, ourAbbreviatePackagesDefaults); } + @Override + public boolean isShowExcludedFiles(String paneId) { + boolean showExcludedFiles = isGlobalOptions() + ? getGlobalOptions().getShowExcludedFiles() + : getPaneOptionValue(myShowExcludedFiles, paneId, ourShowExcludedFilesDefaults); + + if (showExcludedFiles == ourShowExcludedFilesDefaults) { + AbstractProjectViewPane pane = getProjectViewPaneById(ProjectViewPane.ID); + if (pane instanceof ProjectViewPane) { + ProjectViewPane old = (ProjectViewPane)pane; + showExcludedFiles = old.myShowExcludedFiles; + if (showExcludedFiles != ourShowExcludedFilesDefaults) { + setShowExcludedFiles(showExcludedFiles, paneId, false); + setPaneOption(myShowExcludedFiles, showExcludedFiles, ProjectViewPane.ID, false); + old.myShowExcludedFiles = ourShowExcludedFilesDefaults; // reset old state after copying it + } + } + } + return showExcludedFiles; + } + + void setShowExcludedFiles(boolean showExcludedFiles, @NotNull String paneId, boolean updatePane) { + if (isGlobalOptions()) { + getGlobalOptions().setShowExcludedFiles(showExcludedFiles); + for (String id : getPaneIds()) { + if (ShowExcludedFilesAction.INSTANCE.isSupported(this, id)) { + setPaneOption(myShowExcludedFiles, showExcludedFiles, id, updatePane); + } + } + } + else if (ShowExcludedFilesAction.INSTANCE.isSupported(this, paneId)) { + setPaneOption(myShowExcludedFiles, showExcludedFiles, paneId, updatePane); + } + } + @Override public boolean isShowLibraryContents(String paneId) { if (isGlobalOptions()) { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java index ae35499beab0..0c3538226f76 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java @@ -11,12 +11,10 @@ import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.projectView.ProjectViewSettings; import com.intellij.ide.projectView.ViewSettings; import com.intellij.ide.projectView.impl.nodes.*; -import com.intellij.ide.scopeView.EditScopesAction; import com.intellij.ide.util.treeView.AbstractTreeBuilder; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.AbstractTreeUpdater; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -33,14 +31,12 @@ import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import java.awt.*; -import static com.intellij.openapi.application.Experiments.isFeatureEnabled; - public class ProjectViewPane extends AbstractProjectViewPSIPane { @NonNls public static final String ID = "ProjectPane"; public static final String SHOW_EXCLUDED_FILES_OPTION = "show-excluded-files"; private static final String USE_FILE_NESTING_RULES = "use-file-nesting-rules"; - private boolean myShowExcludedFiles = true; + boolean myShowExcludedFiles = true; private boolean myUseFileNestingRules = true; public ProjectViewPane(Project project) { @@ -114,9 +110,6 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { @Override public void writeExternal(Element element) { super.writeExternal(element); - if (!myShowExcludedFiles) { - JDOMExternalizerUtil.writeField(element, SHOW_EXCLUDED_FILES_OPTION, String.valueOf(false)); - } if (!myUseFileNestingRules) { JDOMExternalizerUtil.writeField(element, USE_FILE_NESTING_RULES, String.valueOf(false)); } @@ -128,7 +121,6 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { // special module nodes so it's better to hide 'Flatten Modules' action to avoid confusion actionGroup.addAction(createFlattenModulesAction(this::hasSeveralTopLevelModuleNodes)).setAsSecondary(true); - actionGroup.addAction(new ShowExcludedFilesAction()).setAsSecondary(true); actionGroup.addAction(new ConfigureFilesNestingAction()).setAsSecondary(true); AnAction editScopesAction = ActionManager.getInstance().getAction("ScopeView.EditScopes"); if (editScopesAction != null) actionGroup.addAction(editScopesAction).setAsSecondary(true); @@ -217,7 +209,7 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { @Override public boolean isShowExcludedFiles() { - return myShowExcludedFiles; + return ProjectView.getInstance(myProject).isShowExcludedFiles(ID); } @Override @@ -231,33 +223,6 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { } } - private final class ShowExcludedFilesAction extends ToggleAction implements DumbAware { - private ShowExcludedFilesAction() { - super(IdeBundle.message("action.show.excluded.files"), IdeBundle.message("action.show.hide.excluded.files"), null); - } - - @Override - public boolean isSelected(AnActionEvent event) { - return myShowExcludedFiles; - } - - @Override - public void setSelected(AnActionEvent event, boolean flag) { - if (myShowExcludedFiles != flag) { - myShowExcludedFiles = flag; - updateFromRoot(true); - } - } - - @Override - public void update(@NotNull AnActionEvent e) { - super.update(e); - final Presentation presentation = e.getPresentation(); - final ProjectView projectView = ProjectView.getInstance(myProject); - presentation.setEnabledAndVisible(projectView.getCurrentProjectViewPane() == ProjectViewPane.this); - } - } - private class ConfigureFilesNestingAction extends DumbAwareAction { private ConfigureFilesNestingAction() { super(IdeBundle.message("action.file.nesting.in.project.view")); diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewSharedSettings.kt b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewSharedSettings.kt index 0b8f29a5f091..504969fb4acc 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewSharedSettings.kt +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewSharedSettings.kt @@ -17,6 +17,7 @@ class ProjectViewSharedSettings : PersistentStateComponent