Example usage for com.intellij.openapi.ui.popup PopupChooserBuilder PopupChooserBuilder

List of usage examples for com.intellij.openapi.ui.popup PopupChooserBuilder PopupChooserBuilder

Introduction

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

Prototype

public PopupChooserBuilder(@NotNull JTree tree) 

Source Link

Usage

From source file:com.antoine.ideaplugin.greenrobot.ShowUsagesAction.java

License:Apache License

@NotNull
private JBPopup createUsagePopup(@NotNull final List<Usage> usages,
        @NotNull final UsageInfoToUsageConverter.TargetElementsDescriptor descriptor,
        @NotNull Set<UsageNode> visibleNodes, @NotNull final FindUsagesHandler handler, final Editor editor,
        @NotNull final RelativePoint popupPosition, final int maxUsages, @NotNull final UsageViewImpl usageView,
        @NotNull final FindUsagesOptions options, @NotNull final JTable table,
        @NotNull final UsageViewPresentation presentation, @NotNull final AsyncProcessIcon processIcon,
        boolean hadMoreSeparator) {
    table.setRowHeight(PlatformIcons.CLASS_ICON.getIconHeight() + 2);
    table.setShowGrid(false);//  w w  w. j av  a  2 s. com
    table.setShowVerticalLines(false);
    table.setShowHorizontalLines(false);
    table.setTableHeader(null);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
    table.setIntercellSpacing(new Dimension(0, 0));

    PopupChooserBuilder builder = new PopupChooserBuilder(table);
    final String title = presentation.getTabText();
    if (title != null) {
        String result = getFullTitle(usages, title, hadMoreSeparator, visibleNodes.size() - 1, true);
        builder.setTitle(result);
        builder.setAdText(getSecondInvocationTitle(options, handler));
    }

    builder.setMovable(true).setResizable(true);
    builder.setItemChoosenCallback(new Runnable() {
        @Override
        public void run() {
            int[] selected = table.getSelectedRows();
            for (int i : selected) {
                Object value = table.getValueAt(i, 0);
                if (value instanceof UsageNode) {
                    Usage usage = ((UsageNode) value).getUsage();
                    if (usage == MORE_USAGES_SEPARATOR) {
                        appendMoreUsages(editor, popupPosition, handler, maxUsages);
                        return;
                    }
                    navigateAndHint(usage, null, handler, popupPosition, maxUsages, options);
                }
            }
        }
    });
    final JBPopup[] popup = new JBPopup[1];

    KeyboardShortcut shortcut = UsageViewImpl.getShowUsagesWithSettingsShortcut();
    if (shortcut != null) {
        new DumbAwareAction() {
            @Override
            public void actionPerformed(AnActionEvent e) {
                popup[0].cancel();
                showDialogAndFindUsages(handler, popupPosition, editor, maxUsages);
            }
        }.registerCustomShortcutSet(new CustomShortcutSet(shortcut.getFirstKeyStroke()), table);
    }
    shortcut = getShowUsagesShortcut();
    if (shortcut != null) {
        new DumbAwareAction() {
            @Override
            public void actionPerformed(AnActionEvent e) {
                popup[0].cancel();
                searchEverywhere(options, handler, editor, popupPosition, maxUsages);
            }
        }.registerCustomShortcutSet(new CustomShortcutSet(shortcut.getFirstKeyStroke()), table);
    }

    InplaceButton settingsButton = createSettingsButton(handler, popupPosition, editor, maxUsages,
            new Runnable() {
                @Override
                public void run() {
                    popup[0].cancel();
                }
            });

    ActiveComponent spinningProgress = new ActiveComponent() {
        @Override
        public void setActive(boolean active) {
        }

        @Override
        public JComponent getComponent() {
            return processIcon;
        }
    };
    builder.setCommandButton(new CompositeActiveComponent(spinningProgress, settingsButton));

    DefaultActionGroup toolbar = new DefaultActionGroup();
    usageView.addFilteringActions(toolbar);

    toolbar.add(UsageGroupingRuleProviderImpl.createGroupByFileStructureAction(usageView));
    toolbar.add(new AnAction("Open Find Usages Toolwindow", "Show all usages in a separate toolwindow",
            AllIcons.Toolwindows.ToolWindowFind) {
        {
            AnAction action = ActionManager.getInstance().getAction(IdeActions.ACTION_FIND_USAGES);
            setShortcutSet(action.getShortcutSet());
        }

        @Override
        public void actionPerformed(AnActionEvent e) {
            hideHints();
            popup[0].cancel();
            FindUsagesManager findUsagesManager = ((FindManagerImpl) FindManager
                    .getInstance(usageView.getProject())).getFindUsagesManager();

            findUsagesManager.findUsages(handler.getPrimaryElements(), handler.getSecondaryElements(), handler,
                    options, FindSettings.getInstance().isSkipResultsWithOneUsage());
        }
    });

    ActionToolbar actionToolbar = ActionManager.getInstance()
            .createActionToolbar(ActionPlaces.USAGE_VIEW_TOOLBAR, toolbar, true);
    actionToolbar.setReservePlaceAutoPopupIcon(false);
    final JComponent toolBar = actionToolbar.getComponent();
    toolBar.setOpaque(false);
    builder.setSettingButton(toolBar);

    popup[0] = builder.createPopup();
    JComponent content = popup[0].getContent();

    myWidth = (int) (toolBar.getPreferredSize().getWidth()
            + new JLabel(getFullTitle(usages, title, hadMoreSeparator, visibleNodes.size() - 1, true))
                    .getPreferredSize().getWidth()
            + settingsButton.getPreferredSize().getWidth());
    myWidth = -1;
    for (AnAction action : toolbar.getChildren(null)) {
        action.unregisterCustomShortcutSet(usageView.getComponent());
        action.registerCustomShortcutSet(action.getShortcutSet(), content);
    }

    return popup[0];
}

