List of usage examples for com.intellij.openapi.ui.popup PopupChooserBuilder createPopup
@Override
@NotNull
public JBPopup createPopup()
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 a 2 s.c o m * @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 ww w. j a va 2s .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.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];//from w ww . j a va2 s .c o 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.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; });/*w ww.jav a 2s. c o m*/ 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 www .j ava 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.unwrap.UnwrapHandler.java
License:Apache License
private void showPopup(final List<AnAction> options, Editor editor) { final ScopeHighlighter highlighter = new ScopeHighlighter(editor); DefaultListModel m = new DefaultListModel(); for (AnAction a : options) { m.addElement(((MyUnwrapAction) a).getName()); }//from w w w .j ava2 s. co m final JList list = new JBList(m); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setVisibleRowCount(options.size()); list.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { int index = list.getSelectedIndex(); if (index < 0) return; MyUnwrapAction a = (MyUnwrapAction) options.get(index); List<PsiElement> toExtract = new ArrayList<PsiElement>(); PsiElement wholeRange = a.collectAffectedElements(toExtract); highlighter.highlight(wholeRange, toExtract); } }); PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(list); builder.setTitle(CodeInsightBundle.message("unwrap.popup.title")).setMovable(false).setResizable(false) .setRequestFocus(true).setItemChoosenCallback(new Runnable() { @Override public void run() { MyUnwrapAction a = (MyUnwrapAction) options.get(list.getSelectedIndex()); a.actionPerformed(null); } }).addListener(new JBPopupAdapter() { @Override public void onClosed(LightweightWindowEvent event) { highlighter.dropHighlight(); } }); JBPopup popup = builder.createPopup(); popup.showInBestPositionFor(editor); }
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);/*from w ww . j a v a 2 s . c o m*/ 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.ide.actions.BaseShowRecentFilesAction.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];//from www .j a va 2 s .c om boolean isSelected = ArrayUtil.find(selectedFiles, file) >= 0; if ((!isSelected || !file.equals(currentFile)) && editorProviderManager.getProviders(project, file).length > 0) { // 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; FileEditorManager.getInstance(project).openFile(file, true, true); } } }; 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.ui.popup.util.MasterDetailPopupBuilder.java
License:Apache License
public JBPopup createMasterDetailPopup() { setupRenderer();/* w ww.j a va 2s . co m*/ 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 w w . ja v a 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, 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]; }