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)); } } } }