From ffe9ad7a2e5f931d7ada55603b53e628f5aed68b Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Wed, 12 Jan 2022 18:35:11 +0300 Subject: [PATCH] IDEA-285489 Segmented buttons become vertical after installing language plugin GitOrigin-RevId: fe6fa51870d5d39af5e85cacee74fde399075f3e --- .../builder/impl/SegmentedButtonComponent.kt | 22 +++++++++++++++++-- .../dsl/builder/impl/SegmentedButtonImpl.kt | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonComponent.kt b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonComponent.kt index 04a27c9cdb71..11b3eede2bea 100644 --- a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonComponent.kt +++ b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonComponent.kt @@ -29,6 +29,7 @@ import java.awt.Graphics2D import java.awt.RenderingHints import java.awt.event.FocusEvent import java.awt.event.FocusListener +import java.util.* import javax.swing.JPanel private const val PLACE = "SegmentedButton" @@ -36,7 +37,14 @@ private const val PLACE = "SegmentedButton" @ApiStatus.Internal internal class SegmentedButtonComponent(items: Collection, private val renderer: (T) -> String) : JPanel(GridLayout()) { - var changeListener: (() -> Unit)? = null + + companion object { + @ApiStatus.Internal + internal fun interface SelectedItemListener: EventListener { + fun onChanged() + } + } + var spacing = SpacingConfiguration.EMPTY set(value) { field = value @@ -50,7 +58,9 @@ internal class SegmentedButtonComponent(items: Collection, private val ren setSelectedState(field, false) setSelectedState(value, true) field = value - changeListener?.invoke() + for (listener in listenerList.getListeners(SelectedItemListener::class.java)) { + listener.onChanged() + } repaint() } @@ -84,6 +94,14 @@ internal class SegmentedButtonComponent(items: Collection, private val ren actionRight.registerCustomShortcutSet(ActionUtil.getShortcutSet("SegmentedButton-right"), this) } + fun addSelectedItemListener(l: SelectedItemListener) { + listenerList.add(SelectedItemListener::class.java, l) + } + + fun removeSelectedItemListener(l: SelectedItemListener) { + listenerList.remove(SelectedItemListener::class.java, l) + } + override fun setEnabled(enabled: Boolean) { super.setEnabled(enabled) diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonImpl.kt index c95526b1d87b..71eabccdf398 100644 --- a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonImpl.kt +++ b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/SegmentedButtonImpl.kt @@ -145,7 +145,7 @@ internal class SegmentedButtonImpl(parent: RowImpl, private val renderer: (T) segmentedButtonComponent.selectedItem = it } } - segmentedButtonComponent.changeListener = { + segmentedButtonComponent.addSelectedItemListener { segmentedButtonComponent.selectedItem?.let { mutex.lockOrSkip { property.set(it)