public void navigate(final Project project) { DefaultPsiElementListCellRenderer renderer = new DefaultPsiElementListCellRenderer(); final JList list = new JList(myPsiFiles); list.setCellRenderer(renderer); renderer.installSpeedSearch(list); final Runnable runnable = new Runnable() { public void run() { int[] ids = list.getSelectedIndices(); if (ids == null || ids.length == 0) return; Object[] selectedElements = list.getSelectedValues(); for (Object element : selectedElements) { Navigatable descriptor = EditSourceUtil.getDescriptor((PsiElement) element); if (descriptor != null && descriptor.canNavigate()) { descriptor.navigate(true); } } } }; final Editor editor = PlatformDataKeys.EDITOR.getData(DataManager.getInstance().getDataContext()); new PopupChooserBuilder(list) .setTitle("Choose file") .setItemChoosenCallback(runnable) .createPopup() .showInBestPositionFor(editor); }
private static boolean doChooseLanguageToInject( Editor editor, final Processor<Injectable> onChosen) { final List<Injectable> injectables = getAllInjectables(); final JList list = new JBList(injectables); list.setCellRenderer( new ColoredListCellRendererWrapper<Injectable>() { @Override protected void doCustomize( JList list, Injectable language, int index, boolean selected, boolean hasFocus) { setIcon(language.getIcon()); append(language.getDisplayName()); String description = language.getAdditionalDescription(); if (description != null) { append(description, SimpleTextAttributes.GRAYED_ATTRIBUTES); } } }); JBPopup popup = new PopupChooserBuilder(list) .setItemChoosenCallback( new Runnable() { public void run() { Injectable value = (Injectable) list.getSelectedValue(); onChosen.process(value); PropertiesComponent.getInstance() .setValue(LAST_INJECTED_LANGUAGE, value.getId()); } }) .setFilteringEnabled( new Function<Object, String>() { @Override public String fun(Object language) { return ((Injectable) language).getDisplayName(); } }) .createPopup(); final String lastInjected = PropertiesComponent.getInstance().getValue(LAST_INJECTED_LANGUAGE); if (lastInjected != null) { Injectable injectable = ContainerUtil.find( injectables, new Condition<Injectable>() { @Override public boolean value(Injectable injectable) { return lastInjected.equals(injectable.getId()); } }); list.setSelectedValue(injectable, true); } popup.showInBestPositionFor(editor); return true; }
private static void chooseAndPerform( Editor editor, List<TestFramework> frameworks, final Consumer<TestFramework> consumer) { if (frameworks.size() == 1) { consumer.consume(frameworks.get(0)); return; } final JList list = new JBList(frameworks.toArray(new TestFramework[frameworks.size()])); list.setCellRenderer( new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component result = super.getListCellRendererComponent(list, "", index, isSelected, cellHasFocus); if (value == null) return result; TestFramework framework = (TestFramework) value; setIcon(framework.getIcon()); setText(framework.getName()); return result; } }); PopupChooserBuilder builder = new PopupChooserBuilder(list); builder.setFilteringEnabled( new Function<Object, String>() { @Override public String fun(Object o) { return ((TestFramework) o).getName(); } }); builder .setTitle("Choose Framework") .setItemChoosenCallback( new Runnable() { @Override public void run() { consumer.consume((TestFramework) list.getSelectedValue()); } }) .setMovable(true) .createPopup() .showInBestPositionFor(editor); }
public void applyFix( @NotNull final Project project, @NotNull final ProblemDescriptor descriptor) { final PsiElement element = PsiTreeUtil.getParentOfType( descriptor.getPsiElement(), PsiJavaCodeReferenceElement.class); if (element instanceof PsiJavaCodeReferenceElement) { final PsiJavaCodeReferenceElement referenceElement = (PsiJavaCodeReferenceElement) element; Collections.sort( myClassesToImport, new PsiProximityComparator(referenceElement.getElement())); final JList list = new JBList(myClassesToImport.toArray(new PsiClass[myClassesToImport.size()])); list.setCellRenderer(new FQNameCellRenderer()); final Runnable runnable = new Runnable() { public void run() { if (!element.isValid()) return; final int index = list.getSelectedIndex(); if (index < 0) return; new WriteCommandAction(project, element.getContainingFile()) { protected void run(final Result result) throws Throwable { final PsiClass psiClass = myClassesToImport.get(index); if (psiClass.isValid()) { PsiDocumentManager.getInstance(project).commitAllDocuments(); referenceElement.bindToElement(psiClass); } } }.execute(); } }; final AsyncResult<DataContext> asyncResult = DataManager.getInstance().getDataContextFromFocus(); asyncResult.doWhenDone( new AsyncResult.Handler<DataContext>() { @Override public void run(DataContext dataContext) { final Editor editor = PlatformDataKeys.EDITOR.getData(dataContext); assert editor != null; // available for on the fly mode only new PopupChooserBuilder(list) .setTitle(QuickFixBundle.message("class.to.import.chooser.title")) .setItemChoosenCallback(runnable) .createPopup() .showInBestPositionFor(editor); } }); } }
private void selectSourceAndDo() { // GUI part ImportCandidateHolder[] items = mySources.toArray( new ImportCandidateHolder [mySources.size()]); // silly JList can't handle modern collections final JList list = new JBList(items); list.setCellRenderer(new CellRenderer(myName)); final Runnable runnable = new Runnable() { public void run() { final Object selected = list.getSelectedValue(); if (selected instanceof ImportCandidateHolder) { final ImportCandidateHolder item = (ImportCandidateHolder) selected; PsiDocumentManager.getInstance(myTarget.getProject()).commitAllDocuments(); doWriteAction(item); } } }; DataManager.getInstance() .getDataContextFromFocus() .doWhenDone( new Consumer<DataContext>() { @Override public void consume(DataContext dataContext) { new PopupChooserBuilder(list) .setTitle( myUseQualifiedImport ? PyBundle.message("ACT.qualify.with.module") : PyBundle.message("ACT.from.some.module.import")) .setItemChoosenCallback(runnable) .setFilteringEnabled( new Function<Object, String>() { @Override public String fun(Object o) { return ((ImportCandidateHolder) o).getPresentableText(myName); } }) .createPopup() .showInBestPositionFor(dataContext); } }); }
// value is a QualifiedHolder public Component getListCellRendererComponent( JList list, Object value, // expected to be int index, boolean isSelected, boolean cellHasFocus) { clear(); ImportCandidateHolder item = (ImportCandidateHolder) value; setIcon(item.getImportable().getIcon(0)); String item_name = item.getPresentableText(myName); append(item_name, SimpleTextAttributes.REGULAR_ATTRIBUTES); setFont(FONT); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } return this; }