generalPage.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /* exported GeneralPage*/
  2. import Adw from 'gi://Adw';
  3. import Gtk from 'gi://Gtk';
  4. import GObject from 'gi://GObject';
  5. import {gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
  6. export var GeneralPage = GObject.registerClass(
  7. class AppIndicatorGeneralPage extends Adw.PreferencesPage {
  8. _init(settings, settingsKey) {
  9. super._init({
  10. title: _('General'),
  11. icon_name: 'general-preferences-symbolic',
  12. name: 'General Page',
  13. });
  14. this._settings = settings;
  15. this._settingsKey = settingsKey;
  16. this.group = new Adw.PreferencesGroup(); // no title since only single group
  17. const legacyTraySwitch = new Adw.SwitchRow({
  18. title: _('Enable Legacy Tray Icons support'),
  19. subtitle: _('Add X11 legacy tray icons to the panel area'),
  20. active: this._settings.get_boolean(this._settingsKey.LEGACY_TRAY_ENABLED),
  21. });
  22. legacyTraySwitch.connect('notify::active', widget =>
  23. this._settings.set_boolean(this._settingsKey.LEGACY_TRAY_ENABLED,
  24. widget.get_active()));
  25. this.group.add(legacyTraySwitch);
  26. this._createSpinRow({
  27. title: _('Opacity'),
  28. settingsKey: this._settingsKey.ICON_OPACITY,
  29. from: 0,
  30. to: 255,
  31. step: 1,
  32. round: true,
  33. });
  34. this._createSpinRow({
  35. title: _('Desaturation'),
  36. settingsKey: this._settingsKey.ICON_SATURATION,
  37. from: 0.0,
  38. to: 1.0,
  39. step: 0.1,
  40. });
  41. this._createSpinRow({
  42. title: _('Brightness'),
  43. settingsKey: this._settingsKey.ICON_BRIGHTNESS,
  44. from: -1.0,
  45. to: 1.0,
  46. step: 0.1,
  47. });
  48. this._createSpinRow({
  49. title: _('Contrast'),
  50. settingsKey: this._settingsKey.ICON_CONTRAST,
  51. from: -1.0,
  52. to: 1.0,
  53. step: 0.1,
  54. });
  55. this._createSpinRow({
  56. title: _('Icon Size'),
  57. settingsKey: this._settingsKey.ICON_SIZE,
  58. from: 0,
  59. to: 96,
  60. step: 2,
  61. round: true,
  62. });
  63. const alignmentList = new Gtk.StringList();
  64. const comboItems = [
  65. {pos: 'center', label: _('Center')},
  66. {pos: 'left', label: _('Left')},
  67. {pos: 'right', label: _('Right')},
  68. ];
  69. comboItems.forEach(item => alignmentList.append(item.label));
  70. const combo = new Adw.ComboRow({
  71. title: _('Tray Horizontal Alignment'),
  72. model: alignmentList,
  73. });
  74. const trayPos = this._settings.get_string(this._settingsKey.TRAY_POS);
  75. combo.set_selected(comboItems.findIndex(item => trayPos === item.pos));
  76. combo.connect('notify::selected', widget => this._settings.set_string(
  77. this._settingsKey.TRAY_POS, comboItems[widget.get_selected()].pos));
  78. this.group.add(combo);
  79. this.add(this.group);
  80. }
  81. _createSpinRow(args) {
  82. let title = args.title || 'Default Title';
  83. let subtitle = args.subtitle || null;
  84. let settingsKey = args.settingsKey || '';
  85. let from = args.from || 0;
  86. let to = args.to || 100;
  87. let step = args.step || 1;
  88. let round = args.round || false;
  89. let spin = Adw.SpinRow.new_with_range(from, to, step);
  90. spin.title = title;
  91. if (subtitle !== null)
  92. spin.subtitle = subtitle;
  93. if (round)
  94. spin.set_value(this._settings.get_int(settingsKey));
  95. else
  96. spin.set_value(this._settings.get_int(settingsKey));
  97. spin.connect('input', widget => {
  98. if (round)
  99. this._settings.set_int(settingsKey, parseInt(widget.get_value(), 10));
  100. else
  101. this._settings.set_double(settingsKey, widget.get_value());
  102. return false;
  103. });
  104. spin.connect('output', widget => {
  105. if (round)
  106. this._settings.set_int(settingsKey, parseInt(widget.get_value(), 10));
  107. else
  108. this._settings.set_double(settingsKey, widget.get_value());
  109. return false;
  110. });
  111. this.group.add(spin);
  112. }
  113. });