139 lines
5.5 KiB
JavaScript
139 lines
5.5 KiB
JavaScript
/*
|
|
This file is part of Caffeine (gnome-shell-extension-caffeine).
|
|
|
|
Caffeine 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.
|
|
|
|
Caffeine 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 Caffeine.
|
|
If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
Copyright 2022 Pakaoraki
|
|
|
|
// From https://gitlab.com/skrewball/openweather/-/blob/master/src/prefs.js
|
|
*/
|
|
/* exported DisplayPage */
|
|
'use strict';
|
|
|
|
import Adw from 'gi://Adw';
|
|
import Gtk from 'gi://Gtk';
|
|
import GObject from 'gi://GObject';
|
|
import Gio from 'gi://Gio';
|
|
|
|
import { gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
|
|
|
export var DisplayPage = GObject.registerClass(
|
|
class CaffeineDisplayPage extends Adw.PreferencesPage {
|
|
_init(settings, settingsKey) {
|
|
super._init({
|
|
title: _('Display'),
|
|
icon_name: 'video-display-symbolic',
|
|
name: 'DisplayPage'
|
|
});
|
|
this._settings = settings;
|
|
this._settingsKey = settingsKey;
|
|
|
|
// Display group
|
|
// --------------
|
|
let displayGroup = new Adw.PreferencesGroup({
|
|
title: _('Display')
|
|
});
|
|
|
|
// Show indicator
|
|
let showStatusIndicator = new Gtk.StringList();
|
|
showStatusIndicator.append(_('Only when active'));
|
|
showStatusIndicator.append(_('Always'));
|
|
showStatusIndicator.append(_('Never'));
|
|
let showStatusIndicatorRow = new Adw.ComboRow({
|
|
title: _('Show status indicator in top panel'),
|
|
subtitle: _('Enable or disable the Caffeine icon in the top panel'),
|
|
model: showStatusIndicator,
|
|
selected: this._settings.get_enum(this._settingsKey.SHOW_INDICATOR)
|
|
});
|
|
|
|
// Show timer
|
|
let showTimerSwitch = new Gtk.Switch({
|
|
valign: Gtk.Align.CENTER,
|
|
active: this._settings.get_boolean(this._settingsKey.SHOW_TIMER)
|
|
});
|
|
let showTimerRow = new Adw.ActionRow({
|
|
title: _('Show timer in top panel'),
|
|
subtitle: _('Enable or disable the timer in the top panel'),
|
|
activatable_widget: showTimerSwitch
|
|
});
|
|
showTimerRow.add_suffix(showTimerSwitch);
|
|
|
|
// Notifications
|
|
let notificationSwitch = new Gtk.Switch({
|
|
valign: Gtk.Align.CENTER,
|
|
active: this._settings.get_boolean(this._settingsKey.SHOW_NOTIFICATIONS)
|
|
});
|
|
let notificationRow = new Adw.ActionRow({
|
|
title: _('Notifications'),
|
|
subtitle: _('Enable notifications when Caffeine is enabled or disabled'),
|
|
activatable_widget: notificationSwitch
|
|
});
|
|
notificationRow.add_suffix(notificationSwitch);
|
|
|
|
// Indicator position offset
|
|
this.lastIndicatorPos = this._settings.get_int(this._settingsKey.INDICATOR_POS_MAX);
|
|
this.posIndicatorOffsetButton = new Gtk.SpinButton({
|
|
adjustment: new Gtk.Adjustment({
|
|
lower: -1,
|
|
upper: this.lastIndicatorPos,
|
|
step_increment: 1,
|
|
page_increment: 1,
|
|
page_size: 0,
|
|
value: this._settings.get_int(this._settingsKey.INDICATOR_POSITION)
|
|
}),
|
|
climb_rate: 1,
|
|
digits: 0,
|
|
numeric: true,
|
|
valign: Gtk.Align.CENTER
|
|
});
|
|
let posIndicatorOffsetRow = new Adw.ActionRow({
|
|
title: _('Status indicator position'),
|
|
subtitle: _('The position relative of indicator icon to other items'),
|
|
activatable_widget: this.posIndicatorOffsetButton
|
|
});
|
|
posIndicatorOffsetRow.add_suffix(this.posIndicatorOffsetButton);
|
|
|
|
// Add elements
|
|
displayGroup.add(showStatusIndicatorRow);
|
|
displayGroup.add(showTimerRow);
|
|
displayGroup.add(notificationRow);
|
|
displayGroup.add(posIndicatorOffsetRow);
|
|
this.add(displayGroup);
|
|
|
|
// Bind signals
|
|
// --------------
|
|
showStatusIndicatorRow.connect('notify::selected', (widget) => {
|
|
if (widget.selected === 2) {
|
|
showTimerSwitch.set_sensitive(false);
|
|
} else {
|
|
showTimerSwitch.set_sensitive(true);
|
|
}
|
|
this._settings.set_enum(this._settingsKey.SHOW_INDICATOR, widget.selected);
|
|
});
|
|
showTimerSwitch.connect('notify::active', (widget) => {
|
|
this._settings.set_boolean(this._settingsKey.SHOW_TIMER, widget.get_active());
|
|
});
|
|
notificationSwitch.connect('notify::active', (widget) => {
|
|
this._settings.set_boolean(this._settingsKey.SHOW_NOTIFICATIONS, widget.get_active());
|
|
});
|
|
this._settings.bind(this._settingsKey.INDICATOR_POSITION,
|
|
this.posIndicatorOffsetButton, 'value',
|
|
Gio.SettingsBindFlags.DEFAULT);
|
|
this._settings.connect(`changed::${this._settingsKey.INDICATOR_POS_MAX}`, this._updatePosMax.bind(this));
|
|
}
|
|
|
|
_updatePosMax() {
|
|
this.lastIndicatorPos = this._settings.get_int(this._settingsKey.INDICATOR_POS_MAX);
|
|
this.posIndicatorOffsetButton.adjustment.set_upper(this.lastIndicatorPos);
|
|
}
|
|
});
|