package jetbrains.mps.ide.platform.dependencyViewer; /*Generated by MPS */ import jetbrains.mps.ide.findusages.view.UsagesView; import com.intellij.openapi.project.Project; import jetbrains.mps.ide.findusages.view.treeholder.treeview.ViewOptions; import jetbrains.mps.ide.findusages.view.treeholder.treeview.UsagesTree; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.ide.ui.tree.MPSTreeNode; import org.jetbrains.mps.openapi.module.SModuleReference; import java.util.Enumeration; import jetbrains.mps.ide.findusages.view.treeholder.tree.DataNode; import jetbrains.mps.ide.findusages.view.treeholder.tree.nodedatatypes.BaseNodeData; import jetbrains.mps.ide.findusages.view.treeholder.tree.nodedatatypes.ModuleNodeData; import javax.swing.event.TreeSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreePath; import jetbrains.mps.ide.findusages.view.treeholder.tree.nodedatatypes.ModelNodeData; import jetbrains.mps.ide.findusages.view.treeholder.tree.nodedatatypes.NodeNodeData; import jetbrains.mps.ide.findusages.view.treeholder.treeview.INodeRepresentator; import org.jetbrains.mps.openapi.model.SNode; import java.util.List; import jetbrains.mps.ide.findusages.model.CategoryKind; import java.util.Collections; import javax.swing.Icon; import jetbrains.mps.ide.findusages.view.treeholder.tree.TextOptions; import jetbrains.mps.ide.icons.IdeIcons; import org.jetbrains.annotations.NotNull; import org.jdom.Element; import jetbrains.mps.ide.findusages.CantLoadSomethingException; import jetbrains.mps.ide.findusages.CantSaveSomethingException; public class TargetsView extends UsagesView { private DependenciesPanel myParent; public TargetsView(Project project, DependenciesPanel parent) { super(project, new ViewOptions(true, true, false, false, false, false)); UsagesTree usagesTree = getTreeComponent().getTree(); usagesTree.addTreeSelectionListener(new TargetsView.MyTreeSelectionListener(usagesTree, parent)); myParent = parent; setCustomNodeRepresentator(new TargetsView.MyNodeRepresentator()); usagesTree.setSelectionRow(0); usagesTree.setShowPopupMenu(false); } public void selectModule(SModule module) { MPSTreeNode node = findModule(module.getModuleReference()); if (node != null) { getTreeComponent().getTree().selectNode(node); } } private MPSTreeNode findModule(SModuleReference module) { UsagesTree usagesTree = getTreeComponent().getTree(); Enumeration nodes = usagesTree.getRootNode().breadthFirstEnumeration(); while (nodes.hasMoreElements()) { MPSTreeNode treeNode = as_w7qo2b_a0a0a2a3(nodes.nextElement(), MPSTreeNode.class); if (treeNode == null) { continue; } Object userObject = treeNode.getUserObject(); if (userObject instanceof DataNode) { BaseNodeData data = ((DataNode) userObject).getData(); if (data instanceof ModuleNodeData) { if (module.equals(((ModuleNodeData) data).getModuleReference())) { return treeNode; } } } } return null; } public class MyTreeSelectionListener implements TreeSelectionListener { private UsagesTree myTree; private DependenciesPanel myDependenciesComponent; public MyTreeSelectionListener(UsagesTree tree, DependenciesPanel parent) { myTree = tree; myDependenciesComponent = parent; } @Override public void valueChanged(TreeSelectionEvent event) { TreePath[] paths = myTree.getSelectionPaths(); if (paths == null || paths.length == 0) { return; } DependencyViewerScope scope = new DependencyViewerScope(getProject().getRepository()); for (TreePath path : paths) { MPSTreeNode node = (MPSTreeNode) path.getLastPathComponent(); Object userObject = node.getUserObject(); if (userObject instanceof DataNode) { BaseNodeData data = ((DataNode) userObject).getData(); if (data instanceof ModelNodeData) { scope.add(((ModelNodeData) data).getModelReference()); } if (data instanceof ModuleNodeData) { scope.add(((ModuleNodeData) data).getModuleReference()); } if (data instanceof NodeNodeData) { scope.add(((NodeNodeData) data).getNodePointer()); } } } myDependenciesComponent.updateReferencesView(scope); } } public class MyNodeRepresentator implements INodeRepresentator<SNode> { public MyNodeRepresentator() { } @Override public List<CategoryKind> getCategoryKinds() { return Collections.emptyList(); } @Override public Icon getCategoryIcon(String string) { return null; } @Override public String getCategoryText(TextOptions options, String string, boolean b) { return "Targets"; } @Override public Icon getResultsIcon() { return IdeIcons.REFERENCE_ICON; } @Override public String getResultsText(TextOptions options) { String presentation = myParent.getCurrentScope().getPresentation(); if ((presentation == null || presentation.length() == 0)) { presentation = "the left tree scope selection"; } return ((myParent.isMeta() ? "Used languages in " : "Dependencies of ")) + presentation; } @NotNull @Override public String getPresentation(SNode node) { return node.getPresentation(); } @Override public void read(Element element, jetbrains.mps.project.Project project) throws CantLoadSomethingException { } @Override public void write(Element element, jetbrains.mps.project.Project project) throws CantSaveSomethingException { } } private static <T> T as_w7qo2b_a0a0a2a3(Object o, Class<T> type) { return (type.isInstance(o) ? (T) o : null); } }