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

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

Introduction

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

Prototype

public JScrollPane getScrollPane() 

Source Link

Usage

From source file:com.goide.codeInsight.imports.GoImportPackageQuickFix.java

License:Apache License

private void perform(@Nonnull List<String> packagesToImport, @Nonnull PsiFile file, @Nullable Editor editor) {
    LOG.assertTrue(editor != null || packagesToImport.size() == 1,
            "Cannot invoke fix with ambiguous imports on null editor");
    if (packagesToImport.size() > 1 && editor != null) {
        JBList list = new JBList(packagesToImport);
        list.installCellRenderer(o -> {
            JBLabel label = new JBLabel(o.toString(), TargetAWT.to(GoIcons.PACKAGE), SwingConstants.LEFT);
            label.setBorder(IdeBorderFactory.createEmptyBorder(2, 4, 2, 4));
            return label;
        });/*  www .j  a v a 2s .  c om*/
        PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(list)
                .setRequestFocus(true).setTitle("Package to import").setItemChoosenCallback(() -> {
                    int i = list.getSelectedIndex();
                    if (i < 0)
                        return;
                    perform(file, packagesToImport.get(i));
                }).setFilteringEnabled(o -> o instanceof String ? (String) o : o.toString());
        JBPopup popup = builder.createPopup();
        builder.getScrollPane().setBorder(null);
        builder.getScrollPane().setViewportBorder(null);
        popup.showInBestPositionFor(editor);
    } else if (packagesToImport.size() == 1) {
        perform(file, getFirstItem(packagesToImport));
    } else {
        String packages = StringUtil.join(packagesToImport, ",");
        throw new IncorrectOperationException(
                "Cannot invoke fix with ambiguous imports on editor ()" + editor + ". Packages: " + packages);
    }
}

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);/*from  w ww.ja va 2  s .c o m*/
        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.navigation.GotoTargetHandler.java

License:Apache License

private void show(@NotNull final Project project, @NotNull Editor editor, @NotNull PsiFile file,
        @NotNull final GotoData gotoData) {
    final PsiElement[] targets = gotoData.targets;
    final List<AdditionalAction> additionalActions = gotoData.additionalActions;

    if (targets.length == 0 && additionalActions.isEmpty()) {
        HintManager.getInstance().showErrorHint(editor, getNotFoundMessage(project, editor, file));
        return;//from ww w .j  a va  2 s  .co  m
    }

    if (targets.length == 1 && additionalActions.isEmpty()) {
        Navigatable descriptor = targets[0] instanceof Navigatable ? (Navigatable) targets[0]
                : EditSourceUtil.getDescriptor(targets[0]);
        if (descriptor != null && descriptor.canNavigate()) {
            navigateToElement(descriptor);
        }
        return;
    }

    for (PsiElement eachTarget : targets) {
        gotoData.renderers.put(eachTarget, createRenderer(gotoData, eachTarget));
    }

    final String name = ((PsiNamedElement) gotoData.source).getName();
    final String title = getChooserTitle(gotoData.source, name, targets.length);

    if (shouldSortTargets()) {
        Arrays.sort(targets, createComparator(gotoData.renderers, gotoData));
    }

    List<Object> allElements = new ArrayList<Object>(targets.length + additionalActions.size());
    Collections.addAll(allElements, targets);
    allElements.addAll(additionalActions);

    final JBListWithHintProvider list = new JBListWithHintProvider(
            new CollectionListModel<Object>(allElements)) {
        @Override
        protected PsiElement getPsiElementForHint(final Object selectedValue) {
            return selectedValue instanceof PsiElement ? (PsiElement) selectedValue : null;
        }
    };

    list.setFont(ChooseByNameBase.getEditorFont());

    list.setCellRenderer(new DefaultListCellRenderer() {
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
                boolean cellHasFocus) {
            if (value == null)
                return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            if (value instanceof AdditionalAction) {
                return myActionElementRenderer.getListCellRendererComponent(list, value, index, isSelected,
                        cellHasFocus);
            }
            PsiElementListCellRenderer renderer = getRenderer(value, gotoData.renderers, gotoData);
            return renderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        }
    });

    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int[] ids = list.getSelectedIndices();
            if (ids == null || ids.length == 0)
                return;
            Object[] selectedElements = list.getSelectedValues();
            for (Object element : selectedElements) {
                if (element instanceof AdditionalAction) {
                    ((AdditionalAction) element).execute();
                } else {
                    Navigatable nav = element instanceof Navigatable ? (Navigatable) element
                            : EditSourceUtil.getDescriptor((PsiElement) element);
                    try {
                        if (nav != null && nav.canNavigate()) {
                            navigateToElement(nav);
                        }
                    } catch (IndexNotReadyException e) {
                        DumbService.getInstance(project)
                                .showDumbModeNotification("Navigation is not available while indexing");
                    }
                }
            }
        }
    };

    final PopupChooserBuilder builder = new PopupChooserBuilder(list);
    builder.setFilteringEnabled(new Function<Object, String>() {
        @Override
        public String fun(Object o) {
            if (o instanceof AdditionalAction) {
                return ((AdditionalAction) o).getText();
            }
            return getRenderer(o, gotoData.renderers, gotoData).getElementText((PsiElement) o);
        }
    });

    final Ref<UsageView> usageView = new Ref<UsageView>();
    final JBPopup popup = builder.setTitle(title).setItemChoosenCallback(runnable).setMovable(true)
            .setCancelCallback(new Computable<Boolean>() {
                @Override
                public Boolean compute() {
                    HintUpdateSupply.hideHint(list);
                    return true;
                }
            }).setCouldPin(new Processor<JBPopup>() {
                @Override
                public boolean process(JBPopup popup) {
                    usageView.set(FindUtil.showInUsageView(gotoData.source, gotoData.targets,
                            getFindUsagesTitle(gotoData.source, name, gotoData.targets.length), project));
                    popup.cancel();
                    return false;
                }
            }).setAdText(getAdText(gotoData.source, targets.length)).createPopup();

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

    if (gotoData.listUpdaterTask != null) {
        gotoData.listUpdaterTask.init((AbstractPopup) popup, list, usageView);
        ProgressManager.getInstance().run(gotoData.listUpdaterTask);
    }
    popup.showInBestPositionFor(editor);
}

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 . j a  v a  2  s.  c o m
        @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.ui.popup.util.MasterDetailPopupBuilder.java

