navigation from dependencies panel

This commit is contained in:
Anna Kozlova
2005-01-20 21:24:47 +03:00
parent e0c8b61c6d
commit 482b62a628
2 changed files with 40 additions and 13 deletions
@@ -23,6 +23,7 @@ import com.intellij.psi.*;
import com.intellij.ui.*;
import com.intellij.ui.content.Content;
import com.intellij.util.Icons;
import com.intellij.util.EditSourceOnDoubleClickHandler;
import com.intellij.util.ui.Tree;
import com.intellij.util.ui.tree.TreeUtil;
@@ -211,20 +212,12 @@ public class DependenciesPanel extends JPanel {
TreeToolTipHandler.install(tree);
TreeUtil.installActions(tree);
SmartExpander.installOn(tree);
EditSourceOnDoubleClickHandler.install(tree);
new TreeSpeedSearch(tree);
PopupHandler.installUnknownPopupHandler(tree, createTreePopupActions(isRightTree), ActionManager.getInstance());
tree.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.isPopupTrigger() && e.getClickCount() == 2) {
Navigatable navigatable = (Navigatable)tree.getData(DataConstants.NAVIGATABLE);
if (navigatable != null && navigatable.canNavigate()) {
navigatable.navigate(true);
}
}
}
});
}
private void updateRightTreeModel() {
@@ -534,8 +527,8 @@ public class DependenciesPanel extends JPanel {
private static class MyTree extends Tree implements DataProvider {
public Object getData(String dataId) {
PackageDependenciesNode node = getSelectedNode();
if (node != null && DataConstants.PSI_ELEMENT.equals(dataId)) {
return node.getPsiElement();
if (DataConstants.NAVIGATABLE.equals(dataId)) {
return node;
}
return null;
}
@@ -2,8 +2,13 @@ package com.intellij.packageDependencies.ui;
import com.intellij.ide.IconUtilEx;
import com.intellij.openapi.actionSystem.impl.EmptyIcon;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.pom.Navigatable;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -11,7 +16,7 @@ import javax.swing.tree.MutableTreeNode;
import java.util.HashSet;
import java.util.Set;
public class PackageDependenciesNode extends DefaultMutableTreeNode {
public class PackageDependenciesNode extends DefaultMutableTreeNode implements Navigatable{
private static final EmptyIcon EMPTY_ICON = EmptyIcon.create(0, IconUtilEx.getEmptyIcon(false).getIconHeight());
private Set<PsiFile> myRegisteredFiles = new HashSet<PsiFile>();
private boolean myHasUnmarked = false;
@@ -67,4 +72,33 @@ public class PackageDependenciesNode extends DefaultMutableTreeNode {
}
}
}
public void navigate(boolean focus) {
if (canNavigate()) {
openTextEditor(focus);
}
}
private Editor openTextEditor(boolean focus) {
return FileEditorManager.getInstance(getProject()).openTextEditor(getDescriptor(), focus);
}
public boolean canNavigate() {
final OpenFileDescriptor descriptor = getDescriptor();
return descriptor != null ? descriptor.canNavigate() : false;
}
private Project getProject(){
if (getPsiElement() == null || getPsiElement().getContainingFile() == null){
return null;
}
return getPsiElement().getContainingFile().getProject();
}
private OpenFileDescriptor getDescriptor() {
if (getProject() == null){
return null;
}
return new OpenFileDescriptor(getProject(), getPsiElement().getContainingFile().getVirtualFile());
}
}