From b6a5251dc7f0431046ef43ae369f7555f8261e9f Mon Sep 17 00:00:00 2001 From: Kulratan Thapar Date: Wed, 18 Feb 2026 15:01:31 +0000 Subject: [PATCH 1/4] Upgrade --- .../layout/utility_types/layout_widget.rs | 6 ++ .../node_graph/document_node_definitions.rs | 1 + .../document/node_graph/node_properties.rs | 8 +++ .../properties_panel_message.rs | 2 + .../properties_panel_message_handler.rs | 17 ++++- .../components/widgets/WidgetSection.svelte | 15 ++++- frontend/src/messages.ts | 67 ++++++++++--------- frontend/wasm/src/editor_api.rs | 14 ++++ 8 files changed, 93 insertions(+), 37 deletions(-) diff --git a/editor/src/messages/layout/utility_types/layout_widget.rs b/editor/src/messages/layout/utility_types/layout_widget.rs index fef1061f27..02302290d7 100644 --- a/editor/src/messages/layout/utility_types/layout_widget.rs +++ b/editor/src/messages/layout/utility_types/layout_widget.rs @@ -340,6 +340,7 @@ pub enum LayoutGroup { description: String, visible: bool, pinned: bool, + expanded: bool, id: u64, layout: Layout, }, @@ -439,6 +440,7 @@ impl Diffable for LayoutGroup { description: current_description, visible: current_visible, pinned: current_pinned, + expanded: current_expanded, id: current_id, layout: current_layout, }, @@ -447,6 +449,7 @@ impl Diffable for LayoutGroup { description: new_description, visible: new_visible, pinned: new_pinned, + expanded: new_expanded, id: new_id, layout: new_layout, }, @@ -458,6 +461,7 @@ impl Diffable for LayoutGroup { || *current_description != new_description || *current_visible != new_visible || *current_pinned != new_pinned + || *current_expanded != new_expanded || *current_id != new_id { // Update self to reflect new changes @@ -465,6 +469,7 @@ impl Diffable for LayoutGroup { current_description.clone_from(&new_description); *current_visible = new_visible; *current_pinned = new_pinned; + *current_expanded = new_expanded; *current_id = new_id; current_layout.clone_from(&new_layout); @@ -474,6 +479,7 @@ impl Diffable for LayoutGroup { description: new_description, visible: new_visible, pinned: new_pinned, + expanded: new_expanded, id: new_id, layout: new_layout, } diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs index 1f72162800..3e3c79d0a1 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs @@ -35,6 +35,7 @@ pub struct NodePropertiesContext<'a> { pub network_interface: &'a mut NodeNetworkInterface, pub selection_network_path: &'a [NodeId], pub document_name: &'a str, + pub section_expanded: &'a HashMap, } impl NodePropertiesContext<'_> { diff --git a/editor/src/messages/portfolio/document/node_graph/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_properties.rs index eb08935e7c..24e8f827e8 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_properties.rs @@ -1843,12 +1843,20 @@ pub(crate) fn generate_node_properties(node_id: NodeId, context: &mut NodeProper let visible = context.network_interface.is_visible(&node_id, context.selection_network_path); let pinned = context.network_interface.is_pinned(&node_id, context.selection_network_path); + let is_merge_node = context + .network_interface + .reference(&node_id, context.selection_network_path) + .as_ref() + .is_some_and(|id| id.implementation_name_from_identifier() == "Merge"); + let default_expanded = !is_merge_node; + let expanded = context.section_expanded.get(&node_id.0).copied().unwrap_or(default_expanded); LayoutGroup::Section { name, description, visible, pinned, + expanded, id: node_id.0, layout: Layout(layout), } diff --git a/editor/src/messages/portfolio/document/properties_panel/properties_panel_message.rs b/editor/src/messages/portfolio/document/properties_panel/properties_panel_message.rs index a87d8fb07d..954c909dee 100644 --- a/editor/src/messages/portfolio/document/properties_panel/properties_panel_message.rs +++ b/editor/src/messages/portfolio/document/properties_panel/properties_panel_message.rs @@ -6,4 +6,6 @@ pub enum PropertiesPanelMessage { // Messages Clear, Refresh, + SetAllSectionsExpanded { expanded: bool }, + SetSectionExpanded { node_id: u64, expanded: bool }, } diff --git a/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs b/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs index b5706ec1e5..1665c94cf5 100644 --- a/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs +++ b/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use graphene_std::uuid::NodeId; use crate::messages::layout::utility_types::widget_prelude::*; @@ -18,7 +20,9 @@ pub struct PropertiesPanelMessageContext<'a> { } #[derive(Debug, Clone, Default, ExtractField)] -pub struct PropertiesPanelMessageHandler {} +pub struct PropertiesPanelMessageHandler { + pub section_expanded: HashMap, +} #[message_handler_data] impl MessageHandler> for PropertiesPanelMessageHandler { @@ -52,6 +56,7 @@ impl MessageHandler> f selection_network_path, document_name, executor, + section_expanded: &self.section_expanded, }; let layout = Layout(NodeGraphMessageHandler::collate_properties(&mut node_properties_context)); @@ -60,6 +65,16 @@ impl MessageHandler> f layout_target: LayoutTarget::PropertiesPanel, }); } + PropertiesPanelMessage::SetAllSectionsExpanded { expanded } => { + for value in self.section_expanded.values_mut() { + *value = expanded; + } + responses.add(PropertiesPanelMessage::Refresh); + } + PropertiesPanelMessage::SetSectionExpanded { node_id, expanded } => { + self.section_expanded.insert(node_id, expanded); + responses.add(PropertiesPanelMessage::Refresh); + } } } diff --git a/frontend/src/components/widgets/WidgetSection.svelte b/frontend/src/components/widgets/WidgetSection.svelte index af55fe7f3d..c2302c08d8 100644 --- a/frontend/src/components/widgets/WidgetSection.svelte +++ b/frontend/src/components/widgets/WidgetSection.svelte @@ -16,14 +16,23 @@ export { className as class }; export let classes: Record = {}; - let expanded = true; + $: expanded = widgetData.expanded; const editor = getContext("editor"); - -