changeset 118:5962894873f1 3.2

Add new constants introduced in dwindows 3.2 to the go bindings. Switch to using dw.SIZE_AUTO instead of -1 when packing boxes. Update dwib/dwibtest with the same changes as the core dw/dwtest/dwootest: Switch to using C.uinptr_t to save handles instead of unsafe.Pointer. We can't use C.uintptr_t between dw and dwib packages... so use uintptr type to convert between the two C.uinptr_t subtypes. Hopefully this is safe.
author Brian Smith <brian@dbsoft.org>
date Mon, 20 Dec 2021 07:57:52 -0600
parents 8727f47ee3ce
children b9082c35aef3
files dw/dw.go dwib/dwib.go dwib/dwibglue.c dwibtest/dwibtest.go dwootest/dwootest.go dwtest/dwtest.go
diffstat 6 files changed, 100 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/dw/dw.go	Fri Nov 12 06:54:27 2021 -0600
+++ b/dw/dw.go	Mon Dec 20 07:57:52 2021 -0600
@@ -237,8 +237,13 @@
 var MENU_AUTO uint = C.DW_MENU_AUTO
 var MENU_POPUP uint = ^uint(0)
 
+/* Miscellanseous constants */
 var PERCENT_INDETERMINATE uint = ^uint(0)
 
+var SIZE_AUTO = C.DW_SIZE_AUTO
+
+var DIR_SEPARATOR = C.DW_DIR_SEPARATOR
+
 /* Return value error codes */
 var ERROR_NONE = C.DW_ERROR_NONE
 var ERROR_GENERAL = C.DW_ERROR_GENERAL
@@ -485,6 +490,11 @@
 	return h.Value().(HANDLE)
 }
 
+// Convert a uintptr to a HWND (use with care)
+func UINTPTR_TO_HWND(ptr uintptr) HWND {
+	return HWND{C.uintptr_t(ptr)}
+}
+
 // Convert a HANDLE to a UINTPTR, mostly used for display purposes
 func HANDLE_TO_UINTPTR(handle HANDLE) uintptr {
 	return uintptr(handle.GetHandle())
--- a/dwib/dwib.go	Fri Nov 12 06:54:27 2021 -0600
+++ b/dwib/dwib.go	Mon Dec 20 07:57:52 2021 -0600
@@ -13,14 +13,14 @@
 import "unsafe"
 import "hg.code.sf.net/p/godwindows/code.hg/dw"
 
-type DWIB unsafe.Pointer
+type DWIB C.uintptr_t
 
 // Loads a window with the specified name from an XML tree.
 func Load(handle DWIB, name string) dw.HWND {
 	cname := C.CString(name)
 	defer C.free(unsafe.Pointer(cname))
 
-	return dw.HANDLE_TO_HWND(dw.POINTER_TO_HANDLE(dw.POINTER(C.goib_load(unsafe.Pointer(handle), cname))))
+	return dw.UINTPTR_TO_HWND(uintptr(C.goib_load(C.uintptr_t(handle), cname)))
 }
 
 // Loads a part of a window layout specified by dataname with the specified window name from an XML tree and packs it into box at index.
@@ -30,7 +30,7 @@
 	cdataname := C.CString(dataname)
 	defer C.free(unsafe.Pointer(cdataname))
 
-	return int(C.goib_load_at_index(unsafe.Pointer(handle), cname, cdataname, unsafe.Pointer(dw.HANDLE_TO_POINTER(window)), unsafe.Pointer(dw.HANDLE_TO_POINTER(box)), C.int(index)))
+	return int(C.goib_load_at_index(C.uintptr_t(handle), cname, cdataname, C.uintptr_t(dw.HANDLE_TO_UINTPTR(window)), C.uintptr_t(dw.HANDLE_TO_UINTPTR(box)), C.int(index)))
 }
 
 // Loads a part of a window layout specified by dataname with the specified window name from an XML tree and packs it into box at index.
@@ -40,7 +40,7 @@
 
 // Shows a window loaded with dwib.Load() using the stored settings.
 func Show(handle dw.HANDLE) {
-	C.goib_show(unsafe.Pointer(dw.HANDLE_TO_POINTER(handle)))
+	C.goib_show(C.uintptr_t(dw.HANDLE_TO_UINTPTR(handle)))
 }
 
 // Loads an XML templates and returns a handle to the XML tree.
@@ -53,7 +53,7 @@
 
 // Closes a handle to an XML tree returned by dwib.Open*() and frees the memory associated with the tree.
 func Close(handle DWIB) {
-	C.goib_close(unsafe.Pointer(handle))
+	C.goib_close(C.uintptr_t(handle))
 }
 
 // Update the location of the image root for locating image files.
@@ -87,7 +87,7 @@
 	cdataname := C.CString(dataname)
 	defer C.free(unsafe.Pointer(cdataname))
 
