2024-08-10 07:30:41 +02:00
|
|
|
#region funtion calls
|
|
|
|
function __fnInit_Notification() {
|
|
|
|
registerFunction("Notifications", "Clear log messages", "", MOD_KEY.none, notification_clear_all ).setMenu("noti_clear_all");
|
|
|
|
registerFunction("Notifications", "Clear warning messages", "", MOD_KEY.none, notification_clear_log ).setMenu("noti_clear_log");
|
|
|
|
registerFunction("Notifications", "Clear all notifications", "", MOD_KEY.none, notification_clear_warning ).setMenu("noti_clear_warning");
|
|
|
|
|
|
|
|
registerFunction("Notifications", "Open log file", "", MOD_KEY.none, notification_open_log ).setMenu("noti_open_log");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function notification_clear_all() { CALL("notification_clear_all"); ds_list_clear(STATUSES); }
|
|
|
|
function notification_clear_log() { CALL("notification_clear_log"); for( var i = ds_list_size(STATUSES) - 1; i >= 0; i-- ) if(STATUSES[| i].type == NOTI_TYPE.log) ds_list_delete(STATUSES, i); }
|
|
|
|
function notification_clear_warning() { CALL("notification_clear_warning"); for( var i = ds_list_size(STATUSES) - 1; i >= 0; i-- ) if(STATUSES[| i].type == NOTI_TYPE.warning) ds_list_delete(STATUSES, i); }
|
|
|
|
|
|
|
|
function notification_open_log() { CALL("notification_open_log"); shellOpenExplorer(DIRECTORY + "log/log.txt"); }
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
2023-03-12 02:28:21 +01:00
|
|
|
function Panel_Notification() : PanelContent() constructor {
|
2024-09-13 08:25:00 +02:00
|
|
|
title = __txt("Notifications");
|
|
|
|
w = ui(720);
|
|
|
|
h = ui(480);
|
|
|
|
padding = 8;
|
2023-03-12 02:28:21 +01:00
|
|
|
|
2024-08-10 07:30:41 +02:00
|
|
|
current_page = 0;
|
|
|
|
filter = NOTI_TYPE.log | NOTI_TYPE.warning | NOTI_TYPE.error;
|
|
|
|
noti_selecting = noone;
|
2023-03-12 02:28:21 +01:00
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
show_time = false;
|
|
|
|
|
2023-03-12 02:28:21 +01:00
|
|
|
rightClickMenu = [
|
2024-08-10 07:30:41 +02:00
|
|
|
MENU_ITEMS.noti_clear_all,
|
|
|
|
MENU_ITEMS.noti_clear_log,
|
|
|
|
MENU_ITEMS.noti_clear_warning,
|
2023-03-12 02:28:21 +01:00
|
|
|
-1,
|
2024-09-13 08:25:00 +02:00
|
|
|
menuItem(__txt("Toggle timestamp"), function() /*=>*/ { show_time = !show_time }, noone, noone, function() /*=>*/ {return show_time}),
|
|
|
|
-1,
|
2024-08-10 07:30:41 +02:00
|
|
|
MENU_ITEMS.noti_open_log,
|
2023-03-12 02:28:21 +01:00
|
|
|
];
|
|
|
|
|
|
|
|
function onResize() {
|
2024-09-13 08:25:00 +02:00
|
|
|
sp_noti.resize(w - ui(padding + padding), h - ui(padding + padding));
|
2023-03-12 02:28:21 +01:00
|
|
|
}
|
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
sp_noti = new scrollPane(w - ui(padding + padding), h - ui(padding + padding), function(_y, _m) {
|
|
|
|
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
2024-09-19 07:36:57 +02:00
|
|
|
var hh = ui(8);
|
2023-06-10 13:59:45 +02:00
|
|
|
var yy = _y;
|
2024-09-13 08:25:00 +02:00
|
|
|
var txw = sp_noti.surface_w - ui(48);
|
|
|
|
if(show_time) txw -= ui(68);
|
|
|
|
|
2023-03-12 02:28:21 +01:00
|
|
|
var amo = ds_list_size(STATUSES);
|
2023-06-10 13:59:45 +02:00
|
|
|
var pad = THEME_VALUE.panel_notification_padding;
|
2023-03-12 02:28:21 +01:00
|
|
|
|
|
|
|
draw_set_font(f_p3);
|
|
|
|
var timeW = string_width("00:00:00");
|
|
|
|
|
2024-04-13 07:32:04 +02:00
|
|
|
for( var i = 0; i < amo; i++ ) {
|
2023-03-12 02:28:21 +01:00
|
|
|
var index = amo - 1 - i;
|
|
|
|
var noti = STATUSES[| index];
|
2024-04-13 07:32:04 +02:00
|
|
|
|
|
|
|
if(is_undefined(noti)) continue;
|
2023-03-12 02:28:21 +01:00
|
|
|
if(noti.type & filter == 0) continue;
|
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
draw_set_font(f_p3);
|
2023-03-12 02:28:21 +01:00
|
|
|
var _w = sp_noti.surface_w;
|
2023-06-10 13:59:45 +02:00
|
|
|
var _h = ui(12) + string_height_ext(noti.txt, -1, txw);
|
|
|
|
_h += pad * 2;
|
2023-03-12 02:28:21 +01:00
|
|
|
|
|
|
|
if(yy >= -_h && yy <= sp_noti.h) {
|
2024-09-13 08:25:00 +02:00
|
|
|
|
2023-06-10 13:59:45 +02:00
|
|
|
if(pHOVER && pHOVER && point_in_rectangle(_m[0], _m[1], 0, yy, _w, yy + _h)) {
|
2024-07-28 13:55:57 +02:00
|
|
|
sp_noti.hover_content = true;
|
2024-09-13 08:25:00 +02:00
|
|
|
draw_sprite_stretched_ext(THEME.s_box_r2, 0, 0, yy, _w, _h, CDEF.main_dkblack, 1);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
|
|
|
if(noti.tooltip != "")
|
|
|
|
TOOLTIP = noti.tooltip;
|
|
|
|
|
|
|
|
if(noti.onClick != noone && mouse_press(mb_left, pFOCUS))
|
|
|
|
noti.onClick();
|
|
|
|
|
|
|
|
if(mouse_press(mb_right, pFOCUS)) {
|
2024-08-10 07:30:41 +02:00
|
|
|
noti_selecting = noti;
|
|
|
|
|
2024-08-10 11:04:14 +02:00
|
|
|
var dia = menuCall("notification_menu", [
|
2024-08-10 07:30:41 +02:00
|
|
|
menuItem(__txtx("noti_copy_message", "Copy notification message"), function() { clipboard_set_text(noti_selecting.txt); }),
|
|
|
|
menuItem(__txtx("noti_delete_message", "Delete notification"), function() { ds_list_remove(STATUSES, noti_selecting); }),
|
|
|
|
]);
|
2024-04-13 07:32:04 +02:00
|
|
|
|
2023-03-12 02:28:21 +01:00
|
|
|
}
|
|
|
|
}
|
2024-04-13 07:32:04 +02:00
|
|
|
|
2023-03-12 02:28:21 +01:00
|
|
|
if(noti.life_max > 0) {
|
|
|
|
var _nwx = sp_noti.w - ui(12) - ui(40);
|
|
|
|
var _nw = _nwx * noti.life / noti.life_max;
|
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
draw_sprite_stretched_ext(THEME.s_box_r2, 0, ui(40), yy, _nw, _h, CDEF.main_mdblack, 1);
|
2023-03-12 02:28:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if(noti.icon_end != noone)
|
|
|
|
draw_sprite_ui(noti.icon_end, 1, _w - ui(24), yy + _h / 2,,,, COLORS._main_icon);
|
|
|
|
|
|
|
|
var ic = noti.icon;
|
|
|
|
if(noti.icon == noone) {
|
|
|
|
switch(noti.type) {
|
2024-09-13 08:25:00 +02:00
|
|
|
case NOTI_TYPE.log : ic = THEME.noti_icon_log; break;
|
2023-03-12 02:28:21 +01:00
|
|
|
case NOTI_TYPE.warning : ic = THEME.noti_icon_warning; break;
|
2024-09-13 08:25:00 +02:00
|
|
|
case NOTI_TYPE.error : ic = THEME.noti_icon_error; break;
|
2023-03-12 02:28:21 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
draw_sprite_ui(ic, 1, ui(16), yy + _h / 2, .85, .85);
|
|
|
|
|
|
|
|
var tx = ui(32);
|
2023-06-10 13:59:45 +02:00
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
if(show_time) {
|
|
|
|
tx += timeW + ui(8);
|
|
|
|
|
|
|
|
draw_set_text(f_p3, fa_right, fa_center, COLORS._main_text_sub_inner);
|
|
|
|
draw_text_line(tx - ui(4), yy + _h / 2, noti.time, -1, txw);
|
|
|
|
}
|
|
|
|
|
|
|
|
draw_set_text(f_p3, fa_left, fa_center, COLORS._main_text_inner);
|
2023-06-05 19:41:01 +02:00
|
|
|
draw_text_line(tx + ui(4), yy + _h / 2, noti.txt, -1, txw);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
|
|
|
if(noti.amount > 1) {
|
|
|
|
draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text);
|
|
|
|
var bw = max( ui(32), string_width(noti.amount) + ui(10) );
|
|
|
|
var bh = ui(28);
|
|
|
|
|
|
|
|
var bx = _w - ui(0) - bw;
|
2024-04-11 05:51:13 +02:00
|
|
|
var by = yy + ui(0) + ui(1);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
// draw_sprite_stretched_ext(THEME.s_box_r2, 0, bx, by, bw, bh, CDEF.main_dkblack, 0.75);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
|
|
|
draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text_accent);
|
|
|
|
draw_text(bx + bw / 2, by + bh / 2, noti.amount);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
yy += _h + ui(2);
|
|
|
|
hh += _h + ui(2);
|
2023-03-12 02:28:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return hh;
|
|
|
|
});
|
|
|
|
|
2024-09-13 08:25:00 +02:00
|
|
|
|
|
|
|
|
2023-03-12 02:28:21 +01:00
|
|
|
function drawContent(panel) {
|
2023-06-10 13:59:45 +02:00
|
|
|
draw_clear_alpha(COLORS.panel_bg_clear, 0);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
|
|
|
var px = ui(padding);
|
2024-09-13 08:25:00 +02:00
|
|
|
var py = ui(padding);
|
2023-03-12 02:28:21 +01:00
|
|
|
var pw = w - ui(padding + padding);
|
2024-09-13 08:25:00 +02:00
|
|
|
var ph = h - ui(padding + padding);
|
2023-03-12 02:28:21 +01:00
|
|
|
|
2023-11-13 05:38:37 +01:00
|
|
|
draw_sprite_stretched(THEME.ui_panel_bg, 1, px - ui(8), py - ui(8), pw + ui(16), ph + ui(16));
|
2024-09-13 08:25:00 +02:00
|
|
|
sp_noti.setFocusHover(pFOCUS, pHOVER);
|
2023-03-12 02:28:21 +01:00
|
|
|
sp_noti.draw(px, py, mx - px, my - py);
|
2024-09-13 08:25:00 +02:00
|
|
|
|
|
|
|
if(mouse_press(mb_right, pFOCUS)) {
|
|
|
|
menuCall("notification_log_menu", rightClickMenu);
|
|
|
|
}
|
2023-03-12 02:28:21 +01:00
|
|
|
}
|
|
|
|
}
|