Replace slider for Boolean parameters with a toggle

This commit is contained in:
Edwin Jakobs
2020-02-12 18:24:13 +01:00
parent 9212d75033
commit de2103bd0c

View File

@@ -9,6 +9,7 @@ import org.openrndr.Program
import org.openrndr.color.ColorRGBa import org.openrndr.color.ColorRGBa
import org.openrndr.dialogs.openFileDialog import org.openrndr.dialogs.openFileDialog
import org.openrndr.dialogs.saveFileDialog import org.openrndr.dialogs.saveFileDialog
import org.openrndr.draw.Drawer
import org.openrndr.extra.parameters.* import org.openrndr.extra.parameters.*
import org.openrndr.internal.Driver import org.openrndr.internal.Driver
import org.openrndr.panel.ControlManager 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 data class LabeledObject(val label: String, val obj: Any)
private class CompartmentState(var collapsed: Boolean = true, val parameterValues: MutableMap<String, Any> = mutableMapOf()) private class CompartmentState(var collapsed: Boolean, val parameterValues: MutableMap<String, Any> = mutableMapOf())
private class SidebarState(var hidden: Boolean = false, var collapsed: Boolean = false, var scrollTop: Double = 0.0) private class SidebarState(var hidden: Boolean = false, var collapsed: Boolean = false, var scrollTop: Double = 0.0)
private class TrackedObjectBinding( private class TrackedObjectBinding(
val parameters: List<Parameter>, val parameters: List<Parameter>,
@@ -69,6 +70,9 @@ class GUI : Extension {
private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null
override var enabled = true override var enabled = true
var compartmentsCollapsedByDefault = true
var doubleBind = false
private lateinit var panel: ControlManager private lateinit var panel: ControlManager
fun onChange(listener: (name: String, value: Any?) -> Unit) { fun onChange(listener: (name: String, value: Any?) -> Unit) {
@@ -136,6 +140,10 @@ class GUI : Extension {
descendant(has type "textfield") { descendant(has type "textfield") {
this.width = 175.px this.width = 175.px
} }
descendant(has type "toggle") {
this.width = 175.px
}
} }
styleSheet(has type "dropdown-button") { styleSheet(has type "dropdown-button") {
@@ -309,16 +317,14 @@ class GUI : Extension {
} }
} }
ParameterType.Boolean -> { ParameterType.Boolean -> {
slider { toggle {
label = parameter.label label = parameter.label
range = Range(0.0, 1.0)
precision = 0
events.valueChanged.subscribe { events.valueChanged.subscribe {
value = it.newValue value = it.newValue
(parameter.property as KMutableProperty1<Any, Boolean>).set(obj, value > 0.5) (parameter.property as KMutableProperty1<Any, Boolean>).set(obj, it.newValue)
onChangeListener?.invoke(parameter.property!!.name, it.newValue) onChangeListener?.invoke(parameter.property!!.name, it.newValue)
} }
value = if ((parameter.property as KMutableProperty1<Any, Boolean>).get(obj)) 1.0 else 0.0 value = (parameter.property as KMutableProperty1<Any, Boolean>).get(obj)
} }
} }
ParameterType.Text -> { ParameterType.Text -> {
@@ -454,7 +460,7 @@ class GUI : Extension {
(control as ColorpickerButton).color = (parameter.property as KMutableProperty1<Any, ColorRGBa>).get(labeledObject.obj) (control as ColorpickerButton).color = (parameter.property as KMutableProperty1<Any, ColorRGBa>).get(labeledObject.obj)
} }
ParameterType.Boolean -> { ParameterType.Boolean -> {
(control as Slider).value = if ((parameter.property as KMutableProperty1<Any, Boolean>).get(labeledObject.obj)) 1.0 else 0.0 (control as Toggle).value = (parameter.property as KMutableProperty1<Any, Boolean>).get(labeledObject.obj)
} }
ParameterType.Action -> { ParameterType.Action -> {
// intentionally do nothing // intentionally do nothing
@@ -522,7 +528,7 @@ class GUI : Extension {
mutableMapOf() mutableMapOf()
} }
collapseStates.getOrPut(uniqueLabel) { collapseStates.getOrPut(uniqueLabel) {
CompartmentState() CompartmentState(compartmentsCollapsedByDefault)
} }
trackedObjects[LabeledObject(uniqueLabel, objectWithParameters)] = TrackedObjectBinding(parameters) trackedObjects[LabeledObject(uniqueLabel, objectWithParameters)] = TrackedObjectBinding(parameters)
} }
@@ -538,4 +544,10 @@ class GUI : Extension {
val t = builder() val t = builder()
return add(t, label ?: t.title()) return add(t, label ?: t.title())
} }
override fun afterDraw(drawer: Drawer, program: Program) {
if (doubleBind) {
updateControls()
}
}
} }