From 338babaad2189f7ff1ee088994c8c20a0646ff4d Mon Sep 17 00:00:00 2001 From: Malte Voos Date: Wed, 1 Oct 2025 00:20:10 +0200 Subject: init --- src/preferences.rs | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/preferences.rs (limited to 'src/preferences.rs') 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, + ) -> ComponentParts { + 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) { + match msg { + PreferencesMsg::Show => { + self.dialog.present(Some(&self.parent_window)); + } + } + } +} -- cgit 1.4.1