Search in sources :

Example 31 with Tree

use of com.intellij.ui.treeStructure.Tree in project azure-tools-for-java by Microsoft.

the class ServerExplorerToolWindowFactory method getTreeNodeOnMouseClick.

@Nullable
private Node getTreeNodeOnMouseClick(JTree tree, TreePath treePath) {
    final Object raw = treePath.getLastPathComponent();
    if (raw instanceof com.microsoft.azure.toolkit.intellij.common.component.Tree.TreeNode || raw instanceof LoadingNode) {
        return null;
    }
    SortableTreeNode treeNode = (SortableTreeNode) raw;
    Node node = (Node) treeNode.getUserObject();
    // set tree and tree path to expand the node later
    node.setTree(tree);
    node.setTreePath(treePath);
    return node;
}
Also used : RefreshableNode(com.microsoft.tooling.msservices.serviceexplorer.RefreshableNode) LoadingNode(com.intellij.ui.LoadingNode) MutableTreeNode(javax.swing.tree.MutableTreeNode) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) Node(com.microsoft.tooling.msservices.serviceexplorer.Node) Tree(com.intellij.ui.treeStructure.Tree) LoadingNode(com.intellij.ui.LoadingNode) Nullable(org.jetbrains.annotations.Nullable)

Example 32 with Tree

use of com.intellij.ui.treeStructure.Tree in project android by JetBrains.

the class ApkDiffPanel method createUIComponents.

private void createUIComponents() {
    myTreeModel = new DefaultTreeModel(new LoadingNode());
    myTree = new Tree(myTreeModel);
    myTree.setShowsRootHandles(true);
    // show root node only when showing LoadingNode
    myTree.setRootVisible(true);
    myTree.setPaintBusy(true);
    Convertor<TreePath, String> convertor = new Convertor<TreePath, String>() {

        @Override
        public String convert(TreePath path) {
            ApkEntry e = ApkEntry.fromNode(path.getLastPathComponent());
            if (e == null) {
                return null;
            }
            return e.getPath();
        }
    };
    TreeSpeedSearch treeSpeedSearch = new TreeSpeedSearch(myTree, convertor, true);
    ColumnTreeBuilder builder = new ColumnTreeBuilder(myTree).addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("File").setPreferredWidth(600).setHeaderAlignment(SwingConstants.LEADING).setRenderer(new NameRenderer(treeSpeedSearch))).addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Old Size").setPreferredWidth(150).setHeaderAlignment(SwingConstants.TRAILING).setRenderer(new SizeRenderer(ApkDiffEntry::getOldSize))).addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("New Size").setPreferredWidth(150).setHeaderAlignment(SwingConstants.TRAILING).setRenderer(new SizeRenderer(ApkDiffEntry::getNewSize))).addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Diff Size").setPreferredWidth(150).setHeaderAlignment(SwingConstants.TRAILING).setRenderer(new SizeRenderer(ApkEntry::getSize)));
    myColumnTreePane = (JScrollPane) builder.build();
}
Also used : SizeRenderer(com.android.tools.idea.apk.viewer.ApkViewPanel.SizeRenderer) NameRenderer(com.android.tools.idea.apk.viewer.ApkViewPanel.NameRenderer) TreeSpeedSearch(com.intellij.ui.TreeSpeedSearch) LoadingNode(com.intellij.ui.LoadingNode) ApkEntry(com.android.tools.idea.apk.viewer.ApkEntry) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) Convertor(com.intellij.util.containers.Convertor) TreePath(javax.swing.tree.TreePath) ColumnTreeBuilder(com.android.tools.adtui.common.ColumnTreeBuilder) Tree(com.intellij.ui.treeStructure.Tree)

Example 33 with Tree

use of com.intellij.ui.treeStructure.Tree in project android by JetBrains.

the class ColumnTreeBuilderTest method testTreeFillsViewportIfSmallerThanViewport.

@Test
public void testTreeFillsViewportIfSmallerThanViewport() throws Exception {
    // Prepare
    DefaultTreeModel treeModel = new DefaultTreeModel(new LoadingNode());
    Tree tree = new Tree(treeModel);
    ColumnTreeBuilder builder = new ColumnTreeBuilder(tree).addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("A").setPreferredWidth(30).setHeaderAlignment(SwingConstants.LEADING).setRenderer(new MyEmptyRenderer())).addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("B").setPreferredWidth(60).setHeaderAlignment(SwingConstants.TRAILING).setRenderer(new MyEmptyRenderer()));
    JScrollPane columnTreePane = (JScrollPane) builder.build();
    columnTreePane.setPreferredSize(new Dimension(100, 100));
    assertThat(tree.getHeight()).isEqualTo(0);
    // Act: Simulate layout
    columnTreePane.setSize(new Dimension(100, 100));
    columnTreePane.doLayout();
    columnTreePane.getViewport().doLayout();
    columnTreePane.getViewport().getView().doLayout();
    // Assert: Check the tree height has been extended to the whole viewport
    assertThat(tree.getHeight()).isGreaterThan(0);
    assertThat(tree.getHeight()).isEqualTo(columnTreePane.getViewport().getHeight());
}
Also used : Tree(com.intellij.ui.treeStructure.Tree) LoadingNode(com.intellij.ui.LoadingNode) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) Test(org.junit.Test)

Example 34 with Tree

use of com.intellij.ui.treeStructure.Tree in project android by JetBrains.

the class GradleToolWindowFixture method runTask.

