From de2103bd0cff01c458ea565b722ec9b8e10c2c2b Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Wed, 12 Feb 2020 18:24:13 +0100 Subject: [PATCH] Replace slider for Boolean parameters with a toggle --- orx-gui/src/main/kotlin/Gui.kt | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/orx-gui/src/main/kotlin/Gui.kt b/orx-gui/src/main/kotlin/Gui.kt index 24144957..d963b0fa 100644 --- a/orx-gui/src/main/kotlin/Gui.kt +++ b/orx-gui/src/main/kotlin/Gui.kt @@ -9,6 +9,7 @@ import org.openrndr.Program import org.openrndr.color.ColorRGBa import org.openrndr.dialogs.openFileDialog import org.openrndr.dialogs.saveFileDialog +import org.openrndr.draw.Drawer import org.openrndr.extra.parameters.* import org.openrndr.internal.Driver import org.openrndr.panel.ControlManager @@ -34,7 +35,7 @@ You can use your editor's search functionality to jump to "1)", "2)". */ private data class LabeledObject(val label: String, val obj: Any) -private class CompartmentState(var collapsed: Boolean = true, val parameterValues: MutableMap = mutableMapOf()) +private class CompartmentState(var collapsed: Boolean, val parameterValues: MutableMap = mutableMapOf()) private class SidebarState(var hidden: Boolean = false, var collapsed: Boolean = false, var scrollTop: Double = 0.0) private class TrackedObjectBinding( val parameters: List, @@ -69,6 +70,9 @@ class GUI : Extension { private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null override var enabled = true + var compartmentsCollapsedByDefault = true + var doubleBind = false + private lateinit var panel: ControlManager fun onChange(listener: (name: String, value: Any?) -> Unit) { @@ -136,6 +140,10 @@ class GUI : Extension { descendant(has type "textfield") { this.width = 175.px } + + descendant(has type "toggle") { + this.width = 175.px + } } styleSheet(has type "dropdown-button") { @@ -309,16 +317,14 @@ class GUI : Extension { } } ParameterType.Boolean -> { - slider { + toggle { label = parameter.label - range = Range(0.0, 1.0) - precision = 0 events.valueChanged.subscribe { value = it.newValue - (parameter.property as KMutableProperty1).set(obj, value > 0.5) + (parameter.property as KMutableProperty1).set(obj, it.newValue) onChangeListener?.invoke(parameter.property!!.name, it.newValue) } - value = if ((parameter.property as KMutableProperty1).get(obj)) 1.0 else 0.0 + value = (parameter.property as KMutableProperty1).get(obj) } } ParameterType.Text -> { @@ -454,7 +460,7 @@ class GUI : Extension { (control as ColorpickerButton).color = (parameter.property as KMutableProperty1).get(labeledObject.obj) } ParameterType.Boolean -> { - (control as Slider).value = if ((parameter.property as KMutableProperty1).get(labeledObject.obj)) 1.0 else 0.0 + (control as Toggle).value = (parameter.property as KMutableProperty1).get(labeledObject.obj) } ParameterType.Action -> { // intentionally do nothing @@ -522,7 +528,7 @@ class GUI : Extension { mutableMapOf() } collapseStates.getOrPut(uniqueLabel) { - CompartmentState() + CompartmentState(compartmentsCollapsedByDefault) } trackedObjects[LabeledObject(uniqueLabel, objectWithParameters)] = TrackedObjectBinding(parameters) } @@ -538,4 +544,10 @@ class GUI : Extension { val t = builder() return add(t, label ?: t.title()) } + + override fun afterDraw(drawer: Drawer, program: Program) { + if (doubleBind) { + updateControls() + } + } } \ No newline at end of file