Example usage for com.intellij.openapi.ui.popup JBPopupFactory getInstance

List of usage examples for com.intellij.openapi.ui.popup JBPopupFactory getInstance

Introduction

In this page you can find the example usage for com.intellij.openapi.ui.popup JBPopupFactory getInstance.

Prototype

public static JBPopupFactory getInstance() 

Source Link

Document

Returns the popup factory instance.

Usage

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);
        }
    });
}