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.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<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 TrackedObjectBinding(
val parameters: List<Parameter>,
@@ -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<Any, Boolean>).set(obj, value > 0.5)
(parameter.property as KMutableProperty1<Any, Boolean>).set(obj, 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 -> {
@@ -454,7 +460,7 @@ class GUI : Extension {
(control as ColorpickerButton).color = (parameter.property as KMutableProperty1<Any, ColorRGBa>).get(labeledObject.obj)
}
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 -> {
// 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()
}
}
}