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
@@ -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();