fancy listbox

git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@369 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
NishiOwO
2025-10-16 16:47:41 +00:00
parent d496403c6a
commit bd4352dba9
23 changed files with 521 additions and 71 deletions

View File

@@ -19,6 +19,7 @@ clean:
del /f /q src\color.obj
del /f /q src\directory.obj
del /f /q src\messagebox.obj
del /f /q src\string.obj
del /f /q src\boldfont.obj
del /f /q external\ds.obj
del /f /q external\image.obj
@@ -66,8 +67,8 @@ clean:
del /f /q src\Mw.dll
del /f /q oosrc\MwOO.dll
src\Mw.dll: src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj
$(LD) $(LDFLAGS) -e$@ src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj -lopengl32.lib -lgdi32.lib -luser32.lib
src\Mw.dll: src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\string.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj
$(LD) $(LDFLAGS) -e$@ src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\string.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj -lopengl32.lib -lgdi32.lib -luser32.lib
implib src\Mw.lib src\Mw.dll
oosrc\MwOO.dll: oosrc\base.obj oosrc\widget\button.obj oosrc\widget\frame.obj oosrc\widget\image.obj oosrc\widget\menu.obj oosrc\widget\opengl.obj oosrc\widget\scrollbar.obj oosrc\widget\submenu.obj oosrc\widget\window.obj oosrc\widget\checkbox.obj oosrc\widget\viewport.obj oosrc\widget\listbox.obj oosrc\widget\label.obj oosrc\widget\entry.obj oosrc\widget\numberentry.obj

View File

@@ -19,6 +19,7 @@ clean:
del /f /q src\color.obj
del /f /q src\directory.obj
del /f /q src\messagebox.obj
del /f /q src\string.obj
del /f /q src\boldfont.obj
del /f /q external\ds.obj
del /f /q external\image.obj
@@ -66,8 +67,8 @@ clean:
del /f /q src\Mw.dll
del /f /q oosrc\MwOO.dll
src\Mw.dll: src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj
$(LD) $(LDFLAGS) /OUT:$@ src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj opengl32.lib gdi32.lib user32.lib
src\Mw.dll: src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\string.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj
$(LD) $(LDFLAGS) /OUT:$@ src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\color.obj src\directory.obj src\messagebox.obj src\string.obj src\boldfont.obj external\ds.obj external\image.obj src\icon\info.obj src\icon\note.obj src\icon\warning.obj src\icon\error.obj src\icon\news.obj src\icon\question.obj src\icon\directory.obj src\icon\file.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\viewport.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\listbox.obj src\widget\numberentry.obj src\backend\gdi.obj opengl32.lib gdi32.lib user32.lib
oosrc\MwOO.dll: oosrc\base.obj oosrc\widget\button.obj oosrc\widget\frame.obj oosrc\widget\image.obj oosrc\widget\menu.obj oosrc\widget\opengl.obj oosrc\widget\scrollbar.obj oosrc\widget\submenu.obj oosrc\widget\window.obj oosrc\widget\checkbox.obj oosrc\widget\viewport.obj oosrc\widget\listbox.obj oosrc\widget\label.obj oosrc\widget\entry.obj oosrc\widget\numberentry.obj

View File

