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