From 1b623ef346e99b6bf3877eef08015dbb62004739 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Mon, 21 May 2018 21:52:37 +0100 Subject: [PATCH 01/12] Initial dialog --- hammond-gtk/resources/gtk/hamburger.ui | 3 +- hammond-gtk/resources/gtk/help-overlay.ui | 7 + hammond-gtk/resources/gtk/prefs.ui | 453 ++++++++++++++++++++++ hammond-gtk/resources/resources.xml | 1 + hammond-gtk/src/app.rs | 1 + hammond-gtk/src/main.rs | 1 + hammond-gtk/src/prefs.rs | 63 +++ 7 files changed, 528 insertions(+), 1 deletion(-) create mode 100644 hammond-gtk/resources/gtk/prefs.ui create mode 100644 hammond-gtk/src/prefs.rs diff --git a/hammond-gtk/resources/gtk/hamburger.ui b/hammond-gtk/resources/gtk/hamburger.ui index 55d2877..1ea720f 100644 --- a/hammond-gtk/resources/gtk/hamburger.ui +++ b/hammond-gtk/resources/gtk/hamburger.ui @@ -20,7 +20,8 @@
_Preferences - win.preferences + app.preferences + <primary>,
diff --git a/hammond-gtk/resources/gtk/help-overlay.ui b/hammond-gtk/resources/gtk/help-overlay.ui index 40b17da..313e119 100644 --- a/hammond-gtk/resources/gtk/help-overlay.ui +++ b/hammond-gtk/resources/gtk/help-overlay.ui @@ -18,6 +18,13 @@ Check for new episodes + + + True + <primary>, + Preferences + + True diff --git a/hammond-gtk/resources/gtk/prefs.ui b/hammond-gtk/resources/gtk/prefs.ui new file mode 100644 index 0000000..881e03e --- /dev/null +++ b/hammond-gtk/resources/gtk/prefs.ui @@ -0,0 +1,453 @@ + + + + + + False + Preferences + 500 + dialog + + + False + vertical + 2 + + + True + True + 480 + 250 + True + True + + + True + False + none + + + True + False + center + center + vertical + + + True + False + start + 20 + 5 + Appearance + + + False + True + 0 + + + + + 450 + True + False + 0 + in + + + True + False + + + True + False + none + False + + + 50 + True + True + + + True + False + 5 + 5 + 5 + 5 + + + True + False + Dark Theme + + + False + True + 0 + + + + + True + True + center + + + False + False + end + 1 + + + + + + + + + + + + + + + + False + True + 1 + + + + + True + False + start + 20 + 5 + Refresh + + + False + True + 2 + + + + + 300 + True + False + 0 + in + + + True + False + + + True + False + none + False + + + 50 + True + True + + + True + False + 5 + 5 + 5 + 5 + + + True + False + Refresh at startup + + + False + True + 0 + + + + + True + True + center + + + False + False + end + 1 + + + + + + + + + 100 + 50 + True + True + + + True + False + 5 + 5 + 5 + 5 + + + True + False + Automatically Refresh + + + False + True + 0 + + + + + True + True + center + + + False + False + end + 1 + + + + + + + + + 100 + 50 + True + True + + + True + False + 5 + 5 + 5 + 5 + + + True + False + Every + + + False + True + 0 + + + + + True + False + + + True + True + digits + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + + False + True + end + 1 + + + + + + + + + + + + + + + + False + True + 3 + + + + + True + False + start + 20 + 5 + Cleanup + + + False + True + 4 + + + + + 300 + True + False + 0 + in + + + True + False + + + True + False + none + False + + + 100 + 50 + True + True + + + True + False + 5 + 5 + 5 + 5 + + + True + False + Every + + + False + True + 0 + + + + + True + False + + + True + True + digits + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + + False + True + end + 1 + + + + + + + + + + + + + + + + False + True + 5 + + + + + + + + + True + True + 1 + + + + + + + + + diff --git a/hammond-gtk/resources/resources.xml b/hammond-gtk/resources/resources.xml index 0843719..ad41e44 100644 --- a/hammond-gtk/resources/resources.xml +++ b/hammond-gtk/resources/resources.xml @@ -17,6 +17,7 @@ gtk/player_toolbar.ui icons/skip-back-symbolic.svg icons/skip-forward-symbolic.svg + gtk/prefs.ui gtk/style.css \ No newline at end of file diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index 265c2ec..124bd30 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -14,6 +14,7 @@ use hammond_data::Show; use send_cell::SendCell; use headerbar::Header; +use prefs::Prefs; use settings::{self, WindowGeometry}; use stacks::{Content, PopulatedState}; use utils; diff --git a/hammond-gtk/src/main.rs b/hammond-gtk/src/main.rs index 0e92706..cf97e85 100644 --- a/hammond-gtk/src/main.rs +++ b/hammond-gtk/src/main.rs @@ -101,6 +101,7 @@ mod widgets; mod app; mod headerbar; +mod prefs; mod manager; mod settings; diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs new file mode 100644 index 0000000..d9101d2 --- /dev/null +++ b/hammond-gtk/src/prefs.rs @@ -0,0 +1,63 @@ +use gio; +use gtk; +use gtk::prelude::*; + +#[derive(Debug, Clone)] +// TODO: split this into smaller +pub struct Prefs { + dialog: gtk::Window, + refresh_type: gtk::ComboBox, + cleanup_type: gtk::ComboBox, +} + +impl Default for Prefs { + fn default() -> Prefs { + let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/prefs.ui"); + + let dialog = builder.get_object("prefs").unwrap(); + let refresh_type = builder.get_object("refresh_type").unwrap(); + let cleanup_type = builder.get_object("cleanup_type").unwrap(); + + Prefs { + dialog, + refresh_type, + cleanup_type, + } + } +} + +// TODO: Refactor components into smaller state machines +impl Prefs { + pub fn new( + settings: &gio::Settings, + ) -> Prefs { + let h = Prefs::default(); + h.init(settings); + h + } + + pub fn init( + &self, + _settings: &gio::Settings, + ) { + println!("TODO"); + let store = gtk::ListStore::new(&[gtk::Type::String]); + for item in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter() { + let row = [&(item) as &ToValue]; + store.insert_with_values(None, &[0], &row); + } + 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); + } + //settings.get_string("cleanup-age-period").unwrap(); + } + + pub fn show (&self, parent: >k::Window) { + self.dialog.set_transient_for(Some(parent)); + self.dialog.set_modal(true); + self.dialog.show_all(); + } +} From a4a012368e1d3443e2dacc8c82c1164d6096dde5 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Mon, 21 May 2018 22:20:57 +0100 Subject: [PATCH 02/12] Bind switches to keys --- hammond-gtk/resources/gtk/prefs.ui | 10 +++---- hammond-gtk/src/prefs.rs | 47 +++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) 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(); From ef2286dca48f86984360a2cc5040704bc87ddb85 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Mon, 21 May 2018 23:26:13 +0100 Subject: [PATCH 03/12] Bind refresh/cleanup rate --- hammond-gtk/resources/gtk/hamburger.ui | 2 +- hammond-gtk/resources/gtk/help-overlay.ui | 2 +- hammond-gtk/resources/gtk/prefs.ui | 32 +++++++++++++++- hammond-gtk/src/prefs.rs | 45 ++++++++++++++++++++++- 4 files changed, 77 insertions(+), 4 deletions(-) diff --git a/hammond-gtk/resources/gtk/hamburger.ui b/hammond-gtk/resources/gtk/hamburger.ui index 1ea720f..87883a4 100644 --- a/hammond-gtk/resources/gtk/hamburger.ui +++ b/hammond-gtk/resources/gtk/hamburger.ui @@ -21,7 +21,7 @@ _Preferences app.preferences - <primary>, + <primary>e
diff --git a/hammond-gtk/resources/gtk/help-overlay.ui b/hammond-gtk/resources/gtk/help-overlay.ui index 313e119..2ae4b56 100644 --- a/hammond-gtk/resources/gtk/help-overlay.ui +++ b/hammond-gtk/resources/gtk/help-overlay.ui @@ -21,7 +21,7 @@ True - <primary>, + <primary>e Preferences diff --git a/hammond-gtk/resources/gtk/prefs.ui b/hammond-gtk/resources/gtk/prefs.ui index 204318b..e820d1c 100644 --- a/hammond-gtk/resources/gtk/prefs.ui +++ b/hammond-gtk/resources/gtk/prefs.ui @@ -2,6 +2,20 @@ + + 1 + 100 + 1 + 1 + 10 + + + 1 + 100 + 1 + 1 + 10 + False Preferences @@ -69,6 +83,8 @@ 50 True True + False + False True @@ -157,6 +173,8 @@ 50 True True + False + False True @@ -200,6 +218,8 @@ 50 True True + False + False True @@ -243,6 +263,8 @@ 50 True True + False + False True @@ -272,6 +294,9 @@ True True digits + refresh_value_adj + 1 + 1 False @@ -357,6 +382,8 @@ 50 True True + False + False True @@ -386,6 +413,9 @@ True True digits + cleanup_value_adj + 1 + 1 False @@ -446,7 +476,7 @@ - + diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index 6ad3743..9924c0e 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -9,7 +9,9 @@ pub struct Prefs { dark_toggle: gtk::Switch, startup_toggle: gtk::Switch, auto_toggle: gtk::Switch, + refresh_value: gtk::SpinButton, refresh_type: gtk::ComboBox, + cleanup_value: gtk::SpinButton, cleanup_type: gtk::ComboBox, } @@ -21,7 +23,9 @@ impl Default for Prefs { 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_value = builder.get_object("refresh_value").unwrap(); let refresh_type = builder.get_object("refresh_type").unwrap(); + let cleanup_value = builder.get_object("cleanup_value").unwrap(); let cleanup_type = builder.get_object("cleanup_type").unwrap(); Prefs { @@ -29,7 +33,9 @@ impl Default for Prefs { dark_toggle, startup_toggle, auto_toggle, + refresh_value, refresh_type, + cleanup_value, cleanup_type, } } @@ -62,10 +68,34 @@ impl Prefs { "active", gio::SettingsBindFlags::DEFAULT, ); + settings.bind( + "refresh-interval-time", + &self.refresh_value, + "value", + gio::SettingsBindFlags::DEFAULT, + ); + settings.bind( + "cleanup-age-time", + &self.cleanup_value, + "value", + gio::SettingsBindFlags::DEFAULT, + ); + let refresh_p = settings.get_string("refresh-interval-period").unwrap(); + let mut refresh_pos = 0; + let cleanup_p = settings.get_string("cleanup-age-period").unwrap(); + let mut cleanup_pos = 0; let store = gtk::ListStore::new(&[gtk::Type::String]); + let mut i = 0; for item in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter() { let row = [&(item) as &ToValue]; + if item.to_lowercase() == refresh_p { + refresh_pos = i; + } + if item.to_lowercase() == cleanup_p { + cleanup_pos = i; + } store.insert_with_values(None, &[0], &row); + i += 1 ; } for combo in [self.refresh_type.clone(), self.cleanup_type.clone()].iter() { combo.set_model(Some(&store)); @@ -73,7 +103,20 @@ impl Prefs { combo.pack_start(&renderer, true); combo.add_attribute(&renderer, "text", 0); } - // settings.get_string("cleanup-age-period").unwrap(); + self.refresh_type.set_active(refresh_pos); + self.refresh_type + .connect_changed(clone!(settings, store => move |combo| { + let value = store.get_value(&combo.get_active_iter().unwrap(), 0); + let value: &str = value.get().unwrap(); + settings.set_string("refresh-interval-period", &value.to_lowercase()); + })); + self.cleanup_type.set_active(cleanup_pos); + self.cleanup_type + .connect_changed(clone!(settings, store => move |combo| { + let value = store.get_value(&combo.get_active_iter().unwrap(), 0); + let value: &str = value.get().unwrap(); + settings.set_string("cleanup-age-period", &value.to_lowercase()); + })); } pub fn show(&self, parent: >k::Window) { From f56fac68773d81451271980522afbc9cb884b131 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Mon, 21 May 2018 23:32:23 +0100 Subject: [PATCH 04/12] Bind GtkSettings dark property to GSettings Now you can switch between dark and light on the fly --- hammond-gtk/src/app.rs | 16 ++++++++++------ hammond-gtk/src/prefs.rs | 8 +++++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index 124bd30..baa3251 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -1,13 +1,13 @@ #![allow(new_without_default)] +#![allow(unused)] use gio::{ - self, ActionMapExt, ApplicationExt, ApplicationExtManual, ApplicationFlags, SettingsExt, - SimpleAction, SimpleActionExt, + self, ActionMapExt, ApplicationExt, ApplicationExtManual, ApplicationFlags, + SettingsBindFlags, SettingsExt, SimpleAction, SimpleActionExt, }; use glib; use gtk; use gtk::prelude::*; -use gtk::SettingsExt as GtkSettingsExt; use crossbeam_channel::{unbounded, Receiver, Sender}; use hammond_data::Show; @@ -150,9 +150,12 @@ impl App { fn setup_dark_theme(&self) { let gtk_settings = gtk::Settings::get_default().unwrap(); - let enabled = self.settings.get_boolean("dark-theme"); - - gtk_settings.set_property_gtk_application_prefer_dark_theme(enabled); + self.settings.bind( + "dark-theme", + >k_settings, + "gtk-application-prefer-dark-theme", + SettingsBindFlags::DEFAULT, + ); } fn setup_refresh_on_startup(&self) { @@ -187,6 +190,7 @@ impl App { let win = &self.window; let instance = &self.instance; let header = &self.headerbar; + let settings = &self.settings; // Create the `refresh` action. // diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index 9924c0e..48f3e1d 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + use gio; use gio::{Settings, SettingsExt}; use gtk; @@ -87,7 +89,7 @@ impl Prefs { let store = gtk::ListStore::new(&[gtk::Type::String]); let mut i = 0; for item in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter() { - let row = [&(item) as &ToValue]; + let row: &[&ToValue] = &[item]; if item.to_lowercase() == refresh_p { refresh_pos = i; } @@ -95,7 +97,7 @@ impl Prefs { cleanup_pos = i; } store.insert_with_values(None, &[0], &row); - i += 1 ; + i += 1; } for combo in [self.refresh_type.clone(), self.cleanup_type.clone()].iter() { combo.set_model(Some(&store)); @@ -119,7 +121,7 @@ impl Prefs { })); } - pub fn show(&self, parent: >k::Window) { + pub fn show(&self, parent: >k::ApplicationWindow) { self.dialog.set_transient_for(Some(parent)); self.dialog.set_modal(true); self.dialog.show_all(); From bce80cca0b47165eaa77214cd7afd3b542477809 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Thu, 7 Jun 2018 19:12:56 +0100 Subject: [PATCH 05/12] Fix some style issues --- hammond-gtk/src/app.rs | 9 +++++++++ hammond-gtk/src/prefs.rs | 6 ++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index baa3251..8c5e569 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -216,6 +216,15 @@ impl App { action!(win, "quit", clone!(instance => move |_, _| instance.quit())); self.instance.set_accels_for_action("win.quit", &["q"]); + action!( + win, + "preferences", + clone!(win, settings => move |_, _| { + let dialog = Prefs::new(&settings); + dialog.show(&win); + }) + ); + // Create the menu action action!(win, "menu",clone!(header => move |_, _| header.open_menu())); // Bind the hamburger menu button to `F10` diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index 48f3e1d..d87435a 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -87,8 +87,7 @@ impl Prefs { let cleanup_p = settings.get_string("cleanup-age-period").unwrap(); let mut cleanup_pos = 0; let store = gtk::ListStore::new(&[gtk::Type::String]); - let mut i = 0; - for item in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter() { + for (i, item) in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter().enumerate() { let row: &[&ToValue] = &[item]; if item.to_lowercase() == refresh_p { refresh_pos = i; @@ -97,9 +96,8 @@ impl Prefs { cleanup_pos = i; } store.insert_with_values(None, &[0], &row); - i += 1; } - for combo in [self.refresh_type.clone(), self.cleanup_type.clone()].iter() { + for combo in &[self.refresh_type.clone(), self.cleanup_type.clone()] { combo.set_model(Some(&store)); let renderer = gtk::CellRendererText::new(); combo.pack_start(&renderer, true); From a9c38f5a0377f7457ed66491b4742bc4648c5327 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Fri, 8 Jun 2018 19:27:11 +0100 Subject: [PATCH 06/12] Remove the update section --- hammond-gtk/resources/gtk/prefs.ui | 241 +++-------------------------- hammond-gtk/src/prefs.rs | 54 +------ 2 files changed, 25 insertions(+), 270 deletions(-) diff --git a/hammond-gtk/resources/gtk/prefs.ui b/hammond-gtk/resources/gtk/prefs.ui index e820d1c..0969ce5 100644 --- a/hammond-gtk/resources/gtk/prefs.ui +++ b/hammond-gtk/resources/gtk/prefs.ui @@ -9,17 +9,9 @@ 1 10 - - 1 - 100 - 1 - 1 - 10 - False Preferences - 500 dialog @@ -31,7 +23,7 @@ True True 480 - 250 + 200 True True @@ -51,7 +43,7 @@ True False start - 20 + 10 5 Appearance @@ -136,214 +128,6 @@ 1 - - - True - False - start - 20 - 5 - Refresh - - - False - True - 2 - - - - - 300 - True - False - 0 - in - - - True - False - - - True - False - none - False - - - 50 - True - True - False - False - - - True - False - 5 - 5 - 5 - 5 - - - True - False - Refresh at startup - - - False - True - 0 - - - - - True - True - center - - - False - False - end - 1 - - - - - - - - - 100 - 50 - True - True - False - False - - - True - False - 5 - 5 - 5 - 5 - - - True - False - Automatically Refresh - - - False - True - 0 - - - - - True - True - center - - - False - False - end - 1 - - - - - - - - - 100 - 50 - True - True - False - False - - - True - False - 5 - 5 - 5 - 5 - - - True - False - Every - - - False - True - 0 - - - - - True - False - - - True - True - digits - refresh_value_adj - 1 - 1 - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - - False - True - end - 1 - - - - - - - - - - - - - - - - False - True - 3 - - True @@ -356,7 +140,7 @@ False True - 4 + 2 @@ -460,7 +244,7 @@ False True - 5 + 3 @@ -477,7 +261,22 @@ - + + True + False + Prefrences + True + + + + + + 1 + 100 + 1 + 1 + 10 + diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index d87435a..e359fa1 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -9,10 +9,6 @@ use gtk::prelude::*; pub struct Prefs { dialog: gtk::Window, dark_toggle: gtk::Switch, - startup_toggle: gtk::Switch, - auto_toggle: gtk::Switch, - refresh_value: gtk::SpinButton, - refresh_type: gtk::ComboBox, cleanup_value: gtk::SpinButton, cleanup_type: gtk::ComboBox, } @@ -23,20 +19,12 @@ impl Default for Prefs { 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_value = builder.get_object("refresh_value").unwrap(); - let refresh_type = builder.get_object("refresh_type").unwrap(); let cleanup_value = builder.get_object("cleanup_value").unwrap(); let cleanup_type = builder.get_object("cleanup_type").unwrap(); Prefs { dialog, dark_toggle, - startup_toggle, - auto_toggle, - refresh_value, - refresh_type, cleanup_value, cleanup_type, } @@ -58,58 +46,26 @@ impl Prefs { "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, - ); - settings.bind( - "refresh-interval-time", - &self.refresh_value, - "value", - gio::SettingsBindFlags::DEFAULT, - ); settings.bind( "cleanup-age-time", &self.cleanup_value, "value", gio::SettingsBindFlags::DEFAULT, ); - let refresh_p = settings.get_string("refresh-interval-period").unwrap(); - let mut refresh_pos = 0; let cleanup_p = settings.get_string("cleanup-age-period").unwrap(); let mut cleanup_pos = 0; let store = gtk::ListStore::new(&[gtk::Type::String]); for (i, item) in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter().enumerate() { let row: &[&ToValue] = &[item]; - if item.to_lowercase() == refresh_p { - refresh_pos = i; - } if item.to_lowercase() == cleanup_p { - cleanup_pos = i; + cleanup_pos = i as i32; } store.insert_with_values(None, &[0], &row); } - for combo in &[self.refresh_type.clone(), self.cleanup_type.clone()] { - combo.set_model(Some(&store)); - let renderer = gtk::CellRendererText::new(); - combo.pack_start(&renderer, true); - combo.add_attribute(&renderer, "text", 0); - } - self.refresh_type.set_active(refresh_pos); - self.refresh_type - .connect_changed(clone!(settings, store => move |combo| { - let value = store.get_value(&combo.get_active_iter().unwrap(), 0); - let value: &str = value.get().unwrap(); - settings.set_string("refresh-interval-period", &value.to_lowercase()); - })); + self.cleanup_type.set_model(Some(&store)); + let renderer = gtk::CellRendererText::new(); + self.cleanup_type.pack_start(&renderer, true); + self.cleanup_type.add_attribute(&renderer, "text", 0); self.cleanup_type.set_active(cleanup_pos); self.cleanup_type .connect_changed(clone!(settings, store => move |combo| { From 54c084040c145e7a78c7f81b800dae0a2992f5b3 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Fri, 8 Jun 2018 21:43:07 +0100 Subject: [PATCH 07/12] Minor rustfmt update --- hammond-gtk/src/prefs.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index e359fa1..6e07964 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -55,7 +55,10 @@ impl Prefs { let cleanup_p = settings.get_string("cleanup-age-period").unwrap(); let mut cleanup_pos = 0; let store = gtk::ListStore::new(&[gtk::Type::String]); - for (i, item) in ["Seconds", "Minutes", "Hours", "Days", "Weeks"].iter().enumerate() { + for (i, item) in ["Seconds", "Minutes", "Hours", "Days", "Weeks"] + .iter() + .enumerate() + { let row: &[&ToValue] = &[item]; if item.to_lowercase() == cleanup_p { cleanup_pos = i as i32; From dcc06cf8c63247f85070273fd02a4a9c2197b2c3 Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Mon, 21 May 2018 21:52:37 +0100 Subject: [PATCH 08/12] Initial dialog --- hammond-gtk/resources/gtk/hamburger.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hammond-gtk/resources/gtk/hamburger.ui b/hammond-gtk/resources/gtk/hamburger.ui index 87883a4..58decaa 100644 --- a/hammond-gtk/resources/gtk/hamburger.ui +++ b/hammond-gtk/resources/gtk/hamburger.ui @@ -20,7 +20,7 @@
_Preferences - app.preferences + win.preferences <primary>e
From 14dfafcb7c1c6677913ac64df8b05931593d83ef Mon Sep 17 00:00:00 2001 From: Zander Brown Date: Sat, 21 Jul 2018 18:54:10 +0100 Subject: [PATCH 09/12] Sort out accelerators --- hammond-gtk/src/app.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index 8c5e569..6a10372 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -224,6 +224,7 @@ impl App { dialog.show(&win); }) ); + self.instance.set_accels_for_action("win.preferences", &["e"]); // Create the menu action action!(win, "menu",clone!(header => move |_, _| header.open_menu())); From 60a93a243379e0103eed4eb0339b2a352ff3f0a2 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Mon, 23 Jul 2018 17:16:40 +0300 Subject: [PATCH 10/12] App: Use the gio::prelude --- hammond-gtk/src/app.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index 6a10372..e825788 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -1,10 +1,7 @@ #![allow(new_without_default)] #![allow(unused)] -use gio::{ - self, ActionMapExt, ApplicationExt, ApplicationExtManual, ApplicationFlags, - SettingsBindFlags, SettingsExt, SimpleAction, SimpleActionExt, -}; +use gio::{self, prelude::*, ApplicationFlags, SettingsBindFlags, SettingsExt, SimpleAction}; use glib; use gtk; use gtk::prelude::*; From 9e23b16ae7391622eb60511e7a2c438ef5190f39 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Mon, 23 Jul 2018 19:55:23 +0300 Subject: [PATCH 11/12] App: Remove no longer needed allow(unused). --- hammond-gtk/src/app.rs | 1 - hammond-gtk/src/prefs.rs | 2 -- 2 files changed, 3 deletions(-) diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index e825788..be09751 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -1,5 +1,4 @@ #![allow(new_without_default)] -#![allow(unused)] use gio::{self, prelude::*, ApplicationFlags, SettingsBindFlags, SettingsExt, SimpleAction}; use glib; diff --git a/hammond-gtk/src/prefs.rs b/hammond-gtk/src/prefs.rs index 6e07964..f075430 100644 --- a/hammond-gtk/src/prefs.rs +++ b/hammond-gtk/src/prefs.rs @@ -1,5 +1,3 @@ -#![allow(dead_code)] - use gio; use gio::{Settings, SettingsExt}; use gtk; From 403bb71c5d3c9236eea416f59db97f3631d30059 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Tue, 24 Jul 2018 02:04:12 +0300 Subject: [PATCH 12/12] Prefs: Bikeshed on the naming of things. --- hammond-gtk/resources/gtk/prefs.ui | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hammond-gtk/resources/gtk/prefs.ui b/hammond-gtk/resources/gtk/prefs.ui index 0969ce5..164e450 100644 --- a/hammond-gtk/resources/gtk/prefs.ui +++ b/hammond-gtk/resources/gtk/prefs.ui @@ -135,7 +135,7 @@ start 20 5 - Cleanup + Delete played episodes
False @@ -180,7 +180,7 @@ True False - Every + After False