Example usage for com.intellij.openapi.actionSystem.ex ComboBoxAction ComboBoxAction

List of usage examples for com.intellij.openapi.actionSystem.ex ComboBoxAction ComboBoxAction

Introduction

In this page you can find the example usage for com.intellij.openapi.actionSystem.ex ComboBoxAction ComboBoxAction.

Prototype

protected ComboBoxAction() 

Source Link

Usage

From source file:com.android.tools.idea.editors.allocations.AllocationsView.java

License:Apache License

private ActionGroup getMainActions() {
    DefaultActionGroup group = new DefaultActionGroup();

    group.add(new ComboBoxAction() {
        @NotNull//ww w.ja va 2s.c om
        @Override
        protected DefaultActionGroup createPopupActionGroup(JComponent button) {
            DefaultActionGroup group = new DefaultActionGroup();
            group.add(new ChangeGroupAction(GroupByMethod.NAME));
            group.add(new ChangeGroupAction(GroupByAllocator.NAME));
            return group;
        }

        @Override
        public void update(AnActionEvent e) {
            super.update(e);
            getTemplatePresentation().setText(myGroupBy.get(myGroupByName).getName());
            e.getPresentation().setText(myGroupBy.get(myGroupByName).getName());
        }
    });
    group.add(new EditMultipleSourcesAction());
    group.add(new ShowChartAction());
    group.add(new Separator());
    group.add(new BrowserHelpAction("Hprof Viewer",
            "http://developer.android.com/r/studio-ui/am-allocation.html"));

    return group;
}

From source file:com.android.tools.idea.editors.allocations.AllocationsView.java

License:Apache License

private ActionGroup getChartActions() {
    DefaultActionGroup group = new DefaultActionGroup();
    group.add(new ComboBoxAction() {
        @NotNull/*from   ww  w .jav  a  2  s  .c  o m*/
        @Override
        protected DefaultActionGroup createPopupActionGroup(JComponent button) {
            DefaultActionGroup group = new DefaultActionGroup();
            group.add(new AnAction("Sunburst") {
                @Override
                public void actionPerformed(AnActionEvent e) {
                    myChartOrientation = "Sunburst";
                    myLayout.setAngle(360.0f);
                }
            });
            group.add(new AnAction("Layout") {
                @Override
                public void actionPerformed(AnActionEvent e) {
                    myChartOrientation = "Layout";
                    myLayout.setAngle(0.0f);
                }
            });
            return group;
        }

        @Override
        public void update(AnActionEvent e) {
            super.update(e);
            getTemplatePresentation().setText(myChartOrientation);
            e.getPresentation().setText(myChartOrientation);
        }
    });
    group.add(new ComboBoxAction() {
        @NotNull
        @Override
        protected DefaultActionGroup createPopupActionGroup(JComponent button) {
            DefaultActionGroup group = new DefaultActionGroup();
            group.add(new AnAction("Size") {
                @Override
                public void actionPerformed(AnActionEvent e) {
                    myChartUnit = "Size";
                    myLayout.setUseCount(false);
                }
            });
            group.add(new AnAction("Count") {
                @Override
                public void actionPerformed(AnActionEvent e) {
                    myChartUnit = "Count";
                    myLayout.setUseCount(true);
                }
            });
            return group;
        }

        @Override
        public void update(AnActionEvent e) {
            super.update(e);
            getTemplatePresentation().setText(myChartUnit);
            e.getPresentation().setText(myChartUnit);
        }
    });
    return group;
}

From source file:com.android.tools.idea.editors.hprof.HprofView.java

License:Apache License

