add settings

This commit is contained in:
sonichy
2025-05-12 09:33:19 +08:00
parent 2516cc72b2
commit 51ddc825e9
7 changed files with 85 additions and 25 deletions

View File

@@ -1,5 +1,8 @@
import GLib from "gi://GLib";
import St from 'gi://St';
import Clutter from "gi://Clutter";
import Gio from 'gi://Gio';
import * as Dialog from 'resource:///org/gnome/shell/ui/dialog.js';
import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
@@ -12,27 +15,61 @@ export default class DatetimeExtension extends Extension {
enable() {
this._indicator = new PanelMenu.Button(0.0, this.metadata.name, false);
var label = new St.Label({ text: '00:00\n1/1 一' });
label.set_style('text-align:center');
var label = new St.Label({ text: '00:00\n1/1 一', x_align: Clutter.ActorAlign.CENTER, y_align: Clutter.ActorAlign.CENTER });
this._indicator.add_child(label);
Main.panel.addToStatusArea(this.uuid, this._indicator);
const menuItem = new PopupMenu.PopupMenuItem('');
const menu_calendar = new PopupMenu.PopupMenuItem('');
//https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/dateMenu.js#L901
let calendar = new Calendar.Calendar();
menuItem.add_child(calendar);
menuItem.height = 300;
let calendar = new Calendar.Calendar();
let now = new Date();
calendar.setDate(now);
this._indicator.menu.addMenuItem(menuItem);
calendar.setDate(now);
menu_calendar.add_child(calendar);
menu_calendar.height = 300;
this._indicator.menu.addMenuItem(menu_calendar);
//const menuItem1 = new PopupMenu.PopupMenuItem('');
//menuItem1.label.set_style('text-align:center'); //无效
//this._indicator.menu.addMenuItem(menuItem1);
//https://gjs.guide/extensions/development/preferences.html
const schema = 'org.gnome.shell.extensions.datetime';
this._settings = this.getSettings(schema);
this.label_tooltip = new St.Label({ text: '' });
this.label_tooltip.set_style('background:#222;padding:10px;border:1px solid #aaa;border-radius:10px;');
const menu_set = new PopupMenu.PopupMenuItem('Set');
menu_set.connect('activate', () => {
//https://gjs.guide/extensions/topics/dialogs.html
const dialog = new Dialog.Dialog(global.stage, 'my-dialog');
const box = new St.BoxLayout();
const label = new St.Label({ text: 'Memo', y_align: Clutter.ActorAlign.CENTER });
label.style = 'margin:0 10px;';
box.add_child(label);
var s = this._settings.get_string('memo');
const entry = new St.Entry({ text: s });
entry.width = 200;
box.add_child(entry);
dialog.contentLayout.add_child(box);
dialog.addButton({
label: 'Save',
action: () => {
this._settings.set_string('memo', entry.text);
dialog.destroy();
},
});
dialog.addButton({
label: 'Close',
isDefault: true,
action: () => {
dialog.destroy();
},
});
dialog.set_position(parseInt(global.stage.width/2 - dialog.width/2), parseInt(global.stage.height/2 - dialog.height/2));
});
this._indicator.menu.addMenuItem(menu_set);
this.label_tooltip = new St.Label();
this.label_tooltip.set_style('background:#222; padding:10px; border:1px solid #aaa; border-radius:10px;');
global.stage.add_child(this.label_tooltip);
this.label_tooltip.hide();
this._indicator.connect('notify::hover', () => {
@@ -41,12 +78,13 @@ export default class DatetimeExtension extends Extension {
if (x == 0 && y != 0) //LEFT
this.label_tooltip.set_position(x + this._indicator.width + 1, y);
else if (x != 0 && y == 0) //TOP
this.label_tooltip.set_position(x, y + this._indicator.height + 1);
this.label_tooltip.set_position(x - this.label_tooltip.width / 2 + this._indicator.width / 2, y + this._indicator.height + 1);
else
if (this._indicator.height == Main.panel.height) //BOTTOM
this.label_tooltip.set_position(x, y - this.label_tooltip.height - 1);
this.label_tooltip.set_position(parseInt(x - this.label_tooltip.width / 2 + this._indicator.width / 2), y - this.label_tooltip.height - 1);
else //RIGHT
this.label_tooltip.set_position(x - this.label_tooltip.width - 1, y);
//console.log(x - this.label_tooltip.width / 2 + this._indicator.width / 2);
if (this._indicator.hover)
this.label_tooltip.show();
else
@@ -64,10 +102,10 @@ export default class DatetimeExtension extends Extension {
var day = date.getDay();
var weekday = ["日", "一", "二", "三", "四", "五", "六"];
var weekday1 = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
var text = h + ' : ' + m + '\n' + (date.getMonth() + 1) + '/' + date.getDate() + ' ' + weekday[day];
var text = h + ':' + m + '\n' + (date.getMonth() + 1) + '/' + date.getDate() + ' ' + weekday[day];
label.set_text(text);
//menuItem1.label.text = date.toLocaleString() + ' ' + weekday1[day];
this.label_tooltip.text = date.toLocaleString() + ' ' + weekday1[day];
var s = this._settings.get_string('memo');
this.label_tooltip.text = date.toLocaleString() + ' ' + weekday1[day] + '\n' + s;
// Run as loop, not once.
return GLib.SOURCE_CONTINUE;
});
@@ -80,9 +118,10 @@ export default class DatetimeExtension extends Extension {
this._timeout = null;
}
this.label_tooltip?.destroy();
this.label_tooltip = null;
this.label_tooltip = null;
this._indicator?.destroy();
this._indicator = null;
this._indicator = null;
this._settings = null;
}
}