summary refs log tree commit diff
path: root/src/components/preferences.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/preferences.rs')
-rw-r--r--src/components/preferences.rs61
1 files changed, 56 insertions, 5 deletions
diff --git a/src/components/preferences.rs b/src/components/preferences.rs
index f1f37f9..67075a2 100644
--- a/src/components/preferences.rs
+++ b/src/components/preferences.rs
@@ -1,3 +1,5 @@
+use gettextrs::*;
+
 use gio::prelude::*;
 use adw::prelude::*;
 use relm4::prelude::*;
@@ -6,6 +8,52 @@ pub struct Preferences {
     settings: gio::Settings,
 }
 
+#[allow(dead_code)]
+struct ComposerPreferencesWidgets {
+    page: adw::PreferencesPage,
+    general_group: adw::PreferencesGroup,
+    send_html_directly: adw::SwitchRow,
+}
+
+impl ComposerPreferencesWidgets {
+    fn new(settings: &gio::Settings) -> Self {
+        let page = adw::PreferencesPage::builder()
+            .title(gettext("Post composer"))
+            .description(gettext("Settings for composing new posts and editing existing ones."))
+            .icon_name("editor-symbolic")
+            .build();
+        let general_group = adw::PreferencesGroup::builder()
+            .title(gettext("General"))
+            .build();
+        let send_html_directly = adw::SwitchRow::new();
+        general_group.add(&send_html_directly);
+        page.add(&general_group);
+
+        let widgets = Self {
+            page,
+            general_group,
+            send_html_directly
+        };
+
+        let schema = settings.settings_schema().unwrap();
+
+        #[expect(clippy::single_element_loop)]
+        for (row, key, property) in [
+            (widgets.send_html_directly.upcast_ref::<adw::PreferencesRow>(), "send-html-directly", "active"),
+        ] {
+            let key_data = schema.key(key);
+            settings.bind(key, row, property)
+                .get()
+                .set()
+                .build();
+            row.set_title(&gettext(key_data.summary().unwrap()));
+            row.set_tooltip_markup(key_data.description().map(gettext).as_deref());
+        }
+
+        widgets
+    }
+}
+
 #[cfg(feature = "smart-summary")]
 #[allow(dead_code)]
 struct LanguageModelPreferencesWidgets {
@@ -25,10 +73,8 @@ struct LanguageModelPreferencesWidgets {
 #[cfg(feature = "smart-summary")]
 impl LanguageModelPreferencesWidgets {
     fn new(settings: &gio::Settings) -> Self {
-        use gettextrs::*;
-
         let page = adw::PreferencesPage::builder()
-            .title(gettext("Language Models"))
+            .title(gettext("Language models"))
             .description(gettext("Settings for the language model integrations."))
             .icon_name("brain-augemnted") // sic!
             .build();
@@ -79,11 +125,13 @@ impl LanguageModelPreferencesWidgets {
             (widgets.smart_summary_prompt_prefix.upcast_ref::<_>(), "smart-summary-prompt-prefix", "text"),
             (widgets.smart_summary_prompt_suffix.upcast_ref::<_>(), "smart-summary-prompt-suffix", "text"),
         ] {
+            let key_data = schema.key(key);
             settings.bind(key, row, property)
                 .get()
                 .set()
                 .build();
-            row.set_title(&gettext(schema.key(key).summary().unwrap()));
+            row.set_title(&gettext(key_data.summary().unwrap()));
+            row.set_tooltip_markup(key_data.description().map(gettext).as_deref());
         }
 
         widgets
@@ -91,8 +139,9 @@ impl LanguageModelPreferencesWidgets {
 }
 
 pub struct PreferencesWidgets {
+    composer: ComposerPreferencesWidgets,
     #[cfg(feature = "smart-summary")]
-    llm: LanguageModelPreferencesWidgets
+    llm: LanguageModelPreferencesWidgets,
 }
 
 impl Component for Preferences {
@@ -119,9 +168,11 @@ impl Component for Preferences {
         model.settings.delay();
 
         let widgets = PreferencesWidgets {
+            composer: ComposerPreferencesWidgets::new(&model.settings),
             #[cfg(feature = "smart-summary")]
             llm: LanguageModelPreferencesWidgets::new(&model.settings),
         };
+        root.add(&widgets.composer.page);
         #[cfg(feature = "smart-summary")]
         root.add(&widgets.llm.page);