List of usage examples for com.intellij.openapi.ui.popup JBPopupFactory getInstance
public static JBPopupFactory getInstance()
From source file:SelectorChapekAction.java
License:Apache License
private void showInfoDialog(String text, AnActionEvent e) { StatusBar statusBar = WindowManager.getInstance() .getStatusBar(DataKeys.PROJECT.getData(e.getDataContext())); if (statusBar != null) { JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(text, MessageType.INFO, null) .setFadeoutTime(10000).createBalloon() .show(RelativePoint.getCenterOf(statusBar.getComponent()), Balloon.Position.atRight); }//from w ww .j a v a 2s.c o m }
From source file:SelectorChapekAction.java
License:Apache License
private void showErrorDialog(String text, AnActionEvent e) { StatusBar statusBar = WindowManager.getInstance() .getStatusBar(DataKeys.PROJECT.getData(e.getDataContext())); if (statusBar != null) { JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(text, MessageType.ERROR, null) .setFadeoutTime(10000).createBalloon() .show(RelativePoint.getCenterOf(statusBar.getComponent()), Balloon.Position.atRight); }/*from ww w.ja v a 2 s . c o m*/ }
From source file:altn8.filechooser.AlternateFilePopupChooser.java
License:Apache License
/** * Let user choose from a list of files and do something with it. If only one item is present, the file will be processed * directly without user prompt. Nothing happens with an emtpy list. * * @param title Popup's title/*from w w w .ja v a2s . com*/ * @param fileGroups List of fileGroups * @param currentProject * @param fileHandler FileHandler to process choosed files */ public static void prompt(String title, List<AlternateFileGroup> fileGroups, Project currentProject, final FileHandler fileHandler) { if (fileGroups != null && !fileGroups.isEmpty()) { // if we have only one group with 1 file... if (fileGroups.size() == 1 && fileGroups.get(0).getFiles().size() == 1) { // ...then open file directly fileHandler.processFile(fileGroups.get(0).getFiles().get(0)); } else { // let user choose... // list of Objects for out JList List<Object> list = new ArrayList<Object>(); // if we have only 1 group, we dont show title, just adding all PsiFiles if (fileGroups.size() == 1) { list.addAll(fileGroups.get(0).getFiles()); } else { // go thru all groups for (AlternateFileGroup fileGroup : fileGroups) { // add basefilename (will be presented as title) and all files list.add(fileGroup.getGroupTitle()); list.addAll(fileGroup.getFiles()); } } final JList valueList = new JList(list.toArray()); valueList.setCellRenderer(new AlternateCellRenderer(currentProject)); valueList.setSelectionModel(new AlternateListSelectionModel(list)); PopupChooserBuilder listPopupBuilder = JBPopupFactory.getInstance() .createListPopupBuilder(valueList); listPopupBuilder.setTitle(title); listPopupBuilder.setItemChoosenCallback(new Runnable() { public void run() { for (Object item : valueList.getSelectedValues()) { if (item instanceof PsiFile) { fileHandler.processFile((PsiFile) item); } } } }); listPopupBuilder.createPopup().showCenteredInCurrentWindow(currentProject); } } }
From source file:ch.mjava.intellij.PluginHelper.java
License:Apache License
public static void showErrorBalloonWith(String message, DataContext dataContext) { StatusBar statusBar = WindowManager.getInstance().getStatusBar(DataKeys.PROJECT.getData(dataContext)); JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(message, MessageType.ERROR, null) .setFadeoutTime(5000).createBalloon() .show(RelativePoint.getCenterOf(statusBar.getComponent()), Balloon.Position.atRight); }
From source file:com.android.tools.idea.actions.EditMultipleSourcesAction.java
License:Apache License
@Override public void actionPerformed(AnActionEvent e) { Project project = e.getData(CommonDataKeys.PROJECT); assert project != null; final Navigatable[] files = e.getData(CommonDataKeys.NAVIGATABLE_ARRAY); assert files != null && files.length > 0; if (files.length > 1) { DefaultListModel listModel = new DefaultListModel(); for (int i = 0; i < files.length; ++i) { assert files[i] instanceof PsiClassNavigation; //noinspection unchecked listModel.add(i, ((PsiClassNavigation) files[i]).getPsiFile()); }//from w w w. j a v a2s.c om final JBList list = new JBList(listModel); int width = WindowManager.getInstance().getFrame(project).getSize().width; list.setCellRenderer(new GotoFileCellRenderer(width)); JBPopup popup = JBPopupFactory.getInstance().createListPopupBuilder(list).setTitle("Choose Target File") .setItemChoosenCallback(new Runnable() { @Override public void run() { Object selectedValue = list.getSelectedValue(); PsiClassNavigation navigationWrapper = null; for (Navigatable file : files) { if (selectedValue == ((PsiClassNavigation) file).getPsiFile()) { navigationWrapper = (PsiClassNavigation) file; break; } } assert navigationWrapper != null; if (navigationWrapper.canNavigate()) { navigationWrapper.navigate(true); } } }).createPopup(); if (e.getInputEvent().getSource() instanceof ActionButton) { popup.showUnderneathOf((ActionButton) e.getInputEvent().getSource()); } else { popup.showInBestPositionFor(e.getDataContext()); } } else { assert files[0] instanceof PsiClassNavigation; PsiClassNavigation file = (PsiClassNavigation) files[0]; if (file.canNavigate()) { file.navigate(true); } } }
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;//from w w w.j a v a 2s .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(); }
From source file:com.android.tools.idea.editors.hprof.views.InstanceReferenceTreeView.java
License:Apache License
public InstanceReferenceTreeView(@NotNull Project project, @NotNull SelectionModel selectionModel) { myProject = project;/*from ww w . ja va 2s . co m*/ final TreeBuilder model = new TreeBuilder(null) { @Override public void buildChildren(TreeBuilderNode node) { if (node == getRoot()) { node.add(new InstanceNode(this, myInstance)); } else { addReferences((InstanceNode) node); } nodeChanged(node); } @Override public boolean isExpandable(TreeBuilderNode node) { if (node == getRoot()) { return node.getChildCount() > 0; } else { Instance instance = (Instance) node.getUserObject(); return instance.getHardReverseReferences().size() > 0 || instance.getSoftReverseReferences() != null; } } }; // Set the root to a dummy object since the TreeBuilder implementation is very buggy. model.setRoot(new TreeBuilderNode(null) { @Override protected TreeBuilder getTreeBuilder() { return model; } }); myTree = new Tree(model); myTree.setName(TREE_NAME); myTree.setRootVisible(false); myTree.setShowsRootHandles(true); myTree.setLargeModel(true); myTree.addTreeExpansionListener(new TreeExpansionListener() { private boolean myIsCurrentlyExpanding = false; @Override public void treeExpanded(TreeExpansionEvent event) { if (myIsCurrentlyExpanding) { return; } myIsCurrentlyExpanding = true; InstanceNode node = (InstanceNode) event.getPath().getLastPathComponent(); InstanceNode currentNode = node; int recursiveDepth = MAX_AUTO_EXPANSION_DEPTH; while (currentNode.getChildCount() == 1 && recursiveDepth > 0) { InstanceNode childNode = (InstanceNode) currentNode.getChildAt(0); if (childNode.isLeaf() || childNode.getInstance().getDistanceToGcRoot() == 0) { break; } currentNode = childNode; Instance currentInstance = currentNode.getInstance(); --recursiveDepth; if (currentInstance.getDistanceToGcRoot() == 0) { break; } } if (node != currentNode) { myTree.expandPath(new TreePath(currentNode.getPath())); } myIsCurrentlyExpanding = false; } @Override public void treeCollapsed(TreeExpansionEvent event) { } }); 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()); myGoToInstanceAction = new GoToInstanceAction(myTree); popupGroup.add(myGoToInstanceAction); 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); } }); ColumnTreeBuilder builder = new ColumnTreeBuilder(myTree) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Reference Tree").setPreferredWidth(1200) .setHeaderAlignment(SwingConstants.LEFT).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, @Nullable Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof InstanceNode) { InstanceNode node = (InstanceNode) value; Instance instance = node.getInstance(); String[] referenceVarNames = node.getVarNames(); if (referenceVarNames.length > 0) { if (instance instanceof ArrayInstance) { append(StringUtil.pluralize("Index", referenceVarNames.length), SimpleTextAttributes.GRAYED_ITALIC_ATTRIBUTES); append(" ", SimpleTextAttributes.REGULAR_ATTRIBUTES); } StringBuilder builder = new StringBuilder(); builder.append(referenceVarNames[0]); for (int i = 1; i < referenceVarNames.length; ++i) { builder.append(", "); builder.append(referenceVarNames[i]); } append(builder.toString(), instance.getIsSoftReference() ? SOFT_REFERENCE_TEXT_ATTRIBUTE : XDebuggerUIConstants.VALUE_NAME_ATTRIBUTES); append(" in ", SimpleTextAttributes.GRAYED_ITALIC_ATTRIBUTES); } SimpleTextAttributes classTextAttributes; if (myInstance.getImmediateDominator() == instance) { classTextAttributes = SimpleTextAttributes.SYNTHETIC_ATTRIBUTES; } else if (instance.getIsSoftReference()) { classTextAttributes = SimpleTextAttributes.REGULAR_ITALIC_ATTRIBUTES; } else if (instance.getDistanceToGcRoot() == 0) { classTextAttributes = SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES; } else if (instance.getImmediateDominator() == null) { classTextAttributes = SimpleTextAttributes.ERROR_ATTRIBUTES; } else { classTextAttributes = SimpleTextAttributes.REGULAR_ATTRIBUTES; } if (instance instanceof ArrayInstance) { setIcon(AllIcons.Debugger.Db_array); } else if (instance instanceof ClassObj) { setIcon(PlatformIcons.FIELD_ICON); } else { setIcon(AllIcons.Debugger.Value); } if (myInstance.getImmediateDominator() == instance || instance.getDistanceToGcRoot() == 0) { int totalIcons = 1 + (myInstance.getImmediateDominator() == instance ? 1 : 0) + (instance.getDistanceToGcRoot() == 0 ? 1 : 0); RowIcon icons = new RowIcon(totalIcons); icons.setIcon(getIcon(), 0); int currentIcon = 1; if (myInstance.getImmediateDominator() == instance) { icons.setIcon(AllIcons.Hierarchy.Class, currentIcon++); } if (instance.getDistanceToGcRoot() == 0) { icons.setIcon(AllIcons.Hierarchy.Subtypes, currentIcon); } setIcon(icons); } append(instance.toString(), classTextAttributes); } else if (value != null) { append(StringUtil.notNullize(value.toString()), SimpleTextAttributes.ERROR_ATTRIBUTES); } } })) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Depth").setPreferredWidth(40) .setHeaderAlignment(SwingConstants.RIGHT).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, @Nullable Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof InstanceNode) { Instance instance = ((InstanceNode) value).getInstance(); if (instance != null && instance.getDistanceToGcRoot() != Integer.MAX_VALUE) { append(String.valueOf(instance.getDistanceToGcRoot()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } setTextAlign(SwingConstants.RIGHT); } } })) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Shallow Size").setPreferredWidth(80) .setHeaderAlignment(SwingConstants.RIGHT).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, @Nullable Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof InstanceNode) { Instance instance = ((InstanceNode) value).getInstance(); if (instance != null) { append(String.valueOf(instance.getSize()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } setTextAlign(SwingConstants.RIGHT); } } })) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Dominating Size").setPreferredWidth(80) .setHeaderAlignment(SwingConstants.RIGHT).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, @Nullable Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof InstanceNode) { Instance instance = ((InstanceNode) value).getInstance(); if (instance != null && instance.getDistanceToGcRoot() != Integer.MAX_VALUE) { append(String.valueOf(instance.getTotalRetainedSize()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } setTextAlign(SwingConstants.RIGHT); } } })); myColumnTree = builder.build(); selectionModel.addListener(new SelectionModel.SelectionListener() { @Override public void onHeapChanged(@NotNull Heap heap) { clearInstance(); } @Override public void onClassObjChanged(@Nullable ClassObj classObj) { clearInstance(); } @Override public void onInstanceChanged(@Nullable Instance instance) { if (instance == null) { clearInstance(); } else { myInstance = instance; TreeBuilder model = getMutableModel(); TreeBuilderNode root = (TreeBuilderNode) model.getRoot(); root.removeAllChildren(); root.add(new InstanceNode(getMutableModel(), instance)); model.nodeStructureChanged((TreeBuilderNode) model.getRoot()); myTree.expandRow(0); } } }); }
From source file:com.android.tools.idea.editors.hprof.views.InstancesTreeView.java
License:Apache License
public InstancesTreeView(@NotNull Project project, @NotNull SelectionModel selectionModel) { myProject = project;//ww w . ja v a 2 s . com mySelectionModel = selectionModel; myDebuggerTree = new DebuggerTree(project) { @Override protected void build(DebuggerContextImpl context) { DebuggerTreeNodeImpl root = (DebuggerTreeNodeImpl) getModel().getRoot(); Instance instance = ((InstanceFieldDescriptorImpl) root.getDescriptor()).getInstance(); addChildren(root, null, instance); } @Override public Object getData(@NonNls String dataId) { return InstancesTreeView.this.getData(dataId); } }; myDebuggerTree.getComponent().setName(TREE_NAME); Disposer.register(myProject, this); Disposer.register(this, myDebuggerTree); myHeap = mySelectionModel.getHeap(); myDebugProcess = new DebugProcessEvents(project); final SuspendManagerImpl suspendManager = new SuspendManagerImpl(myDebugProcess); myDebugProcess.getManagerThread().invokeAndWait(new DebuggerCommandImpl() { @Override protected void action() throws Exception { myDummySuspendContext = suspendManager.pushSuspendContext(EventRequest.SUSPEND_NONE, 1); } }); final TreeBuilder model = new TreeBuilder(myDebuggerTree) { @Override public void buildChildren(TreeBuilderNode node) { final DebuggerTreeNodeImpl debuggerTreeNode = (DebuggerTreeNodeImpl) node; NodeDescriptor descriptor = debuggerTreeNode.getDescriptor(); if (descriptor instanceof DefaultNodeDescriptor) { return; } else if (descriptor instanceof ContainerDescriptorImpl) { addContainerChildren(debuggerTreeNode, 0, true); } else { InstanceFieldDescriptorImpl instanceDescriptor = (InstanceFieldDescriptorImpl) descriptor; addChildren(debuggerTreeNode, instanceDescriptor.getHprofField(), instanceDescriptor.getInstance()); } sortTree(debuggerTreeNode); myDebuggerTree.treeDidChange(); } @Override public boolean isExpandable(TreeBuilderNode builderNode) { return ((DebuggerTreeNodeImpl) builderNode).getDescriptor().isExpandable(); } }; model.setRoot(myDebuggerTree.getNodeFactory().getDefaultNode()); model.addTreeModelListener(new TreeModelListener() { @Override public void treeNodesChanged(TreeModelEvent event) { myDebuggerTree.hideTooltip(); } @Override public void treeNodesInserted(TreeModelEvent event) { myDebuggerTree.hideTooltip(); } @Override public void treeNodesRemoved(TreeModelEvent event) { myDebuggerTree.hideTooltip(); } @Override public void treeStructureChanged(TreeModelEvent event) { myDebuggerTree.hideTooltip(); } }); myDebuggerTree.setModel(model); myDebuggerTree.setRootVisible(false); myDebuggerTree.putClientProperty(DataManager.CLIENT_PROPERTY_DATA_PROVIDER, this); JBList contextActionList = new JBList(new EditMultipleSourcesAction()); JBPopupFactory.getInstance().createListPopupBuilder(contextActionList); myGoToInstanceAction = new GoToInstanceAction(myDebuggerTree); myDebuggerTree.addMouseListener(new PopupHandler() { @Override public void invokePopup(Component comp, int x, int y) { DefaultActionGroup popupGroup = new DefaultActionGroup(new EditMultipleSourcesAction()); Instance selectedInstance = mySelectionModel.getInstance(); if (selectedInstance instanceof ClassInstance && HprofBitmapProvider.canGetBitmapFromInstance(selectedInstance)) { popupGroup.add(new ViewBitmapAction()); } popupGroup.add(myGoToInstanceAction); ActionManager.getInstance().createActionPopupMenu(ActionPlaces.UNKNOWN, popupGroup).getComponent() .show(comp, x, y); } }); mySelectionModel.addListener(new SelectionModel.SelectionListener() { @Override public void onHeapChanged(@NotNull Heap heap) { if (heap != myHeap) { myHeap = heap; if (myDebuggerTree.getMutableModel().getRoot() != null) { onSelectionChanged(); } } } @Override public void onClassObjChanged(@Nullable ClassObj classObj) { if (classObj != myClassObj) { myClassObj = classObj; onSelectionChanged(); } } @Override public void onInstanceChanged(@Nullable Instance instance) { if (instance == null) { return; } TreePath path = myDebuggerTree.getSelectionPath(); if (path != null) { DebuggerTreeNodeImpl treeNode = (DebuggerTreeNodeImpl) path.getPathComponent(1); if (treeNode.getDescriptor() instanceof InstanceFieldDescriptorImpl && ((InstanceFieldDescriptorImpl) treeNode.getDescriptor()).getInstance() == instance) { return; } } DebuggerTreeNodeImpl root = (DebuggerTreeNodeImpl) myDebuggerTree.getMutableModel().getRoot(); DebuggerTreeNodeImpl targetNode = expandMoreNodesUntilFound(root, instance); if (targetNode != null) { final TreePath targetPath = new TreePath(targetNode.getPath()); myDebuggerTree.treeChanged(); myDebuggerTree.setSelectionPath(targetPath); ApplicationManager.getApplication() .invokeLater(() -> myDebuggerTree.scrollPathToVisible(targetPath)); } } private void onSelectionChanged() { DebuggerTreeNodeImpl newRoot; Instance singleChild = null; if (myClassObj != null) { ContainerDescriptorImpl containerDescriptor = new ContainerDescriptorImpl(myClassObj, myHeap.getId()); newRoot = DebuggerTreeNodeImpl.createNodeNoUpdate(myDebuggerTree, containerDescriptor); if (containerDescriptor.getInstances().size() == 1) { singleChild = containerDescriptor.getInstances().get(0); } } else { newRoot = myDebuggerTree.getNodeFactory().getDefaultNode(); } myDebuggerTree.getMutableModel().setRoot(newRoot); myDebuggerTree.treeChanged(); if (myDebuggerTree.getRowCount() > 0) { myDebuggerTree.scrollRowToVisible(0); } if (singleChild != null) { myDebuggerTree.setSelectionInterval(0, 0); mySelectionModel.setInstance(singleChild); } } }); myDebuggerTree.addTreeSelectionListener(e -> { TreePath path = e.getPath(); if (path == null || path.getPathCount() < 2 || !e.isAddedPath()) { mySelectionModel.setInstance(null); return; } DebuggerTreeNodeImpl instanceNode = (DebuggerTreeNodeImpl) path.getPathComponent(1); if (instanceNode.getDescriptor() instanceof InstanceFieldDescriptorImpl) { InstanceFieldDescriptorImpl descriptor = (InstanceFieldDescriptorImpl) instanceNode.getDescriptor(); if (descriptor.getInstance() != mySelectionModel.getInstance()) { mySelectionModel.setInstance(descriptor.getInstance()); } } // Handle node expansions (this is present when the list is large). DebuggerTreeNodeImpl lastPathNode = (DebuggerTreeNodeImpl) path.getLastPathComponent(); if (lastPathNode.getDescriptor() instanceof ExpansionDescriptorImpl) { ExpansionDescriptorImpl expansionDescriptor = (ExpansionDescriptorImpl) lastPathNode .getDescriptor(); DebuggerTreeNodeImpl parentNode = lastPathNode.getParent(); myDebuggerTree.getMutableModel().removeNodeFromParent(lastPathNode); if (parentNode.getDescriptor() instanceof ContainerDescriptorImpl) { addContainerChildren(parentNode, expansionDescriptor.getStartIndex(), true); } else if (parentNode.getDescriptor() instanceof InstanceFieldDescriptorImpl) { InstanceFieldDescriptorImpl instanceFieldDescriptor = (InstanceFieldDescriptorImpl) parentNode .getDescriptor(); addChildren(parentNode, instanceFieldDescriptor.getHprofField(), instanceFieldDescriptor.getInstance(), expansionDescriptor.getStartIndex()); } sortTree(parentNode); myDebuggerTree.getMutableModel().nodeStructureChanged(parentNode); if (myComparator != null) { myDebuggerTree.scrollPathToVisible( new TreePath(((DebuggerTreeNodeImpl) parentNode.getLastChild()).getPath())); } } }); ColumnTreeBuilder builder = new ColumnTreeBuilder(myDebuggerTree) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Instance").setPreferredWidth(600) .setHeaderAlignment(SwingConstants.LEFT) .setComparator(new Comparator<DebuggerTreeNodeImpl>() { @Override public int compare(@NotNull DebuggerTreeNodeImpl a, @NotNull DebuggerTreeNodeImpl b) { return getDefaultOrdering(a, b); } }).setRenderer((DebuggerTreeRenderer) myDebuggerTree.getCellRenderer())) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Depth").setPreferredWidth(60) .setHeaderAlignment(SwingConstants.RIGHT) .setComparator(new Comparator<DebuggerTreeNodeImpl>() { @Override public int compare(DebuggerTreeNodeImpl a, DebuggerTreeNodeImpl b) { int depthA = 0; int depthB = 0; if (a.getDescriptor() instanceof InstanceFieldDescriptorImpl) { Instance instanceA = (Instance) ((InstanceFieldDescriptorImpl) a .getDescriptor()).getValueData(); if (instanceA != null) { depthA = instanceA.getDistanceToGcRoot(); } } if (b.getDescriptor() instanceof InstanceFieldDescriptorImpl) { Instance instanceB = (Instance) ((InstanceFieldDescriptorImpl) b .getDescriptor()).getValueData(); if (instanceB != null) { depthB = instanceB.getDistanceToGcRoot(); } } if (depthA != depthB) { return depthA - depthB; } else { return getDefaultOrdering(a, b); } } }).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { NodeDescriptorImpl nodeDescriptor = (NodeDescriptorImpl) ((TreeBuilderNode) value) .getUserObject(); if (nodeDescriptor instanceof InstanceFieldDescriptorImpl) { InstanceFieldDescriptorImpl descriptor = (InstanceFieldDescriptorImpl) nodeDescriptor; assert !descriptor.isPrimitive(); Instance instance = (Instance) descriptor.getValueData(); if (instance != null && instance.getDistanceToGcRoot() != Integer.MAX_VALUE) { append(String.valueOf(instance.getDistanceToGcRoot()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } } setTextAlign(SwingConstants.RIGHT); } })) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Shallow Size").setPreferredWidth(80) .setHeaderAlignment(SwingConstants.RIGHT) .setComparator(new Comparator<DebuggerTreeNodeImpl>() { @Override public int compare(@NotNull DebuggerTreeNodeImpl a, @NotNull DebuggerTreeNodeImpl b) { int sizeA = 0; int sizeB = 0; if (a.getDescriptor() instanceof InstanceFieldDescriptorImpl) { Instance instanceA = (Instance) ((InstanceFieldDescriptorImpl) a .getDescriptor()).getValueData(); if (instanceA != null) { sizeA = instanceA.getSize(); } } if (b.getDescriptor() instanceof InstanceFieldDescriptorImpl) { Instance instanceB = (Instance) ((InstanceFieldDescriptorImpl) b .getDescriptor()).getValueData(); if (instanceB != null) { sizeB = instanceB.getSize(); } } if (sizeA != sizeB) { return sizeA - sizeB; } else { return getDefaultOrdering(a, b); } } }).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { NodeDescriptorImpl nodeDescriptor = (NodeDescriptorImpl) ((TreeBuilderNode) value) .getUserObject(); if (nodeDescriptor instanceof InstanceFieldDescriptorImpl) { InstanceFieldDescriptorImpl descriptor = (InstanceFieldDescriptorImpl) nodeDescriptor; assert !descriptor.isPrimitive(); Instance instance = (Instance) descriptor.getValueData(); if (instance != null) { append(String.valueOf(instance.getSize()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } } setTextAlign(SwingConstants.RIGHT); } })) .addColumn(new ColumnTreeBuilder.ColumnBuilder().setName("Dominating Size").setPreferredWidth(80) .setHeaderAlignment(SwingConstants.RIGHT) .setComparator(new Comparator<DebuggerTreeNodeImpl>() { @Override public int compare(@NotNull DebuggerTreeNodeImpl a, @NotNull DebuggerTreeNodeImpl b) { long sizeA = 0; long sizeB = 0; if (a.getDescriptor() instanceof InstanceFieldDescriptorImpl) { Instance instanceA = (Instance) ((InstanceFieldDescriptorImpl) a .getDescriptor()).getValueData(); if (instanceA != null && instanceA.getDistanceToGcRoot() != Integer.MAX_VALUE) { sizeA = instanceA.getTotalRetainedSize(); } } if (b.getDescriptor() instanceof InstanceFieldDescriptorImpl) { Instance instanceB = (Instance) ((InstanceFieldDescriptorImpl) b .getDescriptor()).getValueData(); if (instanceB != null && instanceB.getDistanceToGcRoot() != Integer.MAX_VALUE) { sizeB = instanceB.getTotalRetainedSize(); } } if (sizeA != sizeB) { return (int) (sizeA - sizeB); } else { return getDefaultOrdering(a, b); } } }).setRenderer(new ColoredTreeCellRenderer() { @Override public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { NodeDescriptorImpl nodeDescriptor = (NodeDescriptorImpl) ((TreeBuilderNode) value) .getUserObject(); if (nodeDescriptor instanceof InstanceFieldDescriptorImpl) { InstanceFieldDescriptorImpl descriptor = (InstanceFieldDescriptorImpl) nodeDescriptor; assert !descriptor.isPrimitive(); Instance instance = (Instance) descriptor.getValueData(); if (instance != null && instance.getDistanceToGcRoot() != Integer.MAX_VALUE) { append(String.valueOf(instance.getTotalRetainedSize()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } } setTextAlign(SwingConstants.RIGHT); } })); //noinspection NullableProblems builder.setTreeSorter(new ColumnTreeBuilder.TreeSorter<DebuggerTreeNodeImpl>() { @Override public void sort(@NotNull Comparator<DebuggerTreeNodeImpl> comparator, @NotNull SortOrder sortOrder) { if (myComparator != comparator && mySortOrder != sortOrder) { myComparator = comparator; mySortOrder = sortOrder; TreeBuilder mutableModel = myDebuggerTree.getMutableModel(); DebuggerTreeNodeImpl root = (DebuggerTreeNodeImpl) mutableModel.getRoot(); sortTree(root); mySelectionModel.setSelectionLocked(true); TreePath selectionPath = myDebuggerTree.getSelectionPath(); mutableModel.nodeStructureChanged(root); myDebuggerTree.setSelectionPath(selectionPath); myDebuggerTree.scrollPathToVisible(selectionPath); mySelectionModel.setSelectionLocked(false); } } }); myColumnTree = builder.build(); }
From source file:com.android.tools.idea.editors.theme.attributes.ShowJavadocAction.java
License:Apache License
@Override public void actionPerformed(ActionEvent e) { EditedStyleItem item = myCurrentItem; if (item == null) { return;//w w w.j av a 2s . c om } Project project = myContext.getProject(); DocumentationManager documentationManager = DocumentationManager.getInstance(project); final DocumentationComponent docComponent = new DocumentationComponent(documentationManager); String tooltip = ThemeEditorUtils.generateToolTipText(item.getSelectedValue(), myContext.getCurrentContextModule(), myContext.getConfiguration()); // images will not work unless we pass a valid PsiElement {@link DocumentationComponent#myImageProvider} docComponent.setText(tooltip, new FakePsiElement() { @Override public boolean isValid() { // this needs to return true for the DocumentationComponent to accept this PsiElement {@link DocumentationComponent#setData(PsiElement, String, boolean, String, String)} return true; } @NotNull @Override public Project getProject() { // superclass implementation throws an exception return myContext.getProject(); } @Override public PsiElement getParent() { return null; } @Override public PsiFile getContainingFile() { // superclass implementation throws an exception return null; } }, true); JBPopup hint = JBPopupFactory.getInstance().createComponentPopupBuilder(docComponent, docComponent) .setProject(project) .setDimensionServiceKey(project, DocumentationManager.JAVADOC_LOCATION_AND_SIZE, false) .setResizable(true).setMovable(true).setRequestFocus(true).setTitle(item.getName()) .setCancelCallback(new Computable<Boolean>() { @Override public Boolean compute() { Disposer.dispose(docComponent); return Boolean.TRUE; } }).createPopup(); docComponent.setHint(hint); Disposer.register(hint, docComponent); hint.show(new RelativePoint(myAttributesTable.getParent(), ORIGIN)); }
From source file:com.android.tools.idea.gradle.editor.ui.ReferencedValuesGradleEditorComponent.java
License:Apache License
public ReferencedValuesGradleEditorComponent() { super(new GridBagLayout()); final JBLabel label = new JBLabel("<~>"); label.setCursor(new Cursor(Cursor.HAND_CURSOR)); setBackground(GradleEditorUiConstants.BACKGROUND_COLOR); TextAttributes attributes = EditorColorsManager.getInstance().getGlobalScheme() .getAttributes(EditorColors.FOLDED_TEXT_ATTRIBUTES); if (attributes != null) { Color color = attributes.getForegroundColor(); if (color != null) { label.setForeground(color);//from ww w . java 2s .c om } } add(label, new GridBag()); label.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { WeakReference<Project> projectRef = myProjectRef; if (projectRef == null) { return; } Project project = projectRef.get(); if (project == null) { return; } final Ref<Balloon> balloonRef = new Ref<Balloon>(); Content content = new Content(project, new Runnable() { @Override public void run() { Balloon balloon = balloonRef.get(); if (balloon != null && !balloon.isDisposed()) { Disposer.dispose(balloon); balloonRef.set(null); } } }); BalloonBuilder builder = JBPopupFactory.getInstance().createBalloonBuilder(content) .setDisposable(project).setShowCallout(false) .setAnimationCycle(GradleEditorUiConstants.ANIMATION_TIME_MILLIS) .setFillColor(JBColor.border()); Balloon balloon = builder.createBalloon(); balloonRef.set(balloon); balloon.show(new RelativePoint(label, new Point(label.getWidth() / 2, label.getHeight())), Balloon.Position.atRight); } }); }