add messagebox

git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@261 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
Nishi 2025-10-11 08:37:24 +00:00
commit c6b81aff02
9 changed files with 228 additions and 8 deletions

View file

@ -41,6 +41,30 @@
<dd>
<a href="#Mw_Constants_h___define_MwMB_ICONNEWS_0x5">#define MwMB_ICONNEWS 0x5</a>
</dd>
<dd>
<a href="#Mw_Constants_h___define_MwMB_BUTTONMASK_0xf0">#define MwMB_BUTTONMASK 0xf0</a>
</dd>
<dd>
<a href="#Mw_Constants_h___define_MwMB_BUTTONOK_0x10">#define MwMB_BUTTONOK 0x10</a>
</dd>
<dd>
<a href="#Mw_Constants_h___define_MwMB_BUTTONCANCEL_0x20">#define MwMB_BUTTONCANCEL 0x20</a>
</dd>
<dd>
<a href="#Mw_Constants_h___define_MwMB_BUTTONYES_0x40">#define MwMB_BUTTONYES 0x40</a>
</dd>
<dd>
<a href="#Mw_Constants_h___define_MwMB_BUTTONNO_0x80">#define MwMB_BUTTONNO 0x80</a>
</dd>
<dd>
<a href="#Mw_Constants_h__MwMB_BUTTONOKCANCEL">MwMB_BUTTONOKCANCEL</a>
</dd>
<dd>
<a href="#Mw_Constants_h__MwMB_BUTTONYESNO">MwMB_BUTTONYESNO</a>
</dd>
<dd>
<a href="#Mw_Constants_h__MwMB_BUTTONYESNOCANCEL">MwMB_BUTTONYESNOCANCEL</a>
</dd>
<dt>
<a href="#Mw_Core_h">Mw/Core.h</a>
</dt>
@ -248,6 +272,12 @@
<dt>
<a href="#Mw_MessageBox_h">Mw/MessageBox.h</a>
</dt>
<dd>
<a href="#Mw_MessageBox_h__MwMessageBox">MwMessageBox</a>
</dd>
<dd>
<a href="#Mw_MessageBox_h__MwMessageBoxGetChild">MwMessageBoxGetChild</a>
</dd>
<dt>
<a href="#Mw_Milsko_h">Mw/Milsko.h</a>
</dt>
@ -498,6 +528,62 @@
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h___define_MwMB_BUTTONMASK_0xf0">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONMASK</FONT> 0xf0</pre>
<dl>
<dd>
Button mask.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h___define_MwMB_BUTTONOK_0x10">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONOK</FONT> 0x10</pre>
<dl>
<dd>
OK button.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h___define_MwMB_BUTTONCANCEL_0x20">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONCANCEL</FONT> 0x20</pre>
<dl>
<dd>
Cancel button.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h___define_MwMB_BUTTONYES_0x40">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONYES</FONT> 0x40</pre>
<dl>
<dd>
Yes button.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h___define_MwMB_BUTTONNO_0x80">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONNO</FONT> 0x80</pre>
<dl>
<dd>
No button.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h__MwMB_BUTTONOKCANCEL">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONOKCANCEL</FONT> (MwMB_BUTTONCANCEL | MwMB_BUTTONOK)</pre>
<dl>
<dd>
Ok and Cancel button.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h__MwMB_BUTTONYESNO">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONYESNO</FONT> (MwMB_BUTTONYES | MwMB_BUTTONNO)</pre>
<dl>
<dd>
Yes and No button.
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h__MwMB_BUTTONYESNOCANCEL">#<B><FONT COLOR="#5F9EA0">define</FONT></B> <FONT COLOR="#B8860B">MwMB_BUTTONYESNOCANCEL</FONT> (MwMB_BUTTONYES | MwMB_BUTTONNO | MwMB_BUTTONCANCEL)</pre>
<dl>
<dd>
Yes, No and Cancel button.
</dd>
</dl>
<hr>
<h2 align="center" id="Mw_Core_h">Mw/Core.h</h2>
<dl>
<dt>
@ -1941,6 +2027,70 @@
</dt>
</dl>
<hr>
<pre id="Mw_MessageBox_h__MwMessageBox">MWDECL MwWidget <B><FONT COLOR="#0000FF">MwMessageBox</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">const</FONT></B> <B><FONT COLOR="#228B22">char</FONT></B>* text,
<B><FONT COLOR="#228B22">const</FONT></B> <B><FONT COLOR="#228B22">char</FONT></B>* title,
<B><FONT COLOR="#228B22">unsigned</FONT></B> <B><FONT COLOR="#228B22">int</FONT></B> flag
);</pre>
<dl>
<dd>
Creates a message box.
</dd>
<dt>
Parameter <code>handle</code>
</dt>
<dd>
Widget.
</dd>
<dt>
Parameter <code>text</code>
</dt>
<dd>
Text.
</dd>
<dt>
Parameter <code>title</code>
</dt>
<dd>
Title text.
</dd>
<dt>
Parameter <code>flag</code>
</dt>
<dd>
Flag.
</dd>
<dt>
Returns
</dt>
<dd>
Widget.
</dd>
</dl>
<hr>
<pre id="Mw_MessageBox_h__MwMessageBoxGetChild">MWDECL MwWidget <B><FONT COLOR="#0000FF">MwMessageBoxGetChild</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> child
);</pre>
<dl>
<dd>
Gets a child of the message box.
</dd>
<dt>
Parameter <code>handle</code>
</dt>
<dd>
Widget.
</dd>
<dt>
Parameter <code>child</code>
</dt>
<dd>
Child.
</dd>
</dl>
<hr>
<h2 align="center" id="Mw_Milsko_h">Mw/Milsko.h</h2>
<dl>
<dt>

