aboutsummaryrefslogtreecommitdiff
path: root/src/preferences.rs
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2025-10-01 00:20:10 +0200
committerMalte Voos <git@mal.tc>2025-10-01 00:20:10 +0200
commit338babaad2189f7ff1ee088994c8c20a0646ff4d (patch)
tree29fb2620f748d32a42c1d1eb3346771600a8d75b /src/preferences.rs
downloadlleap-338babaad2189f7ff1ee088994c8c20a0646ff4d.tar.gz
lleap-338babaad2189f7ff1ee088994c8c20a0646ff4d.zip
init
Diffstat (limited to 'src/preferences.rs')
-rw-r--r--src/preferences.rs71
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));
+ }
+ }
+ }
+}