diff options
Diffstat (limited to 'extensions/44/vertical-workspaces/lib/optionsFactory.js')
-rw-r--r-- | extensions/44/vertical-workspaces/lib/optionsFactory.js | 251 |
1 files changed, 55 insertions, 196 deletions
diff --git a/extensions/44/vertical-workspaces/lib/optionsFactory.js b/extensions/44/vertical-workspaces/lib/optionsFactory.js index da62dd1..df6c970 100644 --- a/extensions/44/vertical-workspaces/lib/optionsFactory.js +++ b/extensions/44/vertical-workspaces/lib/optionsFactory.js @@ -9,41 +9,35 @@ 'use strict'; -const { Gtk, Gio, GObject } = imports.gi; +const Adw = imports.gi.Adw; +const Gtk = imports.gi.Gtk; +const Gio = imports.gi.Gio; -const ExtensionUtils = imports.misc.extensionUtils; -const Me = ExtensionUtils.getCurrentExtension(); -const Settings = Me.imports.lib.settings; - -const shellVersion = Settings.shellVersion; +let Me; // gettext -const _ = Settings._; +let _; // = Settings._; -const ProfileNames = [ - _('GNOME 3'), - _('GNOME 40+ - Bottom Hot Edge'), - _('Hot Corner Centric - Top Left Hot Corner'), - _('Dock Overview - Bottom Hot Edge'), -]; +function init(me) { + Me = me; + _ = Me.gettext; +} -// libadwaita is available starting with GNOME Shell 42. -let Adw = null; -try { - Adw = imports.gi.Adw; -} catch (e) {} +function cleanGlobals() { + Me = null; + _ = null; +} function _newImageFromIconName(name) { return Gtk.Image.new_from_icon_name(name); } var ItemFactory = class ItemFactory { - constructor(gOptions) { - this._gOptions = gOptions; - this._settings = this._gOptions._gsettings; + constructor() { + this._settings = Me.Opt._gsettings; } - getRowWidget(text, caption, widget, variable, options = []) { + getRowWidget(text, caption, widget, variable, options = [], dependsOn) { let item = []; let label; if (widget) { @@ -81,8 +75,8 @@ var ItemFactory = class ItemFactory { let key; - if (variable && this._gOptions.options[variable]) { - const opt = this._gOptions.options[variable]; + if (variable && Me.Opt.options[variable]) { + const opt = Me.Opt.options[variable]; key = opt[1]; } @@ -95,6 +89,11 @@ var ItemFactory = class ItemFactory { this._connectComboBox(widget, key, variable, options); else if (widget._isDropDown) this._connectDropDown(widget, key, variable, options); + + if (dependsOn) { + const dKey = Me.Opt.options[dependsOn][1]; + this._settings.bind(dKey, widget, 'sensitive', Gio.SettingsBindFlags.GET); + } } return item; @@ -111,7 +110,7 @@ var ItemFactory = class ItemFactory { _connectComboBox(widget, key, variable, options) { let model = widget.get_model(); widget._comboMap = {}; - const currentValue = this._gOptions.get(variable); + const currentValue = Me.Opt.get(variable); for (const [label, value] of options) { let iter; model.set(iter = model.append(), [0, 1], [label, value]); @@ -120,8 +119,8 @@ var ItemFactory = class ItemFactory { widget._comboMap[value] = iter; } - this._gOptions.connect(`changed::${key}`, () => { - widget.set_active_iter(widget._comboMap[this._gOptions.get(variable, true)]); + Me.Opt.connect(`changed::${key}`, () => { + widget.set_active_iter(widget._comboMap[Me.Opt.get(variable, true)]); }); widget.connect('changed', () => { const [success, iter] = widget.get_active_iter(); @@ -129,17 +128,17 @@ var ItemFactory = class ItemFactory { if (!success) return; - this._gOptions.set(variable, model.get_value(iter, 1)); + Me.Opt.set(variable, model.get_value(iter, 1)); }); } _connectDropDown(widget, key, variable, options) { const model = widget.get_model(); - const currentValue = this._gOptions.get(variable); + const currentValue = Me.Opt.get(variable); for (let i = 0; i < options.length; i++) { const text = options[i][0]; const id = options[i][1]; - model.append(new DropDownItem({ text, id })); + model.append(new DropDownItemVW({ text, id })); if (id === currentValue) widget.set_selected(i); } @@ -157,11 +156,11 @@ var ItemFactory = class ItemFactory { widget.connect('notify::selected-item', dropDown => { const item = dropDown.get_selected_item(); - this._gOptions.set(variable, item.id); + Me.Opt.set(variable, item.id); }); - this._gOptions.connect(`changed::${key}`, () => { - const newId = this._gOptions.get(variable, true); + Me.Opt.connect(`changed::${key}`, () => { + const newId = Me.Opt.get(variable, true); for (let i = 0; i < options.length; i++) { const id = options[i][1]; if (id === newId) @@ -214,7 +213,7 @@ var ItemFactory = class ItemFactory { newDropDown() { const dropDown = new Gtk.DropDown({ model: new Gio.ListStore({ - item_type: DropDownItem, + item_type: DropDownItemVW, }), halign: Gtk.Align.END, valign: Gtk.Align.CENTER, @@ -255,11 +254,11 @@ var ItemFactory = class ItemFactory { newLinkButton(uri) { const linkBtn = new Gtk.LinkButton({ - label: shellVersion < 42 ? 'Click Me!' : '', uri, halign: Gtk.Align.END, valign: Gtk.Align.CENTER, hexpand: true, + icon_name: 'emblem-symbolic-link', }); return linkBtn; } @@ -298,18 +297,23 @@ var ItemFactory = class ItemFactory { entry.set_text(opt.get(`profileName${profileIndex}`)); entry.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, 'edit-clear-symbolic'); entry.set_icon_activatable(Gtk.EntryIconPosition.SECONDARY, true); - entry.connect('icon-press', e => e.set_text('')); - entry.connect('changed', e => opt.set(`profileName${profileIndex}`, e.get_text())); const resetProfile = this.newButton(); resetProfile.set({ tooltip_text: _('Reset profile to defaults'), - icon_name: 'edit-delete-symbolic', + icon_name: 'document-revert-symbolic', hexpand: false, css_classes: ['destructive-action'], }); function setName() { + const ProfileNames = [ + _('GNOME 3'), + _('GNOME 40+ - Bottom Hot Edge'), + _('Hot Corner Centric - Top Left Hot Corner'), + _('Dock Overview - Bottom Hot Edge'), + ]; + let name = opt.get(`profileName${profileIndex}`, true); if (!name) name = ProfileNames[profileIndex - 1]; @@ -317,6 +321,10 @@ var ItemFactory = class ItemFactory { } setName(); + + entry.connect('icon-press', e => e.set_text('')); + entry.connect('changed', e => opt.set(`profileName${profileIndex}`, e.get_text())); + resetProfile.connect('clicked', () => { reset(profileIndex); setName(); @@ -366,7 +374,7 @@ var ItemFactory = class ItemFactory { valign: Gtk.Align.CENTER, hexpand: true, css_classes: ['destructive-action'], - icon_name: 'edit-delete-symbolic', + icon_name: 'document-revert-symbolic', }); btn.connect('clicked', () => { @@ -382,7 +390,7 @@ var ItemFactory = class ItemFactory { var AdwPrefs = class { constructor(gOptions) { - this._gOptions = gOptions; + Me.Opt = gOptions; } getFilledWindow(window, pages) { @@ -457,158 +465,9 @@ var AdwPrefs = class { } }; -var LegacyPrefs = class { - constructor(gOptions) { - this._gOptions = gOptions; - } - - getPrefsWidget(pages) { - const prefsWidget = new Gtk.Box({ - orientation: Gtk.Orientation.VERTICAL, - }); - const stack = new Gtk.Stack({ - hexpand: true, - }); - const stackSwitcher = new Gtk.StackSwitcher({ - halign: Gtk.Align.CENTER, - hexpand: true, - }); - - const context = stackSwitcher.get_style_context(); - context.add_class('caption'); - - stackSwitcher.set_stack(stack); - stack.set_transition_duration(300); - stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT); - - const pageProperties = { - hscrollbar_policy: Gtk.PolicyType.NEVER, - vscrollbar_policy: Gtk.PolicyType.AUTOMATIC, - vexpand: true, - hexpand: true, - visible: true, - }; - - const pagesBtns = []; - - for (let page of pages) { - const name = page.name; - const title = page.title; - const iconName = page.iconName; - const optionList = page.optionList; - - stack.add_named(this._getLegacyPage(optionList, pageProperties), name); - pagesBtns.push( - [new Gtk.Label({ label: title }), _newImageFromIconName(iconName, Gtk.IconSize.BUTTON)] - ); - } - - let stBtn = stackSwitcher.get_first_child ? stackSwitcher.get_first_child() : null; - for (let i = 0; i < pagesBtns.length; i++) { - const box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, spacing: 6, visible: true }); - const icon = pagesBtns[i][1]; - icon.margin_start = 30; - icon.margin_end = 30; - box.append(icon); - box.append(pagesBtns[i][0]); - if (stackSwitcher.get_children) { - stBtn = stackSwitcher.get_children()[i]; - stBtn.add(box); - } else { - stBtn.set_child(box); - stBtn.visible = true; - stBtn = stBtn.get_next_sibling(); - } - } - - if (stack.show_all) - stack.show_all(); - if (stackSwitcher.show_all) - stackSwitcher.show_all(); - - prefsWidget.append(stack); - - if (prefsWidget.show_all) - prefsWidget.show_all(); - - prefsWidget._stackSwitcher = stackSwitcher; - - return prefsWidget; - } - - _getLegacyPage(optionList, pageProperties) { - const page = new Gtk.ScrolledWindow(pageProperties); - const mainBox = new Gtk.Box({ - orientation: Gtk.Orientation.VERTICAL, - spacing: 5, - homogeneous: false, - margin_start: 30, - margin_end: 30, - margin_top: 12, - margin_bottom: 12, - }); - - let context = page.get_style_context(); - context.add_class('background'); - - let frame; - let frameBox; - for (let item of optionList) { - // label can be plain text for Section Title - // or GtkBox for Option - const option = item[0]; - const widget = item[1]; - - if (!widget) { - const lbl = new Gtk.Label({ - label: option, - xalign: 0, - margin_bottom: 4, - }); - - context = lbl.get_style_context(); - context.add_class('heading'); - - mainBox.append(lbl); - - frame = new Gtk.Frame({ - margin_bottom: 16, - }); - - frameBox = new Gtk.ListBox({ - selection_mode: null, - }); - - mainBox.append(frame); - frame.set_child(frameBox); - continue; - } - - const grid = new Gtk.Grid({ - column_homogeneous: false, - column_spacing: 20, - margin_start: 8, - margin_end: 8, - margin_top: 8, - margin_bottom: 8, - hexpand: true, - }); - - grid.attach(option, 0, 0, 5, 1); - - if (widget) - grid.attach(widget, 5, 0, 2, 1); - - frameBox.append(grid); - } - page.set_child(mainBox); - - return page; - } -}; - -const DropDownItem = GObject.registerClass({ - GTypeName: 'DropdownItem', +const { GObject } = imports.gi; +const DropDownItemVW = GObject.registerClass({ + GTypeName: 'DropDownItemVW', Properties: { 'text': GObject.ParamSpec.string( 'text', @@ -622,10 +481,11 @@ const DropDownItem = GObject.registerClass({ 'Id', 'Item id stored in settings', GObject.ParamFlags.READWRITE, - 0, 100, 0 + // min, max, default + -2147483648, 2147483647, 0 ), }, -}, class DropDownItem extends GObject.Object { +}, class DropDownItemVW extends GObject.Object { get text() { return this._text; } @@ -641,5 +501,4 @@ const DropDownItem = GObject.registerClass({ set id(id) { this._id = id; } -} -); +}); |