From 95df71eac54ccb0a4c50adbfd226d2867facbb9b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 12 Jun 2015 13:02:34 +0200 Subject: [PATCH] show excluded file in file tree (remote urls) --- .../util/ui/tree/AbstractFileTreeTable.java | 24 ++++++++-- .../util/ui/tree/NonContentFileFilter.java | 47 +++++++++++++++++++ 2 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/util/ui/tree/NonContentFileFilter.java diff --git a/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java b/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java index 17d5951b93ad..5287db9087ce 100644 --- a/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java +++ b/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java @@ -48,7 +48,7 @@ import java.awt.*; import java.util.*; import java.util.List; -public abstract class AbstractFileTreeTable extends TreeTable { +public class AbstractFileTreeTable extends TreeTable { private final MyModel myModel; private final Project myProject; @@ -57,7 +57,16 @@ public abstract class AbstractFileTreeTable extends TreeTable { @NotNull String valueTitle, @NotNull VirtualFileFilter filter, boolean showProjectNode) { - super(new MyModel(project, valueClass, valueTitle, filter)); + this(project, valueClass, valueTitle, filter, showProjectNode, true); + } + + public AbstractFileTreeTable(@NotNull Project project, + @NotNull Class valueClass, + @NotNull String valueTitle, + @NotNull VirtualFileFilter filter, + boolean showProjectNode, + boolean filterNonContentFiles) { + super(new MyModel(project, valueClass, valueTitle, filterNonContentFiles ? new NonContentFileFilter(project, filter) : filter)); myProject = project; //noinspection unchecked @@ -85,6 +94,7 @@ public abstract class AbstractFileTreeTable extends TreeTable { getTree().setShowsRootHandles(true); getTree().setLineStyleAngled(); getTree().setRootVisible(showProjectNode); + final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); getTree().setCellRenderer(new DefaultTreeCellRenderer() { @Override public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel, final boolean expanded, @@ -98,7 +108,12 @@ public abstract class AbstractFileTreeTable extends TreeTable { FileNode fileNode = (FileNode)value; VirtualFile file = fileNode.getObject(); setText(fileNode.getParent() instanceof FileNode ? file.getName() : file.getPresentableUrl()); - setIcon(file.isDirectory() ? PlatformIcons.DIRECTORY_CLOSED_ICON : IconUtil.getIcon(file, 0, null)); + if (file.isDirectory()) { + setIcon(fileIndex.isExcluded(file) ? AllIcons.Modules.ExcludeRoot : PlatformIcons.DIRECTORY_CLOSED_ICON); + } + else { + setIcon(IconUtil.getIcon(file, 0, null)); + } return this; } }); @@ -444,9 +459,8 @@ public abstract class AbstractFileTreeTable extends TreeTable { @Override protected void appendChildrenTo(@NotNull final Collection children) { - ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); for (VirtualFile child : getObject().getChildren()) { - if (myFilter.accept(child) && fileIndex.isInContent(child)) { + if (myFilter.accept(child)) { children.add(new FileNode(child, myProject, myFilter)); } } diff --git a/platform/lang-impl/src/com/intellij/util/ui/tree/NonContentFileFilter.java b/platform/lang-impl/src/com/intellij/util/ui/tree/NonContentFileFilter.java new file mode 100644 index 000000000000..3eeef5869217 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/util/ui/tree/NonContentFileFilter.java @@ -0,0 +1,47 @@ +/* + * Copyright 2000-2015 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.util.ui.tree; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileFilter; +import org.jetbrains.annotations.NotNull; + +public class NonContentFileFilter implements VirtualFileFilter { + private final Project project; + private final VirtualFileFilter filter; + + private ProjectFileIndex fileIndex; + + public NonContentFileFilter(@NotNull Project project, @NotNull VirtualFileFilter filter) { + this.project = project; + this.filter = filter; + } + + @Override + public boolean accept(@NotNull VirtualFile file) { + if (!filter.accept(file)) { + return false; + } + + if (fileIndex == null) { + fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); + } + return fileIndex.isInContent(file); + } +}