diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java | 81 |
1 files changed, 75 insertions, 6 deletions
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 52e79d208147..bc2e509e085a 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 @@ -23,15 +23,25 @@ import com.intellij.icons.AllIcons; import com.intellij.ide.IdeBundle; import com.intellij.ide.SelectInTarget; import com.intellij.ide.impl.ProjectPaneSelectInTarget; +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.ProjectViewDirectoryHelper; import com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode; 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.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.util.JDOMExternalizerUtil; +import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.PsiDirectory; +import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -42,6 +52,8 @@ import java.awt.*; public class ProjectViewPane extends AbstractProjectViewPSIPane { @NonNls public static final String ID = "ProjectPane"; + public static final String SHOW_EXCLUDED_FILES_OPTION = "show-excluded-files"; + private boolean myShowExcludedFiles = true; public ProjectViewPane(Project project) { super(project); @@ -76,12 +88,7 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { @Override protected ProjectAbstractTreeStructureBase createStructure() { - return new ProjectTreeStructure(myProject, ID){ - @Override - protected AbstractTreeNode createRoot(final Project project, ViewSettings settings) { - return new ProjectViewProjectNode(project, settings); - } - }; + return new ProjectViewPaneTreeStructure(); } @Override @@ -111,6 +118,25 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { return "ProjectPane"; } + @Override + public void readExternal(Element element) throws InvalidDataException { + super.readExternal(element); + String showExcludedOption = JDOMExternalizerUtil.readField(element, SHOW_EXCLUDED_FILES_OPTION); + myShowExcludedFiles = showExcludedOption == null || Boolean.parseBoolean(showExcludedOption); + } + + @Override + public void writeExternal(Element element) throws WriteExternalException { + super.writeExternal(element); + if (!myShowExcludedFiles) { + JDOMExternalizerUtil.writeField(element, SHOW_EXCLUDED_FILES_OPTION, String.valueOf(false)); + } + } + + @Override + public void addToolbarActions(DefaultActionGroup actionGroup) { + actionGroup.addAction(new ShowExcludedFilesAction()).setAsSecondary(true); + } // should be first @Override @@ -148,4 +174,47 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { return super.addSubtreeToUpdateByElement(element); } } + + private class ProjectViewPaneTreeStructure extends ProjectTreeStructure implements ProjectViewSettings { + public ProjectViewPaneTreeStructure() { + super(ProjectViewPane.this.myProject, ID); + } + + @Override + protected AbstractTreeNode createRoot(final Project project, ViewSettings settings) { + return new ProjectViewProjectNode(project, settings); + } + + @Override + public boolean isShowExcludedFiles() { + return myShowExcludedFiles; + } + } + + private final class ShowExcludedFilesAction extends ToggleAction { + 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(AnActionEvent e) { + super.update(e); + final Presentation presentation = e.getPresentation(); + final ProjectView projectView = ProjectView.getInstance(myProject); + presentation.setVisible(projectView.getCurrentProjectViewPane() == ProjectViewPane.this); + } + } } |