From 300055eb1cb331fb528d509ed7793828f4c2dd4c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 22 Nov 2011 20:16:51 +0100 Subject: [PATCH] Select in target for favorites --- .../FavoritesTreeViewPanel.java | 11 ++- .../FavoritesViewSelectInTarget.java | 86 ++++++++++++++++--- .../src/META-INF/LangExtensions.xml | 1 + 3 files changed, 85 insertions(+), 13 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java index 5709b7b20026..9ebf5fd37f61 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java @@ -52,7 +52,11 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtilBase; import com.intellij.ui.*; -import com.intellij.util.*; +import com.intellij.ui.treeStructure.actions.CollapseAllAction; +import com.intellij.util.ArrayUtil; +import com.intellij.util.EditSourceOnDoubleClickHandler; +import com.intellij.util.EditSourceOnEnterKeyHandler; +import com.intellij.util.IconUtil; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NotNull; @@ -68,6 +72,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +/** + * @author anna + * @author Konstantin Bulenkov + */ public class FavoritesTreeViewPanel extends JPanel implements DataProvider { private final FavoritesTreeStructure myFavoritesTreeStructure; private FavoritesViewTreeBuilder myBuilder; @@ -167,6 +175,7 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider { return CustomShortcutSet.fromString("DELETE"); } }) + .addExtraAction(AnActionButton.fromAction(new CollapseAllAction(myTree))) .setLineBorder(0, 0, 0, 0) .createPanel(); panel.setBorder(IdeBorderFactory.createEmptyBorder(0)); diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java index aeae7191306c..ed52ffd3afee 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java @@ -16,19 +16,26 @@ package com.intellij.ide.favoritesTreeView; -import com.intellij.ide.SelectInContext; import com.intellij.ide.SelectInManager; import com.intellij.ide.StandardTargetWeights; -import com.intellij.ide.impl.ProjectViewSelectInTarget; +import com.intellij.ide.impl.SelectInTargetPsiWrapper; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiFileSystemItem; +import com.intellij.openapi.wm.ToolWindow; +import com.intellij.openapi.wm.ToolWindowId; +import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.psi.*; +import com.intellij.psi.util.PsiUtilBase; +import com.intellij.util.ui.UIUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** - * User: anna - * Date: Feb 25, 2005 + * @author anna + * @author Konstantin Bulenkov */ -public class FavoritesViewSelectInTarget extends ProjectViewSelectInTarget { +public class FavoritesViewSelectInTarget extends SelectInTargetPsiWrapper { public FavoritesViewSelectInTarget(final Project project) { super(project); } @@ -37,8 +44,68 @@ public class FavoritesViewSelectInTarget extends ProjectViewSelectInTarget { return SelectInManager.FAVORITES; } + @Override + public String getToolWindowId() { + return SelectInManager.FAVORITES; + } + + @Override + protected void select(Object selector, VirtualFile virtualFile, boolean requestFocus) { + select(myProject, selector, null, null, virtualFile, requestFocus); + } + + @Override + protected void select(PsiElement element, boolean requestFocus) { + PsiElement toSelect = null; + if (element instanceof PsiFile || element instanceof PsiDirectory) { + toSelect = element; + } + else { + final PsiFile containingFile = element.getContainingFile(); + if (containingFile == null) return; + final FileViewProvider viewProvider = containingFile.getViewProvider(); + toSelect = viewProvider.getPsi(viewProvider.getBaseLanguage()); + } + if (toSelect == null) return; + PsiElement originalElement = toSelect.getOriginalElement(); + final VirtualFile virtualFile = PsiUtilBase.getVirtualFile(originalElement); + select(originalElement, virtualFile, requestFocus); + } + + public static ActionCallback select(@NotNull Project project, + final Object toSelect, + @Nullable final String viewId, + @Nullable final String subviewId, + final VirtualFile virtualFile, + final boolean requestFocus) { + final ActionCallback result = new ActionCallback(); + + ToolWindowManager windowManager=ToolWindowManager.getInstance(project); + final ToolWindow favoritesToolWindow = windowManager.getToolWindow(ToolWindowId.FAVORITES_VIEW); + + if (favoritesToolWindow != null) { + final FavoritesTreeViewPanel panel = UIUtil.findComponentOfType(favoritesToolWindow.getComponent(), FavoritesTreeViewPanel.class); + + if (panel != null) { + final Runnable runnable = new Runnable() { + public void run() { + panel.selectElement(toSelect, virtualFile, requestFocus); + result.setDone(); + } + }; + + if (requestFocus) { + favoritesToolWindow.activate(runnable, false); + } else { + favoritesToolWindow.show(runnable); + } + } + } + + return result; + } + protected boolean canSelect(final PsiFileSystemItem file) { - if (!super.canSelect(file)) return false; return findSuitableFavoritesList(file.getVirtualFile(), myProject, null) != null; } @@ -63,9 +130,4 @@ public class FavoritesViewSelectInTarget extends ProjectViewSelectInTarget { protected boolean canWorkWithCustomObjects() { return false; } - - public boolean isSubIdSelectable(String subId, SelectInContext context) { - final FavoritesManager favoritesManager = FavoritesManager.getInstance(myProject); - return favoritesManager.contains(subId, context.getVirtualFile()); - } } diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 2d846bb5d1b5..accdf885ecdd 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -457,6 +457,7 @@ +