From source file:com.favorite.FavoriteBaseShowRecentFilesAction.java

License:Apache License

protected void show(final Project project) {
    final DefaultListModel model = new DefaultListModel();

    FileEditorManagerEx fem = FileEditorManagerEx.getInstanceEx(project);
    VirtualFile[] selectedFiles = fem.getSelectedFiles();
    VirtualFile currentFile = fem.getCurrentFile();
    VirtualFile[] files = filesToShow(project);
    FileEditorProviderManager editorProviderManager = FileEditorProviderManager.getInstance();

    for (int i = files.length - 1; i >= 0; i--) { // reverse order of files
        VirtualFile file = files[i];//w w w .  ja v a  2 s .co m
        boolean isSelected = ArrayUtil.find(selectedFiles, file) >= 0;
        boolean equals = file.equals(currentFile);
        FileEditorProvider[] providers = editorProviderManager.getProviders(project, file);
        boolean length = true;//providers.length > 0;
        if ((!isSelected || !equals) && length) {
            // 1. do not put currently selected file
            // 2. do not include file with no corresponding editor providers
            model.addElement(file);
        }
    }

    final JLabel pathLabel = new JLabel(" ");
    pathLabel.setHorizontalAlignment(SwingConstants.RIGHT);

    if (true /*SystemInfo.isMac*/) {
        final Font font = pathLabel.getFont();
        pathLabel.setFont(font.deriveFont((float) 10));
    }

    final JList list = new JBList(model);
    list.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_DELETE) {
                int index = list.getSelectedIndex();
                if (index == -1 || index >= list.getModel().getSize()) {
                    return;
                }
                Object[] values = list.getSelectedValues();
                for (Object value : values) {
                    VirtualFile file = (VirtualFile) value;
                    model.removeElement(file);
                    if (model.getSize() > 0) {
                        if (model.getSize() == index) {
                            list.setSelectedIndex(model.getSize() - 1);
                        } else if (model.getSize() > index) {
                            list.setSelectedIndex(index);
                        }
                    } else {
                        list.clearSelection();
                    }
                    EditorHistoryManager.getInstance(project).removeFile(file);
                }
            }
        }
    });

    final MyListSelectionListener listSelectionListener = new MyListSelectionListener(pathLabel, list);
    list.getSelectionModel().addListSelectionListener(listSelectionListener);

    Runnable runnable = new Runnable() {
        public void run() {
            Object[] values = list.getSelectedValues();
            for (Object value : values) {
                VirtualFile file = (VirtualFile) value;
                if (file.isDirectory()) {
                    String path = file.getPath();
                    ProjectUtil.openOrImport(path, project, false);
                } else {
                    FileEditorManager.getInstance(project).openFile(file, true, true);
                }
                //String path = "/Volumes/SHARE/MacSystem/Home/Users/djzhang/NetBeansProjects/intellijPlugDemo";
                //String path = file.getPath();
                //final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());

                //FileEditorManager.getInstance(project).openFile(file, true, true);

                //OpenFileAction.openFile(file, project);

            }
        }
    };

    if (list.getModel().getSize() == 0) {
        list.clearSelection();
    }

    list.setCellRenderer(new RecentFilesRenderer(project));

    /*
    TODO:
    if (model.getSize() > 0) {
      Dimension listPreferredSize = list.getPreferredSize();
      list.setVisibleRowCount(0);
      Dimension viewPreferredSize = new Dimension(listPreferredSize.width, Math.min(listPreferredSize.height, r.height - 20));
      ((JViewport)list.getParent()).setPreferredSize(viewPreferredSize);
    }
    */

    JPanel footerPanel = new JPanel(new BorderLayout()) {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(BORDER_COLOR);
            g.drawLine(0, 0, getWidth(), 0);
        }
    };

    footerPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    footerPanel.add(pathLabel);

    final PopupChooserBuilder builder = new PopupChooserBuilder(list).setTitle(getTitle()).setAdText(" ")
            .setMovable(true).setItemChoosenCallback(runnable).setModalContext(false)
            .addAdditionalChooseKeystroke(getAdditionalSelectKeystroke())
            .setFilteringEnabled(new Function<Object, String>() {
                public String fun(Object o) {
                    return o instanceof VirtualFile ? ((VirtualFile) o).getName() : "";
                }
            });
    final Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts(getPeerActionId());
    final PeerListener listener = new PeerListener(project, getPeerActionId());
    for (Shortcut shortcut : shortcuts) {
        if (shortcut instanceof KeyboardShortcut
                && ((KeyboardShortcut) shortcut).getSecondKeyStroke() == null) {
            final KeyStroke keyStroke = ((KeyboardShortcut) shortcut).getFirstKeyStroke();
            builder.registerKeyboardAction(keyStroke, listener);
        }
    }
    JBPopup popup = builder.createPopup();
    listener.setPopup(popup);
    listSelectionListener.setPopup(popup);
    popup.showCenteredInCurrentWindow(project);
}