License:Apache License

public JBPopup createMasterDetailPopup() {

    setupRenderer();//from w  w  w  .  j  a  v  a  2  s  .com

    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:io.ballerina.plugins.idea.codeinspection.BallerinaImportPackageQuickFix.java

License:Open Source License

private void performImport(@NotNull List<String> packagesToImport, @NotNull BallerinaFile file,
        @Nullable Editor editor) {//from   w w w.j a  va 2s. c  om
    if (packagesToImport.size() > 1 && editor != null) {
        JBList<String> list = new JBList<>(packagesToImport);
        list.installCellRenderer(o -> {
            JBLabel label = new JBLabel(o.toString(), BallerinaIcons.PACKAGE, SwingConstants.LEFT);
            label.setBorder(JBUI.Borders.empty(2, 4));
            return label;
        });
        PopupChooserBuilder popupChooserBuilder = JBPopupFactory.getInstance().createListPopupBuilder(list)
                .setRequestFocus(true).setTitle("Package to import").setItemChoosenCallback(() -> {
                    int i = list.getSelectedIndex();
                    if (i < 0) {
                        return;
                    }
                    performImport(file, packagesToImport.get(i));
                }).setFilteringEnabled(item -> item instanceof String ? (String) item : item.toString());
        JBPopup popup = popupChooserBuilder.createPopup();
        popupChooserBuilder.getScrollPane().setBorder(null);
        popupChooserBuilder.getScrollPane().setViewportBorder(null);
        popup.showInBestPositionFor(editor);
    }
}

From source file:org.ballerinalang.plugins.idea.codeinspection.BallerinaImportPackageQuickFix.java

License:Open Source License

private void performImport(@NotNull List<String> packagesToImport, @NotNull PsiFile file,
        @Nullable Editor editor) {/*from  ww  w . ja v a 2s .com*/
    if (packagesToImport.size() > 1 && editor != null) {
        JBList<String> list = new JBList<>(packagesToImport);
        list.installCellRenderer(o -> {
            JBLabel label = new JBLabel(o.toString(), BallerinaIcons.PACKAGE, SwingConstants.LEFT);
            label.setBorder(IdeBorderFactory.createEmptyBorder(2, 4, 2, 4));
            return label;
        });
        PopupChooserBuilder popupChooserBuilder = JBPopupFactory.getInstance().createListPopupBuilder(list)
                .setRequestFocus(true).setTitle("Package to import").setItemChoosenCallback(() -> {
                    int i = list.getSelectedIndex();
                    if (i < 0) {
                        return;
                    }
                    performImport(file, packagesToImport.get(i));
                }).setFilteringEnabled(item -> item instanceof String ? (String) item : item.toString());
        JBPopup popup = popupChooserBuilder.createPopup();
        popupChooserBuilder.getScrollPane().setBorder(null);
        popupChooserBuilder.getScrollPane().setViewportBorder(null);
        popup.showInBestPositionFor(editor);
    }
}