diff --git a/hammond-gtk/resources/gtk/prefs.ui b/hammond-gtk/resources/gtk/prefs.ui index 881e03e..204318b 100644 --- a/hammond-gtk/resources/gtk/prefs.ui +++ b/hammond-gtk/resources/gtk/prefs.ui @@ -90,7 +90,7 @@ - + True True center @@ -178,7 +178,7 @@ - + True True center @@ -221,7 +221,7 @@ - + True True center @@ -268,7 +268,7 @@ True False - + True True digits @@ -382,7 +382,7 @@ True False - + True True digits diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index d9101d2..6ad3743 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -1,11 +1,14 @@ use gio; +use gio::{Settings, SettingsExt}; use gtk; use gtk::prelude::*; #[derive(Debug, Clone)] -// TODO: split this into smaller pub struct Prefs { dialog: gtk::Window, + dark_toggle: gtk::Switch, + startup_toggle: gtk::Switch, + auto_toggle: gtk::Switch, refresh_type: gtk::ComboBox, cleanup_type: gtk::ComboBox, } @@ -15,11 +18,17 @@ impl Default for Prefs { let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/prefs.ui"); let dialog = builder.get_object("prefs").unwrap(); + let dark_toggle = builder.get_object("dark_toggle").unwrap(); + let startup_toggle = builder.get_object("startup_toggle").unwrap(); + let auto_toggle = builder.get_object("auto_toggle").unwrap(); let refresh_type = builder.get_object("refresh_type").unwrap(); let cleanup_type = builder.get_object("cleanup_type").unwrap(); Prefs { dialog, + dark_toggle, + startup_toggle, + auto_toggle, refresh_type, cleanup_type, } @@ -28,19 +37,31 @@ impl Default for Prefs { // TODO: Refactor components into smaller state machines impl Prefs { - pub fn new( - settings: &gio::Settings, - ) -> Prefs { + pub fn new(settings: &Settings) -> Prefs { let h = Prefs::default(); h.init(settings); h } - pub fn init( - &self, - _settings: &gio::Settings, - ) { - println!("TODO"); + pub fn init(&self, settings: &Settings) { + settings.bind( + "dark-theme", + &self.dark_toggle, + "active", + gio::SettingsBindFlags::DEFAULT, + ); + settings.bind( + "refresh-on-startup", + &self.startup_toggle, + "active", + gio::SettingsBindFlags::DEFAULT, + ); + settings.bind( + "refresh-interval", + &self.auto_toggle, + "active", + gio::SettingsBindFlags::DEFAULT, + ); let store = gtk::ListStore::new(&[gtk::Type::String]); for item in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter() { let row = [&(item) as &ToValue]; @@ -49,13 +70,13 @@ impl Prefs { for combo in [self.refresh_type.clone(), self.cleanup_type.clone()].iter() { combo.set_model(Some(&store)); let renderer = gtk::CellRendererText::new(); - combo.pack_start (&renderer, true); - combo.add_attribute (&renderer, "text", 0); + combo.pack_start(&renderer, true); + combo.add_attribute(&renderer, "text", 0); } - //settings.get_string("cleanup-age-period").unwrap(); + // settings.get_string("cleanup-age-period").unwrap(); } - pub fn show (&self, parent: >k::Window) { + pub fn show(&self, parent: >k::Window) { self.dialog.set_transient_for(Some(parent)); self.dialog.set_modal(true); self.dialog.show_all();