List of usage examples for com.intellij.openapi.actionSystem.ex ComboBoxAction ComboBoxAction
protected ComboBoxAction()
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(); }