@@ -18,6 +18,7 @@ clean: .SYMBOLIC
%erase src/color.obj
%erase src/directory.obj
%erase src/messagebox.obj
%erase src/string.obj
%erase src/boldfont.obj
%erase external/ds.obj
%erase external/image.obj
@@ -65,8 +66,8 @@ clean: .SYMBOLIC
%erase src/Mw.dll
%erase oosrc/MwOO.dll
src/Mw.dll: src/core.obj src/draw.obj src/default.obj src/lowlevel.obj src/error.obj src/unicode.obj src/font.obj src/color.obj src/directory.obj src/messagebox.obj src/boldfont.obj external/ds.obj external/image.obj src/icon/info.obj src/icon/note.obj src/icon/warning.obj src/icon/error.obj src/icon/news.obj src/icon/question.obj src/icon/directory.obj src/icon/file.obj src/cursor/default.obj src/cursor/cross.obj src/cursor/text.obj src/widget/button.obj src/widget/frame.obj src/widget/opengl.obj src/widget/window.obj src/widget/menu.obj src/widget/entry.obj src/widget/submenu.obj src/widget/viewport.obj src/widget/image.obj src/widget/scrollbar.obj src/widget/checkbox.obj src/widget/label.obj src/widget/listbox.obj src/widget/numberentry.obj src/backend/gdi.obj
$(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file src/core.obj file src/draw.obj file src/default.obj file src/lowlevel.obj file src/error.obj file src/unicode.obj file src/font.obj file src/color.obj file src/directory.obj file src/messagebox.obj file src/boldfont.obj file external/ds.obj file external/image.obj file src/icon/info.obj file src/icon/note.obj file src/icon/warning.obj file src/icon/error.obj file src/icon/news.obj file src/icon/question.obj file src/icon/directory.obj file src/icon/file.obj file src/cursor/default.obj file src/cursor/cross.obj file src/cursor/text.obj file src/widget/button.obj file src/widget/frame.obj file src/widget/opengl.obj file src/widget/window.obj file src/widget/menu.obj file src/widget/entry.obj file src/widget/submenu.obj file src/widget/viewport.obj file src/widget/image.obj file src/widget/scrollbar.obj file src/widget/checkbox.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/numberentry.obj file src/backend/gdi.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib
src/Mw.dll: src/core.obj src/draw.obj src/default.obj src/lowlevel.obj src/error.obj src/unicode.obj src/font.obj src/color.obj src/directory.obj src/messagebox.obj src/string.obj src/boldfont.obj external/ds.obj external/image.obj src/icon/info.obj src/icon/note.obj src/icon/warning.obj src/icon/error.obj src/icon/news.obj src/icon/question.obj src/icon/directory.obj src/icon/file.obj src/cursor/default.obj src/cursor/cross.obj src/cursor/text.obj src/widget/button.obj src/widget/frame.obj src/widget/opengl.obj src/widget/window.obj src/widget/menu.obj src/widget/entry.obj src/widget/submenu.obj src/widget/viewport.obj src/widget/image.obj src/widget/scrollbar.obj src/widget/checkbox.obj src/widget/label.obj src/widget/listbox.obj src/widget/numberentry.obj src/backend/gdi.obj
$(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file src/core.obj file src/draw.obj file src/default.obj file src/lowlevel.obj file src/error.obj file src/unicode.obj file src/font.obj file src/color.obj file src/directory.obj file src/messagebox.obj file src/string.obj file src/boldfont.obj file external/ds.obj file external/image.obj file src/icon/info.obj file src/icon/note.obj file src/icon/warning.obj file src/icon/error.obj file src/icon/news.obj file src/icon/question.obj file src/icon/directory.obj file src/icon/file.obj file src/cursor/default.obj file src/cursor/cross.obj file src/cursor/text.obj file src/widget/button.obj file src/widget/frame.obj file src/widget/opengl.obj file src/widget/window.obj file src/widget/menu.obj file src/widget/entry.obj file src/widget/submenu.obj file src/widget/viewport.obj file src/widget/image.obj file src/widget/scrollbar.obj file src/widget/checkbox.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/numberentry.obj file src/backend/gdi.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib
oosrc/MwOO.dll: oosrc/base.obj oosrc/widget/button.obj oosrc/widget/frame.obj oosrc/widget/image.obj oosrc/widget/menu.obj oosrc/widget/opengl.obj oosrc/widget/scrollbar.obj oosrc/widget/submenu.obj oosrc/widget/window.obj oosrc/widget/checkbox.obj oosrc/widget/viewport.obj oosrc/widget/listbox.obj oosrc/widget/label.obj oosrc/widget/entry.obj oosrc/widget/numberentry.obj
@@ -94,6 +95,8 @@ src/directory.obj: src/directory.c
$(CC) $(CFLAGS) -fo=$@ $<
src/messagebox.obj: src/messagebox.c
$(CC) $(CFLAGS) -fo=$@ $<
src/string.obj: src/string.c
$(CC) $(CFLAGS) -fo=$@ $<
src/boldfont.obj: src/boldfont.c
$(CC) $(CFLAGS) -fo=$@ $<
external/ds.obj: external/ds.c

View File

@@ -24,7 +24,7 @@
<a href="#Mw_Constants_h__MwDEFAULT">MwDEFAULT</a>
</dd>
<dd>
<a href="#Mw_Constants_h__enum_">enum;</a>
<a href="#Mw_Constants_h__MwDIRECTORY_TYPE">MwDIRECTORY_TYPE</a>
</dd>
<dd>
<a href="#Mw_Constants_h__MwMB_ICONMASK">MwMB_ICONMASK</a>
@@ -299,6 +299,15 @@
<dt>
<a href="#Mw_Milsko_h">Mw/Milsko.h</a>
</dt>
<dt>
<a href="#Mw_String_h">Mw/String.h</a>
</dt>
<dd>
<a href="#Mw_String_h__MwStringDupliacte">MwStringDupliacte</a>
</dd>
<dd>
<a href="#Mw_String_h__MwStringConcat">MwStringConcat</a>
</dd>
<dt>
<a href="#Mw_StringDefs_h">Mw/StringDefs.h</a>
</dt>
@@ -368,12 +377,21 @@
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxInsertMultiple">MwListBoxInsertMultiple</a>
</dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxVaInsert">MwListBoxVaInsert</a>
</dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxVaInsertMultiple">MwListBoxVaInsertMultiple</a>
</dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxDelete">MwListBoxDelete</a>
</dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxGet">MwListBoxGet</a>
</dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxSetWidth">MwListBoxSetWidth</a>
</dd>
<dt>
<a href="#Mw_Widget_Menu_h">Mw/Widget/Menu.h</a>
</dt>
@@ -537,7 +555,7 @@
</dd>
</dl>
<hr>
<pre id="Mw_Constants_h__enum_"><B><FONT COLOR="#228B22">enum</FONT></B>;</pre>
<pre id="Mw_Constants_h__MwDIRECTORY_TYPE"><B><FONT COLOR="#228B22">enum</FONT></B> MwDIRECTORY_TYPE;</pre>
<dl>
<dd>
Directory entry type.
@@ -2258,6 +2276,62 @@
</dt>
</dl>
<hr>
<h2 align="center" id="Mw_String_h">Mw/String.h</h2>
<dl>
<dt>
String utilities.
</dt>
</dl>
<hr>
<pre id="Mw_String_h__MwStringDupliacte">MWDECL <B><FONT COLOR="#228B22">char</FONT></B>* <B><FONT COLOR="#0000FF">MwStringDupliacte</FONT></B> (
<B><FONT COLOR="#228B22">const</FONT></B> <B><FONT COLOR="#228B22">char</FONT></B>* str
);</pre>
<dl>
<dd>
Duplicates a string.
</dd>
<dt>
Parameter <code>str</code>
</dt>
<dd>
String.
</dd>
<dt>
Returns
</dt>
<dd>
String.
</dd>
</dl>
<hr>
<pre id="Mw_String_h__MwStringConcat">MWDECL <B><FONT COLOR="#228B22">char</FONT></B>* <B><FONT COLOR="#0000FF">MwStringConcat</FONT></B> (
<B><FONT COLOR="#228B22">const</FONT></B> <B><FONT COLOR="#228B22">char</FONT></B>* str1,
<B><FONT COLOR="#228B22">const</FONT></B> <B><FONT COLOR="#228B22">char</FONT></B>* str2
);</pre>
<dl>
<dd>
Concatenates 2 strings.
</dd>
<dt>
Parameter <code>str1</code>
</dt>
<dd>
String.
</dd>
<dt>
Parameter <code>str2</code>
</dt>
<dd>
String.
</dd>
<dt>
Returns
</dt>
<dd>
String.
</dd>
</dl>
<hr>
<h2 align="center" id="Mw_StringDefs_h">Mw/StringDefs.h</h2>
<dl>
<dt>
@@ -2446,8 +2520,8 @@
<pre id="Mw_Widget_ListBox_h__MwListBoxInsert">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxInsert</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index,
<B><FONT COLOR="#228B22">const</FONT></B> <B><FONT COLOR="#228B22">char</FONT></B>* text,
MwLLPixmap pixmap
MwLLPixmap pixmap,
...
);</pre>
<dl>
<dd>
@@ -2465,26 +2539,26 @@
<dd>
Index.
</dd>
<dt>
Parameter <code>text</code>
</dt>
<dd>
Text.
</dd>
<dt>
Parameter <code>pixmap</code>
</dt>
<dd>
Pixmap.
</dd>
<dt>
Parameter <code>...</code>
</dt>
<dd>
Text.
</dd>
</dl>
<hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxInsertMultiple">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxInsertMultiple</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index,
<B><FONT COLOR="#228B22">char</FONT></B>** text,
<B><FONT COLOR="#228B22">int</FONT></B> count,
MwLLPixmap* pixmap,
<B><FONT COLOR="#228B22">int</FONT></B> count
...
);</pre>
<dl>
<dd>
@@ -2503,10 +2577,10 @@
Index.
</dd>
<dt>
Parameter <code>text</code>
Parameter <code>count</code>
</dt>
<dd>
Text.
Count.
</dd>
<dt>
Parameter <code>pixmap</code>
@@ -2514,12 +2588,91 @@
<dd>
Pixmap.
</dd>
<dt>
Parameter <code>...</code>
</dt>
<dd>
Text.
</dd>
</dl>
<hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxVaInsert">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxVaInsert</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index,
MwLLPixmap pixmap,
va_list va
);</pre>
<dl>
<dd>
Inserts item on the listbox.
</dd>
<dt>
Parameter <code>handle</code>
</dt>
<dd>
Widget.
</dd>
<dt>
Parameter <code>index</code>
</dt>
<dd>
Index.
</dd>
<dt>
Parameter <code>pixmap</code>
</dt>
<dd>
Pixmap.
</dd>
<dt>
Parameter <code>va</code>
</dt>
<dd>
Text.
</dd>
</dl>
<hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxVaInsertMultiple">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxVaInsertMultiple</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index,
<B><FONT COLOR="#228B22">int</FONT></B> count,
MwLLPixmap* pixmap,
va_list va
);</pre>
<dl>
<dd>
Inserts multiple items on the listbox.
</dd>
<dt>
Parameter <code>handle</code>
</dt>
<dd>
Widget.
</dd>
<dt>
Parameter <code>index</code>
</dt>
<dd>
Index.
</dd>
<dt>
Parameter <code>count</code>
</dt>
<dd>
Count.
</dd>
<dt>
Parameter <code>pixmap</code>
</dt>
<dd>
Pixmap.
</dd>
<dt>
Parameter <code>va</code>
</dt>
<dd>
Text.
</dd>
</dl>
<hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxDelete">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxDelete</FONT></B> (
@@ -2572,6 +2725,35 @@
</dd>
</dl>
<hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxSetWidth">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxSetWidth</FONT></B> (
MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index,
<B><FONT COLOR="#228B22">int</FONT></B> width
);</pre>
<dl>
<dd>
Sets an item width of the listbox.
</dd>
<dt>
Parameter <code>handle</code>
</dt>
<dd>
Widget.
</dd>
<dt>
Parameter <code>index</code>
</dt>
<dd>
Column index.
</dd>
<dt>
Parameter <code>width</code>
</dt>
<dd>
Width.
</dd>
</dl>
<hr>
<h2 align="center" id="Mw_Widget_Menu_h">Mw/Widget/Menu.h</h2>
<dl>
<dt>

