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 @@
+