From 5b83f5fe92cca54b9f6f792bf962cecc2214ee09 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 1 Mar 2005 18:06:05 +0300 Subject: [PATCH] add 'reverse' action to module dependencies panel --- .../cyclicDependencies/ShortestPathUtil.java | 2 +- .../DependenciesAnalyzeManager.java | 22 +++++++++- .../ModulesDependenciesPanel.java | 42 +++++++++++++++---- 3 files changed, 55 insertions(+), 11 deletions(-) diff --git a/source/com/intellij/cyclicDependencies/ShortestPathUtil.java b/source/com/intellij/cyclicDependencies/ShortestPathUtil.java index 80d4f775c97b..81c534f5a855 100644 --- a/source/com/intellij/cyclicDependencies/ShortestPathUtil.java +++ b/source/com/intellij/cyclicDependencies/ShortestPathUtil.java @@ -30,7 +30,7 @@ public class ShortestPathUtil { public List getShortestPath(Node from, Node to) { ArrayList result = new ArrayList(); - if (myShortestPathTree == null) { + if (myShortestPathTree == null || ((DefaultMutableTreeNode)myShortestPathTree.getRoot()).getUserObject() != from) { shortestPath(from); } final boolean flag = traverse(to, result); diff --git a/source/com/intellij/moduleDependencies/DependenciesAnalyzeManager.java b/source/com/intellij/moduleDependencies/DependenciesAnalyzeManager.java index 7093fa23bfca..e1193296d681 100644 --- a/source/com/intellij/moduleDependencies/DependenciesAnalyzeManager.java +++ b/source/com/intellij/moduleDependencies/DependenciesAnalyzeManager.java @@ -4,7 +4,7 @@ import com.intellij.ide.impl.ContentManagerWatcher; import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.*; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowId; @@ -12,14 +12,16 @@ import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.peer.PeerFactory; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; +import org.jdom.Element; /** * User: anna * Date: Feb 10, 2005 */ -public class DependenciesAnalyzeManager implements ProjectComponent{ +public class DependenciesAnalyzeManager implements JDOMExternalizable, ProjectComponent{ private Project myProject; private ContentManager myContentManager; + public boolean myForwardDirection; public DependenciesAnalyzeManager(final Project project) { myProject = project; @@ -68,4 +70,20 @@ public class DependenciesAnalyzeManager implements ProjectComponent{ public void disposeComponent() { } + + public boolean isForwardDirection() { + return myForwardDirection; + } + + public void setForwardDirection(final boolean forwardDirection) { + myForwardDirection = forwardDirection; + } + + public void readExternal(Element element) throws InvalidDataException { + DefaultJDOMExternalizer.readExternal(this, element); + } + + public void writeExternal(Element element) throws WriteExternalException { + DefaultJDOMExternalizer.writeExternal(this, element); + } } diff --git a/source/com/intellij/moduleDependencies/ModulesDependenciesPanel.java b/source/com/intellij/moduleDependencies/ModulesDependenciesPanel.java index e760a823b85b..1086ec27e8ce 100644 --- a/source/com/intellij/moduleDependencies/ModulesDependenciesPanel.java +++ b/source/com/intellij/moduleDependencies/ModulesDependenciesPanel.java @@ -7,20 +7,18 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.ModuleRootListener; import com.intellij.openapi.roots.ModuleRootEvent; +import com.intellij.openapi.roots.ModuleRootListener; +import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.projectRoots.ProjectRootListener; import com.intellij.ui.*; import com.intellij.ui.content.Content; -import com.intellij.util.EditSourceOnDoubleClickHandler; import com.intellij.util.graph.CachingSemiGraph; +import com.intellij.util.graph.DFSTBuilder; import com.intellij.util.graph.Graph; import com.intellij.util.graph.GraphGenerator; -import com.intellij.util.graph.DFSTBuilder; import com.intellij.util.ui.Tree; import com.intellij.util.ui.tree.TreeUtil; @@ -99,6 +97,20 @@ public class ModulesDependenciesPanel extends JPanel implements ModuleRootListen } }); + group.add(new ToggleAction("Dependencies Direction", "", DependenciesAnalyzeManager.getInstance(myProject).isForwardDirection() ? IconLoader.getIcon("/actions/sortAsc.png") : IconLoader.getIcon("/actions/sortDesc.png")){ + public boolean isSelected(AnActionEvent e) { + return DependenciesAnalyzeManager.getInstance(myProject).isForwardDirection(); + } + + public void setSelected(AnActionEvent e, boolean state) { + DependenciesAnalyzeManager.getInstance(myProject).setForwardDirection(state); + initLeftTreeModel(); + } + + public void update(final AnActionEvent e) { + e.getPresentation().setIcon(DependenciesAnalyzeManager.getInstance(myProject).isForwardDirection() ? IconLoader.getIcon("/actions/sortAsc.png") : IconLoader.getIcon("/actions/sortDesc.png")); + } + }); ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, true); return toolbar.getComponent(); } @@ -270,8 +282,6 @@ public class ModulesDependenciesPanel extends JPanel implements ModuleRootListen TreeToolTipHandler.install(tree); TreeUtil.installActions(tree); - SmartExpander.installOn(tree); - EditSourceOnDoubleClickHandler.install(tree); new TreeSpeedSearch(tree); PopupHandler.installUnknownPopupHandler(tree, createTreePopupActions(isRightTree, tree), ActionManager.getInstance()); } @@ -287,7 +297,23 @@ public class ModulesDependenciesPanel extends JPanel implements ModuleRootListen return Arrays.asList(ModuleRootManager.getInstance(module).getDependencies()).iterator(); } })); - return graph; + if (DependenciesAnalyzeManager.getInstance(myProject).isForwardDirection()){ + return graph; + } else { + return new Graph(){ + public Collection getNodes() { + return graph.getNodes(); + } + + public Iterator getIn(final Module n) { + return graph.getOut(n); + } + + public Iterator getOut(final Module n) { + return graph.getIn(n); + } + }; + } } public void setContent(final Content content) {