From c1b0eb33bf74df108b8a46c803736804c058ca93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Mon, 7 Oct 2024 20:44:37 +0200 Subject: [PATCH] diagram_panel.rs --- frontend/src/diagram_panel.rs | 24 +++++++++ frontend/src/main.rs | 98 +++++++++++++++++++++-------------- 2 files changed, 84 insertions(+), 38 deletions(-) create mode 100644 frontend/src/diagram_panel.rs diff --git a/frontend/src/diagram_panel.rs b/frontend/src/diagram_panel.rs new file mode 100644 index 0000000..72d77ed --- /dev/null +++ b/frontend/src/diagram_panel.rs @@ -0,0 +1,24 @@ +use zoon::*; + +#[derive(Clone)] +pub struct DiagramPanel { +} + +impl DiagramPanel { + pub fn new( + ) -> impl Element { + Self { + } + .root() + } + + fn root(&self) -> impl Element { + Column::new() + .s(Padding::all(20)) + .s(Scrollbars::y_and_clip_x()) + .s(Width::fill()) + .s(Height::fill()) + .s(Gap::new().y(20)) + .item("Diagram panel") + } +} diff --git a/frontend/src/main.rs b/frontend/src/main.rs index 7c34913..f2d7baf 100644 --- a/frontend/src/main.rs +++ b/frontend/src/main.rs @@ -7,6 +7,9 @@ mod script_bridge; mod controls_panel; use controls_panel::ControlsPanel; +mod diagram_panel; +use diagram_panel::DiagramPanel; + mod waveform_panel; use waveform_panel::{PixiController, WaveformPanel}; @@ -28,8 +31,10 @@ enum Layout { #[derive(Clone, Copy, Default)] enum Mode { - #[default] + // @TODO make default + // #[default] Waves, + #[default] Diagrams, } @@ -71,47 +76,64 @@ fn root() -> impl Element { mode.clone(), loaded_filename.clone(), )) - .item( - Row::new() - .s(Scrollbars::y_and_clip_x()) - .s(Gap::new().x(15)) - .s(Height::growable().min(150)) - .item(ControlsPanel::new( - hierarchy.clone(), - selected_var_refs.clone(), - layout.clone(), - loaded_filename.clone(), - )) - .item_signal({ - let hierarchy = hierarchy.clone(); - let selected_var_refs = selected_var_refs.clone(); - let loaded_filename = loaded_filename.clone(); - let canvas_controller = canvas_controller.clone(); - map_ref!{ - let layout = layout.signal(), - let hierarchy_is_some = hierarchy.signal_ref(Option::is_some) => { - (*hierarchy_is_some && matches!(layout, Layout::Tree)).then(clone!((hierarchy, selected_var_refs, loaded_filename, canvas_controller) move || WaveformPanel::new( + .item_signal(mode.signal().map(clone!((hierarchy, selected_var_refs, loaded_filename, canvas_controller) move |mode| match mode { + Mode::Waves => { + Column::new() + .s(Height::fill()) + .s(Scrollbars::y_and_clip_x()) + .item( + Row::new() + .s(Scrollbars::y_and_clip_x()) + .s(Gap::new().x(15)) + .s(Height::growable().min(150)) + .item(ControlsPanel::new( hierarchy.clone(), selected_var_refs.clone(), + layout.clone(), loaded_filename.clone(), - canvas_controller.clone(), - ))) + )) + .item_signal({ + let hierarchy = hierarchy.clone(); + let selected_var_refs = selected_var_refs.clone(); + let loaded_filename = loaded_filename.clone(); + let canvas_controller = canvas_controller.clone(); + map_ref!{ + let layout = layout.signal(), + let hierarchy_is_some = hierarchy.signal_ref(Option::is_some) => { + (*hierarchy_is_some && matches!(layout, Layout::Tree)).then(clone!((hierarchy, selected_var_refs, loaded_filename, canvas_controller) move || WaveformPanel::new( + hierarchy.clone(), + selected_var_refs.clone(), + loaded_filename.clone(), + canvas_controller.clone(), + ))) + } + } + }), + ) + .item_signal({ + let hierarchy = hierarchy.clone(); + let selected_var_refs = selected_var_refs.clone(); + let loaded_filename = loaded_filename.clone(); + let canvas_controller = canvas_controller.clone(); + map_ref!{ + let layout = layout.signal(), + let hierarchy_is_some = hierarchy.signal_ref(Option::is_some) => { + (*hierarchy_is_some && matches!(layout, Layout::Columns)).then(clone!((hierarchy, selected_var_refs, loaded_filename, canvas_controller) move || WaveformPanel::new( + hierarchy.clone(), + selected_var_refs.clone(), + loaded_filename.clone(), + canvas_controller.clone(), + ))) + } } - } - }), - ) - .item_signal( - map_ref!{ - let layout = layout.signal(), - let hierarchy_is_some = hierarchy.signal_ref(Option::is_some) => { - (*hierarchy_is_some && matches!(layout, Layout::Columns)).then(clone!((hierarchy, selected_var_refs, loaded_filename, canvas_controller) move || WaveformPanel::new( - hierarchy.clone(), - selected_var_refs.clone(), - loaded_filename.clone(), - canvas_controller.clone(), - ))) - } + }) } - ) + Mode::Diagrams => { + Column::new() + .s(Height::fill()) + .s(Scrollbars::y_and_clip_x()) + .item(DiagramPanel::new()) + } + }))) .item(CommandPanel::new()) }