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);
}
}