mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Support buttonGroup with property binding at any level, support binding to getter/setter pair
GitOrigin-RevId: aff801f304a984b335af51d2850b237c87329c47
This commit is contained in:
committed by
intellij-monorepo-bot
parent
42130bc347
commit
624ff3b0a7
@@ -11,7 +11,6 @@ import java.awt.event.ActionListener
|
||||
import javax.swing.ButtonGroup
|
||||
import javax.swing.JComponent
|
||||
import javax.swing.JLabel
|
||||
import kotlin.reflect.KMutableProperty0
|
||||
|
||||
open class LayoutBuilder @PublishedApi internal constructor(@PublishedApi internal val builder: LayoutBuilderImpl, override val buttonGroup: ButtonGroup? = null) : RowBuilder {
|
||||
override fun createChildRow(label: JLabel?, buttonGroup: ButtonGroup?, isSeparated: Boolean, noGrid: Boolean, title: String?): Row {
|
||||
@@ -22,10 +21,6 @@ open class LayoutBuilder @PublishedApi internal constructor(@PublishedApi intern
|
||||
return builder.rootRow.createNoteOrCommentRow(component)
|
||||
}
|
||||
|
||||
fun <T : Any> buttonGroup(prop: KMutableProperty0<T>, init: LayoutBuilderWithButtonGroupProperty<T>.() -> Unit) {
|
||||
LayoutBuilderWithButtonGroupProperty(builder, prop).init()
|
||||
}
|
||||
|
||||
inline fun buttonGroup(crossinline elementActionListener: () -> Unit, init: LayoutBuilder.() -> Unit): ButtonGroup {
|
||||
val group = ButtonGroup()
|
||||
LayoutBuilder(builder, group).init()
|
||||
@@ -44,8 +39,18 @@ open class LayoutBuilder @PublishedApi internal constructor(@PublishedApi intern
|
||||
get() = builder
|
||||
}
|
||||
|
||||
class LayoutBuilderWithButtonGroupProperty<T : Any>
|
||||
@PublishedApi internal constructor(builder: LayoutBuilderImpl, private val prop: KMutableProperty0<T>) : LayoutBuilder(builder, ButtonGroup()) {
|
||||
class RowBuilderWithButtonGroupProperty<T : Any>
|
||||
@PublishedApi internal constructor(private val builder: RowBuilder, private val prop: PropertyBinding<T>) : RowBuilder {
|
||||
|
||||
override val buttonGroup: ButtonGroup? = ButtonGroup()
|
||||
|
||||
override fun createChildRow(label: JLabel?, buttonGroup: ButtonGroup?, isSeparated: Boolean, noGrid: Boolean, title: String?): Row {
|
||||
return builder.createChildRow(label, buttonGroup, isSeparated, noGrid, title)
|
||||
}
|
||||
|
||||
override fun createNoteOrCommentRow(component: JComponent): Row {
|
||||
return builder.createNoteOrCommentRow(component)
|
||||
}
|
||||
|
||||
fun Row.radioButton(text: String, value: T): CellBuilder<JBRadioButton> {
|
||||
val component = JBRadioButton(text, prop.get() == value)
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.intellij.ui.components.noteComponent
|
||||
import javax.swing.ButtonGroup
|
||||
import javax.swing.JComponent
|
||||
import javax.swing.JLabel
|
||||
import kotlin.reflect.KMutableProperty0
|
||||
|
||||
interface RowBuilder {
|
||||
val buttonGroup: ButtonGroup?
|
||||
@@ -46,6 +47,14 @@ interface RowBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> RowBuilder.buttonGroup(prop: KMutableProperty0<T>, init: RowBuilderWithButtonGroupProperty<T>.() -> Unit) {
|
||||
RowBuilderWithButtonGroupProperty(this, prop.toBinding()).init()
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> RowBuilder.buttonGroup(noinline getter: () -> T, noinline setter: (T) -> Unit, init: RowBuilderWithButtonGroupProperty<T>.() -> Unit) {
|
||||
RowBuilderWithButtonGroupProperty(this, PropertyBinding(getter, setter)).init()
|
||||
}
|
||||
|
||||
abstract class Row : Cell(), RowBuilder {
|
||||
abstract var enabled: Boolean
|
||||
|
||||
|
||||
Reference in New Issue
Block a user