mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 17:57:53 +08:00
[project view pane] cleanup code
This commit is contained in:
parent
3998ab116d
commit
22e4b82163
@ -3,16 +3,20 @@
|
|||||||
package org.intellij.sdk.view.pane;
|
package org.intellij.sdk.view.pane;
|
||||||
|
|
||||||
import com.intellij.icons.AllIcons;
|
import com.intellij.icons.AllIcons;
|
||||||
import com.intellij.ide.projectView.*;
|
import com.intellij.ide.projectView.PresentationData;
|
||||||
import com.intellij.ide.projectView.impl.ProjectViewImpl;
|
import com.intellij.ide.projectView.ProjectView;
|
||||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.project.ProjectUtil;
|
import com.intellij.openapi.project.ProjectUtil;
|
||||||
import com.intellij.openapi.util.*;
|
import com.intellij.openapi.util.Disposer;
|
||||||
|
import com.intellij.openapi.util.Key;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.openapi.vfs.*;
|
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFileEvent;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFileListener;
|
||||||
import com.intellij.psi.search.FilenameIndex;
|
import com.intellij.psi.search.FilenameIndex;
|
||||||
import com.intellij.util.Alarm;
|
import com.intellij.util.Alarm;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -58,7 +62,7 @@ public class ImagesProjectNode extends AbstractTreeNode<VirtualFile> {
|
|||||||
private Set<VirtualFile> getImagesFiles(Project project) {
|
private Set<VirtualFile> getImagesFiles(Project project) {
|
||||||
Set<VirtualFile> files = project.getUserData(IMAGES_PROJECT_DIRS);
|
Set<VirtualFile> files = project.getUserData(IMAGES_PROJECT_DIRS);
|
||||||
if (files == null) {
|
if (files == null) {
|
||||||
files = new HashSet<VirtualFile>();
|
files = new HashSet<>();
|
||||||
project.putUserData(IMAGES_PROJECT_DIRS, files);
|
project.putUserData(IMAGES_PROJECT_DIRS, files);
|
||||||
}
|
}
|
||||||
return files;
|
return files;
|
||||||
@ -80,19 +84,16 @@ public class ImagesProjectNode extends AbstractTreeNode<VirtualFile> {
|
|||||||
}
|
}
|
||||||
if (files.isEmpty()) return Collections.emptyList();
|
if (files.isEmpty()) return Collections.emptyList();
|
||||||
final List<AbstractTreeNode> nodes = new ArrayList<AbstractTreeNode>(files.size());
|
final List<AbstractTreeNode> nodes = new ArrayList<AbstractTreeNode>(files.size());
|
||||||
final boolean alwaysOnTop = ((ProjectViewImpl) ProjectView.getInstance(myProject)).isFoldersAlwaysOnTop("");
|
final boolean alwaysOnTop = ProjectView.getInstance(myProject).isFoldersAlwaysOnTop("");
|
||||||
Collections.sort(files, new Comparator<VirtualFile>() {
|
Collections.sort(files, (o1, o2) -> {
|
||||||
@Override
|
if (alwaysOnTop) {
|
||||||
public int compare(VirtualFile o1, VirtualFile o2) {
|
final boolean d1 = o1.isDirectory();
|
||||||
if (alwaysOnTop) {
|
final boolean d2 = o2.isDirectory();
|
||||||
final boolean d1 = o1.isDirectory();
|
if (d1 && !d2) return -1;
|
||||||
final boolean d2 = o2.isDirectory();
|
if (!d1 && d2) return 1;
|
||||||
if (d1 && !d2) return -1;
|
|
||||||
if (!d1 && d2) return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return StringUtil.naturalCompare(o1.getName(), o2.getName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return StringUtil.naturalCompare(o1.getName(), o2.getName());
|
||||||
});
|
});
|
||||||
for (VirtualFile file : files) {
|
for (VirtualFile file : files) {
|
||||||
nodes.add(new ImagesProjectNode(myProject, file));
|
nodes.add(new ImagesProjectNode(myProject, file));
|
||||||
@ -158,8 +159,8 @@ public class ImagesProjectNode extends AbstractTreeNode<VirtualFile> {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ProjectView.getInstance(myProject)
|
ProjectView.getInstance(myProject)
|
||||||
.getProjectViewPaneById(ImagesProjectViewPane.ID)
|
.getProjectViewPaneById(ImagesProjectViewPane.ID)
|
||||||
.updateFromRoot(true);
|
.updateFromRoot(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,13 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
|
|||||||
super(project);
|
super(project);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return "SDK-Images";
|
return "SDK-Images";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public javax.swing.Icon getIcon() {
|
public javax.swing.Icon getIcon() {
|
||||||
return AllIcons.FileTypes.Custom;
|
return AllIcons.FileTypes.Custom;
|
||||||
@ -44,6 +46,7 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
|
|||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public SelectInTarget createSelectInTarget() {
|
public SelectInTarget createSelectInTarget() {
|
||||||
return new ProjectViewSelectInTarget(myProject) {
|
return new ProjectViewSelectInTarget(myProject) {
|
||||||
@ -66,23 +69,26 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected ProjectAbstractTreeStructureBase createStructure() {
|
protected ProjectAbstractTreeStructureBase createStructure() {
|
||||||
return new ProjectTreeStructure(myProject, ID) {
|
return new ProjectTreeStructure(myProject, ID) {
|
||||||
@Override
|
@Override
|
||||||
protected AbstractTreeNode createRoot(Project project, ViewSettings settings) {
|
protected AbstractTreeNode createRoot(@NotNull Project project, @NotNull ViewSettings settings) {
|
||||||
return new ImagesProjectNode(project);
|
return new ImagesProjectNode(project);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Object[] getChildElements(Object element) {
|
public Object[] getChildElements(@NotNull Object element) {
|
||||||
return super.getChildElements(element);
|
return super.getChildElements(element);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected ProjectViewTree createTree(DefaultTreeModel model) {
|
protected ProjectViewTree createTree(@NotNull DefaultTreeModel model) {
|
||||||
return new ProjectViewTree(myProject, model) {
|
return new ProjectViewTree(myProject, model) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isRootVisible() {
|
public boolean isRootVisible() {
|
||||||
@ -91,8 +97,9 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected AbstractTreeUpdater createTreeUpdater(AbstractTreeBuilder builder) {
|
protected AbstractTreeUpdater createTreeUpdater(@NotNull AbstractTreeBuilder builder) {
|
||||||
return new AbstractTreeUpdater(builder);
|
return new AbstractTreeUpdater(builder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user