IJPL-156230 ui: Introduce ActionButtonUtil

A set of util methods that help to travers the UI tree and find `ActionButton` component

GitOrigin-RevId: a33a87f7f17c4cbe10423a9a6382787399f1f80b
This commit is contained in:
Aleksandr Krasilnikov
2024-06-06 12:15:35 +02:00
committed by intellij-monorepo-bot
parent 28aa440bce
commit 7c012ef721
6 changed files with 48 additions and 27 deletions

View File

@@ -11987,6 +11987,12 @@ pf:com.intellij.openapi.actionSystem.impl.ActionButton$AccessibleActionButton
- getAccessibleName():java.lang.String
- getAccessibleRole():javax.accessibility.AccessibleRole
- getAccessibleStateSet():javax.accessibility.AccessibleStateSet
f:com.intellij.openapi.actionSystem.impl.ActionButtonUtil
- sf:INSTANCE:com.intellij.openapi.actionSystem.impl.ActionButtonUtil
- sf:findActionButton(javax.swing.JComponent,kotlin.jvm.functions.Function1):com.intellij.openapi.actionSystem.impl.ActionButton
- sf:findActionButtonById(javax.swing.JComponent,java.lang.String):com.intellij.openapi.actionSystem.impl.ActionButton
- sf:findToolbarActionButton(com.intellij.openapi.actionSystem.ActionToolbar,kotlin.jvm.functions.Function1):com.intellij.openapi.actionSystem.impl.ActionButton
- sf:findToolbarActionButtonById(com.intellij.openapi.actionSystem.ActionToolbar,java.lang.String):com.intellij.openapi.actionSystem.impl.ActionButton
c:com.intellij.openapi.actionSystem.impl.ActionButtonWithText
- com.intellij.openapi.actionSystem.impl.ActionButton
- sf:SHORTCUT_SHOULD_SHOWN:com.intellij.openapi.util.Key

View File

@@ -0,0 +1,34 @@
package com.intellij.openapi.actionSystem.impl
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionToolbar
import com.intellij.util.ui.UIUtil
import javax.swing.JComponent
object ActionButtonUtil {
@JvmStatic
fun findActionButton(component: JComponent,
condition: (ActionButton) -> Boolean): ActionButton? {
return UIUtil.uiTraverser(component)
.filter(ActionButton::class.java)
.filter { condition(it) }
.first()
}
@JvmStatic
fun findToolbarActionButton(toolbar: ActionToolbar, condition: (ActionButton) -> Boolean): ActionButton? {
return findActionButton(toolbar.component, condition)
}
@JvmStatic
fun findActionButtonById(component: JComponent, actionId: String): ActionButton? {
return findActionButton(component) { button ->
ActionManager.getInstance().getId(button.action) == actionId
}
}
@JvmStatic
fun findToolbarActionButtonById(toolbar: ActionToolbar, actionId: String): ActionButton? {
return findActionButtonById(toolbar.component, actionId)
}
}

View File