From source file:com.intellij.application.options.SchemesToImportPopup.java

License:Apache License

private void showList(JList list, Runnable selectAction) {
    new PopupChooserBuilder(list).setTitle("Import Scheme").setItemChoosenCallback(selectAction).createPopup()
            .showInCenterOf(myParent);//w w w. j a v a 2  s  . com
}

From source file:com.intellij.codeInsight.daemon.impl.analysis.CreateNSDeclarationIntentionFix.java

License:Apache License

public static void runActionOverSeveralAttributeValuesAfterLettingUserSelectTheNeededOne(
        @Nonnull final String[] namespacesToChooseFrom, final Project project,
        final StringToAttributeProcessor onSelection, String title, final IntentionAction requestor,
        final Editor editor) throws IncorrectOperationException {

    if (namespacesToChooseFrom.length > 1 && !ApplicationManager.getApplication().isUnitTestMode()) {
        final JList list = new JBList(namespacesToChooseFrom);
        list.setCellRenderer(XmlNSRenderer.INSTANCE);
        Runnable runnable = new Runnable() {
            @Override/*  w  w  w. j a  va  2 s  .  com*/
            public void run() {
                final int index = list.getSelectedIndex();
                if (index < 0)
                    return;
                PsiDocumentManager.getInstance(project).commitAllDocuments();

                CommandProcessor.getInstance().executeCommand(project, new Runnable() {
                    @Override
                    public void run() {
                        ApplicationManager.getApplication().runWriteAction(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    onSelection.doSomethingWithGivenStringToProduceXmlAttributeNowPlease(
                                            namespacesToChooseFrom[index]);
                                } catch (IncorrectOperationException ex) {
                                    throw new RuntimeException(ex);
                                }
                            }
                        });
                    }
                }, requestor.getText(), requestor.getFamilyName());
            }
        };

        new PopupChooserBuilder(list).setTitle(title).setItemChoosenCallback(runnable).createPopup()
                .showInBestPositionFor(editor);
    } else {
        onSelection.doSomethingWithGivenStringToProduceXmlAttributeNowPlease(
                namespacesToChooseFrom.length == 0 ? "" : namespacesToChooseFrom[0]);
    }
}

