fancy listbox

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

View file

@ -19,6 +19,7 @@ clean:
del /f /q src\color.obj del /f /q src\color.obj
del /f /q src\directory.obj del /f /q src\directory.obj
del /f /q src\messagebox.obj del /f /q src\messagebox.obj
del /f /q src\string.obj
del /f /q src\boldfont.obj del /f /q src\boldfont.obj
del /f /q external\ds.obj del /f /q external\ds.obj
del /f /q external\image.obj del /f /q external\image.obj
@ -66,8 +67,8 @@ clean:
del /f /q src\Mw.dll del /f /q src\Mw.dll
del /f /q oosrc\MwOO.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 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\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 $(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 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 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\color.obj
del /f /q src\directory.obj del /f /q src\directory.obj
del /f /q src\messagebox.obj del /f /q src\messagebox.obj
del /f /q src\string.obj
del /f /q src\boldfont.obj del /f /q src\boldfont.obj
del /f /q external\ds.obj del /f /q external\ds.obj
del /f /q external\image.obj del /f /q external\image.obj
@ -66,8 +67,8 @@ clean:
del /f /q src\Mw.dll del /f /q src\Mw.dll
del /f /q oosrc\MwOO.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 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\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 $(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 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/color.obj
%erase src/directory.obj %erase src/directory.obj
%erase src/messagebox.obj %erase src/messagebox.obj
%erase src/string.obj
%erase src/boldfont.obj %erase src/boldfont.obj
%erase external/ds.obj %erase external/ds.obj
%erase external/image.obj %erase external/image.obj
@ -65,8 +66,8 @@ clean: .SYMBOLIC
%erase src/Mw.dll %erase src/Mw.dll
%erase oosrc/MwOO.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 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/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 $(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 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=$@ $< $(CC) $(CFLAGS) -fo=$@ $<
src/messagebox.obj: src/messagebox.c src/messagebox.obj: src/messagebox.c
$(CC) $(CFLAGS) -fo=$@ $< $(CC) $(CFLAGS) -fo=$@ $<
src/string.obj: src/string.c
$(CC) $(CFLAGS) -fo=$@ $<
src/boldfont.obj: src/boldfont.c src/boldfont.obj: src/boldfont.c
$(CC) $(CFLAGS) -fo=$@ $< $(CC) $(CFLAGS) -fo=$@ $<
external/ds.obj: external/ds.c external/ds.obj: external/ds.c

View file

@ -24,7 +24,7 @@
<a href="#Mw_Constants_h__MwDEFAULT">MwDEFAULT</a> <a href="#Mw_Constants_h__MwDEFAULT">MwDEFAULT</a>
</dd> </dd>
<dd> <dd>
<a href="#Mw_Constants_h__enum_">enum;</a> <a href="#Mw_Constants_h__MwDIRECTORY_TYPE">MwDIRECTORY_TYPE</a>
</dd> </dd>
<dd> <dd>
<a href="#Mw_Constants_h__MwMB_ICONMASK">MwMB_ICONMASK</a> <a href="#Mw_Constants_h__MwMB_ICONMASK">MwMB_ICONMASK</a>
@ -299,6 +299,15 @@
<dt> <dt>
<a href="#Mw_Milsko_h">Mw/Milsko.h</a> <a href="#Mw_Milsko_h">Mw/Milsko.h</a>
</dt> </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> <dt>
<a href="#Mw_StringDefs_h">Mw/StringDefs.h</a> <a href="#Mw_StringDefs_h">Mw/StringDefs.h</a>
</dt> </dt>
@ -368,12 +377,21 @@
<dd> <dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxInsertMultiple">MwListBoxInsertMultiple</a> <a href="#Mw_Widget_ListBox_h__MwListBoxInsertMultiple">MwListBoxInsertMultiple</a>
</dd> </dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxVaInsert">MwListBoxVaInsert</a>
</dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxVaInsertMultiple">MwListBoxVaInsertMultiple</a>
</dd>
<dd> <dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxDelete">MwListBoxDelete</a> <a href="#Mw_Widget_ListBox_h__MwListBoxDelete">MwListBoxDelete</a>
</dd> </dd>
<dd> <dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxGet">MwListBoxGet</a> <a href="#Mw_Widget_ListBox_h__MwListBoxGet">MwListBoxGet</a>
</dd> </dd>
<dd>
<a href="#Mw_Widget_ListBox_h__MwListBoxSetWidth">MwListBoxSetWidth</a>
</dd>
<dt> <dt>
<a href="#Mw_Widget_Menu_h">Mw/Widget/Menu.h</a> <a href="#Mw_Widget_Menu_h">Mw/Widget/Menu.h</a>
</dt> </dt>
@ -537,7 +555,7 @@
</dd> </dd>
</dl> </dl>
<hr> <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> <dl>
<dd> <dd>
Directory entry type. Directory entry type.
@ -2258,6 +2276,62 @@
</dt> </dt>
</dl> </dl>
<hr> <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> <h2 align="center" id="Mw_StringDefs_h">Mw/StringDefs.h</h2>
<dl> <dl>
<dt> <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> ( <pre id="Mw_Widget_ListBox_h__MwListBoxInsert">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxInsert</FONT></B> (
MwWidget handle, MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index, <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> );</pre>
<dl> <dl>
<dd> <dd>
@ -2465,26 +2539,26 @@
<dd> <dd>
Index. Index.
</dd> </dd>
<dt>
Parameter <code>text</code>
</dt>
<dd>
Text.
</dd>
<dt> <dt>
Parameter <code>pixmap</code> Parameter <code>pixmap</code>
</dt> </dt>
<dd> <dd>
Pixmap. Pixmap.
</dd> </dd>
<dt>
Parameter <code>...</code>
</dt>
<dd>
Text.
</dd>
</dl> </dl>
<hr> <hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxInsertMultiple">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxInsertMultiple</FONT></B> ( <pre id="Mw_Widget_ListBox_h__MwListBoxInsertMultiple">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxInsertMultiple</FONT></B> (
MwWidget handle, MwWidget handle,
<B><FONT COLOR="#228B22">int</FONT></B> index, <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, MwLLPixmap* pixmap,
<B><FONT COLOR="#228B22">int</FONT></B> count ...
);</pre> );</pre>
<dl> <dl>
<dd> <dd>
@ -2503,10 +2577,10 @@
Index. Index.
</dd> </dd>
<dt> <dt>
Parameter <code>text</code> Parameter <code>count</code>
</dt> </dt>
<dd> <dd>
Text. Count.
</dd> </dd>
<dt> <dt>
Parameter <code>pixmap</code> Parameter <code>pixmap</code>
@ -2514,12 +2588,91 @@
<dd> <dd>
Pixmap. Pixmap.
</dd> </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> <dt>
Parameter <code>count</code> Parameter <code>count</code>
</dt> </dt>
<dd> <dd>
Count. Count.
</dd> </dd>
<dt>
Parameter <code>pixmap</code>
</dt>
<dd>
Pixmap.
</dd>
<dt>
Parameter <code>va</code>
</dt>
<dd>
Text.
</dd>
</dl> </dl>
<hr> <hr>
<pre id="Mw_Widget_ListBox_h__MwListBoxDelete">MWDECL <B><FONT COLOR="#228B22">void</FONT></B> <B><FONT COLOR="#0000FF">MwListBoxDelete</FONT></B> ( <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> </dd>
</dl> </dl>
<hr> <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> <h2 align="center" id="Mw_Widget_Menu_h">Mw/Widget/Menu.h</h2>
<dl> <dl>
<dt> <dt>

View file

@ -25,13 +25,29 @@ void activate(MwWidget handle, void* user, void* call) {
int main() { int main() {
MwWidget lb; 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, wmain = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480,
MwNtitle, "listbox", MwNtitle, "listbox",
NULL); NULL);
lb = MwCreateWidget(MwListBoxClass, "listbox", wmain, 5, 5, 630, 470); 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); 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); MwLoop(wmain);
} }

