prefs.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import Adw from 'gi://Adw';
  2. import Gio from 'gi://Gio';
  3. import GObject from 'gi://GObject';
  4. import Gtk from 'gi://Gtk';
  5. import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
  6. /*
  7. if (sensor == 'show-storage' && this._settings.get_boolean(sensor)) {
  8. let val = true;
  9. try {
  10. let GTop = imports.gi.GTop;
  11. } catch (e) {
  12. val = false;
  13. }
  14. let now = new Date().getTime();
  15. this._notify("Vitals", "Please run sudo apt install gir1.2-gtop-2.0", 'folder-symbolic');
  16. }
  17. */
  18. const Settings = new GObject.Class({
  19. Name: 'Vitals.Settings',
  20. _init: function(extensionObject, params) {
  21. this._extensionObject = extensionObject
  22. this.parent(params);
  23. this._settings = extensionObject.getSettings();
  24. this.builder = new Gtk.Builder();
  25. this.builder.set_translation_domain(this._extensionObject.metadata['gettext-domain']);
  26. this.builder.add_from_file(this._extensionObject.path + '/prefs.ui');
  27. this.widget = this.builder.get_object('prefs-container');
  28. this._bind_settings();
  29. },
  30. // Bind the gtk window to the schema settings
  31. _bind_settings: function() {
  32. let widget;
  33. // process sensor toggles
  34. let sensors = [ 'show-temperature', 'show-voltage', 'show-fan',
  35. 'show-memory', 'show-processor', 'show-system',
  36. 'show-network', 'show-storage', 'use-higher-precision',
  37. 'alphabetize', 'hide-zeros', 'include-public-ip',
  38. 'show-battery', 'fixed-widths', 'hide-icons',
  39. 'menu-centered', 'include-static-info',
  40. 'show-gpu', 'include-static-gpu-info' ];
  41. for (let key in sensors) {
  42. let sensor = sensors[key];
  43. widget = this.builder.get_object(sensor);
  44. widget.set_active(this._settings.get_boolean(sensor));
  45. widget.connect('state-set', (_, val) => {
  46. this._settings.set_boolean(sensor, val);
  47. });
  48. }
  49. // process individual drop down sensor preferences
  50. sensors = [ 'position-in-panel', 'unit', 'network-speed-format', 'memory-measurement', 'storage-measurement', 'battery-slot', 'icon-style' ];
  51. for (let key in sensors) {
  52. let sensor = sensors[key];
  53. widget = this.builder.get_object(sensor);
  54. widget.set_active(this._settings.get_int(sensor));
  55. widget.connect('changed', (widget) => {
  56. this._settings.set_int(sensor, widget.get_active());
  57. });
  58. }
  59. this._settings.bind('update-time', this.builder.get_object('update-time'), 'value', Gio.SettingsBindFlags.DEFAULT);
  60. // process individual text entry sensor preferences
  61. sensors = [ 'storage-path', 'monitor-cmd' ];
  62. for (let key in sensors) {
  63. let sensor = sensors[key];
  64. widget = this.builder.get_object(sensor);
  65. widget.set_text(this._settings.get_string(sensor));
  66. widget.connect('changed', (widget) => {
  67. let text = widget.get_text();
  68. if (!text) text = widget.get_placeholder_text();
  69. this._settings.set_string(sensor, text);
  70. });
  71. }
  72. // makes individual sensor preference boxes appear
  73. sensors = [ 'temperature', 'network', 'storage', 'memory', 'battery', 'system', 'processor', 'gpu' ];
  74. for (let key in sensors) {
  75. let sensor = sensors[key];
  76. // create dialog for intelligent autohide advanced settings
  77. this.builder.get_object(sensor + '-prefs').connect('clicked', () => {
  78. let transientObj = this.widget.get_root();
  79. let title = sensor.charAt(0).toUpperCase() + sensor.slice(1);
  80. let dialog = new Gtk.Dialog({ title: _(title) + ' ' + _('Preferences'),
  81. transient_for: transientObj,
  82. use_header_bar: false,
  83. modal: true });
  84. let box = this.builder.get_object(sensor + '_prefs');
  85. dialog.get_content_area().append(box);
  86. dialog.connect('response', (dialog, id) => {
  87. // remove the settings box so it doesn't get destroyed;
  88. dialog.get_content_area().remove(box);
  89. dialog.destroy();
  90. return;
  91. });
  92. dialog.show();
  93. });
  94. }
  95. }
  96. });
  97. export default class VitalsPrefs extends ExtensionPreferences {
  98. fillPreferencesWindow(window) {
  99. window._settings = this.getSettings();
  100. let settings = new Settings(this);
  101. let widget = settings.widget;
  102. const page = new Adw.PreferencesPage();
  103. const group = new Adw.PreferencesGroup({});
  104. group.add(widget);
  105. page.add(group);
  106. window.add(page);
  107. window.set_default_size(widget.width, widget.height);
  108. widget.show();
  109. }
  110. }