Add ctrl-click to open compartment and collapse all others

This commit is contained in:
Edwin Jakobs
2020-02-11 00:00:45 +01:00
parent 77dee0c6af
commit 33f038ab88

View File

@@ -4,6 +4,7 @@ import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import org.openrndr.Extension
import org.openrndr.KEY_F11
import org.openrndr.KeyModifier
import org.openrndr.Program
import org.openrndr.color.ColorRGBa
import org.openrndr.dialogs.openFileDialog
@@ -33,7 +34,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 = false, val parameterValues: MutableMap<String, Any> = mutableMapOf())
private class CompartmentState(var collapsed: Boolean = true, 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>,
@@ -171,6 +172,7 @@ class GUI : Extension {
}
}
val collapsibles = mutableSetOf<Div>()
val sidebar = div("sidebar") {
id = "sidebar"
scrollTop = sidebarState().scrollTop
@@ -184,6 +186,7 @@ class GUI : Extension {
binding.parameterControls[parameter] = element
}
}
collapsibles.add(collapsible)
val collapseClass = ElementClass("collapsed")
/* this is guaranteed to be in the dictionary after insertion through add() */
@@ -196,6 +199,19 @@ class GUI : Extension {
it.cancelPropagation()
}
header.mouse.clicked.subscribe {
if (KeyModifier.CTRL in it.modifiers) {
collapsible.classes.remove(collapseClass)
persistentCompartmentStates[Driver.instance.contextID]!!.forEach {
it.value.collapsed = true
}
collapseState.collapsed = false
(collapsibles - collapsible).forEach {
it.classes.add(collapseClass)
}
} else {
if (collapseClass in collapsible.classes) {
collapsible.classes.remove(collapseClass)
collapseState.collapsed = false
@@ -206,6 +222,7 @@ class GUI : Extension {
}
}
}
}
header.mouse.pressed.subscribe {
it.cancelPropagation()
}