linux-presets/gui/gnome/autocustom-gnome-macos/res/extensions/order-extensions@wa4557.git.../prefs.js

399 lines
18 KiB
JavaScript
Executable File

// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init, buildPrefsWidget */
import GObject from 'gi://GObject';
import GLib from 'gi://GLib';
import Gtk from 'gi://Gtk';
import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export default class OrderIconsPreferences extends ExtensionPreferences {
getPreferencesWidget() {
return new OrderIconsPreferencesBox(this);
}
}
const OrderIconsPreferencesBox = GObject.registerClass(
class OrderIconsPreferencesBox extends Gtk.Box {
_init(extension) {
super._init({
orientation: Gtk.Orientation.VERTICAL,
spacing: 30
});
this._settings = extension.getSettings();
// Boxes for list stores
this.right_order_hbox = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
spacing: 8,
margin_start: 30,
margin_end: 0,
margin_top: 30,
margin_bottom: 30
});
this.center_order_hbox = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
spacing: 8,
margin_start: 30,
margin_end: 0,
margin_top: 30,
margin_bottom: 30
});
this.left_order_hbox = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
spacing: 8,
margin_start: 30,
margin_end: 0,
margin_top: 30,
margin_bottom: 30
});
// Button boxes
this.left_button_vbox = new Gtk.Box({
orientation: Gtk.Orientation.VERTICAL,
spacing: 8,
margin_start: 30,
margin_end: 30,
margin_top: 30,
margin_bottom: 30
});
this.center_button_vbox = new Gtk.Box({
orientation: Gtk.Orientation.VERTICAL,
spacing: 8,
margin_start: 30,
margin_end: 30,
margin_top: 30,
margin_bottom: 30
});
this.right_button_vbox = new Gtk.Box({
orientation: Gtk.Orientation.VERTICAL,
spacing: 8,
margin_start: 30,
margin_end: 30,
margin_top: 30,
margin_bottom: 30
});
const button_up_left = new Gtk.Button()
button_up_left.set_icon_name("go-up-symbolic");
const button_down_left = new Gtk.Button()
button_down_left.set_icon_name("go-down-symbolic");
const button_del_left = new Gtk.Button()
button_del_left.set_icon_name("edit-delete-symbolic");
const button_blacklist_left = new Gtk.Button();
button_blacklist_left.set_icon_name('action-unavailable-symbolic');
button_up_left.set_tooltip_text( _('Moves selected entry up'));
button_down_left.set_tooltip_text( _('Moves selected entry down'));
button_del_left.set_tooltip_text( _('Removes entry from this list'));
button_blacklist_left.set_tooltip_text( _('Removes/reenables icon from top panel (restart of extension required)'));
this.left_button_vbox.append(button_up_left);
this.left_button_vbox.append(button_down_left);
this.left_button_vbox.append(button_del_left);
this.left_button_vbox.append(button_blacklist_left);
const button_up_center = new Gtk.Button()
button_up_center.set_icon_name("go-up-symbolic");
const button_down_center = new Gtk.Button()
button_down_center.set_icon_name("go-down-symbolic");
const button_del_center = new Gtk.Button()
button_del_center.set_icon_name("edit-delete-symbolic");
const button_blacklist_center = new Gtk.Button();
button_blacklist_center.set_icon_name('action-unavailable-symbolic');
button_up_center.set_tooltip_text( _('Moves selected entry up'));
button_down_center.set_tooltip_text( _('Moves selected entry down'));
button_del_center.set_tooltip_text( _('Removes entry from this list'));
button_blacklist_center.set_tooltip_text( _('Removes/reenables icon from top panel (restart of extension required)'));
this.center_button_vbox.append(button_up_center);
this.center_button_vbox.append(button_down_center);
this.center_button_vbox.append(button_del_center);
this.center_button_vbox.append(button_blacklist_center);
const button_up_right = new Gtk.Button()
button_up_right.set_icon_name("go-up-symbolic");
const button_down_right = new Gtk.Button()
button_down_right.set_icon_name("go-down-symbolic");
const button_del_right = new Gtk.Button()
button_del_right.set_icon_name("edit-delete-symbolic");
const button_blacklist_right = new Gtk.Button();
button_blacklist_right.set_icon_name('action-unavailable-symbolic');
button_up_right.set_tooltip_text( _('Moves selected entry up'));
button_down_right.set_tooltip_text( _('Moves selected entry down'));
button_del_right.set_tooltip_text( _('Removes entry from this list'));
button_blacklist_right.set_tooltip_text( _('Removes/reenables icon from top panel (restart of extension required)'));
this.right_button_vbox.append(button_up_right);
this.right_button_vbox.append(button_down_right);
this.right_button_vbox.append(button_del_right);
this.right_button_vbox.append(button_blacklist_right);
const cell_renderer = new Gtk.CellRendererText({
editable: false
});
this.blacklist_array = this._settings.get_value('icons-blacklist').deep_unpack();
// right box
this.order_right_store = new Gtk.ListStore();
this.order_right_store.set_column_types([
GObject.TYPE_STRING, GObject.TYPE_BOOLEAN
]);
const right_order_array = this._settings.get_value('order-icons-right').deep_unpack()
right_order_array.forEach(value => {
let is_blacklisted = this.blacklist_array.includes(value)
this.order_right_store.set(this.order_right_store.append(), [0, 1], [value, is_blacklisted])
});
const right_order_tree_view = new Gtk.TreeView({
model: this.order_right_store,
hexpand: true,
vexpand: true
});
right_order_tree_view.set_reorderable(true);
this.order_right_store.connect("row-deleted", () => { this._orderChanged('panelRight', this.order_right_store) });
const right_order_column = new Gtk.TreeViewColumn({
title: "Order Indicators",
});
const right_order_window = new Gtk.ScrolledWindow()
right_order_window.set_child(right_order_tree_view)
// center box
this.order_center_store = new Gtk.ListStore();
this.order_center_store.set_column_types([
GObject.TYPE_STRING, GObject.TYPE_BOOLEAN
]);
const center_order_array = this._settings.get_value('order-icons-center').deep_unpack()
center_order_array.forEach(value => {
let is_blacklisted = this.blacklist_array.includes(value)
this.order_center_store.set(this.order_center_store.append(), [0, 1], [value, is_blacklisted])
});
const center_order_tree_view = new Gtk.TreeView({
model: this.order_center_store,
hexpand: true,
vexpand: true
});
center_order_tree_view.set_reorderable(true);
this.order_center_store.connect("row-deleted", () => { this._orderChanged('panelCenter', this.order_center_store) });
const center_order_column = new Gtk.TreeViewColumn({
title: "Order Indicators",
});
const center_order_window = new Gtk.ScrolledWindow()
center_order_window.set_child(center_order_tree_view)
// left box
this.order_left_store = new Gtk.ListStore();
this.order_left_store.set_column_types([
GObject.TYPE_STRING, GObject.TYPE_BOOLEAN
]);
const left_order_array = this._settings.get_value('order-icons-left').deep_unpack()
left_order_array.forEach(value => {
let is_blacklisted = this.blacklist_array.includes(value)
this.order_left_store.set(this.order_left_store.append(), [0, 1], [value, is_blacklisted])
});
const left_order_tree_view = new Gtk.TreeView({
model: this.order_left_store,
hexpand: true,
vexpand: true
});
left_order_tree_view.set_reorderable(true);
this.order_left_store.connect("row-deleted", () => { this._orderChanged('panelLeft', this.order_left_store) });
const left_order_column = new Gtk.TreeViewColumn({
title: "Order Indicators",
});
const left_order_window = new Gtk.ScrolledWindow()
left_order_window.set_child(left_order_tree_view)
left_order_column.pack_start(cell_renderer, true);
left_order_column.add_attribute(cell_renderer, 'text', 0);
left_order_column.add_attribute(cell_renderer, 'strikethrough', 1);
left_order_tree_view.insert_column(left_order_column, 0);
left_order_tree_view.set_grid_lines(Gtk.TreeViewGridLines.BOTH);
center_order_column.pack_start(cell_renderer, true);
center_order_column.add_attribute(cell_renderer, 'text', 0);
center_order_column.add_attribute(cell_renderer, 'strikethrough', 1);
center_order_tree_view.insert_column(center_order_column, 0);
center_order_tree_view.set_grid_lines(Gtk.TreeViewGridLines.BOTH);
right_order_column.pack_start(cell_renderer, true);
right_order_column.add_attribute(cell_renderer, 'text', 0);
right_order_column.add_attribute(cell_renderer, 'strikethrough', 1);
right_order_tree_view.insert_column(right_order_column, 0);
right_order_tree_view.set_grid_lines(Gtk.TreeViewGridLines.BOTH);
button_up_left.connect("clicked", _ => this._onButtonUpClicked("panelLeft", left_order_tree_view));
button_down_left.connect("clicked", _ => this._onButtonDownClicked("panelLeft", left_order_tree_view));
button_del_left.connect("clicked", _ => this._onButtonDelClicked("panelLeft", left_order_tree_view));
button_up_center.connect("clicked", _ => this._onButtonUpClicked("panelCenter", center_order_tree_view));
button_down_center.connect("clicked", _ => this._onButtonDownClicked("panelCenter", center_order_tree_view));
button_del_center.connect("clicked", _ => this._onButtonDelClicked("panelCenter", center_order_tree_view));
button_up_right.connect("clicked", _ => this._onButtonUpClicked("panelRight", right_order_tree_view));
button_down_right.connect("clicked", _ => this._onButtonDownClicked("panelRight", right_order_tree_view));
button_del_right.connect("clicked", _ => this._onButtonDelClicked("panelRight", right_order_tree_view));
button_blacklist_center.connect('clicked', _ => this._onButtonBlacklistClicked(center_order_tree_view, this.order_center_store));
button_blacklist_left.connect('clicked', _ => this._onButtonBlacklistClicked(left_order_tree_view, this.order_left_store));
button_blacklist_right.connect('clicked', _ => this._onButtonBlacklistClicked(right_order_tree_view, this.order_right_store));
this.left_order_hbox.append(left_order_window);
this.left_order_hbox.append(this.left_button_vbox);
this.center_order_hbox.append(center_order_window);
this.center_order_hbox.append(this.center_button_vbox);
this.right_order_hbox.append(right_order_window);
this.right_order_hbox.append(this.right_button_vbox);
this.notebook = new Gtk.Notebook();
this.notebook.append_page(this.right_order_hbox,
new Gtk.Label({
label: _('Right Panel')
}));
this.notebook.append_page(this.center_order_hbox,
new Gtk.Label({
label: _('Center Panel')
}));
this.notebook.append_page(this.left_order_hbox,
new Gtk.Label({
label: _('Left Panel')
}));
this.append(this.notebook);
}
_onButtonUpClicked(panel, treeView) {
let selection = treeView.get_selection();
let [isSelected, model, selected_row] = selection.get_selected();
if (isSelected == false) return
let [index2, listStore] = selection.get_selected_rows()
let index = index2[0].get_indices()
let index_above = parseInt(index) - 1
if (index_above >= 0) {
const returnIter = listStore.iter_nth_child(null, index_above);
const [success_above, iter_above] = returnIter;
if (!success_above)
return;
listStore.move_before(selected_row, iter_above)
this._orderChanged(panel, listStore)
}
}
_onButtonDownClicked(panel, treeView) {
let selection = treeView.get_selection();
let [isSelected, model, selected_row] = selection.get_selected();
if (isSelected == false) return
let [index2, listStore] = selection.get_selected_rows()
let index = index2[0].get_indices()
let index_below = parseInt(index) + 1
let length_store = listStore.iter_n_children(null);
if (index_below < length_store) {
const returnIter = listStore.iter_nth_child(null, index_below);
const [success_above, iter_below] = returnIter;
if (!success_above)
return;
listStore.move_after(selected_row, iter_below)
this._orderChanged(panel, listStore)
}
}
_orderChanged(panel, listStore) {
let length_store = listStore.iter_n_children(null);
let new_order_arr = []
for (let i = 0; i < length_store; i++) {
const returnIter = listStore.iter_nth_child(null, i);
const [success, iterList] = returnIter;
if (!success)
break;
if (iterList) {
new_order_arr.push(listStore.get_value(iterList, 0));
} else {
break;
}
}
if (panel == "panelRight")
this._settings.set_value("order-icons-right", new GLib.Variant('as', new_order_arr))
else if (panel == "panelCenter")
this._settings.set_value("order-icons-center", new GLib.Variant('as', new_order_arr))
else if (panel == "panelLeft")
this._settings.set_value("order-icons-left", new GLib.Variant('as', new_order_arr))
}
_onButtonDelClicked(panel, treeview) {
let selection = treeview.get_selection();
let [isSelected, model, selected_row] = selection.get_selected();
if (isSelected == false) return
let [index2, listStore] = selection.get_selected_rows()
let index = index2[0].get_indices()
let length_store = listStore.iter_n_children(null);
listStore.remove(selected_row)
let new_order_arr = []
for (let i = 0; i < length_store; i++) {
const returnIter = listStore.iter_nth_child(null, i);
const [success, iterList] = returnIter;
if (!success)
break;
if (iterList) {
new_order_arr.push(listStore.get_value(iterList, 0));
} else {
break;
}
}
if (panel == "panelRight")
this._settings.set_value("order-icons-right", new GLib.Variant('as', new_order_arr))
else if (panel == "panelCenter")
this._settings.set_value("order-icons-center", new GLib.Variant('as', new_order_arr))
else if (panel == "panelLeft")
this._settings.set_value("order-icons-left", new GLib.Variant('as', new_order_arr))
}
_onButtonBlacklistClicked(treeView, listStoreToSet) {
let selection = treeView.get_selection();
let [isSelected, model, selected_row] = selection.get_selected();
if (isSelected == false) return
let [indexSelected, listStore] = selection.get_selected_rows()
let index = indexSelected[0].get_indices()
const selectedElement = listStore.iter_nth_child(null, index);
const [success, iterList] = selectedElement;
if (!success){
return;
}
const selectedValue = listStore.get_value(iterList, 0);
const inBlacklistArray = this.blacklist_array.indexOf(selectedValue);
if (inBlacklistArray > -1){
this.blacklist_array.splice(inBlacklistArray, 1);
listStoreToSet.set(iterList, [1], [false])
}
else {
this.blacklist_array.push(selectedValue)
listStoreToSet.set(iterList, [1], [true])
}
this._settings.set_value("icons-blacklist", new GLib.Variant('as', this.blacklist_array))
}
});