aboutsummaryrefslogtreecommitdiff
path: root/src/preferences_dialog.rs
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2025-12-05 15:35:38 +0100
committerMalte Voos <git@mal.tc>2025-12-05 15:43:58 +0100
commitc347b6133365dcf1b7da4e77890b20d04d6cfba4 (patch)
treec83aac6f7d1e6edc57e607f01e5d3eeee8da4a0e /src/preferences_dialog.rs
parent652b1c2a0ce7db4885ebc51f7f09133a43401442 (diff)
downloadlleap-c347b6133365dcf1b7da4e77890b20d04d6cfba4.tar.gz
lleap-c347b6133365dcf1b7da4e77890b20d04d6cfba4.zip
implement machine translation; various fixes and refactorings
Diffstat (limited to 'src/preferences_dialog.rs')
-rw-r--r--src/preferences_dialog.rs70
1 files changed, 70 insertions, 0 deletions
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<Self>,
+ ) -> ComponentParts<Self> {
+ 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<Self>) {
+ match msg {
+ PreferencesDialogMsg::Show => {
+ self.dialog.present(Some(&self.parent_window));
+ }
+ }
+ }
+}