diff --git a/System/Core/MessageBox.HC b/System/Core/MessageBox.HC index 27285bf..8c3bf1c 100644 --- a/System/Core/MessageBox.HC +++ b/System/Core/MessageBox.HC @@ -17,6 +17,9 @@ Context2D* MESSAGEBOX_WIN_ICON_WARN = Image.FileToContext2D( #define MESSAGEBOX_TYPE_ERROR 1 #define MESSAGEBOX_TYPE_INFO 2 #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_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, - 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; 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"); break; case MESSAGEBOX_TYPE_CONFIRM: + case MESSAGEBOX_TYPE_CONFIRM_NO_ASK: Gui.Window.SetTitle(win, "Confirm"); 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); ButtonWidget* btn_ok = NULL; ButtonWidget* btn_cancel = NULL; + CheckBoxWidget* cb_no_ask = NULL; + TextLabelWidget* lbl_no_ask = NULL; Gui.Widget.SetText(lbl_text, str); 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; } + 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.SetFocus(win); } @@ -122,12 +140,22 @@ U0 @messagebox_confirm(U8* str, U64 callback = NULL, JsonArray* options = NULL) 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 { U0* (*Alert)(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* (*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; @@ -135,5 +163,6 @@ MessageBox.Alert = &@messagebox_alert; MessageBox.Error = &@messagebox_error; MessageBox.Info = &@messagebox_info; MessageBox.Confirm = &@messagebox_confirm; +MessageBox.ConfirmNoAsk = &@messagebox_confirm_no_ask; "messagebox "; \ No newline at end of file