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

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

Introduction

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

Prototype

@NotNull
    public PopupChooserBuilder<T> setItemChoosenCallback(@NotNull Runnable runnable) 

Source Link

Usage

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. j a  v  a2s . c om
 * @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: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);/*from w  w  w .j  ava 2 s. c om*/
    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.demonwav.mcdev.platform.mixin.insight.MixinLineMarkerProvider.java

License:Open Source License

@Nullable
@Override/*w  w w  .  j  a v a 2s.c  o  m*/
public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) {
    if (!(element instanceof PsiClass)) {
        return null;
    }
    final PsiClass psiClass = (PsiClass) element;

    if (MixinUtils.getContainingMixinClass(psiClass) == null) {
        return null;
    }

    if (!MixinUtils.isMixinModule(element)) {
        return null;
    }

    final PsiElement identifier = psiClass.getNameIdentifier();
    if (identifier == null) {
        return null;
    }

    return new MixinLineMarkerInfo(identifier, identifier.getTextRange(), Pass.UPDATE_ALL, getIcon(),
            (mouseEvent, psiElement) -> {
                final Editor editor = FileEditorManager.getInstance(psiClass.getProject())
                        .getSelectedTextEditor();
                if (editor == null) {
                    return;
                }

                final Map<PsiElement, PsiClass> psiClassMap = MixinUtils.getAllMixedClasses(psiClass);
                if (psiClassMap.isEmpty()) {
                    return;
                }

                // If there's only one, just navigate to that class
                if (psiClassMap.size() == 1) {
                    Map.Entry<PsiElement, PsiClass> entry = psiClassMap.entrySet().iterator().next();
                    PsiElement navElement = entry.getValue().getNavigationElement();
                    navElement = TargetElementUtil.getInstance().getGotoDeclarationTarget(entry.getValue(),
                            navElement);
                    if (navElement != null) {
                        McEditorUtil.gotoTargetElement(navElement, editor, psiClass.getContainingFile());
                    }
                    return;
                }

                final class Data {
                    public Icon icon;
                    public String text;
                    public int offset;
                    public Runnable runnable;

                    public Data(Icon icon, String text, int offset, Runnable runnable) {
                        this.icon = icon;
                        this.text = text;
                        this.offset = offset;
                        this.runnable = runnable;
                    }
                }

                // There's more than one, so create a pseudo-popup as if it was a merged icon
                List<Data> infos = Lists.newArrayList();
                for (Map.Entry<PsiElement, PsiClass> entry : psiClassMap.entrySet()) {
                    infos.add(new Data(getIcon(), entry.getKey().getText(), entry.getKey().getTextOffset(),
                            () -> {
                                PsiElement navElement = entry.getValue().getNavigationElement();
                                navElement = TargetElementUtil.getInstance()
                                        .getGotoDeclarationTarget(entry.getValue(), navElement);
                                if (navElement != null) {
                                    McEditorUtil.gotoTargetElement(navElement, editor,
                                            psiClass.getContainingFile());
                                }
                            }));
                }

                infos.sort(Comparator.comparingInt(o -> o.offset));
                final JBList<Data> list = new JBList<>(infos);
                PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(list);
                // Modified Jetbrains code
                list.installCellRenderer(dom -> {
                    if (dom instanceof Data) {
                        Icon icon = ((Data) dom).icon;
                        String text = ((Data) dom).text;

                        final JBLabel label = new JBLabel(text, icon, SwingConstants.LEFT);
                        label.setBorder(IdeBorderFactory.createEmptyBorder(2));
                        return label;
                    }

                    return new JBLabel();
                });
                builder.setItemChoosenCallback(() -> {
                    final Data value = list.getSelectedValue();
                    if (value != null) {
                        value.runnable.run();
                    }
                }).createPopup().show(new RelativePoint(mouseEvent));
                // End Jetbrains code
            });
}

From source file:com.intellij.codeInsight.navigation.NavigationUtil.java

License:Apache License

