128 lines
4.2 KiB
Rust
128 lines
4.2 KiB
Rust
#![allow(dead_code)]
|
|
|
|
use gio;
|
|
use gio::{Settings, SettingsExt};
|
|
use gtk;
|
|
use gtk::prelude::*;
|
|
|
|
#[derive(Debug, Clone)]
|
|
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,
|
|
}
|
|
|
|
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 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,
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO: Refactor components into smaller state machines
|
|
impl Prefs {
|
|
pub fn new(settings: &Settings) -> Prefs {
|
|
let h = Prefs::default();
|
|
h.init(settings);
|
|
h
|
|
}
|
|
|
|
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,
|
|
);
|
|
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;
|
|
}
|
|
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_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::ApplicationWindow) {
|
|
self.dialog.set_transient_for(Some(parent));
|
|
self.dialog.set_modal(true);
|
|
self.dialog.show_all();
|
|
}
|
|
}
|