110 lines
3.2 KiB
JavaScript
110 lines
3.2 KiB
JavaScript
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||
|
// Adapted from lockkeys@vaina.lt and https://github.com/pop-os/gnome-shell-extension-pop-suspend-button
|
||
|
|
||
|
const Gtk = imports.gi.Gtk;
|
||
|
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||
|
const Gettext = imports.gettext.domain('gnome-shell-extension-do-not-disturb');
|
||
|
const _ = Gettext.gettext;
|
||
|
const Settings = Me.imports.settings;
|
||
|
const Lib = Me.imports.lib;
|
||
|
|
||
|
function init() {}
|
||
|
|
||
|
/**
|
||
|
* Builds the GTK widget which displays all of the application specific settings.
|
||
|
*
|
||
|
* @returns {Gtk.Box} - The frame to display.
|
||
|
*/
|
||
|
function buildPrefsWidget() {
|
||
|
let settings = new Settings.SettingsManager();
|
||
|
let frame = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.VERTICAL,
|
||
|
border_width: 10,
|
||
|
margin: 20,
|
||
|
spacing: 8
|
||
|
});
|
||
|
|
||
|
var box = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.HORIZONTAL
|
||
|
});
|
||
|
|
||
|
frame.add(createSwitch(settings.shouldShowIcon(), (b) => {settings.setShowIcon(b); if (b) { box.show(); } else { box.hide(); } }, _("Enabled Icon"), _("Show an indicator icon when do not disturb is enabled.")));
|
||
|
|
||
|
var indicatorLbl = new Gtk.Label({
|
||
|
label: "Notification Indicator",
|
||
|
xalign: 0
|
||
|
});
|
||
|
|
||
|
var showCountRadio = createRadioButton(settings.showCount, (b) => { settings.showCount = b }, _("Count"));
|
||
|
var showDotRadio = createRadioButton(settings.showDot, (b) => { settings.showDot = b }, _("Dot"), showCountRadio);
|
||
|
var showNothingRadio = createRadioButton(!(settings.showCount || settings.showDot), (b) => { }, _("Nothing"), showCountRadio);
|
||
|
|
||
|
|
||
|
box.pack_start(indicatorLbl, true, true, 0);
|
||
|
box.add(showCountRadio);
|
||
|
box.add(showDotRadio);
|
||
|
box.add(showNothingRadio);
|
||
|
|
||
|
frame.add(box);
|
||
|
|
||
|
frame.add(createSwitch(settings.shouldMuteSound(), (b) => settings.setShouldMuteSound(b), _("Mute Sounds"), _("Mutes all sound when do not disturb is enabled.")));
|
||
|
|
||
|
frame.show_all();
|
||
|
|
||
|
if (!settings.shouldShowIcon()){
|
||
|
box.hide();
|
||
|
}
|
||
|
|
||
|
return frame;
|
||
|
}
|
||
|
|
||
|
function createRadioButton(active, set, text, group){
|
||
|
var widget;
|
||
|
if (group){
|
||
|
widget = Gtk.RadioButton.new_with_label_from_widget(group, text);
|
||
|
widget.set_active(active);
|
||
|
} else {
|
||
|
widget = new Gtk.RadioButton({
|
||
|
active: active,
|
||
|
label: text
|
||
|
});
|
||
|
}
|
||
|
widget.connect('notify::active', function(switch_widget) {
|
||
|
set(switch_widget.active);
|
||
|
});
|
||
|
|
||
|
return widget;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a switch setting.
|
||
|
*
|
||
|
* @param {boolean} active - The starting state of the switch.
|
||
|
* @param {(boolean) => ()} set - The setter function which is passed the value of the switch on state change.
|
||
|
* @param {string} text - The label of the widget.
|
||
|
* @param {string} tooltip - The description text to display on hover.
|
||
|
* @returns {Gtk.Box} - The widget containing the switch and label.
|
||
|
*/
|
||
|
function createSwitch(active, set, text, tooltip) {
|
||
|
let box = new Gtk.Box({
|
||
|
orientation: Gtk.Orientation.HORIZONTAL
|
||
|
});
|
||
|
let label = new Gtk.Label({
|
||
|
label: text,
|
||
|
xalign: 0,
|
||
|
tooltip_text: tooltip
|
||
|
});
|
||
|
let widget = new Gtk.Switch({
|
||
|
active: active
|
||
|
});
|
||
|
widget.connect('notify::active', function(switch_widget) {
|
||
|
set(switch_widget.active);
|
||
|
});
|
||
|
|
||
|
box.pack_start(label, true, true, 0);
|
||
|
box.add(widget);
|
||
|
return box;
|
||
|
}
|
||
|
|
||
|
Lib.initTranslations(Me);
|