@NotNull
public static <T extends PsiElement> JBPopup getPsiElementPopup(@NotNull T[] elements,
        @NotNull final PsiElementListCellRenderer<T> renderer, @Nullable final String title,
        @NotNull final PsiElementProcessor<T> processor, @Nullable final T selection) {
    final JList list = new JBListWithHintProvider(elements) {
        @Nullable/*ww  w  .  ja  va 2  s . c om*/
        @Override
        protected PsiElement getPsiElementForHint(Object selectedValue) {
            return (PsiElement) selectedValue;
        }
    };
    list.setCellRenderer(renderer);

    list.setFont(ChooseByNameBase.getEditorFont());

    if (selection != null) {
        list.setSelectedValue(selection, true);
    }

    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int[] ids = list.getSelectedIndices();
            if (ids == null || ids.length == 0)
                return;
            for (Object element : list.getSelectedValues()) {
                if (element != null) {
                    processor.execute((T) element);
                }
            }
        }
    };

    PopupChooserBuilder builder = new PopupChooserBuilder(list);
    if (title != null) {
        builder.setTitle(title);
    }
    renderer.installSpeedSearch(builder, true);

    JBPopup popup = builder.setItemChoosenCallback(runnable).createPopup();

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

    return popup;
}

From source file:com.intellij.execution.ExecutionHelper.java

License:Apache License

public static void selectContentDescriptor(final @NotNull DataContext dataContext,
        final @NotNull Project project, @NotNull Collection<RunContentDescriptor> consoles,
        String selectDialogTitle, final Consumer<RunContentDescriptor> descriptorConsumer) {
    if (consoles.size() == 1) {
        RunContentDescriptor descriptor = consoles.iterator().next();
        descriptorConsumer.consume(descriptor);
        descriptorToFront(project, descriptor);
    } else if (consoles.size() > 1) {
        final JList list = new JBList(consoles);
        final Icon icon = DefaultRunExecutor.getRunExecutorInstance().getIcon();
        list.setCellRenderer(new ListCellRendererWrapper<RunContentDescriptor>() {
            @Override/*from   w w  w .  ja  v  a 2  s. c o m*/
            public void customize(final JList list, final RunContentDescriptor value, final int index,
                    final boolean selected, final boolean hasFocus) {
                setText(value.getDisplayName());
                setIcon(icon);
            }
        });

        final PopupChooserBuilder builder = new PopupChooserBuilder(list);
        builder.setTitle(selectDialogTitle);

        builder.setItemChoosenCallback(new Runnable() {
            @Override
            public void run() {
                final Object selectedValue = list.getSelectedValue();
                if (selectedValue instanceof RunContentDescriptor) {
                    RunContentDescriptor descriptor = (RunContentDescriptor) selectedValue;
                    descriptorConsumer.consume(descriptor);
                    descriptorToFront(project, descriptor);
                }
            }
        }).createPopup().showInBestPositionFor(dataContext);
    }
}

From source file:com.intellij.find.actions.ShowUsagesAction.java

License:Apache License

@NotNull
private JBPopup createUsagePopup(@NotNull final List<Usage> usages, @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 Runnable itemChoseCallback, @NotNull final UsageViewPresentation presentation,
        @NotNull final AsyncProcessIcon processIcon) {

    PopupChooserBuilder builder = new PopupChooserBuilder(table);
    final String title = presentation.getTabText();
    if (title != null) {
        String result = getFullTitle(usages, title, false, visibleNodes.size() - 1, true);
        builder.setTitle(result);//  w w  w .  j a v  a  2s .  c om
        builder.setAdText(getSecondInvocationTitle(options, handler));
    }

    builder.setMovable(true).setResizable(true);
    builder.setMovable(true).setResizable(true);
    builder.setItemChoosenCallback(itemChoseCallback);
    final JBPopup[] popup = new JBPopup[1];

    KeyboardShortcut shortcut = UsageViewImpl.getShowUsagesWithSettingsShortcut();
    if (shortcut != null) {
        new DumbAwareAction() {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e) {
                cancel(popup);
                showDialogAndFindUsages(handler, popupPosition, editor, maxUsages);
            }
        }.registerCustomShortcutSet(new CustomShortcutSet(shortcut.getFirstKeyStroke()), table);
    }
    shortcut = getShowUsagesShortcut();
    if (shortcut != null) {
        new DumbAwareAction() {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e) {
                cancel(popup);
                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() {
                    cancel(popup);
                }
            });

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

        @Override
        public JComponent getComponent() {
            return processIcon;
        }
    };
    final DefaultActionGroup pinGroup = new DefaultActionGroup();
    final ActiveComponent pin = createPinButton(handler, usageView, options, popup, pinGroup);
    builder.setCommandButton(new CompositeActiveComponent(spinningProgress, settingsButton, pin));

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

    toolbar.add(UsageGroupingRuleProviderImpl.createGroupByFileStructureAction(usageView));
    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, false, 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);
    }

    for (AnAction action : pinGroup.getChildren(null)) {
        action.unregisterCustomShortcutSet(usageView.getComponent());
        action.registerCustomShortcutSet(action.getShortcutSet(), content);
    }

    return popup[0];
}