public HprofView(@NotNull Project project, @NotNull HprofEditor editor, @NotNull Snapshot snapshot) {
    JBPanel treePanel = new JBPanel(new BorderLayout());
    treePanel.setBackground(JBColor.background());

    mySnapshot = snapshot;//from ww  w  .  j  a v a  2s  .c  om

    assert (mySnapshot.getHeaps().size() > 0);
    Heap currentHeap = null;
    for (Heap heap : mySnapshot.getHeaps()) {
        if ("app".equals(heap.getName())) {
            currentHeap = heap;
            break;
        } else if (currentHeap == null) {
            currentHeap = heap;
        }
    }

    if (currentHeap == null) {
        editor.setInvalid();
        // TODO: Add a simple panel to show that the hprof file is invalid.
        throw new IllegalStateException("Invalid heap given to HprofViewPanel.");
    }
    mySelectionModel = new SelectionModel(currentHeap);
    Disposer.register(this, mySelectionModel);

    DefaultActionGroup group = new DefaultActionGroup(new ComboBoxAction() {
        @NotNull
        @Override
        protected DefaultActionGroup createPopupActionGroup(JComponent button) {
            DefaultActionGroup group = new DefaultActionGroup();
            assert mySnapshot != null;
            for (final Heap heap : mySnapshot.getHeaps()) {
                if ("default".equals(heap.getName()) && heap.getClasses().isEmpty()
                        && heap.getInstancesCount() == 0) {
                    continue;
                }
                group.add(new AnAction(StringUtil.capitalize(heap.getName() + " heap")) {
                    @Override
                    public void actionPerformed(AnActionEvent e) {
                        mySelectionModel.setHeap(heap);
                    }
                });
            }
            return group;
        }

        @Override
        public void update(AnActionEvent e) {
            super.update(e);
            if (mySnapshot != null) { // Perform a check since the IDE sometimes updates the buttons after the view/snapshot is disposed.
                getTemplatePresentation()
                        .setText(StringUtil.capitalize(mySelectionModel.getHeap().getName() + " heap"));
                e.getPresentation()
                        .setText(StringUtil.capitalize(mySelectionModel.getHeap().getName() + " heap"));
            }
        }
    });

    final InstanceReferenceTreeView referenceTree = new InstanceReferenceTreeView(project, mySelectionModel);
    treePanel.add(referenceTree.getComponent(), BorderLayout.CENTER);

    final InstancesTreeView instancesTreeView = new InstancesTreeView(project, mySelectionModel);
    Disposer.register(this, instancesTreeView);

    final ClassesTreeView classesTreeView = new ClassesTreeView(project, group, mySelectionModel);
    JBSplitter splitter = createNavigationSplitter(classesTreeView.getComponent(),
            instancesTreeView.getComponent());
    Disposer.register(this, classesTreeView);

    GoToInstanceListener goToInstanceListener = new GoToInstanceListener() {
        @Override
        public void goToInstance(@NotNull Instance instance) {
            ClassObj classObj = instance instanceof ClassObj ? (ClassObj) instance : instance.getClassObj();
            mySelectionModel.setHeap(instance.getHeap());
            mySelectionModel.setClassObj(classObj);
            classesTreeView.requestFocus();
            if (instance instanceof ClassInstance || instance instanceof ArrayInstance) {
                mySelectionModel.setInstance(instance);
                instancesTreeView.requestFocus();
            }
        }
    };
    referenceTree.addGoToInstanceListener(goToInstanceListener);
    instancesTreeView.addGoToInstanceListener(goToInstanceListener);

    JBPanel classPanel = new JBPanel(new BorderLayout());
    classPanel.add(splitter, BorderLayout.CENTER);

    JBSplitter mainSplitter = new JBSplitter(true);
    mainSplitter.setFirstComponent(classPanel);
    mainSplitter.setSecondComponent(treePanel);
    mainSplitter.setDividerWidth(DIVIDER_WIDTH);

    myContainer = new JPanel(new LightFillLayout());

    ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, true);
    toolbar.getComponent().setName(TOOLBAR_NAME);
    myContainer.add(toolbar.getComponent(), BorderLayout.NORTH);
    myContainer.add(mainSplitter);

    group.add(new Separator());
    group.add(new BrowserHelpAction("Hprof Viewer", "http://developer.android.com/r/studio-ui/am-hprof.html"));
}

From source file:com.android.tools.idea.editors.hprof.HprofViewPanel.java

License:Apache License

