From 84c696653f77b407f6ff143b0543757109b905b2 Mon Sep 17 00:00:00 2001 From: andrey zaytsev Date: Thu, 22 Mar 2018 15:37:30 +0300 Subject: [PATCH] Popups: cleanup - fix popups font - fix hint update - cleaner API --- .../daemon/impl/PsiElementListNavigator.java | 18 +++---------- .../navigation/GotoTargetHandler.java | 14 +--------- .../openapi/ui/popup/PopupChooserBuilder.java | 27 +++++++++++++++---- .../intellij/ui/popup/PopupListAdapter.java | 5 ++++ 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java index 1b8449dcd62a..7e140e502abb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PsiElementListNavigator.java @@ -35,8 +35,6 @@ import com.intellij.psi.NavigatablePsiElement; import com.intellij.psi.PsiElement; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.JBList; -import com.intellij.ui.popup.HintUpdateSupply; -import com.intellij.ui.speedSearch.ListWithFilter; import com.intellij.usages.UsageView; import com.intellij.util.Alarm; import com.intellij.util.ArrayUtil; @@ -137,7 +135,6 @@ public class PsiElementListNavigator { return null; } List targetsList = Arrays.asList(targets); - final JBList[] listR = new JBList[1]; final IPopupChooserBuilder builder = JBPopupFactory.getInstance().createPopupChooserBuilder(targetsList); if (listRenderer instanceof PsiElementListCellRenderer) { ((PsiElementListCellRenderer)listRenderer).installSpeedSearch(builder); @@ -148,14 +145,10 @@ public class PsiElementListNavigator { setMovable(true). setFont(EditorUtil.getEditorFont()). setRenderer(listRenderer). + withHintUpdateSupply(). setResizable(true). - setItemsChosenCallback(selectedValues -> { - consumer.consume(ArrayUtil.toObjectArray(selectedValues)); - }). + setItemsChosenCallback(selectedValues -> consumer.consume(ArrayUtil.toObjectArray(selectedValues))). setCancelCallback(() -> { - if (listR[0] != null) { - HintUpdateSupply.hideHint(listR[0]); - } if (listUpdaterTask != null) { listUpdaterTask.cancelTask(); } @@ -171,11 +164,9 @@ public class PsiElementListNavigator { } final JBPopup popup = popupChooserBuilder.createPopup(); - if (builder instanceof PopupChooserBuilder && ((PopupChooserBuilder)builder).getChooserComponent() instanceof ListWithFilter) { - JBList list = (JBList)((ListWithFilter)((PopupChooserBuilder)builder).getChooserComponent()).getList(); - HintUpdateSupply.installSimpleHintUpdateSupply(list); + if (builder instanceof PopupChooserBuilder) { + JBList list = (JBList)((PopupChooserBuilder)builder).getChooserComponent(); list.setTransferHandler(new TransferHandler(){ - @Nullable @Override protected Transferable createTransferable(JComponent c) { final Object[] selectedValues = list.getSelectedValues(); @@ -191,7 +182,6 @@ public class PsiElementListNavigator { return COPY; } }); - listR[0] = list; } if (builder instanceof PopupChooserBuilder) { JScrollPane pane = ((PopupChooserBuilder)builder).getScrollPane(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoTargetHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoTargetHandler.java index b2df798a10d1..21db4f861498 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoTargetHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoTargetHandler.java @@ -42,9 +42,6 @@ import com.intellij.pom.Navigatable; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiNamedElement; -import com.intellij.ui.components.JBList; -import com.intellij.ui.popup.HintUpdateSupply; -import com.intellij.ui.speedSearch.ListWithFilter; import com.intellij.usages.UsageView; import com.intellij.util.Alarm; import com.intellij.util.ArrayUtil; @@ -127,7 +124,6 @@ public abstract class GotoTargetHandler implements CodeInsightActionHandler { Collections.addAll(allElements, targets); allElements.addAll(additionalActions); - final Ref> listR = new Ref<>(); final IPopupChooserBuilder builder = JBPopupFactory.getInstance().createPopupChooserBuilder(allElements); final Ref usageView = new Ref<>(); final JBPopup popup = builder.setNamerForFiltering(o -> { @@ -167,11 +163,9 @@ public abstract class GotoTargetHandler implements CodeInsightActionHandler { } } }). + withHintUpdateSupply(). setMovable(true). setCancelCallback(() -> { - if (!listR.isNull()) { - HintUpdateSupply.hideHint(listR.get()); - } final BackgroundUpdaterTask task = gotoData.listUpdaterTask; if (task != null) { task.cancelTask(); @@ -186,12 +180,6 @@ public abstract class GotoTargetHandler implements CodeInsightActionHandler { setAdText(getAdText(gotoData.source, targets.length)). createPopup(); - if (builder instanceof PopupChooserBuilder && ((PopupChooserBuilder)builder).getChooserComponent() instanceof ListWithFilter) { - JBList list = (JBList)((ListWithFilter)((PopupChooserBuilder)builder).getChooserComponent()).getList(); - HintUpdateSupply.installSimpleHintUpdateSupply(list); - listR.set(list); - } - JScrollPane pane = builder instanceof PopupChooserBuilder ? ((PopupChooserBuilder)builder).getScrollPane() : null; if (pane != null) { pane.setBorder(null); diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java index 98d83f090636..22ba570c67e7 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java @@ -70,6 +70,10 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { public interface PopupComponentAdapter { JComponent getComponent(); + default JComponent getChooserComponent() { + return getComponent(); + } + default void setRenderer(ListCellRenderer renderer) {} void setItemChosenCallback(Consumer callback); @@ -109,10 +113,14 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { default BooleanFunction getKeyEventHandler() { return null; } + + default void setFont(Font f) { + getChooserComponent().setFont(f); + } } @Override - public PopupChooserBuilder setCancelOnClickOutside(boolean cancelOnClickOutside) { + public PopupChooserBuilder setCancelOnClickOutside(boolean cancelOnClickOutside) { myCancelOnClickOutside = cancelOnClickOutside; return this; } @@ -159,7 +167,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { } public JComponent getChooserComponent() { - return myChooserComponent.getComponent(); + return myChooserComponent.getChooserComponent(); } @NotNull @@ -235,7 +243,7 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { @Override public PopupChooserBuilder setCancelCallback(Computable callback) { - myCancelCallback = callback; + addCancelCallback(callback); return this; } @@ -523,15 +531,24 @@ public class PopupChooserBuilder implements IPopupChooserBuilder { return this; } + private void addCancelCallback(Computable cbb) { + Computable callback = myCancelCallback; + myCancelCallback = () -> cbb.compute() && callback.compute(); + } + @Override public IPopupChooserBuilder withHintUpdateSupply() { - HintUpdateSupply.installSimpleHintUpdateSupply(myChooserComponent.getComponent()); + HintUpdateSupply.installSimpleHintUpdateSupply(myChooserComponent.getChooserComponent()); + addCancelCallback(() -> { + HintUpdateSupply.hideHint(myChooserComponent.getChooserComponent()); + return true; + }); return this; } @Override public IPopupChooserBuilder setFont(Font f) { - myChooserComponent.getComponent().setFont(f); + myChooserComponent.setFont(f); return this; } diff --git a/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java b/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java index 2e33915e11ea..8739913775f0 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/PopupListAdapter.java @@ -45,6 +45,11 @@ class PopupListAdapter implements PopupChooserBuilder.PopupComponentAdapter