From source file:com.intellij.ui.popup.util.MasterDetailPopupBuilder.java

License:Apache License

public JBPopup createMasterDetailPopup() {

    setupRenderer();//from   w  w w . j  av a 2  s.  c om

    myPathLabel = new JLabel(" ");
    myPathLabel.setHorizontalAlignment(SwingConstants.RIGHT);

    final Font font = myPathLabel.getFont();
    myPathLabel.setFont(font.deriveFont((float) 10));

    if (myDetailView == null) {
        myDetailView = new DetailViewImpl(myProject);
    }

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

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            IdeFocusManager.getInstance(myProject).doWhenFocusSettlesDown(new Runnable() {
                @Override
                public void run() {
                    Object[] values = getSelectedItems();
                    if (values.length == 1) {
                        myDelegate.itemChosen((ItemWrapper) values[0], myProject, myPopup, false);
                    } else {
                        for (Object value : values) {
                            if (value instanceof ItemWrapper) {
                                myDelegate.itemChosen((ItemWrapper) value, myProject, myPopup, false);
                            }
                        }
                    }
                }
            });
        }
    };

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

    JComponent toolBar = null;
    if (myActions != null) {
        myActionToolbar = ActionManager.getInstance().createActionToolbar("", myActions, true);
        myActionToolbar.setReservePlaceAutoPopupIcon(false);
        myActionToolbar.setMinimumButtonSize(new Dimension(20, 20));
        toolBar = myActionToolbar.getComponent();
        toolBar.setOpaque(false);
    }

    final PopupChooserBuilder builder = createInnerBuilder().setMovable(true).setResizable(true)
            .setAutoselectOnMouseMove(false).setSettingButton(toolBar).setSouthComponent(footerPanel)
            .setCancelOnWindowDeactivation(myCancelOnWindowDeactivation)
            .setCancelOnClickOutside(myCancelOnClickOutside)
            .setUseDimensionServiceForXYLocation(myUseDimensionServiceForXYLocation);

    if (myDoneRunnable != null) {

        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                myDoneRunnable.run();
            }
        };
        //native button is pretty enough
        if ((SystemInfo.isMacOSLion || SystemInfo.isMacOSMountainLion) && !UIUtil.isUnderDarcula()) {
            final JButton done = new JButton("Done");
            done.setMnemonic('o');
            done.addActionListener(actionListener);

            builder.setCommandButton(new ActiveComponent() {
                @Override
                public void setActive(boolean active) {
                }

                @Override
                public JComponent getComponent() {
                    return done;
                }
            });
        } else {
            builder.setCommandButton(new InplaceButton(
                    new IconButton("Close", AllIcons.Actions.CloseNew, AllIcons.Actions.CloseNewHovered),
                    actionListener));
        }
    }

    String title = myDelegate.getTitle();
    if (title != null) {
        builder.setTitle(title);
    }

    builder.setItemChoosenCallback(runnable).setCloseOnEnter(myCloseOnEnter).setMayBeParent(true)
            .setDimensionServiceKey(myDimensionServiceKey).setFilteringEnabled(new Function<Object, String>() {
                @Override
                public String fun(Object o) {
                    return ((ItemWrapper) o).speedSearchText();
                }
            });

    if (myMinSize != null) {
        builder.setMinSize(myMinSize);
    }

    myPopup = builder.createPopup();
    builder.getScrollPane().setBorder(IdeBorderFactory.createBorder(SideBorder.RIGHT));
    myPopup.addListener(new JBPopupListener() {
        @Override
        public void beforeShown(LightweightWindowEvent event) {
        }

        @Override
        public void onClosed(LightweightWindowEvent event) {
            myDetailView.clearEditor();
        }
    });

    if (myDoneRunnable != null) {
        new AnAction("Done") {
            @Override
            public void actionPerformed(AnActionEvent e) {
                myDoneRunnable.run();
            }
        }.registerCustomShortcutSet(KeyEvent.VK_ENTER, InputEvent.CTRL_DOWN_MASK, myPopup.getContent());
    }

    return myPopup;
}

