Select in target for favorites

This commit is contained in:
Konstantin Bulenkov
2011-11-22 20:16:51 +01:00
parent 4beb1e26c7
commit 300055eb1c
3 changed files with 85 additions and 13 deletions
@@ -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));
@@ -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());
}
}
@@ -457,6 +457,7 @@
<selectInTarget implementation="com.intellij.ide.navigationToolbar.SelectInNavBarTarget"/>
<selectInTarget implementation="com.intellij.ide.impl.StructureViewSelectInTarget"/>
<selectInTarget implementation="com.intellij.ide.impl.ProjectViewSelectInExplorerTarget"/>
<selectInTarget implementation="com.intellij.ide.favoritesTreeView.FavoritesViewSelectInTarget"/>
<elementLookupRenderer implementation="com.intellij.codeInsight.template.impl.TemplateLookupRenderer"/>