-	return dw.POINTER_TO_HANDLE(dw.POINTER(C.goib_window_get_handle(unsafe.Pointer(dw.HANDLE_TO_POINTER(handle)), cdataname)))
+	return dw.UINTPTR_TO_HWND(uintptr(C.goib_window_get_handle(C.uintptr_t(dw.HANDLE_TO_UINTPTR(handle)), cdataname)))
 }
 
 // Gets the window handle for a named widget.
--- a/dwib/dwibglue.c	Fri Nov 12 06:54:27 2021 -0600
+++ b/dwib/dwibglue.c	Mon Dec 20 07:57:52 2021 -0600
@@ -2,27 +2,27 @@
 #include <stdlib.h>
 #include <string.h>
 
-static void *goib_load(void *handle, char *name)
+static uintptr_t goib_load(uintptr_t handle, char *name)
 {
-   return (void *)dwib_load((DWIB)handle, name);
+   return (uintptr_t)dwib_load((DWIB)handle, name);
 }
 
-static int goib_load_at_index(void *handle, char *name, char *dataname, void *window, void *box, int index)
+static int goib_load_at_index(uintptr_t handle, char *name, char *dataname, uintptr_t window, uintptr_t box, int index)
 {
    return dwib_load_at_index((DWIB)handle, name, dataname, (HWND)window, (HWND)box, index);
 }
 
-static void goib_show(void *window)
+static void goib_show(uintptr_t window)
 {
    dwib_show((HWND)window);
 }
 
-static void *goib_open(char *filename)
+static uintptr_t goib_open(char *filename)
 {
-   return (void *)dwib_open(filename);
+   return (uintptr_t)dwib_open(filename);
 }
 
-static void goib_close(void *handle)
+static void goib_close(uintptr_t handle)
 {
    dwib_close((DWIB)handle);
 }
@@ -37,7 +37,7 @@
    return dwib_locale_set(loc);
 }
 
-static void *goib_window_get_handle(void *handle, char *dataname)
+static uintptr_t goib_window_get_handle(uintptr_t handle, char *dataname)
 {
-   return (void *)dwib_window_get_handle((HWND)handle, dataname);
+   return (uintptr_t)dwib_window_get_handle((HWND)handle, dataname);
 }
--- a/dwibtest/dwibtest.go	Fri Nov 12 06:54:27 2021 -0600
+++ b/dwibtest/dwibtest.go	Mon Dec 20 07:57:52 2021 -0600
@@ -39,12 +39,12 @@
 
 	/* Load the interface XML file */
 	handle := dwib.Open("example.xml")