From source file:com.squareup.ideaplugin.dagger.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);/*from w  ww .j  ava2 s  .c o m*/
    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, true);
        }
    });

    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:glslplugin.intentions.vectorcomponents.VectorComponentsIntention.java

License:Open Source License

protected void processIntention(PsiElement psiElement) {
    GLSLIdentifier elementTemp = null;/*from  ww  w  .jav a2 s  .c om*/
    if (psiElement instanceof GLSLIdentifier) {
        elementTemp = (GLSLIdentifier) psiElement;
    } else {
        PsiElement parent = psiElement.getParent();
        if (parent instanceof GLSLIdentifier) {
            elementTemp = (GLSLIdentifier) parent;
        }
    }
    if (elementTemp == null) {
        Logger.getInstance(VectorComponentsIntention.class)
                .warn("Could not find GLSLIdentifier for psiElement: " + psiElement);
        return;
    }
    final GLSLIdentifier element = elementTemp;

    String components = element.getText();

    createComponentVariants(components);

    String[] variants = new String[] { components + " -> " + results[0], components + " -> " + results[1] };
    //http://www.jetbrains.net/devnet/message/5208622#5208622
    final JBList list = new JBList((Object[]) variants);
    PopupChooserBuilder builder = new PopupChooserBuilder(list);
    builder.setTitle("Select Variant");
    builder.setItemChoosenCallback(new Runnable() {
        public void run() {
            WriteCommandAction writeAction = new WriteCommandAction(element.getProject(),
                    element.getContainingFile()) {
                @Override
                protected void run(@NotNull Result result) throws Throwable {
                    replaceIdentifierElement(element, results[list.getSelectedIndex()]);
                }
            };
            writeAction.execute();
        }
    });
    JBPopup popup = builder.createPopup();
    popup.showInBestPositionFor(getEditor());
}

From source file:org.apache.camel.idea.intention.CamelAddEndpointIntention.java

License:Apache License

@Override
public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element)
        throws IncorrectOperationException {
    // filter libraries to only be Camel libraries
    Set<String> artifacts = ServiceManager.getService(project, CamelService.class).getLibraries();

    // find the camel component from those libraries
    boolean consumerOnly = CamelIdeaUtils.isConsumerEndpoint(element);
    List<String> names = findCamelComponentNamesInArtifact(artifacts, consumerOnly, project);

    // no camel endpoints then exit
    if (names.isEmpty()) {
        return;/*from   w w w.  j  a v a  2 s  .  c om*/
    }

    // show popup to chose the component
    JBList list = new JBList(names.toArray(new Object[names.size()]));
    PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(list);
    builder.setAdText(names.size() + " components");
    builder.setTitle("Add Camel Endpoint");
    builder.setItemChoosenCallback(() -> {
        String line = (String) list.getSelectedValue();
        int pos = editor.getCaretModel().getCurrentCaret().getOffset();
        if (pos > 0) {
            // must run this as write action because we change the source code
            new WriteCommandAction(project, element.getContainingFile()) {
                @Override
                protected void run(@NotNull Result result) throws Throwable {
                    String text = line + ":";
                    editor.getDocument().insertString(pos, text);
                    editor.getCaretModel().moveToOffset(pos + text.length());
                }
            }.execute();
        }
    });

    JBPopup popup = builder.createPopup();
    popup.showInBestPositionFor(editor);
}