azalea_shell/window/taskbar/
mod.rs1use gtk::prelude::BoxExt;
4use relm4::{ComponentParts, ComponentSender, SimpleComponent, component};
5use widget::WidgetWrapper;
6
7pub mod widget;
8
9crate::init! {
10 Model {
11 widgets: Vec<WidgetWrapper>,
12 }
13
14 Config {
15 spacing: i32,
16 start: Vec<widget::ConfigWrapper>,
17 center: Vec<widget::ConfigWrapper>,
18 end: Vec<widget::ConfigWrapper>,
19 }
20}
21
22#[component(pub)]
23impl SimpleComponent for Model {
24 type Init = Init;
25 type Input = ();
26 type Output = ();
27
28 view! {
29 gtk::Window {
30 #[name(center_box)]
31 gtk::CenterBox {
32 #[name(start_widget)]
33 #[wrap(Some)]
34 set_start_widget = >k::Box {
35
36 },
37
38 #[name(center_widget)]
39 #[wrap(Some)]
40 set_center_widget = >k::Box {
41
42 },
43
44 #[name(end_widget)]
45 #[wrap(Some)]
46 set_end_widget = >k::Box {
47
48 },
49 }
50 }
51 }
52
53 fn init(
54 init: Self::Init,
55 _root: Self::Root,
56 _sender: ComponentSender<Self>,
57 ) -> ComponentParts<Self> {
58 let mut model = Model { widgets: vec![] };
59 let widgets = view_output!();
60
61 for widget_config in init.config.start {
62 let (wrapper, widget) = widget_config.build_widget();
63 model.widgets.push(wrapper);
64 widgets.start_widget.append(&widget);
65 widgets.start_widget.set_spacing(init.config.spacing);
66 }
67
68 for widget_config in init.config.center {
69 let (wrapper, widget) = widget_config.build_widget();
70 model.widgets.push(wrapper);
71 widgets.center_widget.append(&widget);
72 widgets.center_widget.set_spacing(init.config.spacing);
73 }
74
75 for widget_config in init.config.end {
76 let (wrapper, widget) = widget_config.build_widget();
77 model.widgets.push(wrapper);
78 widgets.end_widget.append(&widget);
79 widgets.end_widget.set_spacing(init.config.spacing);
80 }
81
82 ComponentParts { model, widgets }
83 }
84}