Add option to override labels in orx-gui
This commit is contained in:
@@ -11,6 +11,8 @@ import org.openrndr.panel.elements.*
|
|||||||
import org.openrndr.panel.style.*
|
import org.openrndr.panel.style.*
|
||||||
import kotlin.reflect.KMutableProperty1
|
import kotlin.reflect.KMutableProperty1
|
||||||
|
|
||||||
|
private data class LabeledObject(val label: String, val obj: Any)
|
||||||
|
|
||||||
@Suppress("unused", "UNCHECKED_CAST")
|
@Suppress("unused", "UNCHECKED_CAST")
|
||||||
class GUI : Extension {
|
class GUI : Extension {
|
||||||
private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null
|
private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null
|
||||||
@@ -88,8 +90,10 @@ class GUI : Extension {
|
|||||||
id = "container"
|
id = "container"
|
||||||
div("sidebar") {
|
div("sidebar") {
|
||||||
id = "sidebar"
|
id = "sidebar"
|
||||||
for ((obj, parameters) in trackedParams) {
|
for (( labeledObject, parameters) in trackedParams) {
|
||||||
val header = h3 { obj.title() ?: "untitled" }
|
val (label, obj) = labeledObject
|
||||||
|
|
||||||
|
val header = h3 { label }
|
||||||
val collapsible = div {
|
val collapsible = div {
|
||||||
for (parameter in parameters) {
|
for (parameter in parameters) {
|
||||||
addControl(obj, parameter)
|
addControl(obj, parameter)
|
||||||
@@ -115,7 +119,7 @@ class GUI : Extension {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun Div.addControl(obj: Any, parameter: Parameter) {
|
private fun Div.addControl(obj: Any, parameter: Parameter) {
|
||||||
when(parameter.parameterType) {
|
when (parameter.parameterType) {
|
||||||
ParameterType.Int -> {
|
ParameterType.Int -> {
|
||||||
slider {
|
slider {
|
||||||
label = parameter.label
|
label = parameter.label
|
||||||
@@ -191,15 +195,29 @@ class GUI : Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val trackedParams = mutableMapOf<Any, List<Parameter>>()
|
private val trackedParams = mutableMapOf<LabeledObject, List<Parameter>>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add an object to the GUI
|
* Add an object to the GUI
|
||||||
|
* @param objectWithParameters an object of a class that annotated parameters
|
||||||
|
* @param label an optional label that overrides the label supplied in a [Description] annotation
|
||||||
|
* @return pass-through of [objectWithParameters]
|
||||||
*/
|
*/
|
||||||
fun add(objectWithParameters: Any) {
|
fun <T : Any> add(objectWithParameters: T, label: String? = objectWithParameters.title()): T {
|
||||||
val parameters = objectWithParameters.listParameters()
|
val parameters = objectWithParameters.listParameters()
|
||||||
if (parameters.isNotEmpty()) {
|
if (parameters.isNotEmpty()) {
|
||||||
trackedParams[objectWithParameters] = parameters
|
trackedParams[LabeledObject(label ?: "No name", objectWithParameters)] = parameters
|
||||||
}
|
}
|
||||||
|
return objectWithParameters
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Add an object to the GUI using a builder.
|
||||||
|
* @param label an optional label that overrides the label supplied in a [Description] annotation
|
||||||
|
* @return the built object
|
||||||
|
*/
|
||||||
|
fun <T : Any> add(label: String? = null, builder: () -> T): T {
|
||||||
|
val t = builder()
|
||||||
|
return add(t, label ?: t.title())
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user