-
-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathprefs.js
97 lines (79 loc) · 2.67 KB
/
prefs.js
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
import Adw from 'gi://Adw'
import GLib from 'gi://GLib'
import GObject from 'gi://GObject'
import Gtk from 'gi://Gtk'
import { ExtensionPreferences } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'
import * as Theme from './theme.js'
import * as Convenience from './convenience.js'
class UnitePreferencesWidget {
constructor() {
this._settings = Convenience.getSettings()
this._buildable = new Gtk.Builder()
this._themes = new Theme.WindowControlsThemes()
this._loadTemplate()
this._loadThemes()
this._bindStrings()
this._bindSelects()
this._bindBooleans()
this._bindEnumerations()
this._bindIntegers()
}
_loadTemplate() {
const template = GLib.build_filenamev([Convenience.getPath(), 'settings.ui'])
this._buildable.add_from_file(template)
}
_loadThemes() {
const widget = this._getWidget('window-buttons-theme')
const themes = this._themes.available.sort((a, b) => {
return a.uuid < b.uuid ? -1 : a.uuid > b.uuid ? 1 : 0
})
themes.forEach(theme => {
if (theme.uuid !== 'default') {
widget.append(theme.uuid, theme.name)
}
})
}
_getWidget(name) {
let widgetName = name.replace(/-/g, '_')
return this._buildable.get_object(widgetName)
}
_bindInput(setting, prop) {
let widget = this._getWidget(setting)
this._settings.bind(setting, widget, prop, this._settings.DEFAULT_BINDING)
}
_bindEnum(setting) {
let widget = this._getWidget(setting)
widget.set_active(this._settings.get_enum(setting))
widget.connect('changed', combobox => {
this._settings.set_enum(setting, combobox.get_active())
})
}
_bindStrings() {
let settings = this._settings.getTypeSettings('string')
settings.forEach(setting => this._bindInput(setting, 'text'))
}
_bindSelects() {
let settings = this._settings.getTypeSettings('select')
settings.forEach(setting => this._bindInput(setting, 'active-id'))
}
_bindBooleans() {
let settings = this._settings.getTypeSettings('boolean')
settings.forEach(setting => this._bindInput(setting, 'active'))
}
_bindEnumerations() {
let settings = this._settings.getTypeSettings('enum')
settings.forEach(setting => this._bindEnum(setting))
}
_bindIntegers() {
let settings = this._settings.getTypeSettings('int')
settings.forEach(setting => this._bindInput(setting, 'value'))
}
}
export default class UnitePreferences extends ExtensionPreferences {
fillPreferencesWindow(window) {
const widget = new UnitePreferencesWidget()
window.add(widget._getWidget('general_page'))
window.add(widget._getWidget('windows_page'))
window.set_default_size(620, 660)
}
}