From 482b62a6284e26d35a9bac2b09428a8db705fb3a Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 20 Jan 2005 21:24:47 +0300 Subject: [PATCH] navigation from dependencies panel --- .../ui/DependenciesPanel.java | 17 +++------ .../ui/PackageDependenciesNode.java | 36 ++++++++++++++++++- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/source/com/intellij/packageDependencies/ui/DependenciesPanel.java b/source/com/intellij/packageDependencies/ui/DependenciesPanel.java index 3e56c969497b..3ce7441c4c90 100644 --- a/source/com/intellij/packageDependencies/ui/DependenciesPanel.java +++ b/source/com/intellij/packageDependencies/ui/DependenciesPanel.java @@ -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; } diff --git a/source/com/intellij/packageDependencies/ui/PackageDependenciesNode.java b/source/com/intellij/packageDependencies/ui/PackageDependenciesNode.java index a979e9b62a88..a5fdcf7fe513 100644 --- a/source/com/intellij/packageDependencies/ui/PackageDependenciesNode.java +++ b/source/com/intellij/packageDependencies/ui/PackageDependenciesNode.java @@ -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 myRegisteredFiles = new HashSet(); 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()); + } } \ No newline at end of file