public void runTask(@NotNull final String taskName) {
    Content content = getContent("projects");
    final Tree tasksTree = findComponentOfType(content.getComponent(), Tree.class);
    Wait.seconds(1).expecting("tree to be populated").until(() -> !tasksTree.isEmpty() && !field("myBusy").ofType(boolean.class).in(tasksTree).get());
    execute(new GuiTask() {

        @Override
        protected void executeInEDT() throws Throwable {
            expandAll(tasksTree);
        }
    });
    Object root = tasksTree.getModel().getRoot();
    final TreePath treePath = findTaskPath((DefaultMutableTreeNode) root, taskName);
    Point clickLocation = GuiQuery.getNonNull(() -> {
        // We store screen location here because it shows weird (negative) values after 'scrollPathToVisible()' is called.
        Point locationOnScreen = tasksTree.getLocationOnScreen();
        tasksTree.expandPath(treePath.getParentPath());
        tasksTree.scrollPathToVisible(treePath);
        Rectangle bounds = tasksTree.getPathBounds(treePath);
        // Make sure we are not under the horizontal scroll bar
        bounds.translate(0, bounds.height / 2);
        tasksTree.scrollRectToVisible(bounds);
        Rectangle visibleRect = tasksTree.getVisibleRect();
        return new Point(locationOnScreen.x + bounds.x + bounds.width / 2 - visibleRect.x, locationOnScreen.y + bounds.y - visibleRect.y);
    });
    myRobot.click(clickLocation, LEFT_BUTTON, 2);
}
Also used : GuiTask(org.fest.swing.edt.GuiTask) TreePath(javax.swing.tree.TreePath) Content(com.intellij.ui.content.Content) Tree(com.intellij.ui.treeStructure.Tree)

Example 35 with Tree

use of com.intellij.ui.treeStructure.Tree in project android by JetBrains.

the class MemoryClassView method ensureTreeInitialized.

private void ensureTreeInitialized(@NotNull JPanel parentPanel, @NotNull HeapObject heapObject) {
    if (myClassesTree != null) {
        assert myClassesTreeModel != null && myClassesTreeRoot != null;
        return;
    }
    myClassesTreeRoot = new MemoryObjectTreeNode<>(new ClassObject() {

        @NotNull
        @Override
        public List<InstanceAttribute> getInstanceAttributes() {
            return Collections.emptyList();
        }
    });
    myClassesTreeModel = new DefaultTreeModel(myClassesTreeRoot);
    JTree tree = new Tree(myClassesTreeModel);
    tree.setRootVisible(false);
    tree.setShowsRootHandles(true);
    tree.addTreeSelectionListener(e -> {
        TreePath path = e.getPath();
        if (!e.isAddedPath()) {
            return;
        }
        assert path.getLastPathComponent() instanceof MemoryObjectTreeNode;
        MemoryObjectTreeNode classObject = (MemoryObjectTreeNode) path.getLastPathComponent();
        assert classObject.getAdapter() instanceof ClassObject;
        myStage.selectClass((ClassObject) classObject.getAdapter());
    });
    List<HeapObject.ClassAttribute> attributes = heapObject.getClassAttributes();
    ColumnTreeBuilder builder = new ColumnTreeBuilder(tree);
    for (ClassAttribute attribute : attributes) {
        builder.addColumn(myAttributeColumns.get(attribute).getBuilder());
    }
    builder.setTreeSorter((Comparator<MemoryObjectTreeNode<ClassObject>> comparator, SortOrder sortOrder) -> {
        myClassesTreeRoot.sort(comparator);
        myClassesTreeModel.nodeStructureChanged(myClassesTreeRoot);
    });
    builder.setBackground(ProfilerColors.MONITOR_BACKGROUND);
    myClassesTree = builder.build();
    parentPanel.add(myClassesTree, BorderLayout.CENTER);
}
Also used : ClassObject(com.android.tools.profilers.memory.adapters.ClassObject) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) Comparator(java.util.Comparator) ClassAttribute(com.android.tools.profilers.memory.adapters.HeapObject.ClassAttribute) TreePath(javax.swing.tree.TreePath) ColumnTreeBuilder(com.android.tools.adtui.common.ColumnTreeBuilder) Tree(com.intellij.ui.treeStructure.Tree)

Aggregations

Tree (com.intellij.ui.treeStructure.Tree)63 DefaultMutableTreeNode (javax.swing.tree.DefaultMutableTreeNode)23 DefaultTreeModel (javax.swing.tree.DefaultTreeModel)22 TreePath (javax.swing.tree.TreePath)21 JBScrollPane (com.intellij.ui.components.JBScrollPane)11 MouseEvent (java.awt.event.MouseEvent)11 KeyEvent (java.awt.event.KeyEvent)10 TreeSelectionListener (javax.swing.event.TreeSelectionListener)10 TreeSpeedSearch (com.intellij.ui.TreeSpeedSearch)9 KeyAdapter (java.awt.event.KeyAdapter)9 TreeSelectionEvent (javax.swing.event.TreeSelectionEvent)9 NotNull (org.jetbrains.annotations.NotNull)9 List (java.util.List)7 TreeNode (javax.swing.tree.TreeNode)7 Nullable (org.jetbrains.annotations.Nullable)7 ColumnTreeBuilder (com.android.tools.adtui.common.ColumnTreeBuilder)6 ActionEvent (java.awt.event.ActionEvent)5 ActionListener (java.awt.event.ActionListener)5 NodeRenderer (com.intellij.ide.util.treeView.NodeRenderer)4 ComboBox (com.intellij.openapi.ui.ComboBox)4