graphic design tool
git clone https://git.lucas.co/cce-designer.git
Consolidate all utility subnets (Network, Viewport, Parameters, Spreadsheet) into the single Main utility subnet
src/project.rs | 134 ++++++++++++++++-----------------------------------------
1 file changed, 38 insertions(+), 96 deletions(-)
diff --git a/src/project.rs b/src/project.rs
index 983c198..8c41032 100644
--- a/src/project.rs
+++ b/src/project.rs
@@ -278,6 +278,13 @@ impl State {
}
pub(crate) fn ensure_menubar_subnets(&mut self) {
+ let vp_show_grid = self.viewport().show_grid;
+ let vp_show_cube = self.viewport().show_cube;
+ let vp_show_origin = self.viewport().show_origin;
+ let vp_show_camera_pivot = self.viewport().show_camera_pivot;
+ let vp_bg_color = self.viewport().bg_color;
+ let vp_grid_color = self.viewport().grid_color;
+
let camera_nodes: Vec<String> = self.current_dir().children.iter()
.filter(|c| c.node_type == "camera")
.map(|c| c.name.clone())
@@ -334,6 +341,9 @@ impl State {
}
}
+ // Retain only the Main utility subnet, removing the rest
+ self.fs_root.children.retain(|c| c.name != "Network" && c.name != "Viewport" && c.name != "Parameters" && c.name != "Spreadsheet");
+
// 1. Main subnet
let main_node = find_or_create_subnet(&mut self.fs_root, "Main", "utility", (0.0, 0.0));
main_node.children.clear();
@@ -368,121 +378,53 @@ impl State {
ensure_param(main_node, "Show Parameters Pane", "button", "", &[], None, None, None);
ensure_param(main_node, "Show Spreadsheet Pane", "button", "", &[], None, None, None);
- ensure_param(main_node, "Help", "section", "", &[], None, None, None);
- ensure_param(main_node, "About", "button", "", &[], None, None, None);
+ // Network Settings
+ ensure_param(main_node, "Network Settings", "section", "", &[], None, None, None);
+ ensure_param(main_node, "Circular Pane", "choice", if self.circular_network_pane { "true" } else { "false" }, &["false", "true"], None, None, None);
+ ensure_param(main_node, "Node Color R", "spinbox", &((self.node_color[0] * 255.0) as i32).to_string(), &[], Some(0.0), Some(255.0), Some(1.0));
+ ensure_param(main_node, "Node Color G", "spinbox", &((self.node_color[1] * 255.0) as i32).to_string(), &[], Some(0.0), Some(255.0), Some(1.0));
+ ensure_param(main_node, "Node Color B", "spinbox", &((self.node_color[2] * 255.0) as i32).to_string(), &[], Some(0.0), Some(255.0), Some(1.0));
- // 2. Network subnet
- let net_node = find_or_create_subnet(&mut self.fs_root, "Network", "utility", (2.0, 0.0));
- net_node.children.clear();
-
- ensure_param(net_node, "File", "section", "", &[], None, None, None);
- ensure_param(net_node, "New", "button", "", &[], None, None, None);
- ensure_param(net_node, "Open", "button", "", &[], None, None, None);
- ensure_param(net_node, "Save", "button", "", &[], None, None, None);
- ensure_param(net_node, "Save As", "button", "", &[], None, None, None);
-
- ensure_param(net_node, "Edit", "section", "", &[], None, None, None);
- ensure_param(net_node, "Undo", "button", "", &[], None, None, None);
- ensure_param(net_node, "Redo", "button", "", &[], None, None, None);
-
- ensure_param(net_node, "View", "section", "", &[], None, None, None);
- ensure_param(net_node, "Zoom In", "button", "", &[], None, None, None);
- ensure_param(net_node, "Zoom Out", "button", "", &[], None, None, None);
- ensure_param(net_node, "Circular Pane", "choice", if self.circular_network_pane { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(net_node, "Detach Pane", "button", "", &[], None, None, None);
- ensure_param(net_node, "Close Pane", "button", "", &[], None, None, None);
-
- ensure_param(net_node, "Settings", "section", "", &[], None, None, None);
- ensure_param(net_node, "Node Color R", "spinbox", &((self.node_color[0] * 255.0) as i32).to_string(), &[], Some(0.0), Some(255.0), Some(1.0));
- ensure_param(net_node, "Node Color G", "spinbox", &((self.node_color[1] * 255.0) as i32).to_string(), &[], Some(0.0), Some(255.0), Some(1.0));
- ensure_param(net_node, "Node Color B", "spinbox", &((self.node_color[2] * 255.0) as i32).to_string(), &[], Some(0.0), Some(255.0), Some(1.0));
-
- // 3. Viewport subnet
- let vp_show_grid = self.viewport().show_grid;
- let vp_show_cube = self.viewport().show_cube;
- let vp_show_origin = self.viewport().show_origin;
- let vp_show_camera_pivot = self.viewport().show_camera_pivot;
- let vp_bg_color = self.viewport().bg_color;
- let vp_grid_color = self.viewport().grid_color;
+ // Viewport Settings
- let vp_node = find_or_create_subnet(&mut self.fs_root, "Viewport", "utility", (4.0, 0.0));
- vp_node.children.clear();
- ensure_param(vp_node, "Camera", "section", "", &[], None, None, None);
- if let Some(p) = vp_node.params.iter_mut().find(|p| p.name == "Active Camera") {
+ ensure_param(main_node, "Viewport Settings", "section", "", &[], None, None, None);
+ if let Some(p) = main_node.params.iter_mut().find(|p| p.name == "Active Camera") {
p.options = camera_options.clone();
if !p.options.contains(&p.default) {
p.default = "Default Camera".to_string();
}
} else {
- ensure_param(vp_node, "Active Camera", "choice", &self.active_camera, &camera_options_refs, None, None, None);
+ ensure_param(main_node, "Active Camera", "choice", &self.active_camera, &camera_options_refs, None, None, None);
}
- ensure_param(vp_node, "Display", "section", "", &[], None, None, None);
- ensure_param(vp_node, "Square Aspect", "choice", if self.square_viewport { "true" } else { "false" }, &["false", "true"], None, None, None);
-
- ensure_param(vp_node, "Guides", "section", "", &[], None, None, None);
- ensure_param(vp_node, "Show Grid", "choice", if vp_show_grid { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Cube", "choice", if vp_show_cube { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Origin", "choice", if vp_show_origin { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Camera Pivot", "choice", if vp_show_camera_pivot { "true" } else { "false" }, &["false", "true"], None, None, None);
-
- ensure_param(vp_node, "View", "section", "", &[], None, None, None);
- ensure_param(vp_node, "Close Pane", "button", "", &[], None, None, None);
-
- ensure_param(vp_node, "Settings", "section", "", &[], None, None, None);
- ensure_param(vp_node, "Show Grid Guide", "choice", if vp_show_grid { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Show Reference Cube", "choice", if vp_show_cube { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Show Origin Axes", "choice", if vp_show_origin { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Show Camera Pivot", "choice", if vp_show_camera_pivot { "true" } else { "false" }, &["false", "true"], None, None, None);
- ensure_param(vp_node, "Grid Thickness", "spinbox", &((self.grid_thickness * 1000.0) as i32).to_string(), &[], Some(2.0), Some(200.0), Some(1.0));
- ensure_param(vp_node, "Origin Guide Size", "spinbox", &((self.origin_size * 10.0) as i32).to_string(), &[], Some(1.0), Some(50.0), Some(1.0));
- ensure_param(vp_node, "Camera Pivot Size", "spinbox", &((self.camera_pivot_size * 10.0) as i32).to_string(), &[], Some(1.0), Some(50.0), Some(1.0));
- ensure_param(vp_node, "Background Color", "color", &color_to_hex(vp_bg_color), &[], None, None, None);
- ensure_param(vp_node, "Grid Color", "color", &color_to_hex(vp_grid_color), &[], None, None, None);
-
- // 4. Parameters subnet
- let param_node = find_or_create_subnet(&mut self.fs_root, "Parameters", "utility", (6.0, 0.0));
- param_node.children.clear();
-
- ensure_param(param_node, "Preset", "section", "", &[], None, None, None);
- ensure_param(param_node, "Default", "button", "", &[], None, None, None);
- ensure_param(param_node, "Custom", "button", "", &[], None, None, None);
-
- ensure_param(param_node, "Reset", "section", "", &[], None, None, None);
- ensure_param(param_node, "All", "button", "", &[], None, None, None);
-
- ensure_param(param_node, "View", "section", "", &[], None, None, None);
- ensure_param(param_node, "Close Pane", "button", "", &[], None, None, None);
-
- // 5. Spreadsheet subnet
- let ss_node = find_or_create_subnet(&mut self.fs_root, "Spreadsheet", "utility", (8.0, 0.0));
- ss_node.children.clear();
-
- ensure_param(ss_node, "View", "section", "", &[], None, None, None);
- ensure_param(ss_node, "Close Pane", "button", "", &[], None, None, None);
+ ensure_param(main_node, "Square Aspect", "choice", if self.square_viewport { "true" } else { "false" }, &["false", "true"], None, None, None);
+ ensure_param(main_node, "Show Grid Guide", "choice", if vp_show_grid { "true" } else { "false" }, &["false", "true"], None, None, None);
+ ensure_param(main_node, "Show Reference Cube", "choice", if vp_show_cube { "true" } else { "false" }, &["false", "true"], None, None, None);
+ ensure_param(main_node, "Show Origin Axes", "choice", if vp_show_origin { "true" } else { "false" }, &["false", "true"], None, None, None);
+ ensure_param(main_node, "Show Camera Pivot", "choice", if vp_show_camera_pivot { "true" } else { "false" }, &["false", "true"], None, None, None);
+ ensure_param(main_node, "Grid Thickness", "spinbox", &((self.grid_thickness * 1000.0) as i32).to_string(), &[], Some(2.0), Some(200.0), Some(1.0));
+ ensure_param(main_node, "Origin Guide Size", "spinbox", &((self.origin_size * 10.0) as i32).to_string(), &[], Some(1.0), Some(50.0), Some(1.0));
+ ensure_param(main_node, "Camera Pivot Size", "spinbox", &((self.camera_pivot_size * 10.0) as i32).to_string(), &[], Some(1.0), Some(50.0), Some(1.0));
+ ensure_param(main_node, "Background Color", "color", &color_to_hex(vp_bg_color), &[], None, None, None);
+ ensure_param(main_node, "Grid Color", "color", &color_to_hex(vp_grid_color), &[], None, None, None);
+
+ ensure_param(main_node, "Help", "section", "", &[], None, None, None);
+ ensure_param(main_node, "About", "button", "", &[], None, None, None);
}
pub(crate) fn apply_settings_from_menubar_subnets(&mut self) {
- // Read Settings from Network subnet
- if let Some(net_idx) = self.fs_root.children.iter().position(|c| c.name == "Network") {
- let node = &self.fs_root.children[net_idx];
- for p in &node.params {
+ if let Some(main_idx) = self.fs_root.children.iter().position(|c| c.name == "Main") {
+ let params = self.fs_root.children[main_idx].params.clone();
+ for p in ¶ms {
match p.name.as_str() {
+ // Network Settings
"Node Color R" => if let Ok(val) = p.default.parse::<f32>() { self.node_color[0] = val / 255.0; }
"Node Color G" => if let Ok(val) = p.default.parse::<f32>() { self.node_color[1] = val / 255.0; }
"Node Color B" => if let Ok(val) = p.default.parse::<f32>() { self.node_color[2] = val / 255.0; }
"Circular Pane" => if let Ok(val) = p.default.parse::<bool>() { self.circular_network_pane = val; }
- _ => {}
- }
- }
- }
- // Read Settings from Viewport subnet
- if let Some(vp_idx) = self.fs_root.children.iter().position(|c| c.name == "Viewport") {
- let params = self.fs_root.children[vp_idx].params.clone();
- for p in ¶ms {
- match p.name.as_str() {
+ // Viewport Settings
"Show Grid Guide" => if let Ok(val) = p.default.parse::<bool>() { self.viewport_mut().show_grid = val; }
"Show Reference Cube" => if let Ok(val) = p.default.parse::<bool>() { self.viewport_mut().show_cube = val; }
"Show Origin Axes" => if let Ok(val) = p.default.parse::<bool>() { self.viewport_mut().show_origin = val; }