public HprofViewPanel(@NotNull final Project project, @NotNull HprofEditor editor,
        @NotNull final Snapshot snapshot) {
    JBPanel treePanel = new JBPanel(new BorderLayout());
    treePanel.setBackground(JBColor.background());

    assert (snapshot.getHeaps().size() > 0);
    Heap currentHeap = null;//from w w  w.  j a  va 2 s  .c o  m
    for (Heap heap : snapshot.getHeaps()) {
        if ("app".equals(heap.getName())) {
            currentHeap = heap;
            break;
        } else if (currentHeap == null) {
            currentHeap = heap;
        }
    }

    if (currentHeap == null) {
        editor.setInvalid();
        return;
    }
    mySelectionModel = new SelectionModel(currentHeap);

    final InstanceReferenceTree referenceTree = new InstanceReferenceTree(mySelectionModel);
    treePanel.add(referenceTree.getComponent(), BorderLayout.CENTER);

    final InstancesTree instancesTree = new InstancesTree(project, mySelectionModel);
    final ClassesTreeView classesTreeView = new ClassesTreeView(mySelectionModel);
    JBSplitter splitter = createNavigationSplitter(classesTreeView.getComponent(),
            instancesTree.getComponent());

    JBPanel classPanel = new JBPanel(new BorderLayout());
    classPanel.add(splitter, BorderLayout.CENTER);

    DefaultActionGroup group = new DefaultActionGroup(new ComboBoxAction() {
        @NotNull
        @Override
        protected DefaultActionGroup createPopupActionGroup(JComponent button) {
            DefaultActionGroup group = new DefaultActionGroup();
            for (final Heap heap : snapshot.getHeaps()) {
                if ("default".equals(heap.getName()) && heap.getClasses().isEmpty()
                        && heap.getInstances().isEmpty()) {
                    continue;
                }
                group.add(new AnAction(heap.getName() + " heap") {
                    @Override
                    public void actionPerformed(AnActionEvent e) {
                        mySelectionModel.setHeap(heap);
                    }
                });
            }
            return group;
        }

        @Override
        public void update(AnActionEvent e) {
            super.update(e);
            getTemplatePresentation().setText(mySelectionModel.getHeap().getName() + " heap");
            e.getPresentation().setText(mySelectionModel.getHeap().getName() + " heap");
        }
    });

    ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, true);
    classPanel.add(toolbar.getComponent(), BorderLayout.NORTH);

    JBSplitter mainSplitter = new JBSplitter(true);
    mainSplitter.setFirstComponent(classPanel);
    mainSplitter.setSecondComponent(treePanel);
    mainSplitter.setDividerWidth(DIVIDER_WIDTH);

    myContainer = new JPanel(new BorderLayout());
    myContainer.add(mainSplitter);
}

From source file:com.android.tools.idea.editors.hprof.views.ClassesTreeView.java

License:Apache License

