diff options
Diffstat (limited to 'src/preferences.rs')
-rw-r--r-- | src/preferences.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/preferences.rs b/src/preferences.rs new file mode 100644 index 0000000..c5f9bb1 --- /dev/null +++ b/src/preferences.rs @@ -0,0 +1,71 @@ +use adw::prelude::*; +use gtk::gio; +use relm4::prelude::*; + +pub struct Preferences { + parent_window: adw::ApplicationWindow, + dialog: adw::PreferencesDialog, +} + +#[derive(Debug)] +pub enum PreferencesMsg { + Show, +} + +#[derive(Debug)] +pub enum PreferencesOutput {} + +#[relm4::component(pub)] +impl SimpleComponent for Preferences { + type Init = adw::ApplicationWindow; + type Input = PreferencesMsg; + type Output = PreferencesOutput; + + view! { + #[root] + adw::PreferencesDialog { + set_title: "Preferences", + add: &page, + }, + + #[name(page)] + adw::PreferencesPage { + adw::PreferencesGroup { + set_title: "Machine Translation", + + adw::EntryRow { + set_title: "DeepL API key", + set_text: settings.string("deepl-api-key").as_str(), + connect_changed[settings] => move |entry| { + settings.set_string("deepl-api-key", entry.text().as_str()).unwrap() + } + }, + } + } + } + + fn init( + parent_window: Self::Init, + root: Self::Root, + _sender: ComponentSender<Self>, + ) -> ComponentParts<Self> { + let settings = gio::Settings::new("tc.mal.lleap"); + + let model = Self { + parent_window, + dialog: root.clone(), + }; + + let widgets = view_output!(); + + ComponentParts { model, widgets } + } + + fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) { + match msg { + PreferencesMsg::Show => { + self.dialog.present(Some(&self.parent_window)); + } + } + } +} |