From source file:com.intellij.codeInsight.daemon.impl.analysis.ImportNSAction.java

License:Apache License

public boolean execute() {
    final Object[] objects = myNamespaces.toArray();
    Arrays.sort(objects);/*from   w w  w  .  ja  va 2  s.  c o m*/
    final JList list = new JBList(objects);
    list.setCellRenderer(XmlNSRenderer.INSTANCE);
    list.setSelectedIndex(0);
    final int offset = myElement.getTextOffset();
    final RangeMarker marker = myEditor.getDocument().createRangeMarker(offset, offset);
    final Runnable runnable = new Runnable() {

        public void run() {
            final String namespace = (String) list.getSelectedValue();
            if (namespace != null) {
                final Project project = myFile.getProject();
                new WriteCommandAction.Simple(project, myFile) {

                    protected void run() throws Throwable {
                        final XmlNamespaceHelper extension = XmlNamespaceHelper.getHelper(myFile);
                        final String prefix = extension.getNamespacePrefix(myElement);
                        extension.insertNamespaceDeclaration(myFile, myEditor, Collections.singleton(namespace),
                                prefix, new XmlNamespaceHelper.Runner<String, IncorrectOperationException>() {
                                    public void run(final String s) throws IncorrectOperationException {
                                        PsiDocumentManager.getInstance(myFile.getProject())
                                                .doPostponedOperationsAndUnblockDocument(
                                                        myEditor.getDocument());
                                        PsiElement element = myFile.findElementAt(marker.getStartOffset());
                                        if (element != null) {
                                            extension.qualifyWithPrefix(s, element, myEditor.getDocument());
                                        }
                                    }
                                });
                    }
                }.execute();
            }
        }
    };
    if (list.getModel().getSize() == 1) {
        runnable.run();
    } else {
        new PopupChooserBuilder(list).setTitle(myTitle).setItemChoosenCallback(runnable).createPopup()
                .showInBestPositionFor(myEditor);
    }

    return true;
}

From source file:com.intellij.codeInsight.daemon.impl.PsiElementListNavigator.java

License:Apache License

