package jetbrains.mps.ide.platform.dependencyViewer; /*Generated by MPS */ import jetbrains.mps.ide.ui.tree.MPSTree; import jetbrains.mps.project.Project; import jetbrains.mps.ide.ui.tree.MPSTreeNode; import jetbrains.mps.ide.ui.tree.TextTreeNode; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.ide.ui.tree.module.ProjectModuleTreeNode; import jetbrains.mps.ide.ui.tree.smodel.SModelTreeNode; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.ide.ui.tree.smodel.SNodeTreeNode; import com.intellij.openapi.actionSystem.ActionGroup; import javax.swing.event.TreeSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreePath; import jetbrains.mps.ide.ui.tree.module.NamespaceTextNode; import jetbrains.mps.ide.ui.tree.smodel.PackageNode; import jetbrains.mps.smodel.ModelReadRunnable; public class DependencyTree extends MPSTree { private DependencyViewerScope myScope; private Project myProject; private DependenciesPanel myParent; public DependencyTree(DependenciesPanel parent) { myParent = parent; addTreeSelectionListener(new DependencyTree.MyTreeSelectionListener()); } @Override protected MPSTreeNode rebuild() { TextTreeNode root = new TextTreeNode("root"); for (SModule module : myScope.getModules()) { root.add(ProjectModuleTreeNode.createFor(myProject, module)); } SModelTreeNode.LongModelNameText modelText = new SModelTreeNode.LongModelNameText(); for (SModel model : myScope.getModels()) { root.add(new SModelTreeNode(model, modelText)); } for (SNode node : myScope.getRoots()) { root.add(new SNodeTreeNode(node, null)); } setRootVisible(false); setShowsRootHandles(true); return root; } @Override protected ActionGroup createPopupActionGroup(MPSTreeNode node) { return null; } public void setContent(DependencyViewerScope scope, Project project) { myScope = scope; myProject = project; rebuildLater(); } private class MyTreeSelectionListener implements TreeSelectionListener { public MyTreeSelectionListener() { } @Override public void valueChanged(TreeSelectionEvent event) { final TreePath[] paths = getSelectionPaths(); if (paths == null || paths.length == 0) { return; } final DependencyViewerScope scope = new DependencyViewerScope(myProject.getRepository()); myProject.getModelAccess().runReadAction(new Runnable() { public void run() { for (TreePath path : paths) { MPSTreeNode node = (MPSTreeNode) path.getLastPathComponent(); if (node instanceof SModelTreeNode) { scope.add(((SModelTreeNode) node).getModel()); } if (node instanceof ProjectModuleTreeNode) { scope.add(((ProjectModuleTreeNode) node).getModule()); } if (node instanceof SNodeTreeNode) { scope.add(((SNodeTreeNode) node).getSNode()); } if (node instanceof NamespaceTextNode) { for (SModule module : ((NamespaceTextNode) node).getModulesUnder()) { scope.add(module); } for (SModel model : ((NamespaceTextNode) node).getModelsUnder()) { scope.add(model); } } if (node instanceof PackageNode) { for (SNode nodeUnder : ((PackageNode) node).getNodesUnderPackage()) { scope.add(nodeUnder); } } } } }); myParent.updateTargetsView(scope); } } @Override protected void doInit(MPSTreeNode node, Runnable runnable) { super.doInit(node, new ModelReadRunnable(myProject.getRepository().getModelAccess(), runnable)); } }