@@ -9,12 +9,12 @@ import com.intellij.diff.editor.DiffRequestProcessorEditorCustomizer
import com.intellij.diff.util.DiffUserDataKeysEx
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.ActionToolbar
import com.intellij.openapi.actionSystem.impl.ActionButtonUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vcs.VcsBundle
import com.intellij.openapi.vcs.changes.ui.ActionToolbarGotItTooltip
import com.intellij.openapi.vcs.changes.ui.findToolbarActionButton
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.ui.update.DisposableUpdate
import com.intellij.util.ui.update.MergingUpdateQueue
@@ -53,7 +53,7 @@ private class ShowDiffInEditorTabTooltipHolder(disposable: Disposable,
private fun showGotItTooltip() {
val diffSettingsButton: (ActionToolbar) -> JComponent? = { toolbar ->
findToolbarActionButton(toolbar) { action -> action is SetEditorSettingsActionGroup || action is SetEditorSettingsAction }
ActionButtonUtil.findToolbarActionButton(toolbar) { b -> b.action is SetEditorSettingsActionGroup || b.action is SetEditorSettingsAction }
}
notificationQueue.queue(DisposableUpdate.createDisposable(this, TOOLTIP_ID) {
ActionToolbarGotItTooltip(TOOLTIP_ID, VcsBundle.message("show.diff.in.editor.tab.got.it.tooltip"),

View File

@@ -5,12 +5,9 @@ import com.intellij.internal.statistic.collectors.fus.ui.GotItUsageCollector
import com.intellij.internal.statistic.collectors.fus.ui.GotItUsageCollectorGroup
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.ActionToolbar
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.impl.ActionButton
import com.intellij.openapi.ui.popup.Balloon
import com.intellij.openapi.util.Disposer
import com.intellij.ui.GotItTooltip
import com.intellij.util.ui.UIUtil
import com.intellij.util.ui.update.Activatable
import com.intellij.util.ui.update.UiNotifyConnector
import org.jetbrains.annotations.Nls
@@ -52,10 +49,3 @@ internal class ActionToolbarGotItTooltip(@NonNls private val id: String,
if (dispose) Disposer.dispose(tooltipDisposable)
}
}
internal fun findToolbarActionButton(toolbar: ActionToolbar, condition: (AnAction) -> Boolean): JComponent? {
return UIUtil.uiTraverser(toolbar.component)
.filter(ActionButton::class.java)
.filter { condition(it.action) }
.first()
}

View File

@@ -6,7 +6,7 @@ import com.intellij.openapi.actionSystem.ActionGroup
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.actionSystem.impl.ActionButton
import com.intellij.openapi.actionSystem.impl.ActionButtonUtil
import com.intellij.openapi.editor.colors.EditorColorsListener
import com.intellij.openapi.editor.colors.EditorColorsScheme
import com.intellij.openapi.project.Project
@@ -29,7 +29,6 @@ import com.intellij.util.ui.JBUI
import com.intellij.util.ui.JBUI.Borders.empty
import com.intellij.util.ui.JBUI.Borders.emptyLeft
import com.intellij.util.ui.JBUI.scale
import com.intellij.util.ui.UIUtil.uiTraverser
import com.intellij.util.ui.components.BorderLayoutPanel
import com.intellij.vcsUtil.VcsUIUtil
import org.jetbrains.annotations.Nls
@@ -192,7 +191,6 @@ abstract class NonModalCommitPanel(
}
}
private fun CommitActionsPanel.getShowCommitOptionsButton(): JComponent? =
uiTraverser(this)
.filter(ActionButton::class.java)
.find { it.action is ShowCommitOptionsAction }
private fun CommitActionsPanel.getShowCommitOptionsButton(): JComponent? = ActionButtonUtil.findActionButton(this) {
it.action is ShowCommitOptionsAction
}

View File

@@ -16,7 +16,7 @@ import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.ide.util.treeView.NodeRenderer;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.impl.ActionButton;
import com.intellij.openapi.actionSystem.impl.ActionButtonUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.client.ClientSystemInfo;
@@ -182,7 +182,7 @@ public class CoverageView extends BorderLayoutPanel implements DataProvider, Dis
final String message = CoverageBundle.message("coverage.filter.gotit", myViewExtension.getElementsName());
final GotItTooltip gotIt = new GotItTooltip("coverage.view.elements.filter", message, this);
if (gotIt.canShow()) {
final JComponent filterAction = findToolbarActionButtonWithIcon(actionToolbar, FILTER_ICON);
final JComponent filterAction = ActionButtonUtil.findToolbarActionButton(actionToolbar, button -> button.getIcon() == FILTER_ICON);
if (filterAction != null) {
gotIt.show(filterAction, GotItTooltip.BOTTOM_MIDDLE);
}
@@ -653,11 +653,4 @@ public class CoverageView extends BorderLayoutPanel implements DataProvider, Dis
}).submit(AppExecutorUtil.getAppExecutorService());
}
}
private static JComponent findToolbarActionButtonWithIcon(ActionToolbar toolbar, Icon icon) {
return UIUtil.uiTraverser(toolbar.getComponent())
.filter(ActionButton.class)
.filter(button -> button.getIcon() == icon)
.first();
}
}