View File

@@ -25,13 +25,29 @@ void activate(MwWidget handle, void* user, void* call) {
int main() {
MwWidget lb;
int len = sizeof(harvard) / sizeof(harvard[0]) - 1;
char** list = malloc(sizeof(*list) * len);
int i;
wmain = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480,
MwNtitle, "listbox",
NULL);
lb = MwCreateWidget(MwListBoxClass, "listbox", wmain, 5, 5, 630, 470);
for(i = 0; i < len; i++) {
list[i] = malloc(16);
sprintf(list[i], "%d", (int)strlen(harvard[i]));
}
MwAddUserHandler(lb, MwNactivateHandler, activate, NULL);
MwListBoxInsertMultiple(lb, -1, (char**)harvard, NULL, sizeof(harvard) / sizeof(harvard[0]) - 1);
MwListBoxInsert(lb, -1, NULL, "Harvard sentences", "Length", NULL);
MwListBoxInsertMultiple(lb, -1, len, NULL, (char**)harvard, (char**)list, NULL);
MwVaApply(lb,
MwNhasHeading, 1,
NULL);
MwListBoxSetWidth(lb, 0, -64);
for(i = 0; i < len; i++) free(list[i]);
free(list);
MwLoop(wmain);
}

View File

@@ -41,7 +41,7 @@ enum MwALIGNMENT {
/*!
* %brief Directory entry type
*/
enum {
enum MwDIRECTORY_TYPE {
MwDIRECTORY_FILE = 0,
MwDIRECTORY_DIRECTORY
};

View File

@@ -20,6 +20,7 @@
#define MwNbold "Ibold"
#define MwNmain "Imain"
#define MwNleftPadding "IleftPadding"
#define MwNhasHeading "IhasHeading"
#define MwNtitle "Stitle"
#define MwNtext "Stext"

View File

@@ -121,7 +121,7 @@ struct _MwViewport {
};
struct _MwListBoxEntry {
char* name;
char** name;
MwLLPixmap pixmap;
};
@@ -132,6 +132,7 @@ struct _MwListBox {
int selected;
unsigned long click_time;
int pressed;
int* width;
};
struct _MwSizeHints {

View File

@@ -23,20 +23,39 @@ MWDECL MwClass MwListBoxClass;
* %brief Inserts item on the listbox
* %param handle Widget
* %param index Index
* %param text Text
* %param pixmap Pixmap
* %param ... Text
*/
MWDECL void MwListBoxInsert(MwWidget handle, int index, const char* text, MwLLPixmap pixmap);
MWDECL void MwListBoxInsert(MwWidget handle, int index, MwLLPixmap pixmap, ...); /* VA_HINT:pixmap */
/*!
* %brief Inserts multiple items on the listbox
* %param handle Widget
* %param index Index
* %param text Text
* %param pixmap Pixmap
* %param count Count
* %param pixmap Pixmap
* %param ... Text
*/
MWDECL void MwListBoxInsertMultiple(MwWidget handle, int index, char** text, MwLLPixmap* pixmap, int count);
MWDECL void MwListBoxInsertMultiple(MwWidget handle, int index, int count, MwLLPixmap* pixmap, ...); /* VA_HINT:pixmap */
/*!
* %brief Inserts item on the listbox
* %param handle Widget
* %param index Index
* %param pixmap Pixmap
* %param va Text
*/
MWDECL void MwListBoxVaInsert(MwWidget handle, int index, MwLLPixmap pixmap, va_list va);
/*!
* %brief Inserts multiple items on the listbox
* %param handle Widget
* %param index Index
* %param count Count
* %param pixmap Pixmap
* %param va Text
*/
MWDECL void MwListBoxVaInsertMultiple(MwWidget handle, int index, int count, MwLLPixmap* pixmap, va_list va);
/*!
* %brief Deletes item from the listbox
@@ -53,6 +72,14 @@ MWDECL void MwListBoxDelete(MwWidget handle, int index);
*/
MWDECL const char* MwListBoxGet(MwWidget handle, int index);
/*!
* %brief Sets an item width of the listbox
* %param handle Widget
* %param index Column index
* %param width Width
*/
MWDECL void MwListBoxSetWidth(MwWidget handle, int index, int width);
#ifdef __cplusplus
}
#endif

View File

@@ -33,6 +33,7 @@ class Base {
/* END AUTOGENERATE */
Base(void);
Base(MwClass widget_class, const char* widget_name, MwOO::Base* parent, int x, int y, int w, int h);
Base(MwWidget widget, int gc = 0);
~Base(void);

View File

@@ -8,10 +8,13 @@ namespace MwOO {
class ListBox : public MwOO::Base {
public:
ListBox(const char* widget_name, MwOO::Base* parent, int x, int y, int w, int h);
void Insert(int index, const char* text, MwLLPixmap pixmap);
void InsertMultiple(int index, char** text, MwLLPixmap* pixmap, int count);
void Insert(int index, MwLLPixmap pixmap, ...);
void InsertMultiple(int index, int count, MwLLPixmap* pixmap, ...);
void VaInsert(int index, MwLLPixmap pixmap, va_list va);
void VaInsertMultiple(int index, int count, MwLLPixmap* pixmap, va_list va);
void Delete(int index);
const char* Get(int index);
void SetWidth(int index, int width);
void SetLeftPadding(int value);
int GetLeftPadding(void);
void SetBackground(const char* value);

View File

@@ -15,6 +15,11 @@ MwOO::Base::Base(MwWidget widget, int gc){
this->SetHandler();
}
MwOO::Base::Base(void){
this->widget = NULL;
this->can_be_gc = 0;
}
MwOO::Base::~Base(void){
if(this->can_be_gc) MwDestroyWidget(this->widget);
}

View File

@@ -5,18 +5,42 @@
MwOO::ListBox::ListBox(const char* widget_name, MwOO::Base* parent, int x, int y, int w, int h) : MwOO::Base(MwListBoxClass, widget_name, parent, x, y, w, h){
}
void MwOO::ListBox::Insert(int index, const char* text, MwLLPixmap pixmap){
MwListBoxInsert(this->widget, index, text, pixmap);
void MwOO::ListBox::Insert(int index, MwLLPixmap pixmap, ...){
va_list va;
va_start(va, pixmap);
MwListBoxVaInsert(this->widget, index, pixmap, va);
va_end(va);
}
void MwOO::ListBox::InsertMultiple(int index, char** text, MwLLPixmap* pixmap, int count){
MwListBoxInsertMultiple(this->widget, index, text, pixmap, count);
void MwOO::ListBox::InsertMultiple(int index, int count, MwLLPixmap* pixmap, ...){
va_list va;
va_start(va, pixmap);
MwListBoxVaInsertMultiple(this->widget, index, count, pixmap, va);
va_end(va);
}
void MwOO::ListBox::VaInsert(int index, MwLLPixmap pixmap, va_list va){
MwListBoxVaInsert(this->widget, index, pixmap, va);
}
void MwOO::ListBox::VaInsertMultiple(int index, int count, MwLLPixmap* pixmap, va_list va){
MwListBoxVaInsertMultiple(this->widget, index, count, pixmap, va);
}
void MwOO::ListBox::Delete(int index){
MwListBoxDelete(this->widget, index);
}
const char* MwOO::ListBox::Get(int index){
return MwListBoxGet(this->widget, index);
const char* ret;
ret = MwListBoxGet(this->widget, index);
return ret;
}
void MwOO::ListBox::SetWidth(int index, int width){
MwListBoxSetWidth(this->widget, index, width);
}
void MwOO::ListBox::SetLeftPadding(int value){
MwSetInteger(this->widget, MwNleftPadding, value);
}

View File

@@ -6,8 +6,11 @@ MwOO::Menu::Menu(const char* widget_name, MwOO::Base* parent, int x, int y, int
}
MwMenu MwOO::Menu::Add(MwMenu menu, const char* name){
return MwMenuAdd(this->widget, menu, name);
MwMenu ret;
ret = MwMenuAdd(this->widget, menu, name);
return ret;
}
void MwOO::Menu::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, value);
}

View File

@@ -8,12 +8,17 @@ MwOO::OpenGL::OpenGL(const char* widget_name, MwOO::Base* parent, int x, int y,
void MwOO::OpenGL::MakeCurrent(void){
MwOpenGLMakeCurrent(this->widget);
}
void* MwOO::OpenGL::GetProcAddress(const char* name){
return MwOpenGLGetProcAddress(this->widget, name);
void* ret;
ret = MwOpenGLGetProcAddress(this->widget, name);
return ret;
}
void MwOO::OpenGL::SwapBuffer(void){
MwOpenGLSwapBuffer(this->widget);
}
void MwOO::OpenGL::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, value);
}

View File

@@ -6,8 +6,11 @@ MwOO::ScrollBar::ScrollBar(const char* widget_name, MwOO::Base* parent, int x, i
}
int MwOO::ScrollBar::GetVisibleLength(void){
return MwScrollBarGetVisibleLength(this->widget);
int ret;
ret = MwScrollBarGetVisibleLength(this->widget);
return ret;
}
void MwOO::ScrollBar::SetAreaShown(int value){
MwSetInteger(this->widget, MwNareaShown, value);
}

View File

@@ -8,6 +8,7 @@ MwOO::SubMenu::SubMenu(const char* widget_name, MwOO::Base* parent, int x, int y
void MwOO::SubMenu::Appear(MwMenu menu, MwPoint* point){
MwSubMenuAppear(this->widget, menu, point);
}
void MwOO::SubMenu::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, value);
}

View File

@@ -6,11 +6,15 @@ MwOO::Viewport::Viewport(const char* widget_name, MwOO::Base* parent, int x, int
}
MwOO::Base MwOO::Viewport::GetViewport(void){
return MwOO::Base(MwViewportGetViewport(this->widget));
MwOO::Base ret;
ret = MwOO::Base(MwViewportGetViewport(this->widget));
return ret;
}
void MwOO::Viewport::SetSize(int w, int h){
MwViewportSetSize(this->widget, w, h);
}
void MwOO::Viewport::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, value);
}

View File

@@ -8,18 +8,27 @@ MwOO::Vulkan::Vulkan(const char* widget_name, MwOO::Base* parent, int x, int y,
void MwOO::Vulkan::EnableExtension(void){
MwVulkanEnableExtension(this->widget);
}
void MwOO::Vulkan::EnableLayer(void){
MwVulkanEnableLayer(this->widget);
}
void MwOO::Vulkan::Configure(void){
MwVulkanConfigure(this->widget);
}
void* MwOO::Vulkan::GetField(MwVulkanField field, MwErrorEnum* out){
return MwVulkanGetField(this->widget, field, out);
void* ret;
ret = MwVulkanGetField(this->widget, field, out);
return ret;
}
VkBool32 MwOO::Vulkan::Supported(void){
return MwVulkanSupported(this->widget);
VkBool32 ret;
ret = MwVulkanSupported(this->widget);
return ret;
}
void MwOO::Vulkan::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, value);
}