public ClassesTreeView(@NotNull Project project, @NotNull DefaultActionGroup editorActionGroup,
        @NotNull final SelectionModel selectionModel) {
    myProject = project;/*w  w  w.  ja v  a  2  s .  c  o  m*/

    myRoot = new HeapPackageNode(null, "");
    myTreeModel = new DefaultTreeModel(myRoot);
    myTree = new Tree(myTreeModel);
    myTree.setName(TREE_NAME);
    myDisplayMode = DisplayMode.LIST;
    myTree.setRootVisible(false);
    myTree.setShowsRootHandles(false);
    myTree.setLargeModel(true);

    myTree.putClientProperty(DataManager.CLIENT_PROPERTY_DATA_PROVIDER, this);
    JBList contextActionList = new JBList(new EditMultipleSourcesAction());
    JBPopupFactory.getInstance().createListPopupBuilder(contextActionList);
    final DefaultActionGroup popupGroup = new DefaultActionGroup(new EditMultipleSourcesAction());
    myTree.addMouseListener(new PopupHandler() {
        @Override
        public void invokePopup(Component comp, int x, int y) {
            ActionManager.getInstance().createActionPopupMenu(ActionPlaces.UNKNOWN, popupGroup).getComponent()
                    .show(comp, x, y);
        }
    });

    editorActionGroup.addAction(new ComboBoxAction() {
        @NotNull
        @Override
        protected DefaultActionGroup createPopupActionGroup(JComponent button) {
            DefaultActionGroup group = new DefaultActionGroup();
            for (final DisplayMode mode : DisplayMode.values()) {
                group.add(new AnAction(mode.toString()) {
                    @Override
                    public void actionPerformed(AnActionEvent e) {
                        myDisplayMode = mode;
                        boolean isTreeMode = myDisplayMode == DisplayMode.TREE;
                        myTree.setShowsRootHandles(isTreeMode);
                        if (isTreeMode) {
                            myTreeIndex.buildTree(mySelectedHeapId);
                        } else {
                            myListIndex.buildList(myRoot);
                        }

                        restoreViewState(selectionModel);
                    }
                });
            }
            return group;
        }

        @Override
        public void update(AnActionEvent e) {
            super.update(e);
            getTemplatePresentation().setText(myDisplayMode.toString());
            e.getPresentation().setText(myDisplayMode.toString());
        }
    });

    myListIndex = new ListIndex();
    myTreeIndex = new TreeIndex();
    selectionModel.addListener(myListIndex); // Add list index first, since that always updates; and tree index depends on it.
    selectionModel.addListener(myTreeIndex);

    selectionModel.addListener(new SelectionModel.SelectionListener() {
        @Override
        public void onHeapChanged(@NotNull Heap heap) {
            mySelectedHeapId = heap.getId();

            assert myListIndex.myHeapId == mySelectedHeapId;
            if (myDisplayMode == DisplayMode.LIST) {
                myListIndex.buildList(myRoot);
            } else if (myDisplayMode == DisplayMode.TREE) {
                myTreeIndex.buildTree(mySelectedHeapId);
            }

            restoreViewState(selectionModel);
        }

        @Override
        public void onClassObjChanged(@Nullable ClassObj classObj) {
            TreeNode nodeToSelect = null;
            if (classObj != null) {
                nodeToSelect = findClassObjNode(classObj);
            }

            if (nodeToSelect != null) {
                TreePath pathToSelect = new TreePath(myTreeModel.getPathToRoot(nodeToSelect));
                myTree.setSelectionPath(pathToSelect);
                myTree.scrollPathToVisible(pathToSelect);
            }
        }

        @Override
        public void onInstanceChanged(@Nullable Instance instance) {

        }
    });

    myTree.addTreeSelectionListener(e -> {
        TreePath path = e.getPath();
        if (!e.isAddedPath()) {
            return;
        }

        if (path == null || path.getPathCount() < 2) {
            selectionModel.setClassObj(null);
            return;
        }

        assert path.getLastPathComponent() instanceof HeapNode;
        HeapNode heapNode = (HeapNode) path.getLastPathComponent();
        if (heapNode instanceof HeapClassObjNode) {
            selectionModel.setClassObj(((HeapClassObjNode) heapNode).getClassObj());
        }
    });

    ColumnTreeBuilder builder = new ColumnTreeBuilder(myTree)
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Class Name").setPreferredWidth(800)
                    .setHeaderAlignment(SwingConstants.LEFT).setComparator((HeapNode a, HeapNode b) -> {
                        int valueA = a instanceof HeapPackageNode ? 0 : 1;
                        int valueB = b instanceof HeapPackageNode ? 0 : 1;
                        if (valueA != valueB) {
                            return valueA - valueB;
                        }
                        return compareNames(a, b);
                    }).setRenderer(new ColoredTreeCellRenderer() {
                        @Override
                        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected,
                                boolean expanded, boolean leaf, int row, boolean hasFocus) {
                            if (value instanceof HeapClassObjNode) {
                                ClassObj clazz = ((HeapClassObjNode) value).getClassObj();
                                String name = clazz.getClassName();
                                String pkg = null;
                                int i = name.lastIndexOf(".");
                                if (i != -1) {
                                    pkg = name.substring(0, i);
                                    name = name.substring(i + 1);
                                }
                                append(name, SimpleTextAttributes.REGULAR_ATTRIBUTES);
                                if (pkg != null) {
                                    append(" (" + pkg + ")",
                                            new SimpleTextAttributes(Font.PLAIN, JBColor.GRAY));
                                }
                                setTransparentIconBackground(true);
                                setIcon(PlatformIcons.CLASS_ICON);
                                // TODO reformat anonymous classes (ANONYMOUS_CLASS_ICON) to match IJ.
                            } else if (value instanceof HeapNode) {
                                append(((HeapNode) value).getSimpleName(),
                                        SimpleTextAttributes.REGULAR_ATTRIBUTES);
                                setTransparentIconBackground(true);
                                setIcon(PlatformIcons.PACKAGE_ICON);
                            } else {
                                append("This should not be rendered");
                            }
                        }
                    }))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Total Count").setPreferredWidth(100)
                    .setHeaderAlignment(SwingConstants.RIGHT).setComparator((HeapNode a, HeapNode b) -> {
                        int result = a.getTotalCount() - b.getTotalCount();
                        return result == 0 ? compareNames(a, b) : result;
                    }).setRenderer(new ColoredTreeCellRenderer() {
                        @Override
                        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected,
                                boolean expanded, boolean leaf, int row, boolean hasFocus) {
                            if (value instanceof HeapNode) {
                                append(Integer.toString(((HeapNode) value).getTotalCount()));
                            }
                            setTextAlign(SwingConstants.RIGHT);
                        }
                    }))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Heap Count").setPreferredWidth(100)
                    .setHeaderAlignment(SwingConstants.RIGHT).setComparator((HeapNode a, HeapNode b) -> {
                        int result = a.getHeapInstancesCount(mySelectedHeapId)
                                - b.getHeapInstancesCount(mySelectedHeapId);
                        return result == 0 ? compareNames(a, b) : result;
                    }).setRenderer(new ColoredTreeCellRenderer() {
                        @Override
                        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected,
                                boolean expanded, boolean leaf, int row, boolean hasFocus) {
                            if (value instanceof HeapNode) {
                                append(Integer
                                        .toString(((HeapNode) value).getHeapInstancesCount(mySelectedHeapId)));
                            }
                            setTextAlign(SwingConstants.RIGHT);
                        }
                    }))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Sizeof").setPreferredWidth(80)
                    .setHeaderAlignment(SwingConstants.RIGHT).setComparator((HeapNode a, HeapNode b) -> {
                        int sizeA = a.getInstanceSize();
                        int sizeB = b.getInstanceSize();
                        if (sizeA < 0 && sizeB < 0) {
                            return compareNames(a, b);
                        }
                        int result = sizeA - sizeB;
                        return result == 0 ? compareNames(a, b) : result;
                    }).setRenderer(new ColoredTreeCellRenderer() {
                        @Override
                        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected,
                                boolean expanded, boolean leaf, int row, boolean hasFocus) {
                            if (value instanceof HeapClassObjNode) {
                                append(Integer.toString(((HeapClassObjNode) value).getInstanceSize()));
                            }
                            setTextAlign(SwingConstants.RIGHT);
                        }
                    }))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Shallow Size").setPreferredWidth(100)
                    .setHeaderAlignment(SwingConstants.RIGHT).setComparator((HeapNode a, HeapNode b) -> {
                        int result = a.getShallowSize(mySelectedHeapId) - b.getShallowSize(mySelectedHeapId);
                        return result == 0 ? compareNames(a, b) : result;
                    }).setRenderer(new ColoredTreeCellRenderer() {
                        @Override
                        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected,
                                boolean expanded, boolean leaf, int row, boolean hasFocus) {
                            if (value instanceof HeapNode) {
                                append(Integer.toString(((HeapNode) value).getShallowSize(mySelectedHeapId)));
                            }
                            setTextAlign(SwingConstants.RIGHT);
                        }
                    }))
            .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Retained Size").setPreferredWidth(120)
                    .setHeaderAlignment(SwingConstants.RIGHT).setInitialOrder(SortOrder.DESCENDING)
                    .setComparator((HeapNode a, HeapNode b) -> {
                        long result = a.getRetainedSize() - b.getRetainedSize();
                        return result == 0 ? compareNames(a, b) : (result > 0 ? 1 : -1);
                    }).setRenderer(new ColoredTreeCellRenderer() {
                        @Override
                        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected,
                                boolean expanded, boolean leaf, int row, boolean hasFocus) {
                            if (value instanceof HeapNode) {
                                append(Long.toString(((HeapNode) value).getRetainedSize()));
                            }
                            setTextAlign(SwingConstants.RIGHT);
                        }
                    }));

    //noinspection NullableProblems
    builder.setTreeSorter(new ColumnTreeBuilder.TreeSorter<HeapNode>() {
        @Override
        public void sort(@NotNull Comparator<HeapNode> comparator, @NotNull SortOrder sortOrder) {
            if (myComparator != comparator) {
                myComparator = comparator;

                selectionModel.setSelectionLocked(true);
                TreePath selectionPath = myTree.getSelectionPath();
                sortTree(myRoot);
                myTreeModel.nodeStructureChanged(myRoot);
                myTree.setSelectionPath(selectionPath);
                myTree.scrollPathToVisible(selectionPath);
                selectionModel.setSelectionLocked(false);
            }
        }
    });

    myColumnTree = builder.build();
    installTreeSpeedSearch();
}