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