mode switcher
This commit is contained in:
parent
ad68d2c282
commit
d291e84f61
|
@ -1,10 +1,13 @@
|
||||||
use crate::{platform, theme::*, Filename, Layout};
|
use crate::{platform, theme::*, Filename, Layout, Mode};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use zoon::*;
|
use zoon::*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub struct HeaderPanel {
|
pub struct HeaderPanel {
|
||||||
hierarchy: Mutable<Option<Arc<wellen::Hierarchy>>>,
|
hierarchy: Mutable<Option<Arc<wellen::Hierarchy>>>,
|
||||||
layout: Mutable<Layout>,
|
layout: Mutable<Layout>,
|
||||||
|
mode: Mutable<Mode>,
|
||||||
loaded_filename: Mutable<Option<Filename>>,
|
loaded_filename: Mutable<Option<Filename>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,12 +15,14 @@ impl HeaderPanel {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
hierarchy: Mutable<Option<Arc<wellen::Hierarchy>>>,
|
hierarchy: Mutable<Option<Arc<wellen::Hierarchy>>>,
|
||||||
layout: Mutable<Layout>,
|
layout: Mutable<Layout>,
|
||||||
|
mode: Mutable<Mode>,
|
||||||
loaded_filename: Mutable<Option<Filename>>,
|
loaded_filename: Mutable<Option<Filename>>,
|
||||||
) -> impl Element {
|
) -> impl Element {
|
||||||
Self {
|
Self {
|
||||||
hierarchy,
|
hierarchy,
|
||||||
layout,
|
layout,
|
||||||
loaded_filename,
|
loaded_filename,
|
||||||
|
mode,
|
||||||
}
|
}
|
||||||
.root()
|
.root()
|
||||||
}
|
}
|
||||||
|
@ -32,7 +37,8 @@ impl HeaderPanel {
|
||||||
.s(Padding::new().top(5))
|
.s(Padding::new().top(5))
|
||||||
.s(Gap::both(15))
|
.s(Gap::both(15))
|
||||||
.item(self.load_button())
|
.item(self.load_button())
|
||||||
.item(self.layout_switcher()),
|
.item(self.layout_switcher())
|
||||||
|
.item(self.mode_switcher())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,4 +173,26 @@ impl HeaderPanel {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn mode_switcher(&self) -> impl Element {
|
||||||
|
let mode = self.mode.clone();
|
||||||
|
let (hovered, hovered_signal) = Mutable::new_and_signal(false);
|
||||||
|
Button::new()
|
||||||
|
.s(Padding::new().x(20).y(10))
|
||||||
|
.s(Background::new().color_signal(
|
||||||
|
hovered_signal.map_bool(|| COLOR_MEDIUM_SLATE_BLUE, || COLOR_SLATE_BLUE),
|
||||||
|
))
|
||||||
|
.s(RoundedCorners::all(15))
|
||||||
|
.label_signal(mode.signal().map(|mode| match mode {
|
||||||
|
Mode::Waves => "Diagrams",
|
||||||
|
Mode::Diagrams => "Waves",
|
||||||
|
}))
|
||||||
|
.on_hovered_change(move |is_hovered| hovered.set_neq(is_hovered))
|
||||||
|
.on_press(move || {
|
||||||
|
mode.update(|mode| match mode {
|
||||||
|
Mode::Waves => Mode::Diagrams,
|
||||||
|
Mode::Diagrams => Mode::Waves,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,13 @@ enum Layout {
|
||||||
Columns,
|
Columns,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Default)]
|
||||||
|
enum Mode {
|
||||||
|
#[default]
|
||||||
|
Waves,
|
||||||
|
Diagrams,
|
||||||
|
}
|
||||||
|
|
||||||
type Filename = String;
|
type Filename = String;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
@ -51,6 +58,7 @@ fn root() -> impl Element {
|
||||||
let hierarchy = STORE.hierarchy.clone();
|
let hierarchy = STORE.hierarchy.clone();
|
||||||
let selected_var_refs = STORE.selected_var_refs.clone();
|
let selected_var_refs = STORE.selected_var_refs.clone();
|
||||||
let layout: Mutable<Layout> = <_>::default();
|
let layout: Mutable<Layout> = <_>::default();
|
||||||
|
let mode: Mutable<Mode> = <_>::default();
|
||||||
let loaded_filename = STORE.loaded_filename.clone();
|
let loaded_filename = STORE.loaded_filename.clone();
|
||||||
let canvas_controller = STORE.canvas_controller.clone();
|
let canvas_controller = STORE.canvas_controller.clone();
|
||||||
Column::new()
|
Column::new()
|
||||||
|
@ -60,6 +68,7 @@ fn root() -> impl Element {
|
||||||
.item(HeaderPanel::new(
|
.item(HeaderPanel::new(
|
||||||
hierarchy.clone(),
|
hierarchy.clone(),
|
||||||
layout.clone(),
|
layout.clone(),
|
||||||
|
mode.clone(),
|
||||||
loaded_filename.clone(),
|
loaded_filename.clone(),
|
||||||
))
|
))
|
||||||
.item(
|
.item(
|
||||||
|
|
Loading…
Reference in a new issue