From 33f038ab88a41c87b6e8ad38650a5a7053c27682 Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Tue, 11 Feb 2020 00:00:45 +0100 Subject: [PATCH] Add ctrl-click to open compartment and collapse all others --- orx-gui/src/main/kotlin/Gui.kt | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/orx-gui/src/main/kotlin/Gui.kt b/orx-gui/src/main/kotlin/Gui.kt index c62d7a41..97a0e701 100644 --- a/orx-gui/src/main/kotlin/Gui.kt +++ b/orx-gui/src/main/kotlin/Gui.kt @@ -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 = mutableMapOf()) +private class CompartmentState(var collapsed: Boolean = true, 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, @@ -171,6 +172,7 @@ class GUI : Extension { } } + val collapsibles = mutableSetOf
() 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,12 +199,26 @@ class GUI : Extension { it.cancelPropagation() } header.mouse.clicked.subscribe { - if (collapseClass in collapsible.classes) { + + 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 { - collapsible.classes.add(collapseClass) - collapseState.collapsed = true + + if (collapseClass in collapsible.classes) { + collapsible.classes.remove(collapseClass) + collapseState.collapsed = false + } else { + collapsible.classes.add(collapseClass) + collapseState.collapsed = true + } } } }