1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import Clutter from 'gi://Clutter';
- import GObject from 'gi://GObject';
- import St from 'gi://St'
- import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
- export const MenuItem = GObject.registerClass({
- Signals: {
- 'toggle': { param_types: [Clutter.Event.$gtype] },
- },
- }, class MenuItem extends PopupMenu.PopupBaseMenuItem {
- _init(icon, key, label, value, checked) {
- super._init({ reactive: true });
- this._checked = checked;
- this._updateOrnament();
- this._key = key;
- this._gIcon = icon;
- // add icon
- this.add(new St.Icon({ style_class: 'popup-menu-icon', gicon : this._gIcon }));
- // add label
- this._labelActor = new St.Label({ text: label });
- this.add(this._labelActor);
- // add value
- this._valueLabel = new St.Label({ text: value });
- this._valueLabel.set_x_align(Clutter.ActorAlign.END);
- this._valueLabel.set_x_expand(true);
- this._valueLabel.set_y_expand(true);
- this.add(this._valueLabel);
- this.actor._delegate = this;
- }
- get checked() {
- return this._checked;
- }
- get key() {
- return this._key;
- }
- get gicon() {
- return this._gIcon;
- }
- set value(value) {
- this._valueLabel.text = value;
- }
- get value() {
- return this._valueLabel.text;
- }
- // prevents menu from being closed
- activate(event) {
- this._checked = !this._checked;
- this._updateOrnament();
- this.emit('toggle', event);
- }
- _updateOrnament() {
- if (this._checked)
- this.setOrnament(PopupMenu.Ornament.CHECK);
- else
- this.setOrnament(PopupMenu.Ornament.NONE);
- }
- get label() {
- return this._labelActor.text;
- }
- });
|