public LookupImpl(Project project, Editor editor, @NotNull LookupArranger arranger) { super(new JPanel(new BorderLayout())); setForceShowAsPopup(true); setCancelOnClickOutside(false); setResizable(true); AbstractPopup.suppressMacCornerFor(getComponent()); myProject = project; myEditor = editor; myArranger = arranger; myPresentableArranger = arranger; myCellRenderer = new LookupCellRenderer(this); myList.setCellRenderer(myCellRenderer); myList.setFocusable(false); myList.setFixedCellWidth(50); myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); myList.setBackground(LookupCellRenderer.BACKGROUND_COLOR); myList.getExpandableItemsHandler(); myAdComponent = new Advertiser(); myOffsets = new LookupOffsets(editor); final CollectionListModel<LookupElement> model = getListModel(); addEmptyItem(model); updateListHeight(model); addListeners(); }
@Override public void cancel(InputEvent e) { super.cancel(e); disposeChildren(); Disposer.dispose(this); getStep().canceled(); }
@Override public void show( final Component owner, final int aScreenX, final int aScreenY, final boolean considerForcedXY) { LOG.assertTrue(!isDisposed()); Rectangle targetBounds = new Rectangle(new Point(aScreenX, aScreenY), getContent().getPreferredSize()); ScreenUtil.moveRectangleToFitTheScreen(targetBounds); if (getParent() != null) { final Rectangle parentBounds = getParent().getBounds(); parentBounds.x += STEP_X_PADDING; parentBounds.width -= STEP_X_PADDING * 2; if (parentBounds.intersects(targetBounds)) { targetBounds.x = getParent().getBounds().x - targetBounds.width - STEP_X_PADDING; } } if (getParent() == null) { PopupDispatcher.setActiveRoot(this); } else { PopupDispatcher.setShowing(this); } LOG.assertTrue(!isDisposed(), "Disposed popup, parent=" + getParent()); super.show(owner, targetBounds.x, targetBounds.y, true); }
@Override public void setOk(boolean ok) { if (getParent() == null) { super.setOk(ok); } else { getParent().setOk(ok); } }
@Override public final void setFinalRunnable(Runnable runnable) { if (getParent() == null) { super.setFinalRunnable(runnable); } else { getParent().setFinalRunnable(runnable); } }
@Override protected void afterShow() { super.afterShow(); registerAutoMove(); if (!myFocusTrackback.isMustBeShown()) { cancel(); } }
@Override public void dispose() { super.dispose(); myAutoSelectionTimer.stop(); PopupDispatcher.unsetShowing(this); PopupDispatcher.clearRootIfNeeded(this); if (myOwnerWindow != null && myOwnerListener != null) { myOwnerWindow.removeComponentListener(myOwnerListener); } }
private void rebuildPopup( @NotNull final UsageViewImpl usageView, @NotNull final List<Usage> usages, @NotNull List<UsageNode> nodes, @NotNull final JTable table, @NotNull final JBPopup popup, @NotNull final UsageViewPresentation presentation, @NotNull final RelativePoint popupPosition, boolean findUsagesInProgress) { ApplicationManager.getApplication().assertIsDispatchThread(); boolean shouldShowMoreSeparator = usages.contains(MORE_USAGES_SEPARATOR); if (shouldShowMoreSeparator) { nodes.add(MORE_USAGES_SEPARATOR_NODE); } String title = presentation.getTabText(); String fullTitle = getFullTitle( usages, title, shouldShowMoreSeparator, nodes.size() - (shouldShowMoreSeparator ? 1 : 0), findUsagesInProgress); ((AbstractPopup) popup).setCaption(fullTitle); List<UsageNode> data = collectData(usages, nodes, usageView, presentation); MyModel tableModel = setTableModel(table, usageView, data); List<UsageNode> existingData = tableModel.getItems(); int row = table.getSelectedRow(); int newSelection = updateModel(tableModel, existingData, data, row == -1 ? 0 : row); if (newSelection < 0 || newSelection >= tableModel.getRowCount()) { TableScrollingUtil.ensureSelectionExists(table); newSelection = table.getSelectedRow(); } else { table.getSelectionModel().setSelectionInterval(newSelection, newSelection); } TableScrollingUtil.ensureIndexIsVisible(table, newSelection, 0); setSizeAndDimensions(table, popup, popupPosition, data); }
public void show() { // final long time = System.currentTimeMillis(); JComponent panel = createCenterPanel(); new MnemonicHelper().register(panel); boolean shouldSetWidth = DimensionService.getInstance().getSize(getDimensionServiceKey(), myProject) == null; myPopup = JBPopupFactory.getInstance() .createComponentPopupBuilder(panel, null) .setTitle(myTitle) .setResizable(true) .setModalContext(false) .setFocusable(true) .setMovable(true) .setBelongsToGlobalPopupStack(true) // .setCancelOnClickOutside(false) //for debug and snapshots .setCancelKeyEnabled(false) .setDimensionServiceKey(null, getDimensionServiceKey(), false) .setCancelCallback( new Computable<Boolean>() { @Override public Boolean compute() { DimensionService.getInstance() .setLocation( getDimensionServiceKey(), myPopup.getLocationOnScreen(), myProject); return true; } }) .createPopup(); myTree.addTreeSelectionListener( new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { if (myPopup.isVisible()) { final PopupUpdateProcessor updateProcessor = myPopup.getUserData(PopupUpdateProcessor.class); if (updateProcessor != null) { final AbstractTreeNode node = getSelectedNode(); updateProcessor.updatePopup(node); } } } }); Disposer.register(myPopup, this); Disposer.register( myPopup, new Disposable() { @Override public void dispose() { if (!myTreeHasBuilt.isDone()) { myTreeHasBuilt.setRejected(); } } }); myTree.getEmptyText().setText("Loading..."); final Point location = DimensionService.getInstance().getLocation(getDimensionServiceKey(), myProject); if (location != null) { myPopup.showInScreenCoordinates(myEditor.getContentComponent(), location); } else { myPopup.showCenteredInCurrentWindow(myProject); } ((AbstractPopup) myPopup).setShowHints(true); if (shouldSetWidth) { myPopup.setSize(new Dimension(myPreferredWidth + 10, myPopup.getSize().height)); } IdeFocusManager.getInstance(myProject).requestFocus(myTree, true); ApplicationManager.getApplication() .executeOnPooledThread( new Runnable() { @Override public void run() { final AccessToken token = ApplicationManager.getApplication().acquireReadActionLock(); try { myFilteringStructure.rebuild(); } finally { token.finish(); } SwingUtilities.invokeLater( new Runnable() { @Override public void run() { myAbstractTreeBuilder .queueUpdate() .doWhenDone( new Runnable() { @Override public void run() { myTreeHasBuilt.setDone(); //noinspection SSBasedInspection SwingUtilities.invokeLater( new Runnable() { @Override public void run() { selectPsiElement(myInitialPsiElement); } }); } }); } }); installUpdater(); } }); }
@Override public Point getCenterOf(JComponent container, JComponent content) { return AbstractPopup.getCenterOf(container, content); }