View file

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

View file

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

View file

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

View file

@ -23,20 +23,39 @@ MWDECL MwClass MwListBoxClass;
* %brief Inserts item on the listbox * %brief Inserts item on the listbox
* %param handle Widget * %param handle Widget
* %param index Index * %param index Index
* %param text Text
* %param pixmap Pixmap * %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 * %brief Inserts multiple items on the listbox
* %param handle Widget * %param handle Widget
* %param index Index * %param index Index
* %param text Text
* %param pixmap Pixmap
* %param count Count * %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 * %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); 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 #ifdef __cplusplus
} }
#endif #endif

View file

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

View file

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

View file

@ -15,6 +15,11 @@ MwOO::Base::Base(MwWidget widget, int gc){
this->SetHandler(); this->SetHandler();
} }
MwOO::Base::Base(void){
this->widget = NULL;
this->can_be_gc = 0;
}
MwOO::Base::~Base(void){ MwOO::Base::~Base(void){
if(this->can_be_gc) MwDestroyWidget(this->widget); 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){ 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){ void MwOO::ListBox::Insert(int index, MwLLPixmap pixmap, ...){
MwListBoxInsert(this->widget, index, text, 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){ void MwOO::ListBox::Delete(int index){
MwListBoxDelete(this->widget, index); MwListBoxDelete(this->widget, index);
} }
const char* MwOO::ListBox::Get(int 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){ void MwOO::ListBox::SetLeftPadding(int value){
MwSetInteger(this->widget, MwNleftPadding, 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){ 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){ void MwOO::Menu::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, 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){ void MwOO::OpenGL::MakeCurrent(void){
MwOpenGLMakeCurrent(this->widget); MwOpenGLMakeCurrent(this->widget);
} }
void* MwOO::OpenGL::GetProcAddress(const char* name){ 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){ void MwOO::OpenGL::SwapBuffer(void){
MwOpenGLSwapBuffer(this->widget); MwOpenGLSwapBuffer(this->widget);
} }
void MwOO::OpenGL::SetBackground(const char* value){ void MwOO::OpenGL::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, 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){ int MwOO::ScrollBar::GetVisibleLength(void){
return MwScrollBarGetVisibleLength(this->widget); int ret;
ret = MwScrollBarGetVisibleLength(this->widget);
return ret;
} }
void MwOO::ScrollBar::SetAreaShown(int value){ void MwOO::ScrollBar::SetAreaShown(int value){
MwSetInteger(this->widget, MwNareaShown, 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){ void MwOO::SubMenu::Appear(MwMenu menu, MwPoint* point){
MwSubMenuAppear(this->widget, menu, point); MwSubMenuAppear(this->widget, menu, point);
} }
void MwOO::SubMenu::SetBackground(const char* value){ void MwOO::SubMenu::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, 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){ 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){ void MwOO::Viewport::SetSize(int w, int h){
MwViewportSetSize(this->widget, w, h); MwViewportSetSize(this->widget, w, h);
} }
void MwOO::Viewport::SetBackground(const char* value){ void MwOO::Viewport::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, 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){ void MwOO::Vulkan::EnableExtension(void){
MwVulkanEnableExtension(this->widget); MwVulkanEnableExtension(this->widget);
} }
void MwOO::Vulkan::EnableLayer(void){ void MwOO::Vulkan::EnableLayer(void){
MwVulkanEnableLayer(this->widget); MwVulkanEnableLayer(this->widget);
} }
void MwOO::Vulkan::Configure(void){ void MwOO::Vulkan::Configure(void){
MwVulkanConfigure(this->widget); MwVulkanConfigure(this->widget);
} }
void* MwOO::Vulkan::GetField(MwVulkanField field, MwErrorEnum* out){ 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){ VkBool32 MwOO::Vulkan::Supported(void){
return MwVulkanSupported(this->widget); VkBool32 ret;
ret = MwVulkanSupported(this->widget);
return ret;
} }
void MwOO::Vulkan::SetBackground(const char* value){ void MwOO::Vulkan::SetBackground(const char* value){
MwSetText(this->widget, MwNbackground, 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){ void MwOO::Window::MakeBorderless(int toggle){
MwWindowMakeBorderless(this->widget, toggle); MwWindowMakeBorderless(this->widget, toggle);
} }
void MwOO::Window::SetTitle(const char* value){ void MwOO::Window::SetTitle(const char* value){
MwSetText(this->widget, MwNtitle, value); MwSetText(this->widget, MwNtitle, value);
} }

View file

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

View file

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