@Nullable
public static JBPopup navigateOrCreatePopup(@NotNull final NavigatablePsiElement[] targets, final String title,
        final String findUsagesTitle, final ListCellRenderer listRenderer,
        @Nullable final ListBackgroundUpdaterTask listUpdaterTask, @NotNull final Consumer<Object[]> consumer) {
    if (targets.length == 0)
        return null;
    if (targets.length == 1) {
        consumer.consume(targets);/* w w  w.  j av  a 2s  .  c  om*/
        return null;
    }
    final CollectionListModel<NavigatablePsiElement> model = new CollectionListModel<NavigatablePsiElement>(
            targets);
    final JBListWithHintProvider list = new JBListWithHintProvider(model) {
        @Override
        protected PsiElement getPsiElementForHint(final Object selectedValue) {
            return (PsiElement) selectedValue;
        }
    };

    list.setTransferHandler(new TransferHandler() {
        @Nullable
        @Override
        protected Transferable createTransferable(JComponent c) {
            final Object[] selectedValues = list.getSelectedValues();
            final PsiElement[] copy = new PsiElement[selectedValues.length];
            for (int i = 0; i < selectedValues.length; i++) {
                copy[i] = (PsiElement) selectedValues[i];
            }
            return new PsiCopyPasteManager.MyTransferable(copy);
        }

        @Override
        public int getSourceActions(JComponent c) {
            return COPY;
        }
    });

    list.setCellRenderer(listRenderer);
    list.setFont(ChooseByNameBase.getEditorFont());

    final PopupChooserBuilder builder = new PopupChooserBuilder(list);
    if (listRenderer instanceof PsiElementListCellRenderer) {
        ((PsiElementListCellRenderer) listRenderer).installSpeedSearch(builder);
    }

    PopupChooserBuilder popupChooserBuilder = builder.setTitle(title).setMovable(true).setResizable(true)
            .setItemChoosenCallback(new Runnable() {
                @Override
                public void run() {
                    int[] ids = list.getSelectedIndices();
                    if (ids == null || ids.length == 0)
                        return;
                    Object[] selectedElements = list.getSelectedValues();
                    consumer.consume(selectedElements);
                }
            }).setCancelCallback(new Computable<Boolean>() {
                @Override
                public Boolean compute() {
                    HintUpdateSupply.hideHint(list);
                    return true;
                }
            });
    final Ref<UsageView> usageView = new Ref<UsageView>();
    if (findUsagesTitle != null) {
        popupChooserBuilder = popupChooserBuilder.setCouldPin(new Processor<JBPopup>() {
            @Override
            public boolean process(JBPopup popup) {
                final List<NavigatablePsiElement> items = model.getItems();
                usageView.set(FindUtil.showInUsageView(null, items.toArray(new PsiElement[items.size()]),
                        findUsagesTitle, targets[0].getProject()));
                popup.cancel();
                return false;
            }
        });
    }

    final JBPopup popup = popupChooserBuilder.createPopup();

    builder.getScrollPane().setBorder(null);
    builder.getScrollPane().setViewportBorder(null);

    if (listUpdaterTask != null) {
        listUpdaterTask.init((AbstractPopup) popup, list, usageView);

        ProgressManager.getInstance().run(listUpdaterTask);
    }
    return popup;
}

From source file:com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageBaseFix.java

License:Apache License

private void chooseTargetClass(List<PsiClass> classes, final Editor editor) {
    final Project project = classes.get(0).getProject();

    final JList list = new JBList(classes);
    PsiElementListCellRenderer renderer = new PsiClassListCellRenderer();
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    list.setCellRenderer(renderer);//from w w w . j  a v a 2s  . c  o m
    final PopupChooserBuilder builder = new PopupChooserBuilder(list);
    renderer.installSpeedSearch(builder);

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int index = list.getSelectedIndex();
            if (index < 0)
                return;
            final PsiClass aClass = (PsiClass) list.getSelectedValue();
            CommandProcessor.getInstance().executeCommand(project, new Runnable() {
                @Override
                public void run() {
                    doInvoke(project, aClass);
                }
            }, getText(), null);
        }
    };

    builder.setTitle(QuickFixBundle.message("target.class.chooser.title")).setItemChoosenCallback(runnable)
            .createPopup().showInBestPositionFor(editor);
}

From source file:com.intellij.codeInsight.daemon.impl.quickfix.CreateInnerClassFromUsageFix.java

License:Apache License

private void chooseTargetClass(PsiClass[] classes, final Editor editor, final String superClassName) {
    final Project project = classes[0].getProject();

    final JList list = new JBList(classes);
    PsiElementListCellRenderer renderer = new PsiClassListCellRenderer();
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    list.setCellRenderer(renderer);//w  ww.j a va2  s  .co m
    final PopupChooserBuilder builder = new PopupChooserBuilder(list);
    renderer.installSpeedSearch(builder);

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int index = list.getSelectedIndex();
            if (index < 0)
                return;
            final PsiClass aClass = (PsiClass) list.getSelectedValue();
            CommandProcessor.getInstance().executeCommand(project, new Runnable() {
                @Override
                public void run() {
                    ApplicationManager.getApplication().runWriteAction(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                doInvoke(aClass, superClassName);
                            } catch (IncorrectOperationException e) {
                                LOG.error(e);
                            }
                        }
                    });

                }
            }, getText(), null);
        }
    };

    builder.setTitle(QuickFixBundle.message("target.class.chooser.title")).setItemChoosenCallback(runnable)
            .createPopup().showInBestPositionFor(editor);
}