-	if handle == nil && len(SRCROOT) > 0 {
+	if handle == 0 && len(SRCROOT) > 0 {
 		handle = dwib.Open(fmt.Sprintf("%s/example.xml", SRCROOT))
 	}
 
 	/* Show an error if it fails to load */
-	if handle == nil {
+	if handle == 0 {
 		dw.MessageBox(APP_NAME, dw.MB_OK|dw.MB_ERROR, "Unable to load the interface XML.")
 		return
 	}
--- a/dwootest/dwootest.go	Fri Nov 12 06:54:27 2021 -0600
+++ b/dwootest/dwootest.go	Mon Dec 20 07:57:52 2021 -0600
@@ -670,15 +670,15 @@
 
 	copypastefield.SetLimit(260)
 
-	browsebox.PackStart(copypastefield, -1, -1, dw.TRUE, dw.FALSE, 4)
+	browsebox.PackStart(copypastefield, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 4)
 
 	copybutton := dw.ButtonNew("Copy", 0)
 
-	browsebox.PackStart(copybutton, -1, -1, dw.FALSE, dw.FALSE, 0)
+	browsebox.PackStart(copybutton, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 
 	pastebutton := dw.ButtonNew("Paste", 0)
 
-	browsebox.PackStart(pastebutton, -1, -1, dw.FALSE, dw.FALSE, 0)
+	browsebox.PackStart(pastebutton, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 
 	/* Archive Name */
 	stext := dw.TextNew("File to browse", 0)
@@ -808,9 +808,9 @@
 	hbox := dw.BoxNew(dw.HORZ, 1)
 	notebookbox2.PackStart(hbox, 100, 20, dw.TRUE, dw.FALSE, 1)
 	status1 = dw.StatusTextNew("", 0)
-	hbox.PackStart(status1, 100, -1, dw.TRUE, dw.FALSE, 1)
+	hbox.PackStart(status1, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 	status2 = dw.StatusTextNew("", 0)
-	hbox.PackStart(status2, 100, -1, dw.TRUE, dw.FALSE, 1)
+	hbox.PackStart(status2, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 	/* a box with combobox and button */
 	hbox = dw.BoxNew(dw.HORZ, 1)
 	notebookbox2.PackStart(hbox, 100, 25, dw.TRUE, dw.FALSE, 1)
@@ -821,12 +821,12 @@
 	rendcombo.Append("File Display")
 	label := dw.TextNew("Image X:", 100)
 	label.SetStyle(dw.DT_VCENTER|dw.DT_CENTER, dw.DT_VCENTER|dw.DT_CENTER)
-	hbox.PackStart(label, -1, 25, dw.FALSE, dw.TRUE, 0)
+	hbox.PackStart(label, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 	imagexspin = dw.SpinButtonNew("20", 1021)
 	hbox.PackStart(imagexspin, 25, 25, dw.TRUE, dw.TRUE, 0)
 	label = dw.TextNew("Y:", 100)
 	label.SetStyle(dw.DT_VCENTER|dw.DT_CENTER, dw.DT_VCENTER|dw.DT_CENTER)
-	hbox.PackStart(label, -1, 25, dw.FALSE, dw.TRUE, 0)
+	hbox.PackStart(label, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 	imageyspin = dw.SpinButtonNew("20", 1021)
 	hbox.PackStart(imageyspin, 25, 25, dw.TRUE, dw.TRUE, 0)
 	imagexspin.SetLimits(2000, 0)
@@ -834,12 +834,12 @@
 	imagexspin.SetPos(20)
 	imageyspin.SetPos(20)
 	imagestretchcheck = dw.CheckButtonNew("Stretch", 1021)
-	hbox.PackStart(imagestretchcheck, -1, 25, dw.FALSE, dw.TRUE, 0)
+	hbox.PackStart(imagestretchcheck, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 
 	button1 := dw.ButtonNew("Refresh", 1223)
-	hbox.PackStart(button1, -1, 25, dw.FALSE, dw.TRUE, 0)
+	hbox.PackStart(button1, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 	button2 := dw.ButtonNew("Print", 1224)
-	hbox.PackStart(button2, -1, 25, dw.FALSE, dw.TRUE, 0)
+	hbox.PackStart(button2, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 
 	/* Pre-create the scrollbars so we can query their sizes */
 	vscrollbar = dw.ScrollbarNew(dw.VERT, 50)
@@ -879,11 +879,11 @@
 	textboxA.PackStart(textbox2, 10, 10, dw.TRUE, dw.TRUE, 0)
 	textbox2.SetFont(FIXEDFONT)
 	/* create horizonal scrollbar */
-	textboxA.PackStart(hscrollbar, -1, -1, dw.TRUE, dw.FALSE, 0)
+	textboxA.PackStart(hscrollbar, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 
 	/* create vertical scrollbar */
 	vscrollbox = dw.BoxNew(dw.VERT, 0)
-	vscrollbox.PackStart(vscrollbar, -1, -1, dw.FALSE, dw.TRUE, 0)
+	vscrollbox.PackStart(vscrollbar, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.TRUE, 0)
 	/* Pack an area of empty space 14x14 pixels */
 	vscrollbox.PackStart(dw.NOHWND, vscrollbarwidth, hscrollbarheight, dw.FALSE, dw.FALSE, 0)
 	pagebox.PackStart(vscrollbox, 0, 0, dw.FALSE, dw.TRUE, 0)
@@ -1007,7 +1007,7 @@
 
 	/* and a status area to see whats going on */
 	tree_status := dw.StatusTextNew("", 0)
-	notebookbox3.PackStart(tree_status, 100, -1, dw.TRUE, dw.FALSE, 1)
+	notebookbox3.PackStart(tree_status, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 
 	/* set up our signal trappers... */
 	tree.ConnectItemContext(func(window dw.HTREE, text string, x int, y int, itemdata dw.POINTER) int {
@@ -1050,23 +1050,23 @@
 	hbox := dw.BoxNew(dw.HORZ, 0)
 
 	checkbox := dw.CheckButtonNew("Word wrap", 0)
-	hbox.PackStart(checkbox, -1, -1, dw.FALSE, dw.TRUE, 1)
+	hbox.PackStart(checkbox, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.TRUE, 1)
 	text := dw.TextNew("Foreground:", 0)
 	text.SetStyle(dw.DT_VCENTER, dw.DT_VCENTER)
-	hbox.PackStart(text, -1, -1, dw.FALSE, dw.TRUE, 1)
+	hbox.PackStart(text, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.TRUE, 1)
 	mlefore := color_combobox()
-	hbox.PackStart(mlefore, 150, -1, dw.TRUE, dw.FALSE, 1)
+	hbox.PackStart(mlefore, 150, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 	text = dw.TextNew("Background:", 0)
 	text.SetStyle(dw.DT_VCENTER, dw.DT_VCENTER)
-	hbox.PackStart(text, -1, -1, dw.FALSE, dw.TRUE, 1)
+	hbox.PackStart(text, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.TRUE, 1)
 	mleback := color_combobox()
-	hbox.PackStart(mleback, 150, -1, dw.TRUE, dw.FALSE, 1)
+	hbox.PackStart(mleback, 150, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 	checkbox.Set(dw.TRUE)
 	text = dw.TextNew("Font:", 0)
 	text.SetStyle(dw.DT_VCENTER, dw.DT_VCENTER)
-	hbox.PackStart(text, -1, -1, dw.FALSE, dw.TRUE, 1)
+	hbox.PackStart(text, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.TRUE, 1)
 	fontsize := dw.SpinButtonNew("9", 0)
-	hbox.PackStart(fontsize, -1, -1, dw.FALSE, dw.FALSE, 1)
+	hbox.PackStart(fontsize, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 1)
 	fontsize.SetLimits(100, 5)
 	fontsize.SetPos(9)
 	fontname := dw.ComboboxNew("Default", 0)
@@ -1080,8 +1080,8 @@
 	fontname.Append("Times New Roman Bold")
 	fontname.Append("Times New Roman Italic")
 	fontname.Append("Times New Roman Bold Italic")
-	hbox.PackStart(fontname, 150, -1, dw.TRUE, dw.FALSE, 1)
-	notebookbox4.PackStart(hbox, -1, -1, dw.TRUE, dw.FALSE, 1)
+	hbox.PackStart(fontname, 150, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
+	notebookbox4.PackStart(hbox, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 
 	/* now a container area under this box */
 	container := dw.ContainerNew(100, dw.TRUE)
@@ -1089,7 +1089,7 @@
 
 	/* and a status area to see whats going on */
 	container_status := dw.StatusTextNew("", 0)
-	notebookbox4.PackStart(container_status, 100, -1, dw.TRUE, dw.FALSE, 1)
+	notebookbox4.PackStart(container_status, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 
 	container.SetColumnTitle("Test")
 	container.FileSystemSetup(flags, titles)
@@ -1305,10 +1305,10 @@
 	notebookbox5.PackStart(combox, 25, 200, dw.TRUE, dw.FALSE, 0)
 	combobox1 := dw.ComboboxNew("fred", 0) /* no point in specifying an initial value */
 	combobox1.Append("fred")
-	combox.PackStart(combobox1, -1, -1, dw.TRUE, dw.FALSE, 0)
+	combox.PackStart(combobox1, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 
 	combobox2 := dw.ComboboxNew("joe", 0) /* no point in specifying an initial value */
-	combox.PackStart(combobox2, -1, -1, dw.TRUE, dw.FALSE, 0)
+	combox.PackStart(combobox2, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 	/* add LOTS of items */
 	fmt.Printf("before appending 500 items to combobox using dw_listbox_list_append()\n")
 	text := make([]string, 500)
@@ -1322,16 +1322,16 @@
 	combobox2.Insert("inserted item 5", 5)
 	/* make a spinbutton */
 	spinbutton := dw.SpinButtonNew("", 0) /* no point in specifying text */
-	combox.PackStart(spinbutton, -1, -1, dw.TRUE, dw.FALSE, 0)
+	combox.PackStart(spinbutton, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 	spinbutton.SetLimits(100, 1)
 	spinbutton.SetPos(30)
 
 	/* make a slider */
 	slider := dw.SliderNew(dw.FALSE, 11, 0) /* no point in specifying text */
-	combox.PackStart(slider, -1, -1, dw.TRUE, dw.FALSE, 0)
+	combox.PackStart(slider, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 
 	/* Pack the percent */
-	combox.PackStart(percent, -1, -1, dw.TRUE, dw.FALSE, 0)
+	combox.PackStart(percent, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 
 	/* Connect the handlers */
 	abutton1.ConnectClicked(func(window dw.HBUTTON) int { button_callback(combobox1, combobox2, spinbutton, cal); return dw.TRUE })
@@ -1397,14 +1397,14 @@
 
 		/* Add navigation buttons */
 		item := dw.ButtonNew("Back", 0)
-		hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0)
+		hbox.PackStart(item, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 		item.ConnectClicked(func(window dw.HBUTTON) int {
 			html.Action(dw.HTML_GOBACK)
 			return dw.FALSE
 		})
 
 		item = dw.ButtonNew("Forward", 0)
-		hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0)
+		hbox.PackStart(item, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 		item.ConnectClicked(func(window dw.HBUTTON) int {
 			html.Action(dw.HTML_GOFORWARD)
 			return dw.FALSE
@@ -1414,7 +1414,7 @@
 		hbox.PackStart(dw.NOHWND, 5, 1, dw.FALSE, dw.FALSE, 0)
 
 		item = dw.ButtonNew("Reload", 0)
-		hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0)
+		hbox.PackStart(item, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 		item.ConnectClicked(func(window dw.HBUTTON) int {
 			html.Action(dw.HTML_RELOAD)
 			return dw.FALSE
@@ -1422,10 +1422,10 @@
 
 		/* Put in some extra space */
 		hbox.PackStart(dw.NOHWND, 5, 1, dw.FALSE, dw.FALSE, 0)
-		hbox.PackStart(javascript, -1, -1, dw.TRUE, dw.FALSE, 0)
+		hbox.PackStart(javascript, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 
 		item = dw.ButtonNew("Run", 0)
-		hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0)
+		hbox.PackStart(item, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 		item.ConnectClicked(func(window dw.HBUTTON) int {
 			script := dw.Window_get_text(javascript)
 			html.JavascriptRun(script, nil)
@@ -1435,7 +1435,7 @@
 
 		notebookbox7.PackStart(html, 0, 100, dw.TRUE, dw.TRUE, 0)
 		htmlstatus := dw.StatusTextNew("HTML status loading...", 0)
-		notebookbox7.PackStart(htmlstatus, 100, -1, dw.TRUE, dw.FALSE, 1)
+		notebookbox7.PackStart(htmlstatus, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 
 		html.ConnectChanged(func(window dw.HHTML, status int, url string) int {
 			statusnames := []string{"none", "started", "redirect", "loading", "complete"}
@@ -1474,7 +1474,7 @@
 	notebookbox8.PackStart(scrollbox, 0, 0, dw.TRUE, dw.TRUE, 1)
 
 	abutton1 := dw.ButtonNew("Show Adjustments", 0)
-	scrollbox.PackStart(abutton1, -1, 30, dw.FALSE, dw.FALSE, 0)
+	scrollbox.PackStart(abutton1, dw.SIZE_AUTO, 30, dw.FALSE, dw.FALSE, 0)
 	abutton1.ConnectClicked(func(window dw.HBUTTON) int {
 		_, pos := scrollbox.GetPos()
 		_, rng := scrollbox.GetRange()
@@ -1511,7 +1511,7 @@
 	notebookbox9.PackStart(tmpbox, 0, 0, dw.TRUE, dw.TRUE, 1)
 
 	startbutton = dw.ButtonNew("Start Threads", 0)
-	tmpbox.PackStart(startbutton, -1, 30, dw.FALSE, dw.FALSE, 0)
+	tmpbox.PackStart(startbutton, dw.SIZE_AUTO, 30, dw.FALSE, dw.FALSE, 0)
 	/* Create the base threading components */
 	threadmle = dw.MLENew(0)
 	tmpbox.PackStart(threadmle, 1, 1, dw.TRUE, dw.TRUE, 0)
--- a/dwtest/dwtest.go	Fri Nov 12 06:54:27 2021 -0600
+++ b/dwtest/dwtest.go	Mon Dec 20 07:57:52 2021 -0600
@@ -907,7 +907,7 @@
 	statline := dw.POINTER_TO_HANDLE(data)
 
 	dw.Window_set_text(statline, fmt.Sprintf("DW_SIGNAL_CLICKED: Menu: %x Container context menu clicked", dw.HANDLE_TO_UINTPTR(hwnd)))
-	return FALSE;
+	return FALSE
 }
 
 func item_context_menu_new(text string, data dw.POINTER) dw.HMENUI {
@@ -1290,15 +1290,15 @@
 
 	dw.Entryfield_set_limit(copypastefield, 260)
 
-	dw.Box_pack_start(browsebox, copypastefield, -1, -1, dw.TRUE, dw.FALSE, 4)
+	dw.Box_pack_start(browsebox, copypastefield, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 4)
 
 	copybutton := dw.Button_new("Copy", 0)
 
-	dw.Box_pack_start(browsebox, copybutton, -1, -1, dw.FALSE, dw.FALSE, 0)
+	dw.Box_pack_start(browsebox, copybutton, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 
 	pastebutton := dw.Button_new("Paste", 0)
 
-	dw.Box_pack_start(browsebox, pastebutton, -1, -1, dw.FALSE, dw.FALSE, 0)
+	dw.Box_pack_start(browsebox, pastebutton, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.FALSE, 0)
 
 	/* Archive Name */
 	stext := dw.Text_new("File to browse", 0)
@@ -1375,9 +1375,9 @@
 	hbox := dw.Box_new(dw.HORZ, 1)
 	dw.Box_pack_start(notebookbox2, hbox, 100, 20, dw.TRUE, dw.FALSE, 1)
 	status1 = dw.Status_text_new("", 0)
-	dw.Box_pack_start(hbox, status1, 100, -1, dw.TRUE, dw.FALSE, 1)
+	dw.Box_pack_start(hbox, status1, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 	status2 = dw.Status_text_new("", 0)
-	dw.Box_pack_start(hbox, status2, 100, -1, dw.TRUE, dw.FALSE, 1)
+	dw.Box_pack_start(hbox, status2, 100, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 1)
 	/* a box with combobox and button */
 	hbox = dw.Box_new(dw.HORZ, 1)
 	dw.Box_pack_start(notebookbox2, hbox, 100, 25, dw.TRUE, dw.FALSE, 1)
@@ -1388,12 +1388,12 @@
 	dw.Listbox_append(rendcombo, "File Display")
 	label := dw.Text_new("Image X:", 100)
 	dw.Window_set_style(label, dw.DT_VCENTER|dw.DT_CENTER, dw.DT_VCENTER|dw.DT_CENTER)
-	dw.Box_pack_start(hbox, label, -1, 25, dw.FALSE, dw.TRUE, 0)
+	dw.Box_pack_start(hbox, label, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 	imagexspin = dw.Spinbutton_new("20", 1021)
 	dw.Box_pack_start(hbox, imagexspin, 25, 25, dw.TRUE, dw.TRUE, 0)
 	label = dw.Text_new("Y:", 100)
 	dw.Window_set_style(label, dw.DT_VCENTER|dw.DT_CENTER, dw.DT_VCENTER|dw.DT_CENTER)
-	dw.Box_pack_start(hbox, label, -1, 25, dw.FALSE, dw.TRUE, 0)
+	dw.Box_pack_start(hbox, label, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 	imageyspin = dw.Spinbutton_new("20", 1021)
 	dw.Box_pack_start(hbox, imageyspin, 25, 25, dw.TRUE, dw.TRUE, 0)
 	dw.Spinbutton_set_limits(imagexspin, 2000, 0)
@@ -1401,12 +1401,12 @@
 	dw.Spinbutton_set_pos(imagexspin, 20)
 	dw.Spinbutton_set_pos(imageyspin, 20)
 	imagestretchcheck = dw.Checkbox_new("Stretch", 1021)
-	dw.Box_pack_start(hbox, imagestretchcheck, -1, 25, dw.FALSE, dw.TRUE, 0)
+	dw.Box_pack_start(hbox, imagestretchcheck, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 
 	button1 := dw.Button_new("Refresh", 1223)
-	dw.Box_pack_start(hbox, button1, -1, 25, dw.FALSE, dw.TRUE, 0)
+	dw.Box_pack_start(hbox, button1, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 	button2 := dw.Button_new("Print", 1224)
-	dw.Box_pack_start(hbox, button2, -1, 25, dw.FALSE, dw.TRUE, 0)
+	dw.Box_pack_start(hbox, button2, dw.SIZE_AUTO, 25, dw.FALSE, dw.TRUE, 0)
 
 	/* Pre-create the scrollbars so we can query their sizes */
 	vscrollbar = dw.Scrollbar_new(dw.VERT, 50)
@@ -1446,11 +1446,11 @@
 	dw.Box_pack_start(textboxA, textbox2, 10, 10, dw.TRUE, dw.TRUE, 0)
 	dw.Window_set_font(textbox2, FIXEDFONT)
 	/* create horizonal scrollbar */
-	dw.Box_pack_start(textboxA, hscrollbar, -1, -1, dw.TRUE, dw.FALSE, 0)
+	dw.Box_pack_start(textboxA, hscrollbar, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.TRUE, dw.FALSE, 0)
 
 	/* create vertical scrollbar */
 	vscrollbox = dw.Box_new(dw.VERT, 0)
-	dw.Box_pack_start(vscrollbox, vscrollbar, -1, -1, dw.FALSE, dw.TRUE, 0)
+	dw.Box_pack_start(vscrollbox, vscrollbar, dw.SIZE_AUTO, dw.SIZE_AUTO, dw.FALSE, dw.TRUE, 0)
 	/* Pack an area of empty space 14x14 pixels */
 	dw.Box_pack_start(vscrollbox, dw.NOHWND, vscrollbarwidth, hscrollbarheight, dw.FALSE, dw.FALSE, 0)
 	dw.Box_pack_start(pagebox, vscrollbox, 0, 0, dw.FALSE, dw.TRUE, 0)
@@ -1502,7 +1502,7 @@
 
 	/* and a status area to see whats going on */
 	tree_status := dw.Status_text_new("", 0)
-	dw.Box_pack_start(notebookbox3, tree_status, 100, -1, TRUE, FALSE, 1)
+	dw.Box_pack_start(notebookbox3, tree_status, 100, dw.SIZE_AUTO, TRUE, FALSE, 1)
 
 	/* set up our signal trappers... */
 	dw.Signal_connect(tree, dw.SIGNAL_ITEM_CONTEXT, dw.SIGNAL_FUNC(item_context_cb), dw.HANDLE_TO_POINTER(tree_status))
@@ -1537,23 +1537,23 @@
 	hbox := dw.Box_new(dw.HORZ, 0)
 
 	checkbox := dw.Checkbox_new("Word wrap", 0)
-	dw.Box_pack_start(hbox, checkbox, -1, -1, FALSE, TRUE, 1)
+	dw.Box_pack_start(hbox, checkbox, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, TRUE, 1)
 	text := dw.Text_new("Foreground:", 0)
 	dw.Window_set_style(text, dw.DT_VCENTER, dw.DT_VCENTER)
-	dw.Box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1)
+	dw.Box_pack_start(hbox, text, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, TRUE, 1)
 	mlefore := color_combobox()
-	dw.Box_pack_start(hbox, mlefore, 150, -1, TRUE, FALSE, 1)
+	dw.Box_pack_start(hbox, mlefore, 150, dw.SIZE_AUTO, TRUE, FALSE, 1)
 	text = dw.Text_new("Background:", 0)
 	dw.Window_set_style(text, dw.DT_VCENTER, dw.DT_VCENTER)
-	dw.Box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1)
+	dw.Box_pack_start(hbox, text, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, TRUE, 1)
 	mleback := color_combobox()
-	dw.Box_pack_start(hbox, mleback, 150, -1, TRUE, FALSE, 1)
+	dw.Box_pack_start(hbox, mleback, 150, dw.SIZE_AUTO, TRUE, FALSE, 1)
 	dw.Checkbox_set(checkbox, TRUE)
 	text = dw.Text_new("Font:", 0)
 	dw.Window_set_style(text, dw.DT_VCENTER, dw.DT_VCENTER)
-	dw.Box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1)
+	dw.Box_pack_start(hbox, text, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, TRUE, 1)
 	fontsize := dw.Spinbutton_new("9", 0)
-	dw.Box_pack_start(hbox, fontsize, -1, -1, FALSE, FALSE, 1)
+	dw.Box_pack_start(hbox, fontsize, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, FALSE, 1)
 	dw.Spinbutton_set_limits(fontsize, 100, 5)
 	dw.Spinbutton_set_pos(fontsize, 9)
 	fontname := dw.Combobox_new("Default", 0)
@@ -1567,8 +1567,8 @@
 	dw.Listbox_append(fontname, "Times New Roman Bold")
 	dw.Listbox_append(fontname, "Times New Roman Italic")
 	dw.Listbox_append(fontname, "Times New Roman Bold Italic")
-	dw.Box_pack_start(hbox, fontname, 150, -1, TRUE, FALSE, 1)
-	dw.Box_pack_start(notebookbox4, hbox, -1, -1, TRUE, FALSE, 1)
+	dw.Box_pack_start(hbox, fontname, 150, dw.SIZE_AUTO, TRUE, FALSE, 1)
+	dw.Box_pack_start(notebookbox4, hbox, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 1)
 
 	dw.Window_set_data(hbox, "mlefore", dw.HANDLE_TO_POINTER(mlefore))
 	dw.Window_set_data(hbox, "mleback", dw.HANDLE_TO_POINTER(mleback))
@@ -1581,7 +1581,7 @@
 
 	/* and a status area to see whats going on */
 	container_status := dw.Status_text_new("", 0)
-	dw.Box_pack_start(notebookbox4, container_status, 100, -1, TRUE, FALSE, 1)
+	dw.Box_pack_start(notebookbox4, container_status, 100, dw.SIZE_AUTO, TRUE, FALSE, 1)
 
 	dw.Filesystem_set_column_title(container, "Test")
 	dw.Filesystem_setup(container, flags, titles)
@@ -1678,14 +1678,14 @@
 	dw.Box_pack_start(notebookbox5, combox, 25, 200, TRUE, FALSE, 0)
 	combobox1 = dw.Combobox_new("fred", 0) /* no point in specifying an initial value */
 	dw.Listbox_append(combobox1, "fred")
-	dw.Box_pack_start(combox, combobox1, -1, -1, TRUE, FALSE, 0)
+	dw.Box_pack_start(combox, combobox1, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 0)
 	/*
 	   dw_window_set_text( combobox, "initial value");
 	*/
 	dw.Signal_connect(combobox1, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(combobox_select_event_callback), nil)
 
 	combobox2 = dw.Combobox_new("joe", 0) /* no point in specifying an initial value */
-	dw.Box_pack_start(combox, combobox2, -1, -1, TRUE, FALSE, 0)
+	dw.Box_pack_start(combox, combobox2, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 0)
 	/*
 	   dw_window_set_text( combobox, "initial value");
 	*/
@@ -1703,17 +1703,17 @@
 	dw.Listbox_insert(combobox2, "inserted item 5", 5)
 	/* make a spinbutton */
 	spinbutton = dw.Spinbutton_new("", 0) /* no point in specifying text */
-	dw.Box_pack_start(combox, spinbutton, -1, -1, TRUE, FALSE, 0)
+	dw.Box_pack_start(combox, spinbutton, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 0)
 	dw.Spinbutton_set_limits(spinbutton, 100, 1)
 	dw.Spinbutton_set_pos(spinbutton, 30)
 	dw.Signal_connect(spinbutton, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(spinbutton_valuechanged_callback), nil)
 	/* make a slider */
 	slider = dw.Slider_new(FALSE, 11, 0) /* no point in specifying text */
-	dw.Box_pack_start(combox, slider, -1, -1, TRUE, FALSE, 0)
+	dw.Box_pack_start(combox, slider, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 0)
 	dw.Signal_connect(slider, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(slider_valuechanged_callback), nil)
 	/* make a percent */
 	percent = dw.Percent_new(0)
-	dw.Box_pack_start(combox, percent, -1, -1, TRUE, FALSE, 0)
+	dw.Box_pack_start(combox, percent, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 0)
 }
 
 func create_button(redraw bool) {
@@ -1761,34 +1761,34 @@
 
 		/* Add navigation buttons */
 		item := dw.Button_new("Back", 0)
-		dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0)
+		dw.Box_pack_start(hbox, item, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, FALSE, 0)
 		dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_back_clicked), dw.HANDLE_TO_POINTER(html))
 
 		item = dw.Button_new("Forward", 0)
-		dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0)
+		dw.Box_pack_start(hbox, item, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, FALSE, 0)
 		dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_forward_clicked), dw.HANDLE_TO_POINTER(html))
 
 		/* Put in some extra space */
 		dw.Box_pack_start(hbox, dw.NOHWND, 5, 1, FALSE, FALSE, 0)
 
 		item = dw.Button_new("Reload", 0)
-		dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0)
+		dw.Box_pack_start(hbox, item, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, FALSE, 0)
 		dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_reload_clicked), dw.HANDLE_TO_POINTER(html))
 
 		/* Put in some extra space */
 		dw.Box_pack_start(hbox, dw.NOHWND, 5, 1, FALSE, FALSE, 0)
-		dw.Box_pack_start(hbox, javascript, -1, -1, TRUE, FALSE, 0)
+		dw.Box_pack_start(hbox, javascript, dw.SIZE_AUTO, dw.SIZE_AUTO, TRUE, FALSE, 0)
 
 		item = dw.Button_new("Run", 0)
 		dw.Window_set_data(item, "javascript", dw.HANDLE_TO_POINTER(javascript))
-		dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0)
+		dw.Box_pack_start(hbox, item, dw.SIZE_AUTO, dw.SIZE_AUTO, FALSE, FALSE, 0)
 		dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_run_clicked), dw.HANDLE_TO_POINTER(html))
 		dw.Window_click_default(javascript, item)
 
 		dw.Box_pack_start(notebookbox7, html, 0, 100, TRUE, TRUE, 0)
 		dw.Html_url(html, "https://dbsoft.org/dw_help.php")
 		htmlstatus := dw.Status_text_new("HTML status loading...", 0)
-		dw.Box_pack_start(notebookbox7, htmlstatus, 100, -1, TRUE, FALSE, 1)
+		dw.Box_pack_start(notebookbox7, htmlstatus, 100, dw.SIZE_AUTO, TRUE, FALSE, 1)
 		dw.Signal_connect(html, dw.SIGNAL_HTML_CHANGED, dw.SIGNAL_FUNC(web_html_changed), dw.HANDLE_TO_POINTER(htmlstatus))
 		dw.Signal_connect(html, dw.SIGNAL_HTML_RESULT, dw.SIGNAL_FUNC(web_html_result), dw.HANDLE_TO_POINTER(javascript))
 	} else {
@@ -1806,7 +1806,7 @@
 	dw.Box_pack_start(notebookbox8, scrollbox, 0, 0, TRUE, TRUE, 1)
 
 	abutton1 := dw.Button_new("Show Adjustments", 0)
-	dw.Box_pack_start(scrollbox, abutton1, -1, 30, FALSE, FALSE, 0)
+	dw.Box_pack_start(scrollbox, abutton1, dw.SIZE_AUTO, 30, FALSE, FALSE, 0)
 	dw.Signal_connect(abutton1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(scrollbox_button_callback), nil)
 
 	for i = 0; i < MAX_WIDGETS; i++ {
@@ -1838,7 +1838,7 @@
 	dw.Box_pack_start(notebookbox9, tmpbox, 0, 0, dw.TRUE, dw.TRUE, 1)
 
 	startbutton = dw.Button_new("Start Threads", 0)
-	dw.Box_pack_start(tmpbox, startbutton, -1, 30, dw.FALSE, dw.FALSE, 0)
+	dw.Box_pack_start(tmpbox, startbutton, dw.SIZE_AUTO, 30, dw.FALSE, dw.FALSE, 0)
 	dw.Signal_connect(startbutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(start_threads_button_callback), nil)
 
 	/* Create the base threading components */