mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-149666 Bookmark icons are not shown for files in Project View
OC-3630 Files View: bookmarks are not shown for files
This commit is contained in:
@@ -157,7 +157,7 @@ public class BookmarkManager extends AbstractProjectComponent implements Persist
|
||||
return "BookmarkManager";
|
||||
}
|
||||
|
||||
public void addEditorBookmark(Editor editor, int lineIndex) {
|
||||
public void addEditorBookmark(@NotNull Editor editor, int lineIndex) {
|
||||
Document document = editor.getDocument();
|
||||
PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(document);
|
||||
if (psiFile == null) return;
|
||||
@@ -168,14 +168,16 @@ public class BookmarkManager extends AbstractProjectComponent implements Persist
|
||||
addTextBookmark(virtualFile, lineIndex, getAutoDescription(editor, lineIndex));
|
||||
}
|
||||
|
||||
public Bookmark addTextBookmark(VirtualFile file, int lineIndex, String description) {
|
||||
@NotNull
|
||||
public Bookmark addTextBookmark(@NotNull VirtualFile file, int lineIndex, @NotNull String description) {
|
||||
Bookmark b = new Bookmark(myProject, file, lineIndex, description);
|
||||
myBookmarks.add(0, b);
|
||||
myBus.syncPublisher(BookmarksListener.TOPIC).bookmarkAdded(b);
|
||||
return b;
|
||||
}
|
||||
|
||||
public static String getAutoDescription(final Editor editor, final int lineIndex) {
|
||||
@NotNull
|
||||
public static String getAutoDescription(@NotNull final Editor editor, final int lineIndex) {
|
||||
String autoDescription = editor.getSelectionModel().getSelectedText();
|
||||
if ( autoDescription == null ) {
|
||||
Document document = editor.getDocument();
|
||||
@@ -189,7 +191,7 @@ public class BookmarkManager extends AbstractProjectComponent implements Persist
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Bookmark addFileBookmark(VirtualFile file, String description) {
|
||||
public Bookmark addFileBookmark(@Nullable VirtualFile file, @NotNull String description) {
|
||||
if (file == null) return null;
|
||||
if (findFileBookmark(file) != null) return null;
|
||||
|
||||
|
||||
+33
@@ -17,6 +17,8 @@
|
||||
package com.intellij.ide.projectView.impl.nodes;
|
||||
|
||||
import com.intellij.codeInsight.navigation.NavigationUtil;
|
||||
import com.intellij.ide.bookmarks.Bookmark;
|
||||
import com.intellij.ide.bookmarks.BookmarkManager;
|
||||
import com.intellij.ide.projectView.PresentationData;
|
||||
import com.intellij.ide.projectView.ProjectViewNode;
|
||||
import com.intellij.ide.projectView.ProjectViewNodeDecorator;
|
||||
@@ -34,12 +36,16 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.openapi.vcs.FileStatusManager;
|
||||
import com.intellij.openapi.vfs.VFileProperty;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.StatePreservingNavigatable;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.ui.LayeredIcon;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -157,6 +163,8 @@ public abstract class AbstractPsiBasedNode<Value> extends ProjectViewNode<Value>
|
||||
catch (IndexNotReadyException ignored) {
|
||||
}
|
||||
updateImpl(data);
|
||||
data.setIcon(patchIcon(myProject, data.getIcon(true), getVirtualFile()));
|
||||
|
||||
for (ProjectViewNodeDecorator decorator : Extensions.getExtensions(ProjectViewNodeDecorator.EP_NAME, myProject)) {
|
||||
decorator.decorate(AbstractPsiBasedNode.this, data);
|
||||
}
|
||||
@@ -173,6 +181,31 @@ public abstract class AbstractPsiBasedNode<Value> extends ProjectViewNode<Value>
|
||||
return flags;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Icon patchIcon(@NotNull Project project, @Nullable Icon original, @Nullable VirtualFile file) {
|
||||
if (file == null || original == null) return null;
|
||||
|
||||
Icon icon = original;
|
||||
|
||||
final Bookmark bookmarkAtFile = BookmarkManager.getInstance(project).findFileBookmark(file);
|
||||
if (bookmarkAtFile != null) {
|
||||
final RowIcon composite = new RowIcon(2, RowIcon.Alignment.CENTER);
|
||||
composite.setIcon(icon, 0);
|
||||
composite.setIcon(bookmarkAtFile.getIcon(), 1);
|
||||
icon = composite;
|
||||
}
|
||||
|
||||
if (!file.isWritable()) {
|
||||
icon = LayeredIcon.create(icon, PlatformIcons.LOCKED_ICON);
|
||||
}
|
||||
|
||||
if (file.is(VFileProperty.SYMLINK)) {
|
||||
icon = LayeredIcon.create(icon, PlatformIcons.SYMLINK_ICON);
|
||||
}
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
protected boolean isDeprecated() {
|
||||
return false;
|
||||
}
|
||||
|
||||
+2
-30
@@ -16,8 +16,6 @@
|
||||
package com.intellij.ide.projectView.impl.nodes;
|
||||
|
||||
import com.intellij.ide.IconProvider;
|
||||
import com.intellij.ide.bookmarks.Bookmark;
|
||||
import com.intellij.ide.bookmarks.BookmarkManager;
|
||||
import com.intellij.ide.projectView.PresentationData;
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
import com.intellij.ide.projectView.ViewSettings;
|
||||
@@ -38,19 +36,15 @@ import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VFileProperty;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.NavigatableWithText;
|
||||
import com.intellij.projectImport.ProjectAttachProcessor;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.impl.file.PsiDirectoryFactory;
|
||||
import com.intellij.ui.LayeredIcon;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.intellij.util.IconUtil;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.PlatformUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -130,14 +124,14 @@ public class PsiDirectoryNode extends BasePsiNode<PsiDirectory> implements Navig
|
||||
if (PlatformUtils.isAppCode()) {
|
||||
final Icon icon = IconUtil.getIcon(virtualFile, 0, myProject);
|
||||
if (icon != null) {
|
||||
data.setIcon(patchIcon(icon, virtualFile));
|
||||
data.setIcon(icon);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (final IconProvider provider : Extensions.getExtensions(IconProvider.EXTENSION_POINT_NAME)) {
|
||||
final Icon icon = provider.getIcon(psiDirectory, 0);
|
||||
if (icon != null) {
|
||||
data.setIcon(patchIcon(icon, virtualFile));
|
||||
data.setIcon(icon);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -273,28 +267,6 @@ public class PsiDirectoryNode extends BasePsiNode<PsiDirectory> implements Navig
|
||||
return super.getTitle();
|
||||
}
|
||||
|
||||
protected Icon patchIcon(Icon original, VirtualFile file) {
|
||||
Icon icon = original;
|
||||
|
||||
final Bookmark bookmarkAtFile = BookmarkManager.getInstance(myProject).findFileBookmark(file);
|
||||
if (bookmarkAtFile != null) {
|
||||
final RowIcon composite = new RowIcon(2, RowIcon.Alignment.CENTER);
|
||||
composite.setIcon(icon, 0);
|
||||
composite.setIcon(bookmarkAtFile.getIcon(), 1);
|
||||
icon = composite;
|
||||
}
|
||||
|
||||
if (!file.isWritable()) {
|
||||
icon = LayeredIcon.create(icon, PlatformIcons.LOCKED_ICON);
|
||||
}
|
||||
|
||||
if (file.is(VFileProperty.SYMLINK)) {
|
||||
icon = LayeredIcon.create(icon, PlatformIcons.SYMLINK_ICON);
|
||||
}
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Comparable getSortKey() {
|
||||
if (ProjectAttachProcessor.canAttachToProject()) {
|
||||
|
||||
@@ -102,7 +102,7 @@ public final class TodoDirNode extends PsiDirectoryNode implements HighlightedRe
|
||||
protected void setupIcon(PresentationData data, PsiDirectory psiDirectory) {
|
||||
final VirtualFile virtualFile = psiDirectory.getVirtualFile();
|
||||
if (ProjectRootsUtil.isModuleContentRoot(virtualFile, psiDirectory.getProject())) {
|
||||
data.setIcon(patchIcon(new DirectoryIconProvider().getIcon(psiDirectory, 0), virtualFile));
|
||||
data.setIcon(new DirectoryIconProvider().getIcon(psiDirectory, 0));
|
||||
} else {
|
||||
super.setupIcon(data, psiDirectory);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user