Search in sources :

Example 61 with DefaultMutableTreeNode

use of javax.swing.tree.DefaultMutableTreeNode in project intellij-plugins by StepicOrg.

the class NavigationUtils method collapseNonSelected.

private static void collapseNonSelected(@NotNull PsiFileSystemItem file) {
    ProjectView projectView = ProjectView.getInstance(file.getProject());
    if (projectView == null) {
        return;
    }
    AbstractProjectViewPane projectViewPane = projectView.getCurrentProjectViewPane();
    if (projectViewPane == null) {
        return;
    }
    JTree tree = projectViewPane.getTree();
    Set<TreePath> paths = new HashSet<>(TreeUtil.collectExpandedPaths(tree));
    DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
    DefaultMutableTreeNode selectionNode = findNodeWithObject(root, file);
    if (selectionNode != null) {
        List<TreePath> toCollapse = new ArrayList<>();
        TreePath selectedPath = getPathFromRoot(selectionNode);
        for (TreePath treePath : paths) {
            if (treePath.isDescendant(selectedPath)) {
                continue;
            }
            TreePath currPath = treePath;
            TreePath parent = treePath.getParentPath();
            while (parent != null) {
                if (parent.isDescendant(selectedPath)) {
                    toCollapse.add(currPath);
                    break;
                }
                currPath = parent;
                parent = parent.getParentPath();
            }
        }
        for (TreePath path : toCollapse) {
            tree.collapsePath(path);
            tree.fireTreeCollapsed(path);
        }
    }
}
Also used : TreePath(javax.swing.tree.TreePath) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) ArrayList(java.util.ArrayList) ProjectView(com.intellij.ide.projectView.ProjectView) AbstractProjectViewPane(com.intellij.ide.projectView.impl.AbstractProjectViewPane) HashSet(java.util.HashSet)

Example 62 with DefaultMutableTreeNode

use of javax.swing.tree.DefaultMutableTreeNode in project intellij-plugins by StepicOrg.

the class NavigationUtils method findNodeWithObject.

@Nullable
private static DefaultMutableTreeNode findNodeWithObject(@NotNull TreeNode root, PsiFileSystemItem file) {
    for (int i = 0; i < root.getChildCount(); i++) {
        TreeNode child = root.getChildAt(i);
        if (child instanceof DefaultMutableTreeNode) {
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) child;
            Object userObject = node.getUserObject();
            if (userObject instanceof PsiDirectoryNode) {
                PsiDirectoryNode directoryNode = (PsiDirectoryNode) userObject;
                PsiDirectory value = directoryNode.getValue();
                if (file.equals(value)) {
                    return node;
                }
            }
            node = findNodeWithObject(child, file);
            if (node != null) {
                return node;
            }
        }
    }
    return null;
}
Also used : DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) PsiDirectory(com.intellij.psi.PsiDirectory) PsiDirectoryNode(com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode) Nullable(org.jetbrains.annotations.Nullable)

Example 63 with DefaultMutableTreeNode

use of javax.swing.tree.DefaultMutableTreeNode in project intellij-community by JetBrains.

the class MavenSelectProjectPopup method attachToButton.

