mirror of
https://git.checksum.fail/alec/erythros
synced 2025-12-10 21:19:55 +02:00
System/Core/MessageBox: Add MessageBox.ConfirmNoAsk()
This commit is contained in:
@@ -17,6 +17,9 @@ Context2D* MESSAGEBOX_WIN_ICON_WARN = Image.FileToContext2D(
|
|||||||
#define MESSAGEBOX_TYPE_ERROR 1
|
#define MESSAGEBOX_TYPE_ERROR 1
|
||||||
#define MESSAGEBOX_TYPE_INFO 2
|
#define MESSAGEBOX_TYPE_INFO 2
|
||||||
#define MESSAGEBOX_TYPE_CONFIRM 3
|
#define MESSAGEBOX_TYPE_CONFIRM 3
|
||||||
|
#define MESSAGEBOX_TYPE_CONFIRM_NO_ASK 4
|
||||||
|
|
||||||
|
#define MESSAGEBOX_TAG_CONFIRM_NO_ASK 0x80
|
||||||
|
|
||||||
JsonArray* @messagebox_default_info = Json.Parse("[\"OK\"]", Fs);
|
JsonArray* @messagebox_default_info = Json.Parse("[\"OK\"]", Fs);
|
||||||
JsonArray* @messagebox_default_confirm = Json.Parse("[\"OK\",\"Cancel\"]", Fs);
|
JsonArray* @messagebox_default_confirm = Json.Parse("[\"OK\",\"Cancel\"]", Fs);
|
||||||
@@ -31,7 +34,7 @@ U0 @messagebox_close_widget(Widget* widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
U0 @messagebox_msg(U8* str, I64 type, Context2D* win_icon, Context2D* icon,
|
U0 @messagebox_msg(U8* str, I64 type, Context2D* win_icon, Context2D* icon,
|
||||||
U64 callback = NULL, JsonArray* options = NULL)
|
U64 callback = NULL, JsonArray* options = NULL, Bool default_no_ask = FALSE)
|
||||||
{
|
{
|
||||||
U64 flags = WIN_FLAGS_MOVABLE | WIN_FLAGS_ICON | WIN_FLAGS_TITLE_BAR | WIN_FLAGS_CLOSE_BUTTON;
|
U64 flags = WIN_FLAGS_MOVABLE | WIN_FLAGS_ICON | WIN_FLAGS_TITLE_BAR | WIN_FLAGS_CLOSE_BUTTON;
|
||||||
Window* win = Compositor.CreateWindow(0, 0, 320, 192, flags);
|
Window* win = Compositor.CreateWindow(0, 0, 320, 192, flags);
|
||||||
@@ -47,6 +50,7 @@ U0 @messagebox_msg(U8* str, I64 type, Context2D* win_icon, Context2D* icon,
|
|||||||
Gui.Window.SetTitle(win, "Info");
|
Gui.Window.SetTitle(win, "Info");
|
||||||
break;
|
break;
|
||||||
case MESSAGEBOX_TYPE_CONFIRM:
|
case MESSAGEBOX_TYPE_CONFIRM:
|
||||||
|
case MESSAGEBOX_TYPE_CONFIRM_NO_ASK:
|
||||||
Gui.Window.SetTitle(win, "Confirm");
|
Gui.Window.SetTitle(win, "Confirm");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -55,6 +59,8 @@ U0 @messagebox_msg(U8* str, I64 type, Context2D* win_icon, Context2D* icon,
|
|||||||
TextLabelWidget* lbl_text = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 40, 16, 192, 96);
|
TextLabelWidget* lbl_text = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 40, 16, 192, 96);
|
||||||
ButtonWidget* btn_ok = NULL;
|
ButtonWidget* btn_ok = NULL;
|
||||||
ButtonWidget* btn_cancel = NULL;
|
ButtonWidget* btn_cancel = NULL;
|
||||||
|
CheckBoxWidget* cb_no_ask = NULL;
|
||||||
|
TextLabelWidget* lbl_no_ask = NULL;
|
||||||
|
|
||||||
Gui.Widget.SetText(lbl_text, str);
|
Gui.Widget.SetText(lbl_text, str);
|
||||||
Gui.Window.SetCallback(win, "close", callback);
|
Gui.Window.SetCallback(win, "close", callback);
|
||||||
@@ -82,6 +88,18 @@ U0 @messagebox_msg(U8* str, I64 type, Context2D* win_icon, Context2D* icon,
|
|||||||
btn_ok->tag = TRUE;
|
btn_ok->tag = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type == MESSAGEBOX_TYPE_CONFIRM_NO_ASK) {
|
||||||
|
cb_no_ask = Gui.CreateWidget(win, WIDGET_TYPE_CHECKBOX, 40, win->height - 96, 24, 24);
|
||||||
|
cb_no_ask->checked = default_no_ask;
|
||||||
|
cb_no_ask->tag = MESSAGEBOX_TAG_CONFIRM_NO_ASK;
|
||||||
|
lbl_no_ask = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 64, win->height - 94, 96, 16);
|
||||||
|
if (callback) {
|
||||||
|
Gui.Widget.SetCallback(cb_no_ask, "clicked", callback);
|
||||||
|
}
|
||||||
|
Gui.Widget.SetText(lbl_no_ask, "Do not ask again");
|
||||||
|
Gui.Widget.SetEcho(lbl_no_ask, cb_no_ask);
|
||||||
|
}
|
||||||
|
|
||||||
Gui.Window.Center(win);
|
Gui.Window.Center(win);
|
||||||
Gui.Window.SetFocus(win);
|
Gui.Window.SetFocus(win);
|
||||||
}
|
}
|
||||||
@@ -122,12 +140,22 @@ U0 @messagebox_confirm(U8* str, U64 callback = NULL, JsonArray* options = NULL)
|
|||||||
MESSAGEBOX_ICON_INFO, callback, options);
|
MESSAGEBOX_ICON_INFO, callback, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
U0 @messagebox_confirm_no_ask(U8* str, U64 callback = NULL, JsonArray* options = NULL, Bool default_no_ask = FALSE)
|
||||||
|
{
|
||||||
|
if (!options || !options->length) {
|
||||||
|
options = @messagebox_default_confirm;
|
||||||
|
}
|
||||||
|
@messagebox_msg(str, MESSAGEBOX_TYPE_CONFIRM_NO_ASK, MESSAGEBOX_WIN_ICON_INFO,
|
||||||
|
MESSAGEBOX_ICON_INFO, callback, options, default_no_ask);
|
||||||
|
}
|
||||||
|
|
||||||
class @messagebox
|
class @messagebox
|
||||||
{
|
{
|
||||||
U0* (*Alert)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
U0* (*Alert)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
||||||
U0* (*Error)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
U0* (*Error)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
||||||
U0* (*Info)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
U0* (*Info)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
||||||
U0* (*Confirm)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
U0* (*Confirm)(U8* str, U64 callback = NULL, JsonArray* options = NULL);
|
||||||
|
U0* (*ConfirmNoAsk)(U8* str, U64 callback = NULL, JsonArray* options = NULL, Bool default_no_ask = FALSE);
|
||||||
};
|
};
|
||||||
|
|
||||||
@messagebox MessageBox;
|
@messagebox MessageBox;
|
||||||
@@ -135,5 +163,6 @@ MessageBox.Alert = &@messagebox_alert;
|
|||||||
MessageBox.Error = &@messagebox_error;
|
MessageBox.Error = &@messagebox_error;
|
||||||
MessageBox.Info = &@messagebox_info;
|
MessageBox.Info = &@messagebox_info;
|
||||||
MessageBox.Confirm = &@messagebox_confirm;
|
MessageBox.Confirm = &@messagebox_confirm;
|
||||||
|
MessageBox.ConfirmNoAsk = &@messagebox_confirm_no_ask;
|
||||||
|
|
||||||
"messagebox ";
|
"messagebox ";
|
||||||
Reference in New Issue
Block a user