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

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

Introduction

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

Prototype

@Override
    @NotNull
    public PopupChooserBuilder<T> setCouldPin(@Nullable Processor<? super JBPopup> callback) 

Source Link

Usage

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 www  .j  a v a  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;
}