List of usage examples for com.intellij.openapi.ui.popup PopupChooserBuilder getScrollPane
public JScrollPane getScrollPane()
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); } }