mirror of
https://github.com/morgan9e/gnome-shell-extension-freon
synced 2026-04-14 00:14:14 +09:00
246 lines
9.0 KiB
JavaScript
246 lines
9.0 KiB
JavaScript
const GLib = imports.gi.GLib;
|
|
const GObject = imports.gi.GObject;
|
|
const Gio = imports.gi.Gio;
|
|
const Gtk = imports.gi.Gtk;
|
|
const Lang = imports.lang;
|
|
|
|
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
|
const Convenience = Me.imports.convenience;
|
|
const Utilities = Me.imports.utilities;
|
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
|
const _ = Gettext.gettext;
|
|
|
|
const modelColumn = {
|
|
label: 0,
|
|
separator: 1
|
|
}
|
|
|
|
function init() {
|
|
Convenience.initTranslations();
|
|
}
|
|
|
|
const SensorsPrefsWidget = new GObject.Class({
|
|
Name: 'Sensors.Prefs.Widget',
|
|
GTypeName: 'SensorsPrefsWidget',
|
|
Extends: Gtk.Grid,
|
|
|
|
_init: function(params) {
|
|
this.parent(params);
|
|
this.margin = this.row_spacing = this.column_spacing = 20;
|
|
|
|
this._settings = Convenience.getSettings();
|
|
|
|
this.attach(new Gtk.Label({ label: _("Poll sensors every (in seconds)") }), 0, 0, 1, 1);
|
|
let update_time = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, 5, 100, 5);
|
|
update_time.set_value(this._settings.get_int('update-time'));
|
|
update_time.set_digits(0);
|
|
update_time.set_hexpand(true);
|
|
update_time.connect('value-changed', Lang.bind(this, this._onUpdateTimeChanged));
|
|
this.attach(update_time, 1, 0, 1, 1);
|
|
|
|
this.attach(new Gtk.Label({ label: _("Temperature unit") }), 0, 2, 1, 1);
|
|
let centigradeRadio = new Gtk.RadioButton({ group: null, label: _("Centigrade"), valign: Gtk.Align.START });
|
|
let fahrenheitRadio = new Gtk.RadioButton({ group: centigradeRadio, label: _("Fahrenheit"), valign: Gtk.Align.START });
|
|
fahrenheitRadio.connect('toggled', Lang.bind(this, this._onUnitChanged));
|
|
centigradeRadio.connect('toggled', Lang.bind(this, this._onUnitChanged));
|
|
if (this._settings.get_string('unit')=='Centigrade')
|
|
centigradeRadio.active = true;
|
|
else
|
|
fahrenheitRadio.active = true;
|
|
this.attach(centigradeRadio, 1, 2, 1, 1);
|
|
this.attach(fahrenheitRadio, 2, 2, 1, 1);
|
|
|
|
let boolSettings = {
|
|
display_degree_sign: {
|
|
name: "display-degree-sign",
|
|
label: _("Display temperature unit"),
|
|
help: _("Show temperature unit in panel and menu.")
|
|
},
|
|
display_decimal_value: {
|
|
name: "display-decimal-value",
|
|
label: _("Display decimal value"),
|
|
help: _("Show one digit after decimal.")
|
|
},
|
|
show_hdd_temp: {
|
|
name: "display-hdd-temp",
|
|
label: _("Display drive temperature"),
|
|
},
|
|
show_fan_rpm: {
|
|
name: "display-fan-rpm",
|
|
label: _("Display fan speed"),
|
|
},
|
|
show_voltage: {
|
|
name: "display-voltage",
|
|
label: _("Display power supply voltage"),
|
|
},
|
|
}
|
|
|
|
let counter = 3;
|
|
|
|
for (boolSetting in boolSettings){
|
|
let setting = boolSettings[boolSetting];
|
|
let settingLabel = new Gtk.Label({ label: setting.label });
|
|
let settingSwitch = new Gtk.Switch({active: this._settings.get_boolean(setting.name)});
|
|
let settings = this._settings;
|
|
settingSwitch.connect('notify::active', function(button) {
|
|
settings.set_boolean(setting.name, button.active);
|
|
});
|
|
|
|
if (setting.help) {
|
|
settingLabel.set_tooltip_text(setting.help);
|
|
settingSwitch.set_tooltip_text(setting.help);
|
|
}
|
|
|
|
this.attach(settingLabel, 0, counter, 1, 1);
|
|
this.attach(settingSwitch, 1, counter++, 1, 1);
|
|
|
|
}
|
|
|
|
//List of items of the ComboBox
|
|
this._model = new Gtk.ListStore();
|
|
this._model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_BOOLEAN]);
|
|
this._appendItem(_("Average"));
|
|
this._appendItem(_("Maximum"));
|
|
this._appendSeparator();
|
|
|
|
//Get current options
|
|
this._display_fan_rpm = this._settings.get_boolean('display-fan-rpm');
|
|
this._display_voltage = this._settings.get_boolean('display-voltage');
|
|
this._display_hdd_temp = this._settings.get_boolean('display-hdd-temp');
|
|
|
|
//Fill the list
|
|
this._getSensorsLabels();
|
|
this._getUdisksLabels();
|
|
|
|
if(this._display_hdd_temp) {
|
|
this._appendSeparator();
|
|
this._getHddTempLabels();
|
|
}
|
|
|
|
// ComboBox to select which sensor to show in panel
|
|
this._sensorSelector = new Gtk.ComboBox({ model: this._model });
|
|
this._sensorSelector.set_active_iter(this._getActiveSensorIter());
|
|
this._sensorSelector.set_row_separator_func(Lang.bind(this, this._comboBoxSeparator), null, null);
|
|
|
|
let renderer = new Gtk.CellRendererText();
|
|
this._sensorSelector.pack_start(renderer, true);
|
|
this._sensorSelector.add_attribute(renderer, 'text', modelColumn.label);
|
|
this._sensorSelector.connect('changed', Lang.bind(this, this._onSelectorChanged));
|
|
|
|
this.attach(new Gtk.Label({ label: _("Sensor in panel") }), 0, ++counter, 1, 1);
|
|
this.attach(this._sensorSelector, 1, counter , 1, 1);
|
|
|
|
let settings = this._settings;
|
|
let checkButton = new Gtk.CheckButton({label: _("Display sensor label")});
|
|
checkButton.set_active(settings.get_boolean('display-label'));
|
|
checkButton.connect('toggled', function () {
|
|
settings.set_boolean('display-label', checkButton.get_active());
|
|
});
|
|
this.attach(checkButton, 2, counter , 1, 1);
|
|
},
|
|
|
|
_comboBoxSeparator: function(model, iter, data) {
|
|
return model.get_value(iter, modelColumn.separator);
|
|
},
|
|
|
|
_appendItem: function(label) {
|
|
this._model.set(this._model.append(), [modelColumn.label], [label]);
|
|
},
|
|
|
|
_appendMultipleItems: function(sensorInfo) {
|
|
for each (let sensor in sensorInfo) {
|
|
this._model.set(this._model.append(), [modelColumn.label], [sensor['label']]);
|
|
}
|
|
},
|
|
|
|
_appendSeparator: function() {
|
|
this._model.set (this._model.append(), [modelColumn.separator], [true]);
|
|
},
|
|
|
|
_getSensorsLabels: function() {
|
|
let sensors_cmd = Utilities.detectSensors();
|
|
if(sensors_cmd) {
|
|
let sensors_output = GLib.spawn_command_line_sync(sensors_cmd.join(' '));
|
|
if(sensors_output[0])
|
|
{
|
|
let output = sensors_output[1].toString();
|
|
let tempInfo = Utilities.parseSensorsOutput(output,Utilities.parseSensorsTemperatureLine);
|
|
tempInfo = tempInfo.filter(Utilities.filterTemperature);
|
|
this._appendMultipleItems(tempInfo);
|
|
|
|
if (this._display_fan_rpm){
|
|
let fanInfo = Utilities.parseSensorsOutput(output,Utilities.parseFanRPMLine);
|
|
fanInfo = fanInfo.filter(Utilities.filterFan);
|
|
this._appendMultipleItems(fanInfo);
|
|
}
|
|
if (this._display_voltage){
|
|
let voltageInfo = Utilities.parseSensorsOutput(output,Utilities.parseVoltageLine);
|
|
this._appendMultipleItems(voltageInfo);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
_getHddTempLabels: function() {
|
|
let hddtemp_cmd = Utilities.detectHDDTemp();
|
|
if(hddtemp_cmd){
|
|
let hddtemp_output = GLib.spawn_command_line_sync(hddtemp_cmd.join(' '))
|
|
if(hddtemp_output[0]){
|
|
let hddTempInfo = Utilities.parseHddTempOutput(hddtemp_output[1].toString(),
|
|
!(/nc$/.exec(hddtemp_cmd[0])) ? ': ' : '|');
|
|
this._appendMultipleItems(hddTempInfo);
|
|
}
|
|
}
|
|
},
|
|
|
|
_getUdisksLabels: function() {
|
|
Utilities.UDisks.get_drive_ata_proxies((function(proxies) {
|
|
let list = Utilities.UDisks.create_list_from_proxies(proxies);
|
|
|
|
this._appendMultipleItems(list);
|
|
}).bind(this));
|
|
},
|
|
|
|
_getActiveSensorIter: function() {
|
|
/* Get the first iter in the list */
|
|
[success, iter] = this._model.get_iter_first();
|
|
let sensorLabel = this._model.get_value(iter, 0);
|
|
|
|
while (success) {
|
|
/* Walk through the list, reading each row */
|
|
let sensorLabel = this._model.get_value(iter, 0);
|
|
if(sensorLabel == this._settings.get_string('main-sensor'))
|
|
break;
|
|
|
|
success = this._model.iter_next(iter);
|
|
}
|
|
return iter;
|
|
},
|
|
|
|
_onUpdateTimeChanged: function (update_time) {
|
|
this._settings.set_int('update-time', update_time.get_value());
|
|
},
|
|
|
|
_onUnitChanged: function (unit) {
|
|
if (unit.get_active()) {
|
|
this._settings.set_string('unit', unit.label);
|
|
}
|
|
},
|
|
|
|
_onSelectorChanged: function (comboBox) {
|
|
let [success, iter] = comboBox.get_active_iter();
|
|
if (!success)
|
|
return;
|
|
|
|
let label = this._model.get_value(iter, modelColumn.label);
|
|
this._settings.set_string('main-sensor', label);
|
|
},
|
|
|
|
});
|
|
|
|
function buildPrefsWidget() {
|
|
let widget = new SensorsPrefsWidget();
|
|
widget.show_all();
|
|
return widget;
|
|
}
|