From c347b6133365dcf1b7da4e77890b20d04d6cfba4 Mon Sep 17 00:00:00 2001 From: Malte Voos Date: Fri, 5 Dec 2025 15:35:38 +0100 Subject: implement machine translation; various fixes and refactorings --- src/preferences_dialog.rs | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/preferences_dialog.rs (limited to 'src/preferences_dialog.rs') diff --git a/src/preferences_dialog.rs b/src/preferences_dialog.rs new file mode 100644 index 0000000..5aacfe8 --- /dev/null +++ b/src/preferences_dialog.rs @@ -0,0 +1,70 @@ +use adw::prelude::*; +use relm4::prelude::*; + +use crate::settings::Settings; + +pub struct PreferencesDialog { + parent_window: adw::ApplicationWindow, + dialog: adw::PreferencesDialog, +} + +#[derive(Debug)] +pub enum PreferencesDialogMsg { + Show, +} + +#[relm4::component(pub)] +impl SimpleComponent for PreferencesDialog { + type Init = adw::ApplicationWindow; + type Input = PreferencesDialogMsg; + type Output = (); + + view! { + #[root] + adw::PreferencesDialog { + set_title: "Preferences", + add: &page, + }, + + #[name(page)] + adw::PreferencesPage { + adw::PreferencesGroup { + set_title: "Machine Translation", + + #[name(deepl_api_key_row)] + adw::EntryRow { + set_title: "DeepL API key", + }, + } + } + } + + fn init( + parent_window: Self::Init, + root: Self::Root, + _sender: ComponentSender, + ) -> ComponentParts { + let settings = Settings::default(); + + let model = Self { + parent_window, + dialog: root.clone(), + }; + + let widgets = view_output!(); + + settings + .bind_deepl_api_key(&widgets.deepl_api_key_row, "text") + .build(); + + ComponentParts { model, widgets } + } + + fn update(&mut self, msg: Self::Input, _sender: ComponentSender) { + match msg { + PreferencesDialogMsg::Show => { + self.dialog.present(Some(&self.parent_window)); + } + } + } +} -- cgit 1.4.1