public static void attachToButton(@NotNull final MavenProjectsManager projectsManager, @NotNull final JButton button, @NotNull final Consumer<MavenProject> callback) {
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            List<MavenProject> projectList = projectsManager.getProjects();
            if (projectList.isEmpty()) {
                JBPopupFactory.getInstance().createMessage("Maven projects not found").showUnderneathOf(button);
                return;
            }
            DefaultMutableTreeNode root = buildTree(projectList);
            final Map<MavenProject, String> projectsNameMap = MavenProjectNamer.generateNameMap(projectList);
            final Tree projectTree = new Tree(root);
            projectTree.setRootVisible(false);
            projectTree.setCellRenderer(new NodeRenderer() {

                @Override
                public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
                    if (value instanceof DefaultMutableTreeNode) {
                        MavenProject mavenProject = (MavenProject) ((DefaultMutableTreeNode) value).getUserObject();
                        value = projectsNameMap.get(mavenProject);
                        setIcon(MavenIcons.MavenProject);
                    }
                    super.customizeCellRenderer(tree, value, selected, expanded, leaf, row, hasFocus);
                }
            });
            new TreeSpeedSearch(projectTree, new Convertor<TreePath, String>() {

                @Override
                public String convert(TreePath o) {
                    Object lastPathComponent = o.getLastPathComponent();
                    if (!(lastPathComponent instanceof DefaultMutableTreeNode))
                        return null;
                    Object userObject = ((DefaultMutableTreeNode) lastPathComponent).getUserObject();
                    //noinspection SuspiciousMethodCalls
                    return projectsNameMap.get(userObject);
                }
            });
            final Ref<JBPopup> popupRef = new Ref<>();
            final Runnable clickCallBack = () -> {
                TreePath path = projectTree.getSelectionPath();
                if (path == null)
                    return;
                Object lastPathComponent = path.getLastPathComponent();
                if (!(lastPathComponent instanceof DefaultMutableTreeNode))
                    return;
                Object object = ((DefaultMutableTreeNode) lastPathComponent).getUserObject();
                // may be it's the root
                if (object == null)
                    return;
                callback.consume((MavenProject) object);
                popupRef.get().closeOk(null);
            };
            projectTree.addKeyListener(new KeyAdapter() {

                @Override
                public void keyPressed(KeyEvent e) {
                    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                        clickCallBack.run();
                        e.consume();
                    }
                }
            });
            JBPopup popup = new PopupChooserBuilder(projectTree).setTitle("Select maven project").setResizable(true).setItemChoosenCallback(clickCallBack).setAutoselectOnMouseMove(true).setCloseOnEnter(false).createPopup();
            popupRef.set(popup);
            popup.showUnderneathOf(button);
        }

        private DefaultMutableTreeNode buildTree(List<MavenProject> projectList) {
            MavenProject[] projects = projectList.toArray(new MavenProject[projectList.size()]);
            Arrays.sort(projects, new MavenProjectNamer.MavenProjectComparator());
            Map<MavenProject, DefaultMutableTreeNode> projectsToNode = new HashMap<>();
            for (MavenProject mavenProject : projects) {
                projectsToNode.put(mavenProject, new DefaultMutableTreeNode(mavenProject));
            }
            DefaultMutableTreeNode root = new DefaultMutableTreeNode();
            for (MavenProject mavenProject : projects) {
                DefaultMutableTreeNode parent;
                MavenProject aggregator = projectsManager.findAggregator(mavenProject);
                if (aggregator != null) {
                    parent = projectsToNode.get(aggregator);
                } else {
                    parent = root;
                }
                parent.add(projectsToNode.get(mavenProject));
            }
            return root;
        }
    });
}
Also used : DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) ActionEvent(java.awt.event.ActionEvent) TreeSpeedSearch(com.intellij.ui.TreeSpeedSearch) KeyAdapter(java.awt.event.KeyAdapter) Convertor(com.intellij.util.containers.Convertor) NodeRenderer(com.intellij.ide.util.treeView.NodeRenderer) KeyEvent(java.awt.event.KeyEvent) Ref(com.intellij.openapi.util.Ref) ActionListener(java.awt.event.ActionListener) MavenProject(org.jetbrains.idea.maven.project.MavenProject) TreePath(javax.swing.tree.TreePath) Tree(com.intellij.ui.treeStructure.Tree) List(java.util.List) PopupChooserBuilder(com.intellij.openapi.ui.popup.PopupChooserBuilder) JBPopup(com.intellij.openapi.ui.popup.JBPopup) HashMap(java.util.HashMap) Map(java.util.Map)

Example 64 with DefaultMutableTreeNode

use of javax.swing.tree.DefaultMutableTreeNode in project intellij-community by JetBrains.

the class ComponentTree method extractComponent.

@Nullable
public RadComponent extractComponent(Object value) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
    Object userObject = node.getUserObject();
    if (myDesigner != null && userObject instanceof TreeNodeDescriptor) {
        TreeNodeDescriptor descriptor = (TreeNodeDescriptor) userObject;
        Object element = descriptor.getElement();
        if (element instanceof RadComponent) {
            return (RadComponent) element;
        }
    }
    return null;
}
Also used : DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) RadComponent(com.intellij.designer.model.RadComponent) Nullable(org.jetbrains.annotations.Nullable)

Example 65 with DefaultMutableTreeNode

use of javax.swing.tree.DefaultMutableTreeNode in project intellij-community by JetBrains.

the class GeneratedStructureModel method getFilteredChildren.

private static List getFilteredChildren(DefaultMutableTreeNode node, boolean checkOnly) {
    if (node.getChildCount() == 0) {
        return Collections.emptyList();
    }
    final List<DefaultMutableTreeNode> nodes = checkOnly ? new SmartList<>() : new ArrayList<>(node.getChildCount());
    DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getFirstChild();
    while (child != null) {
        if (child instanceof StructureNode) {
            final OutputEventQueue.NodeEvent event = (OutputEventQueue.NodeEvent) child.getUserObject();
            if (event != null && event.getType() == OutputEventQueue.CHARACTERS) {
                if (event.getValue().trim().length() == 0) {
                    child = child.getNextSibling();
                    continue;
                }
            }
        }
        nodes.add(child);
        if (checkOnly)
            return nodes;
        child = child.getNextSibling();
    }
    return nodes;
}
Also used : DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) OutputEventQueue(org.intellij.plugins.xsltDebugger.rt.engine.OutputEventQueue)

Aggregations

DefaultMutableTreeNode (javax.swing.tree.DefaultMutableTreeNode)692 TreePath (javax.swing.tree.TreePath)185 DefaultTreeModel (javax.swing.tree.DefaultTreeModel)98 ArrayList (java.util.ArrayList)51 Nullable (org.jetbrains.annotations.Nullable)50 TreeNode (javax.swing.tree.TreeNode)42 Test (org.junit.Test)39 JTree (javax.swing.JTree)38 NotNull (org.jetbrains.annotations.NotNull)32 VirtualFile (com.intellij.openapi.vfs.VirtualFile)28 JScrollPane (javax.swing.JScrollPane)25 TreeSelectionEvent (javax.swing.event.TreeSelectionEvent)23 TreeSelectionListener (javax.swing.event.TreeSelectionListener)23 Module (com.intellij.openapi.module.Module)20 File (java.io.File)20 Tree (com.intellij.ui.treeStructure.Tree)19 Enumeration (java.util.Enumeration)19 MouseEvent (java.awt.event.MouseEvent)18 IOException (java.io.IOException)17 MProduct (org.compiere.model.MProduct)17