1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
// Furtherance - Track your time without being tracked
// Copyright (C) 2022 Ricky Kresslein <rk@lakoliu.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
use adw::prelude::*;
use adw::subclass::prelude::*;
use gtk::glib;
use gtk::subclass::prelude::*;
use gtk::CompositeTemplate;
use crate::settings_manager;
use crate::ui::FurtheranceWindow;
mod imp {
use super::*;
use glib::subclass;
#[derive(Default, Debug, CompositeTemplate)]
#[template(resource = "/com/lakoliu/Furtherance/gtk/preferences_window.ui")]
pub struct FurPreferencesWindow {
#[template_child]
pub appearance_group: TemplateChild<adw::PreferencesGroup>,
#[template_child]
pub dark_theme_switch: TemplateChild<gtk::Switch>,
#[template_child]
pub idle_group: TemplateChild<adw::PreferencesGroup>,
#[template_child]
pub notify_of_idle_expander: TemplateChild<adw::ExpanderRow>,
#[template_child]
pub notify_of_idle_spin: TemplateChild<gtk::SpinButton>,
}
#[glib::object_subclass]
impl ObjectSubclass for FurPreferencesWindow {
const NAME: &'static str = "FurPreferencesWindow";
type ParentType = adw::PreferencesWindow;
type Type = super::FurPreferencesWindow;
fn class_init(klass: &mut Self::Class) {
Self::bind_template(klass);
}
fn instance_init(obj: &subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl ObjectImpl for FurPreferencesWindow {
fn constructed(&self, obj: &Self::Type) {
let window = FurtheranceWindow::default();
obj.set_transient_for(Some(&window));
obj.setup_signals();
obj.setup_widgets();
self.parent_constructed(obj);
}
}
impl WidgetImpl for FurPreferencesWindow {}
impl WindowImpl for FurPreferencesWindow {}
impl AdwWindowImpl for FurPreferencesWindow {}
impl PreferencesWindowImpl for FurPreferencesWindow {}
}
glib::wrapper! {
pub struct FurPreferencesWindow(
ObjectSubclass<imp::FurPreferencesWindow>)
@extends gtk::Widget, gtk::Window, adw::Window, adw::PreferencesWindow;
}
impl FurPreferencesWindow {
pub fn new() -> Self {
glib::Object::new::<FurPreferencesWindow>(&[]).unwrap()
}
fn setup_widgets(&self) {
let imp = imp::FurPreferencesWindow::from_instance(self);
let manager = adw::StyleManager::default();
let support_darkmode = manager.system_supports_color_schemes();
imp.appearance_group.set_visible(!support_darkmode);
}
fn setup_signals(&self) {
let imp = imp::FurPreferencesWindow::from_instance(self);
settings_manager::bind_property(
"dark-mode",
&*imp.dark_theme_switch,
"active");
settings_manager::bind_property(
"notify-of-idle",
&*imp.notify_of_idle_expander,
"enable-expansion",
);
settings_manager::bind_property(
"idle-time",
&*imp.notify_of_idle_spin,
"value",
);
}
}
|