View File

@@ -8,6 +8,7 @@ MwOO::Window::Window(const char* widget_name, MwOO::Base* parent, int x, int y,
void MwOO::Window::MakeBorderless(int toggle){
MwWindowMakeBorderless(this->widget, toggle);
}
void MwOO::Window::SetTitle(const char* value){
MwSetText(this->widget, MwNtitle, value);
}

View File

@@ -3,15 +3,54 @@
#include "../../external/stb_ds.h"
static int get_first_entry(MwListBox lb) {
static int get_first_entry(MwWidget handle, MwListBox lb) {
int st = 0;
int y = MwGetInteger(handle, MwNhasHeading) ? 1 : 0;
st = MwGetInteger(lb->vscroll, MwNvalue);
st = st * (MwGetInteger(lb->vscroll, MwNmaxValue) - MwGetInteger(lb->vscroll, MwNareaShown)) / MwGetInteger(lb->vscroll, MwNmaxValue);
if(st < 0) st = 0;
if(st < y) st = y;
return st;
}
static int get_col_width(MwListBox lb, int ind) {
int total = MwGetInteger(lb->frame, MwNwidth);
int wid, i;
if(arrlen(lb->width) <= ind) {
wid = 0;
} else {
wid = lb->width[ind];
}
if(wid > 0) return wid;
if(wid == 0) {
for(i = 0; i < arrlen(lb->width) && i < ind; i++) {
int w = lb->width[i];
if(w < 0) {
total -= total + w;
} else if(wid > 0) {
total -= w;
}
}
return total;
}
if(wid < 0) {
for(i = 0; i < arrlen(lb->width) && i < ind; i++) {
int w = lb->width[i];
if(w < 0) {
total -= total + w;
} else if(wid > 0) {
total -= w;
}
}
return total + wid;
}
return 0;
}
static void vscroll_changed(MwWidget handle, void* user, void* call) {
MwListBox lb = handle->parent->internal;
@@ -33,7 +72,7 @@ static void frame_mouse_down(MwWidget handle, void* user, void* call) {
int y = MwDefaultBorderWidth;
int h = MwGetInteger(handle, MwNheight);
st = get_first_entry(lb);
st = get_first_entry(handle->parent, lb);
for(i = 0; i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
if(y <= m->point.y && m->point.y <= (y + MwTextHeight(handle, "M"))) {
unsigned long t;
@@ -74,7 +113,7 @@ static void frame_mouse_move(MwWidget handle, void* user, void* call) {
int y = MwDefaultBorderWidth;
int h = MwGetInteger(handle, MwNheight);
st = get_first_entry(lb);
st = get_first_entry(handle->parent, lb);
for(i = 0; i < (h - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
if(y <= p->y && p->y <= (y + MwTextHeight(handle, "M"))) {
lb->selected = st + i;
@@ -103,17 +142,18 @@ static void frame_draw(MwWidget handle) {
p.x = MwDefaultBorderWidth + MwGetInteger(handle->parent, MwNleftPadding);
p.y = MwDefaultBorderWidth;
st = get_first_entry(lb);
st = get_first_entry(handle->parent, lb);
for(i = st; i < arrlen(lb->list) && i < st + (r.height - MwDefaultBorderWidth * 2) / MwTextHeight(handle, "M"); i++) {
int selected = lb->selected == i ? 1 : 0;
int j;
if(selected) {
MwRect r2;
r2.x = 0;
r2.y = p.y;
r2.width = r.width;
r2.height = MwTextHeight(handle, lb->list[i].name);
r2.height = MwTextHeight(handle, "M");
MwDrawRect(handle, &r2, text);
}
if(lb->list[i].pixmap != NULL) {
@@ -125,9 +165,14 @@ static void frame_draw(MwWidget handle) {
r2.height = h;
MwLLDrawPixmap(handle->lowlevel, &r2, lb->list[i].pixmap);
}
p.y += MwTextHeight(handle, lb->list[i].name) / 2;
MwDrawText(handle, &p, lb->list[i].name, 0, MwALIGNMENT_BEGINNING, selected ? base : text);
p.y += MwTextHeight(handle, lb->list[i].name) / 2;
p.y += MwTextHeight(handle, "M") / 2;
p.x = 0;
for(j = 0; j < arrlen(lb->list[i].name); j++) {
p.x += MwDefaultBorderWidth;
if(strlen(lb->list[i].name[j]) > 0) MwDrawText(handle, &p, lb->list[i].name[j], 0, MwALIGNMENT_BEGINNING, selected ? base : text);
p.x += get_col_width(lb, j) - MwDefaultBorderWidth;
}
p.y += MwTextHeight(handle, "M") / 2;
}
MwDrawFrame(handle, &r, base, 1);
@@ -140,7 +185,10 @@ static void resize(MwWidget handle) {
MwListBox lb = handle->internal;
int w = MwGetInteger(handle, MwNwidth);
int h = MwGetInteger(handle, MwNheight);
int ih;
int ih, y;
y = MwGetInteger(handle, MwNhasHeading) ? (MwTextHeight(handle, "M") + MwDefaultBorderWidth * 2) : 0;
if(lb->vscroll == NULL) {
lb->vscroll = MwVaCreateWidget(MwScrollBarClass, "vscroll", handle, w - 16, 0, 16, h, NULL);
MwAddUserHandler(lb->vscroll, MwNchangedHandler, vscroll_changed, NULL);
@@ -152,8 +200,10 @@ static void resize(MwWidget handle) {
MwNheight, h,
NULL);
}
h -= y;
if(lb->frame == NULL) {
lb->frame = MwVaCreateWidget(MwFrameClass, "frame", handle, 0, 0, w - 16, h, NULL);
lb->frame = MwVaCreateWidget(MwFrameClass, "frame", handle, 0, y, w - 16, h, NULL);
lb->frame->draw_inject = frame_draw;
MwAddUserHandler(lb->frame, MwNmouseDownHandler, frame_mouse_down, NULL);
MwAddUserHandler(lb->frame, MwNmouseUpHandler, frame_mouse_up, NULL);
@@ -161,11 +211,12 @@ static void resize(MwWidget handle) {
} else {
MwVaApply(lb->frame,
MwNx, 0,
MwNy, 0,
MwNy, y,
MwNwidth, w - 16,
MwNheight, h,
NULL);
}
h -= MwDefaultBorderWidth * 2;
ih = arrlen(lb->list);
if(ih == 0) ih = 1;
@@ -188,8 +239,10 @@ static int create(MwWidget handle) {
lb->list = NULL;
lb->selected = -1;
lb->click_time = 0;
lb->width = NULL;
MwSetInteger(handle, MwNleftPadding, 0);
MwSetInteger(handle, MwNhasHeading, 0);
return 0;
}
@@ -201,12 +254,15 @@ static void destroy(MwWidget handle) {
free(lb->list[i].name);
}
arrfree(lb->list);
arrfree(lb->width);
free(handle->internal);
}
static void draw(MwWidget handle) {
MwRect r;
MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground));
MwLLColor text = MwParseColor(handle, MwGetText(handle, MwNforeground));
MwListBox lb = handle->internal;
r.x = 0;
r.y = 0;
@@ -214,16 +270,43 @@ static void draw(MwWidget handle) {
r.height = MwGetInteger(handle, MwNheight);
MwDrawRect(handle, &r, base);
if(MwGetInteger(handle, MwNhasHeading) && arrlen(lb->list) > 0) {
MwPoint p;
int i;
int x = 0;
r.width -= 16;
for(i = 0; i < arrlen(lb->list[0].name); i++) {
r.x = x;
r.y = 0;
r.width = get_col_width(lb, i);
r.height = MwDefaultBorderWidth * 2 + MwTextHeight(handle, "M");
MwDrawFrame(handle, &r, base, 0);
x += MwDefaultBorderWidth;
p.x = x;
p.y = r.y + r.height / 2;
MwDrawText(handle, &p, lb->list[0].name[i], 0, MwALIGNMENT_BEGINNING, text);
x += r.width + MwDefaultBorderWidth;
}
}
MwLLFreeColor(text);
MwLLFreeColor(base);
}
static void prop_change(MwWidget handle, const char* prop) {
if(strcmp(prop, MwNwidth) == 0 || strcmp(prop, MwNheight) == 0) resize(handle);
if(strcmp(prop, MwNwidth) == 0 || strcmp(prop, MwNheight) == 0 || strcmp(prop, MwNhasHeading) == 0) resize(handle);
if(strcmp(prop, MwNleftPadding) == 0) {
MwListBox lb = handle->internal;
MwForceRender(lb->frame);
}
if(strcmp(prop, MwNhasHeading) == 0) {
MwForceRender(handle);
}
}
MwClassRec MwListBoxClassRec = {
@@ -244,11 +327,16 @@ MwClassRec MwListBoxClassRec = {
NULL};
MwClass MwListBoxClass = &MwListBoxClassRec;
void MwListBoxInsert(MwWidget handle, int index, const char* text, MwLLPixmap pixmap) {
void MwListBoxVaInsert(MwWidget handle, int index, MwLLPixmap pixmap, va_list va) {
MwListBox lb = handle->internal;
MwListBoxEntry entry;
char* name;
entry.name = MwStringDupliacte(text);
entry.name = NULL;
while((name = va_arg(va, char*)) != NULL) {
name = MwStringDupliacte(name);
arrput(entry.name, name);
}
entry.pixmap = pixmap;
@@ -261,17 +349,30 @@ void MwListBoxInsert(MwWidget handle, int index, const char* text, MwLLPixmap pi
}
}
void MwListBoxInsertMultiple(MwWidget handle, int index, char** text, MwLLPixmap* pixmap, int count) {
void MwListBoxVaInsertMultiple(MwWidget handle, int index, int count, MwLLPixmap* pixmap, va_list va) {
int i;
MwListBox lb = handle->internal;
int old;
char*** vlist = NULL;
char** list;
if(index == -1) index = arrlen(lb->list);
old = index;
while((list = va_arg(va, char**)) != NULL) {
arrput(vlist, list);
}
for(i = 0; i < count; i++) {
MwListBoxEntry entry;
char* name;
int j;
entry.name = MwStringDupliacte(text[i]);
entry.name = NULL;
for(j = 0; j < arrlen(vlist); j++) {
if(vlist[j][i] == NULL) continue;
name = MwStringDupliacte(vlist[j][i]);
arrput(entry.name, name);
}
entry.pixmap = NULL;
if(pixmap != NULL) entry.pixmap = pixmap[i];
@@ -280,6 +381,8 @@ void MwListBoxInsertMultiple(MwWidget handle, int index, char** text, MwLLPixmap
index++;
}
arrfree(vlist);
resize(handle);
if(old < (MwGetInteger(lb->vscroll, MwNvalue) + MwGetInteger(lb->vscroll, MwNareaShown))) {
MwForceRender(lb->frame);
@@ -288,9 +391,13 @@ void MwListBoxInsertMultiple(MwWidget handle, int index, char** text, MwLLPixmap
void MwListBoxDelete(MwWidget handle, int index) {
MwListBox lb = handle->internal;
int i;
if(index == -1) index = arrlen(lb->list) - 1;
free(lb->list[index].name);
for(i = 0; i < arrlen(lb->list[index].name); i++) {
free(lb->list[index].name[i]);
}
arrfree(lb->list[index].name);
arrdel(lb->list, index);
if(lb->selected >= arrlen(lb->list)) {
@@ -306,11 +413,36 @@ void MwListBoxDelete(MwWidget handle, int index) {
}
}
void MwListBoxInsertMultiple(MwWidget handle, int index, int count, MwLLPixmap* pixmap, ...) {
va_list va;
va_start(va, pixmap);
MwListBoxVaInsertMultiple(handle, index, count, pixmap, va);
va_end(va);
}
void MwListBoxInsert(MwWidget handle, int index, MwLLPixmap pixmap, ...) {
va_list va;
va_start(va, pixmap);
MwListBoxVaInsert(handle, index, pixmap, va);
va_end(va);
}
const char* MwListBoxGet(MwWidget handle, int index) {
MwListBox lb = handle->internal;
if(index < 0) return NULL;
if(index >= arrlen(lb->list)) return NULL;
return lb->list[index].name;
return lb->list[index].name[0];
}
void MwListBoxSetWidth(MwWidget handle, int index, int width) {
MwListBox lb = handle->internal;
while(((index + 1) - arrlen(lb->width)) > 0) arrput(lb->width, 0);
lb->width[index] = width;
MwForceRender(handle);
MwForceRender(lb->frame);
}

View File

@@ -143,7 +143,7 @@ sub scan_dir {
$l =~ s/[ \t]+/ /g;
$l =~ s/[ ]*(?:\\|,[ ]*)$//g;
$l =~ s/[ ]*(?:;|\{.*)[ ]*$/;/g;
$l =~ s/[ ]*(?:;( \/\*.+)?|\{.*)[ ]*$/;/g;
if (!($l =~ /^#/)) {
$l =~ s/\(([^\)]+)\)/arguments($1)/ge;
}
@@ -153,7 +153,7 @@ sub scan_dir {
$sl =~ s/=.+$//g;
$sl =~ s/^#[^ ]+(?:[ \t]+([^ \(]+)(?:.+$))?/\1/;
$sl =~ s/^.+[ \t]+([^ ]+)[ \t]*\(.+\);?$/\1/g;
$sl =~ s/^.+[ \t]+([^ ]+);$/\1/g;
$sl =~ s/^.+[ \t]+([^ ]+);( \/\*.+)?$/\1/g;
$id = replace_special($current . "__" . $sl);
$attr = " id=\"$id\"";

View File

@@ -44,6 +44,7 @@ foreach my $f (@files) {
my @props = ();
my @methods = ();
my @omethods = ();
my @comments = ();
my @names = ();
my @args = ();
@@ -55,12 +56,13 @@ foreach my $f (@files) {
@props = split(/[ \t]+/, $1);
}
elsif ($l =~
/^MWDECL[ \t]+(.+)[ \t]+Mw${name}([^ \t]+)[ \t]*\([^,\)]+(?:,(.*))?\);$/
/^MWDECL[ \t]+(.+)[ \t]+Mw${name}([^ \t]+)[ \t]*\([^,\)]+(?:,(.*))?\);(?: \/\*(.+))?$/
)
{
my $arg = $3;
my $ret = $1;
my $nam = $2;
my $com = $4;
$arg =~ s/^[ \t]+//;
$arg =~ s/[ \t]+$//;
@@ -72,6 +74,7 @@ foreach my $f (@files) {
push(@methods, "$ret $nam($arg)");
push(@omethods, "$ret MwOO::${name}::$nam($arg)");
push(@names, $nam);
push(@comments, $com);
my @al = split(/[ \t]*,[ \t]*/, $arg);
my $i = 0;
@@ -153,6 +156,7 @@ foreach my $f (@files) {
my $i = 0;
foreach my $m (@omethods) {
my $end = "";
my $suffix = "";
if ($m =~ /^MwWidget[ \t]+/) {
my $l = $m;
$l =~ s/^MwWidget([ \t]+)/MwOO::Base\1/;
@@ -161,23 +165,46 @@ foreach my $f (@files) {
else {
print(OUT "$m\{\n");
}
if ($args[$i] =~ /\.\.\./) {
print(OUT " va_list va;\n");
}
if (!($m =~ /^void[ \t]+/)) {
my $rettype = $m;
$rettype =~ s/^MwWidget([ \t]+)/MwOO::Base\1/;
$rettype =~ s/ MwOO::.+\)$//;
print(OUT " $rettype ret;\n");
}
if ($args[$i] =~ /\.\.\./) {
my $p = $comments[$i];
$p =~ /VA_HINT:([^ ]+)/;
print(OUT " va_start(va, $1);\n");
$suffix = "Va";
}
if ($m =~ /^void[ \t]+/) {
print(OUT " Mw${name}" . $names[$i]);
print(OUT " Mw${name}$suffix" . $names[$i]);
}
elsif ($m =~ /^MwWidget[ \t]+/) {
print(OUT " return MwOO::Base(Mw${name}" . $names[$i]);
print(OUT " ret = MwOO::Base(Mw${name}$suffix" . $names[$i]);
$end = ")";
}
else {
print(OUT " return Mw${name}" . $names[$i]);
print(OUT " ret = Mw${name}$suffix" . $names[$i]);
}
if ($args[$i] eq "void") {
print(OUT "(this->widget)$end;\n");
}
else {
print(OUT "(this->widget, " . $args[$i] . ")$end;\n");
my $p = $args[$i];
$p =~ s/\.\.\./va/;
print(OUT "(this->widget, " . $p . ")$end;\n");
}
print(OUT "}\n");
if ($args[$i] =~ /\.\.\./) {
print(OUT " va_end(va);\n");
}
if (!($m =~ /^void[ \t]+/)) {
print(OUT " return ret;\n");
}
print(OUT "}\n\n");
$i++;
}
foreach my $prop (@props) {