From source file:com.intellij.codeInsight.highlighting.ChooseOneOrAllRunnable.java

License:Apache License

@Override
public void run() {
    if (myClasses.length == 1) {
        //TODO: cdr this place should produce at least warning
        // selected(myClasses[0]);
        selected((T[]) ArrayUtil.toObjectArray(myClasses[0].getClass(), myClasses[0]));
    } else if (myClasses.length > 0) {
        PsiElementListCellRenderer<T> renderer = createRenderer();

        Arrays.sort(myClasses, renderer.getComparator());

        if (ApplicationManager.getApplication().isUnitTestMode()) {
            selected(myClasses);/*from w ww. j a  va2  s  .c om*/
            return;
        }
        Vector<Object> model = new Vector<Object>(Arrays.asList(myClasses));
        model.insertElementAt(CodeInsightBundle.message("highlight.thrown.exceptions.chooser.all.entry"), 0);

        myList = new JBList(model);
        myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        myList.setCellRenderer(renderer);

        final PopupChooserBuilder builder = new PopupChooserBuilder(myList);
        renderer.installSpeedSearch(builder);

        final Runnable callback = new Runnable() {
            @Override
            public void run() {
                int idx = myList.getSelectedIndex();
                if (idx < 0)
                    return;
                if (idx > 0) {
                    selected((T[]) ArrayUtil.toObjectArray(myClasses[idx - 1].getClass(), myClasses[idx - 1]));
                } else {
                    selected(myClasses);
                }
            }
        };

        ApplicationManager.getApplication().invokeLater(new Runnable() {
            @Override
            public void run() {
                builder.setTitle(myTitle).setItemChoosenCallback(callback).createPopup()
                        .showInBestPositionFor(myEditor);
            }
        });
    }
}

From source file:com.intellij.codeInsight.intention.impl.CopyAbstractMethodImplementationHandler.java

License:Apache License

public void invoke() {
    ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
        @Override//from w ww. j a va2s . c o m
        public void run() {
            searchExistingImplementations();
        }
    }, CodeInsightBundle.message("searching.for.implementations"), false, myProject);
    if (mySourceMethods.isEmpty()) {
        Messages.showErrorDialog(myProject,
                CodeInsightBundle.message("copy.abstract.method.no.existing.implementations.found"),
                CodeInsightBundle.message("copy.abstract.method.title"));
        return;
    }
    if (mySourceMethods.size() == 1) {
        copyImplementation(mySourceMethods.get(0));
    } else {
        Collections.sort(mySourceMethods, new Comparator<PsiMethod>() {
            @Override
            public int compare(final PsiMethod o1, final PsiMethod o2) {
                PsiClass c1 = o1.getContainingClass();
                PsiClass c2 = o2.getContainingClass();
                return Comparing.compare(c1.getName(), c2.getName());
            }
        });
        final PsiMethod[] methodArray = mySourceMethods.toArray(new PsiMethod[mySourceMethods.size()]);
        final JList list = new JBList(methodArray);
        list.setCellRenderer(new MethodCellRenderer(true));
        final Runnable runnable = new Runnable() {
            @Override
            public void run() {
                int index = list.getSelectedIndex();
                if (index < 0)
                    return;
                PsiMethod element = (PsiMethod) list.getSelectedValue();
                copyImplementation(element);
            }
        };
        new PopupChooserBuilder(list).setTitle(CodeInsightBundle.message("copy.abstract.method.popup.title"))
                .setItemChoosenCallback(runnable).createPopup().showInBestPositionFor(myEditor);
    }
}