From 42f313d0166469333d13d815b38199522b38002f Mon Sep 17 00:00:00 2001 From: Hannes Kuchelmeister Date: Fri, 1 Apr 2022 23:38:13 +0200 Subject: [PATCH] add empty settings dialogue --- src/main.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 517ff78..98e044b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use adw::prelude::AdwApplicationWindowExt; use gtk::prelude::{BoxExt, GtkWindowExt, OrientableExt}; -use relm4::{adw::{self, traits::{PreferencesRowExt, ActionRowExt}, prelude::{WidgetExt}}, gtk::{self, SelectionMode}, AppUpdate, Model, RelmApp, Sender, WidgetPlus, Widgets, factory::{FactoryVec, FactoryPrototype}, view}; +use relm4::{adw::{self, traits::{PreferencesRowExt, ActionRowExt}, prelude::{WidgetExt, ButtonExt}}, gtk::{self, SelectionMode}, AppUpdate, Model, RelmApp, Sender, WidgetPlus, Widgets, factory::{FactoryVec, FactoryPrototype}, view, RelmComponent, Components, send, ComponentUpdate}; const START_ICON : &str = r#"media-playback-start-symbolic"#; const START_TOOLTIP : &str = r#"Start toolbox"#; @@ -19,27 +19,89 @@ const TERMINAL_TOOLTIP : &str = r#"Open terminal inside of toolbox"#; const SETTINGS_ICON : &str = r#"applications-system-symbolic"#; const SETTINGS_TOOLTIP : &str = r#"Open toolbox settings"#; + struct AppModel { toolboxes: FactoryVec } -enum AppMsg { - Increment, - Decrement, +#[derive(Debug)] +enum AppMode { } +enum AppMsg { + ShowToolboxSettingsRequest, +} + +// Components (Book) + +#[relm4::widget] +impl Widgets for ToolboxSettingsDialogWidgets { + view! { + adw::PreferencesWindow { + set_transient_for: parent!{Some(&parent_widgets.main_window)}, + set_modal: true, + set_visible: watch!(!model.hidden), + connect_close_request(sender) => move |_| { + send!(sender, ToolboxSettingsDialogMsg::Close); + gtk::Inhibit(true) + } + } + } +} + +struct ToolboxSettingsDialogModel { + hidden: bool, +} +enum ToolboxSettingsDialogMsg { + Show, + Close, +} + +impl Model for ToolboxSettingsDialogModel { + type Msg = ToolboxSettingsDialogMsg; + type Widgets = ToolboxSettingsDialogWidgets; + type Components = (); +} +impl ComponentUpdate for ToolboxSettingsDialogModel { + fn init_model(_parent_model: &AppModel) -> Self { + ToolboxSettingsDialogModel { hidden: true } + } + + fn update( + &mut self, + msg: ToolboxSettingsDialogMsg, + _components: &(), + _sender: Sender, + parent_sender: Sender, + ) { + match msg { + ToolboxSettingsDialogMsg::Show => self.hidden = false, + ToolboxSettingsDialogMsg::Close => self.hidden = true, + } + } +} + + +#[derive(relm4::Components)] +struct AppComponents { + dialog: RelmComponent, +} + +// \Components + + + impl Model for AppModel { type Msg = AppMsg; type Widgets = AppWidgets; - type Components = (); + type Components = AppComponents; } impl AppUpdate for AppModel { - fn update(&mut self, msg: AppMsg, _components: &(), _sender: Sender) -> bool { + fn update(&mut self, msg: AppMsg, components: &AppComponents, _sender: Sender) -> bool { match msg { - AppMsg::Increment => { - } - AppMsg::Decrement => { + AppMsg::ShowToolboxSettingsRequest => { + components.dialog.send(ToolboxSettingsDialogMsg::Show).unwrap(); } } true @@ -133,6 +195,9 @@ impl FactoryPrototype for ToolboxContainer { set_margin_bottom: 10, set_tooltip_text: Some(SETTINGS_TOOLTIP), set_css_classes: &["circular"], + connect_clicked(sender) => move |btn| { + send!(sender, AppMsg::ShowToolboxSettingsRequest); + }, }, } };