View file

@ -68,4 +68,44 @@ enum MwALIGNMENT {
*/
#define MwMB_ICONNEWS 0x5
/*!
* %brief Button mask
*/
#define MwMB_BUTTONMASK 0xf0
/*!
* %brief OK button
*/
#define MwMB_BUTTONOK 0x10
/*!
* %brief Cancel button
*/
#define MwMB_BUTTONCANCEL 0x20
/*!
* %brief Yes button
*/
#define MwMB_BUTTONYES 0x40
/*!
* %brief No button
*/
#define MwMB_BUTTONNO 0x80
/*!
* %brief Ok and Cancel button
*/
#define MwMB_BUTTONOKCANCEL (MwMB_BUTTONCANCEL | MwMB_BUTTONOK)
/*!
* %brief Yes and No button
*/
#define MwMB_BUTTONYESNO (MwMB_BUTTONYES | MwMB_BUTTONNO)
/*!
* %brief Yes, No and Cancel button
*/
#define MwMB_BUTTONYESNOCANCEL (MwMB_BUTTONYES | MwMB_BUTTONNO | MwMB_BUTTONCANCEL)
#endif

View file

@ -14,6 +14,7 @@ extern "C" {
#endif
/*!
* %brief Creates a message box
* %param handle Widget
* %param text Text
* %param title Title text
@ -22,6 +23,13 @@ extern "C" {
*/
MWDECL MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsigned int flag);
/*!
* %brief Gets a child of the message box
* %param handle Widget
* %param child Child
*/
MWDECL MwWidget MwMessageBoxGetChild(MwWidget handle, int child);
#ifdef __cplusplus
}
#endif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 B

After

Width:  |  Height:  |  Size: 434 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 B

After

Width:  |  Height:  |  Size: 542 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 B

After

Width:  |  Height:  |  Size: 594 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 529 B

After

Width:  |  Height:  |  Size: 529 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 B

After

Width:  |  Height:  |  Size: 498 B

Before After
Before After

View file

@ -1,18 +1,31 @@
/* $Id$ */
#include <Mw/Milsko.h>
void msgbox_ok_handler(MwWidget handle, void* user, void* call) {
MwWidget win = user;
#include "external/stb_ds.h"
MwDestroyWidget(win);
typedef struct msgbox {
int key;
MwWidget value;
} msgbox_t;
static void spawn_button(MwWidget handle, int x, int y, int id, const char* text) {
msgbox_t* mb = handle->opaque;
MwWidget widget = MwVaCreateWidget(MwButtonClass, text, handle, x, y, 80, 24,
MwNtext, text,
NULL);
hmput(mb, id, widget);
handle->opaque = mb;
}
MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsigned int flag) {
MwWidget window, ok;
MwWidget window;
MwPoint p;
int w, h;
int left = 8;
int th;
int x = 0;
p.x = 0;
p.y = 0;
@ -20,11 +33,14 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi
window = MwVaCreateWidget(MwWindowClass, "messagebox", handle, 0, 0, (w = 512), (h = 32 * 4),
MwNtitle, title,
NULL);
ok = MwVaCreateWidget(MwButtonClass, "ok", window, w - 8 - 80, h - 8 - 24, 80, 24,
MwNtext, "OK",
NULL);
MwAddUserHandler(ok, MwNactivateHandler, msgbox_ok_handler, window);
window->opaque = NULL;
if(flag & MwMB_BUTTONOK) spawn_button(window, w - (x += 8 + 80), h - 8 - 24, MwMB_BUTTONOK, "OK");
if(flag & MwMB_BUTTONCANCEL) spawn_button(window, w - (x += 8 + 80), h - 8 - 24, MwMB_BUTTONCANCEL, "Cancel");
if(flag & MwMB_BUTTONNO) spawn_button(window, w - (x += 8 + 80), h - 8 - 24, MwMB_BUTTONNO, "No");
if(flag & MwMB_BUTTONYES) spawn_button(window, w - (x += 8 + 80), h - 8 - 24, MwMB_BUTTONYES, "Yes");
if((flag & MwMB_ICONMASK) != 0) {
MwWidget icon;
@ -75,3 +91,9 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi
return window;
}
MwWidget MwMessageBoxGetChild(MwWidget handle, int child) {
msgbox_t* mb = handle->opaque;
return hmget(mb, child);
}