changeset 62:fff7c3e22421

Mostly finished and fixed the OO changes... some problems still exist and need to copy some methods for some types.:
author Brian Smith <brian@dbsoft.org>
date Thu, 14 Mar 2013 19:30:41 -0500
parents 1c4bbae2ab88
children cb3d23459780
files src/dw/dw.go src/dw/dwglue.c src/dwib/dwib.go src/dwtest/dwtest.go
diffstat 4 files changed, 487 insertions(+), 217 deletions(-) [+]
line wrap: on
line diff
--- a/src/dw/dw.go	Thu Mar 14 12:58:49 2013 -0500
+++ b/src/dw/dw.go	Thu Mar 14 19:30:41 2013 -0500
@@ -24,7 +24,7 @@
 type HENTRYFIELD struct {
    hwnd unsafe.Pointer
 }
-type HGENERIC struct {
+type HTEXT struct {
    hwnd unsafe.Pointer
 }
 type HTREE struct {
@@ -52,7 +52,7 @@
 type HSCROLLBOX struct {
    hwnd unsafe.Pointer
 }
-type HMENU struct {
+type HMENUITEM struct {
    hwnd unsafe.Pointer
 }
 type HLISTBOX struct {
@@ -76,10 +76,22 @@
 type HCALENDAR struct {
    hwnd unsafe.Pointer
 }
+type HBITMAP struct {
+   hwnd unsafe.Pointer
+}
+type HSPLITBAR struct {
+   hwnd unsafe.Pointer
+}
 type HTREEITEM struct {
     htreeitem unsafe.Pointer
     htree HANDLE
 }
+type HCONTINS struct {
+    ptr unsafe.Pointer
+    rowcount int
+    hcont HANDLE
+    filesystem bool
+}
 type HICN unsafe.Pointer
 type HTIMER struct {
     tid C.int
@@ -123,6 +135,7 @@
 var NOHPIXMAP HPIXMAP
 var NOHMENUI HMENUI
 var NOMENU HMENUI
+var NOHTREEITEM HTREEITEM
 var NOHICN HICN = nil
 
 // Import as much as we can from C
@@ -399,6 +412,10 @@
     return POINTER(handle.GetHandle());
 }
 
+func HNOTEPAGE_TO_UINT(handle HNOTEPAGE) uint {
+    return uint(handle.pageid);
+}
+
 func (window HWND) GetHandle() unsafe.Pointer {
    return window.hwnd;
 }
@@ -407,7 +424,7 @@
    return window.hwnd;
 }
 
-func (window HGENERIC) GetHandle() unsafe.Pointer {
+func (window HTEXT) GetHandle() unsafe.Pointer {
    return window.hwnd;
 }
 
@@ -443,7 +460,7 @@
    return window.hwnd;
 }
 
-func (window HMENU) GetHandle() unsafe.Pointer {
+func (window HMENUITEM) GetHandle() unsafe.Pointer {
    return window.hwnd;
 }
 
@@ -475,6 +492,22 @@
    return window.hwnd;
 }
 
+func (window HBITMAP) GetHandle() unsafe.Pointer {
+   return window.hwnd;
+}
+
+func (window HSPLITBAR) GetHandle() unsafe.Pointer {
+   return window.hwnd;
+}
+
+func (treeitem HTREEITEM) GetHandle() unsafe.Pointer {
+   return treeitem.htreeitem;
+}
+
+func (contins HCONTINS) GetHandle() unsafe.Pointer {
+   return contins.ptr;
+}
+
 func Init(newthread int) int {
     if len(os.Args) > 0 {
         var argc C.int = C.int(len(os.Args));
@@ -697,8 +730,8 @@
     C.go_window_set_tooltip(handle.GetHandle(), cbubbletext);
 }
 
-func Window_redraw(handle HWND) {
-    C.go_window_redraw(unsafe.Pointer(handle.hwnd));
+func Window_redraw(handle HANDLE) {
+    C.go_window_redraw(handle.GetHandle());
 }
 
 func (window HWND) Redraw() {
@@ -840,8 +873,8 @@
     C.dw_main_sleep(C.int(milliseconds));
 }
 
-func Box_new(btype int, pad int) HWND {
-    return HWND{C.go_box_new(C.int(btype), C.int(pad))};
+func Box_new(btype int, pad int) HBOX {
+    return HBOX{C.go_box_new(C.int(btype), C.int(pad))};
 }
 
 func Box_pack_at_index(box HANDLE, item HANDLE, index int, width int, height int, hsize int, vsize int, pad int) {
@@ -884,18 +917,18 @@
     return Box_unpack_at_index(window, index);
 }
 
-func Text_new(text string, id uint) HGENERIC {
+func Text_new(text string, id uint) HTEXT {
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
    
-   return HGENERIC{C.go_text_new(ctext, C.ulong(id))};
-}
-
-func Status_text_new(text string, id uint) HGENERIC {
+   return HTEXT{C.go_text_new(ctext, C.ulong(id))};
+}
+
+func Status_text_new(text string, id uint) HTEXT {
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
    
-   return HGENERIC{C.go_status_text_new(ctext, C.ulong(id))};
+   return HTEXT{C.go_status_text_new(ctext, C.ulong(id))};
 }
 
 func Entryfield_new(text string, id uint) HENTRYFIELD {
@@ -1025,14 +1058,14 @@
     return Menubar_new(window);
 }
 
-func Menu_append_item(menu HMENUI, title string, id uint, flags uint, end int, check int, submenu HMENUI) HMENU {
+func Menu_append_item(menu HMENUI, title string, id uint, flags uint, end int, check int, submenu HMENUI) HMENUITEM {
     ctitle := C.CString(title);
     defer C.free(unsafe.Pointer(ctitle));
 
-    return HMENU{C.go_menu_append_item(menu.hmenui, ctitle, C.ulong(id), C.ulong(flags), C.int(end), C.int(check), submenu.hmenui)};
-}
-
-func (menui HMENUI) AppendItem(title string, id uint, flags uint, end int, check int, submenu HMENUI) HMENU {
+    return HMENUITEM{C.go_menu_append_item(menu.hmenui, ctitle, C.ulong(id), C.ulong(flags), C.int(end), C.int(check), submenu.hmenui)};
+}
+
+func (menui HMENUI) AppendItem(title string, id uint, flags uint, end int, check int, submenu HMENUI) HMENUITEM {
     return Menu_append_item(menui, title, id, flags, end, check, submenu);
 }
 
@@ -1504,10 +1537,18 @@
     return HBOX{C.go_groupbox_new(btype, C.int(pad), ctitle)};
 }
 
+func GroupboxNew(btype C.int, pad int, title string) HBOX {
+    return Groupbox_new(btype, pad, title);
+}
+
 func Render_new(id uint) HRENDER {
     return HRENDER{C.go_render_new(C.ulong(id))};
 }
 
+func RenderNew(id uint) HRENDER {
+    return Render_new(id);
+}
+
 func Font_choose(currfont string) string {
     ccurrfont := C.CString(currfont);
     defer C.free(unsafe.Pointer(ccurrfont));
@@ -1530,13 +1571,13 @@
     Font_set_default(fontname);
 }
 
-func Font_text_extents_get(handle HWND, pixmap HPIXMAP, text string) (int, int) {
+func Font_text_extents_get(handle HANDLE, pixmap HPIXMAP, text string) (int, int) {
    var width, height C.int;
    
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
    
-   C.go_font_text_extents_get(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), ctext, &width, &height);
+   C.go_font_text_extents_get(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), ctext, &width, &height);
    return int(width), int(height);
 }
 
@@ -1579,12 +1620,12 @@
     return Pixmap_grab(window, id);
 }
 
-func Pixmap_bitblt(dest HWND, destp HPIXMAP, xdest int, ydest int, width int, height int, src HWND, srcp HPIXMAP, xsrc int, ysrc int) {
-    C.go_pixmap_bitblt(unsafe.Pointer(dest.hwnd), unsafe.Pointer(destp.hpixmap), C.int(xdest), C.int(ydest), C.int(width), C.int(height), unsafe.Pointer(src.hwnd), unsafe.Pointer(srcp.hpixmap), C.int(xsrc), C.int(ysrc)); 
-}
-
-func Pixmap_stretch_bitblt(dest HWND, destp HPIXMAP, xdest int, ydest int, width int, height int, src HWND, srcp HPIXMAP, xsrc int, ysrc int, srcwidth int, srcheight int) int {
-    return int(C.go_pixmap_stretch_bitblt(unsafe.Pointer(dest.hwnd), unsafe.Pointer(destp.hpixmap), C.int(xdest), C.int(ydest), C.int(width), C.int(height), unsafe.Pointer(src.hwnd), unsafe.Pointer(srcp.hpixmap), C.int(xsrc), C.int(ysrc), C.int(srcwidth), C.int(srcheight))); 
+func Pixmap_bitblt(dest HANDLE, destp HPIXMAP, xdest int, ydest int, width int, height int, src HANDLE, srcp HPIXMAP, xsrc int, ysrc int) {
+    C.go_pixmap_bitblt(dest.GetHandle(), unsafe.Pointer(destp.hpixmap), C.int(xdest), C.int(ydest), C.int(width), C.int(height), src.GetHandle(), unsafe.Pointer(srcp.hpixmap), C.int(xsrc), C.int(ysrc)); 
+}
+
+func Pixmap_stretch_bitblt(dest HANDLE, destp HPIXMAP, xdest int, ydest int, width int, height int, src HANDLE, srcp HPIXMAP, xsrc int, ysrc int, srcwidth int, srcheight int) int {
+    return int(C.go_pixmap_stretch_bitblt(dest.GetHandle(), unsafe.Pointer(destp.hpixmap), C.int(xdest), C.int(ydest), C.int(width), C.int(height), src.GetHandle(), unsafe.Pointer(srcp.hpixmap), C.int(xsrc), C.int(ysrc), C.int(srcwidth), C.int(srcheight))); 
 }
 
 func (window HWND) BitBltStretchPixmap(xdest int, ydest int, width int, height int, srcp HPIXMAP, xsrc int, ysrc int, srcwidth int, srcheight int) int {
@@ -1662,8 +1703,8 @@
     return Pixmap_height(pixmap);
 }
 
-func Draw_point(handle HWND, pixmap HPIXMAP, x int, y int) {
-    C.go_draw_point(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), C.int(x), C.int(y));
+func Draw_point(handle HANDLE, pixmap HPIXMAP, x int, y int) {
+    C.go_draw_point(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), C.int(x), C.int(y));
 }
 
 func (window HWND) DrawPoint(x int, y int) {
@@ -1674,8 +1715,8 @@
     Draw_point(NOHWND, pixmap, x, y);
 }
 
-func Draw_line(handle HWND, pixmap HPIXMAP, x1 int, y1 int, x2 int, y2 int) {
-    C.go_draw_line(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), C.int(x1), C.int(y1), C.int(x2), C.int(y2));
+func Draw_line(handle HANDLE, pixmap HPIXMAP, x1 int, y1 int, x2 int, y2 int) {
+    C.go_draw_line(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), C.int(x1), C.int(y1), C.int(x2), C.int(y2));
 }
 
 func (window HWND) DrawLine(x1 int, y1 int, x2 int, y2 int) {
@@ -1686,7 +1727,7 @@
     Draw_line(NOHWND, pixmap, x1, y1, x2, y2);
 }
 
-func Draw_polygon(handle HWND, pixmap HPIXMAP, flags int, x []int, y []int) {
+func Draw_polygon(handle HANDLE, pixmap HPIXMAP, flags int, x []int, y []int) {
     count := len(x);
     if len(y) < count {
         count = len(y);
@@ -1700,7 +1741,7 @@
     xHeader := (*reflect.SliceHeader)((unsafe.Pointer(&cx)));
     yHeader := (*reflect.SliceHeader)((unsafe.Pointer(&cy)));
 
-    C.go_draw_polygon(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), C.int(flags), C.int(count), (*C.int)(unsafe.Pointer(xHeader.Data)), (*C.int)(unsafe.Pointer(yHeader.Data)));
+    C.go_draw_polygon(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), C.int(flags), C.int(count), (*C.int)(unsafe.Pointer(xHeader.Data)), (*C.int)(unsafe.Pointer(yHeader.Data)));
 }
 
 func (window HWND) DrawPolygon(flags int, x []int, y []int) {
@@ -1711,8 +1752,8 @@
     Draw_polygon(NOHWND, pixmap, flags, x, y);
 }
 
-func Draw_rect(handle HWND, pixmap HPIXMAP, fill int, x int, y int, width int, height int) {
-    C.go_draw_rect(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), C.int(fill), C.int(x), C.int(y), C.int(width), C.int(height));
+func Draw_rect(handle HANDLE, pixmap HPIXMAP, fill int, x int, y int, width int, height int) {
+    C.go_draw_rect(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), C.int(fill), C.int(x), C.int(y), C.int(width), C.int(height));
 }
 
 func (window HWND) DrawRect(fill int, x int, y int, width int, height int) {
@@ -1723,8 +1764,8 @@
     Draw_rect(NOHWND, pixmap, fill, x, y, width, height);
 }
 
-func Draw_arc(handle HWND, pixmap HPIXMAP, flags int, xorigin int, yorigin int, x1 int, y1 int, x2 int, y2 int) {
-    C.go_draw_arc(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), C.int(flags), C.int(xorigin), C.int(yorigin), C.int(x1), C.int(y1), C.int(x2), C.int(y2));
+func Draw_arc(handle HANDLE, pixmap HPIXMAP, flags int, xorigin int, yorigin int, x1 int, y1 int, x2 int, y2 int) {
+    C.go_draw_arc(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), C.int(flags), C.int(xorigin), C.int(yorigin), C.int(x1), C.int(y1), C.int(x2), C.int(y2));
 }
 
 func (window HWND) DrawArc(flags int, xorigin int, yorigin int, x1 int, y1 int, x2 int, y2 int) {
@@ -1735,11 +1776,11 @@
     Draw_arc(NOHWND, pixmap, flags, xorigin, yorigin, x1, y1, x2, y2);
 }
 
-func Draw_text(handle HWND, pixmap HPIXMAP, x int, y int, text string) {
+func Draw_text(handle HANDLE, pixmap HPIXMAP, x int, y int, text string) {
     ctext := C.CString(text);
     defer C.free(unsafe.Pointer(ctext));
     
-    C.go_draw_text(unsafe.Pointer(handle.hwnd), unsafe.Pointer(pixmap.hpixmap), C.int(x), C.int(y), ctext);
+    C.go_draw_text(handle.GetHandle(), unsafe.Pointer(pixmap.hpixmap), C.int(x), C.int(y), ctext);
 }
 
 func (window HWND) DrawText(x int, y int, text string) {
@@ -2087,66 +2128,150 @@
     return Filesystem_setup(handle, flags, titles);
 }
 
-func Container_alloc(handle HANDLE, rowcount int) POINTER {
-   return POINTER(C.go_container_alloc(handle.GetHandle(), C.int(rowcount)));
-}
-
-func (handle HCONTAINER) Alloc(rowcount int) POINTER {
-    return Container_alloc(handle, rowcount);
-}
-
-func Container_set_item(handle HANDLE, ptr POINTER, column int, row int, data unsafe.Pointer) {
-   C.go_container_set_item(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), data);
-}
-
-func Container_set_item_ulong(handle HANDLE, ptr POINTER, column int, row int, val uint) {
-   C.go_container_set_item_ulong(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), C.ulong(val));
-}
-
-func Container_set_item_icon(handle HANDLE, ptr POINTER, column int, row int, icon HICN) {
-   C.go_container_set_item_icon(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), unsafe.Pointer(icon));
-}
-
-func Container_set_item_time(handle HANDLE, ptr POINTER, column int, row int, seconds int, minutes int, hours int) {
-   C.go_container_set_item_time(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), C.int(seconds), C.int(minutes), C.int(hours));
-}
-
-func Container_set_item_date(handle HANDLE, ptr POINTER, column int, row int, day int, month int, year int) {
-   C.go_container_set_item_date(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), C.int(day), C.int(month), C.int(year));
-}
-
-func Container_change_item(handle HANDLE, column int, row int, data unsafe.Pointer) {
-   C.go_container_change_item(handle.GetHandle(), C.int(column), C.int(row), data);
+func Container_alloc(handle HANDLE, rowcount int) HCONTINS {
+   return HCONTINS{C.go_container_alloc(handle.GetHandle(), C.int(rowcount)), rowcount, handle, false};
+}
+
+func (handle HCONTAINER) Alloc(rowcount int) HCONTINS {
+    contins := Container_alloc(handle, rowcount);
+    contins.filesystem = handle.filesystem;
+    return contins;
+}
+
+func Container_set_item(handle HANDLE, contins HCONTINS, column int, row int, data POINTER) {
+   C.go_container_set_item(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), unsafe.Pointer(data));
+}
+
+func (handle HCONTINS) SetItem(column int, row int, data POINTER) {
+    if handle.filesystem == true {
+        Filesystem_set_item(handle.hcont, handle, column, row, data);
+    }
+    Container_set_item(handle.hcont, handle, column, row, data);
+}
+
+func Container_set_item_ulong(handle HANDLE, contins HCONTINS, column int, row int, val uint) {
+   C.go_container_set_item_ulong(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), C.ulong(val));
+}
+
+func (handle HCONTINS) SetItemULong(column int, row int, val uint) {
+    if handle.filesystem == true {
+        Filesystem_set_item_ulong(handle.hcont, handle, column, row, val);
+    }
+    Container_set_item_ulong(handle.hcont, handle, column, row, val);
+}
+
+func Container_set_item_icon(handle HANDLE, contins HCONTINS, column int, row int, icon HICN) {
+   C.go_container_set_item_icon(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), unsafe.Pointer(icon));
+}
+
+func (handle HCONTINS) SetItemIcon(column int, row int, icon HICN) {
+    if handle.filesystem == true {
+        Filesystem_set_item_icon(handle.hcont, handle, column, row, icon);
+    }
+    Container_set_item_icon(handle.hcont, handle, column, row, icon);
+}
+
+func Container_set_item_time(handle HANDLE, contins HCONTINS, column int, row int, seconds int, minutes int, hours int) {
+   C.go_container_set_item_time(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), C.int(seconds), C.int(minutes), C.int(hours));
+}
+
+func (handle HCONTINS) SetItemTime(column int, row int, seconds int, minutes int, hours int) {
+    if handle.filesystem == true {
+        Filesystem_set_item_time(handle.hcont, handle, column, row, seconds, minutes, hours);
+    }
+    Container_set_item_time(handle.hcont, handle, column, row, seconds, minutes, hours);
+}
+
+func Container_set_item_date(handle HANDLE, contins HCONTINS, column int, row int, day int, month int, year int) {
+   C.go_container_set_item_date(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), C.int(day), C.int(month), C.int(year));
+}
+
+func (handle HCONTINS) SetItemDate(column int, row int, day int, month int, year int) {
+    if handle.filesystem == true {
+        Filesystem_set_item_date(handle.hcont, handle, column, row, day, month, year);
+    }
+    Container_set_item_date(handle.hcont, handle, column, row, day, month, year);
+}
+
+func Container_change_item(handle HANDLE, column int, row int, data POINTER) {
+   C.go_container_change_item(handle.GetHandle(), C.int(column), C.int(row), unsafe.Pointer(data));
+}
+
+func (handle HCONTAINER) ChangeItem(column int, row int, data POINTER) {
+    if handle.filesystem == true {
+        Filesystem_change_item(handle, column, row, data);
+    }
+    Container_change_item(handle, column, row, data);
 }
 
 func Container_change_item_ulong(handle HANDLE, column int, row int, val uint) {
    C.go_container_change_item_ulong(handle.GetHandle(), C.int(column), C.int(row), C.ulong(val));
 }
 
+func (handle HCONTAINER) ChangeItemULong(column int, row int, val uint) {
+    if handle.filesystem == true {
+        Filesystem_change_item_ulong(handle, column, row, val);
+    }
+    Container_change_item_ulong(handle, column, row, val);
+}
+
 func Container_change_item_icon(handle HANDLE, column int, row int, icon HICN) {
    C.go_container_change_item_icon(handle.GetHandle(), C.int(column), C.int(row), unsafe.Pointer(icon));
 }
 
+func (handle HCONTAINER) ChangeItemIcon(column int, row int, icon HICN) {
+    if handle.filesystem == true {
+        Filesystem_change_item_icon(handle, column, row, icon);
+    }
+    Container_change_item_icon(handle, column, row, icon);
+}
+
 func Container_change_item_time(handle HANDLE, column int, row int, seconds int, minutes int, hours int) {
    C.go_container_change_item_time(handle.GetHandle(), C.int(column), C.int(row), C.int(seconds), C.int(minutes), C.int(hours));
 }
 
+func (handle HCONTAINER) ChangeItemTime(column int, row int, seconds int, minutes int, hours int) {
+    if handle.filesystem == true {
+        Filesystem_change_item_time(handle, column, row, seconds, minutes, hours);
+    }
+    Container_change_item_time(handle, column, row, seconds, minutes, hours);
+}
+
 func Container_change_item_date(handle HANDLE, column int, row int, day int, month int, year int) {
    C.go_container_change_item_date(handle.GetHandle(), C.int(column), C.int(row), C.int(day), C.int(month), C.int(year));
 }
 
+func (handle HCONTAINER) ChangeItemDate(column int, row int, day int, month int, year int) {
+    if handle.filesystem == true {
+        Filesystem_change_item_date(handle, column, row, day, month, year);
+    }
+    Container_change_item_date(handle, column, row, day, month, year);
+}
+
 func Container_set_column_width(handle HANDLE, column int, width int) {
    C.go_container_set_column_width(handle.GetHandle(), C.int(column), C.int(width));
 }
 
-func Container_set_row_title(ptr POINTER, row int, title string) {
+func (handle HCONTAINER) SetColumnWidth(column int, width int) {
+    Container_set_column_width(handle, column, width);
+}
+
+func Container_set_row_title(contins HCONTINS, row int, title string) {
    ctitle := C.CString(title);
-   C.dw_container_set_row_title(unsafe.Pointer(ptr), C.int(row), ctitle);
+   C.dw_container_set_row_title(contins.ptr, C.int(row), ctitle);
    /* TODO: Probably need to have a way to free this or leak */
 }
 
-func Container_set_row_data(ptr POINTER, row int, data POINTER) {
-   C.dw_container_set_row_title(unsafe.Pointer(ptr), C.int(row), (*C.char)(data));
+func (handle HCONTINS) SetRowTitle(row int, title string) {
+    Container_set_row_title(handle, row, title);
+}
+
+func Container_set_row_data(contins HCONTINS, row int, data POINTER) {
+   C.dw_container_set_row_title(contins.ptr, C.int(row), (*C.char)(data));
+}
+
+func (handle HCONTINS) SetRowData(row int, data POINTER) {
+    Container_set_row_data(handle, row, data);
 }
 
 func Container_change_row_title(handle HANDLE, row int, title string) {
@@ -2154,22 +2279,44 @@
    C.go_container_change_row_title(handle.GetHandle(), C.int(row), ctitle);
 }
 
+func (handle HCONTAINER) ChangeRowTitle(row int, title string) {
+    Container_change_row_title(handle, row, title);
+}
+
 func Container_change_row_data(handle HANDLE, row int, data unsafe.Pointer) {
    C.go_container_change_row_data(handle.GetHandle(), C.int(row), data);
 }
 
-func Container_insert(handle HANDLE, ptr POINTER, rowcount int) {
-   C.go_container_insert(handle.GetHandle(), unsafe.Pointer(ptr), C.int(rowcount));
+func (handle HCONTAINER) ChangeRowData(row int, data POINTER) {
+    Container_change_row_data(handle, row, unsafe.Pointer(data));
+}
+
+func Container_insert(handle HANDLE, contins HCONTINS, rowcount int) {
+   C.go_container_insert(handle.GetHandle(), contins.ptr, C.int(rowcount));
+   contins.ptr = nil;
+   contins.rowcount = 0;
+}
+
+func (handle HCONTINS) Insert() {
+    Container_insert(handle.hcont, handle, handle.rowcount);
 }
 
 func Container_clear(handle HANDLE, redraw int) {
    C.go_container_clear(handle.GetHandle(), C.int(redraw));
 }
 
+func (handle HCONTAINER) Clear(redraw int) {
+    Container_clear(handle, redraw);
+}
+
 func Container_delete(handle HANDLE, rowcount int) {
    C.go_container_delete(handle.GetHandle(), C.int(rowcount));
 }
 
+func (handle HCONTAINER) Delete(rowcount int) {
+    Container_delete(handle, rowcount);
+}
+
 func Container_query_start(handle HANDLE, flags uint) string {
    cresult := C.go_container_query_start(handle.GetHandle(), C.ulong(flags));
    result := C.GoString(cresult);
@@ -2177,6 +2324,10 @@
    return result;
 }
 
+func (handle HCONTAINER) QueryStart(flags uint) string {
+    return Container_query_start(handle, flags);
+}
+
 func Container_query_next(handle HANDLE, flags uint) string {
    cresult := C.go_container_query_next(handle.GetHandle(), C.ulong(flags));
    result := C.GoString(cresult);
@@ -2184,10 +2335,18 @@
    return result;
 }
 
+func (handle HCONTAINER) QueryNext(flags uint) string {
+    return Container_query_next(handle, flags);
+}
+
 func Container_scroll(handle HANDLE, direction int, rows int) {
    C.go_container_scroll(handle.GetHandle(), C.int(direction), C.long(rows));
 }
 
+func (handle HCONTAINER) Scroll(direction int, rows int) {
+    Container_scroll(handle, direction, rows);
+}
+
 func Container_cursor(handle HANDLE, text string) {
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
@@ -2195,6 +2354,10 @@
    C.go_container_cursor(handle.GetHandle(), ctext);
 }
 
+func (handle HCONTAINER) Cursor(text string) {
+    Container_cursor(handle, text);
+}
+
 func Container_delete_row(handle HANDLE, text string) {
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
@@ -2202,18 +2365,37 @@
    C.go_container_delete_row(handle.GetHandle(), ctext);
 }
 
+func (handle HCONTAINER) DeleteRow(text string) {
+    Container_delete_row(handle, text);
+}
+
 func Container_optimize(handle HANDLE) {
    C.go_container_optimize(handle.GetHandle());
 }
 
+func (handle HCONTAINER) Optimize() {
+    Container_optimize(handle);
+}
+
 func Container_set_stripe(handle HANDLE, oddcolor COLOR, evencolor COLOR) {
    C.go_container_set_stripe(handle.GetHandle(), C.ulong(oddcolor), C.ulong(evencolor));
 }
 
+func (handle HCONTAINER) SetStripe(oddcolor COLOR, evencolor COLOR) {
+    Container_set_stripe(handle, oddcolor, evencolor);
+}
+
 func Container_get_column_type(handle HANDLE, column int) uint {
    return uint(C.go_container_get_column_type(handle.GetHandle(), C.int(column)));
 }
 
+func (handle HCONTAINER) GetColumnType(column int) uint {
+    if handle.filesystem == true {
+        return Filesystem_get_column_type(handle, column);
+    }
+    return Container_get_column_type(handle, column);
+}
+
 func Filesystem_get_column_type(handle HANDLE, column int) uint {
    return uint(C.go_filesystem_get_column_type(handle.GetHandle(), C.int(column)));
 }
@@ -2225,35 +2407,41 @@
    C.go_filesystem_set_column_title(handle.GetHandle(), ctitle);
 }
 
-func Filesystem_set_item(handle HANDLE, ptr POINTER, column int, row int, data unsafe.Pointer) {
-   C.go_filesystem_set_item(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), data);
-}
-
-func Filesystem_set_item_ulong(handle HANDLE, ptr POINTER, column int, row int, val uint) {
-   C.go_filesystem_set_item_ulong(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), C.ulong(val));
-}
-
-func Filesystem_set_item_icon(handle HANDLE, ptr POINTER, column int, row int, icon HICN) {
-   C.go_filesystem_set_item_icon(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), unsafe.Pointer(icon));
-}
-
-func Filesystem_set_item_time(handle HANDLE, ptr POINTER, column int, row int, seconds int, minutes int, hours int) {
-   C.go_filesystem_set_item_time(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), C.int(seconds), C.int(minutes), C.int(hours));
-}
-
-func Filesystem_set_item_date(handle HANDLE, ptr POINTER, column int, row int, day int, month int, year int) {
-   C.go_filesystem_set_item_date(handle.GetHandle(), unsafe.Pointer(ptr), C.int(column), C.int(row), C.int(day), C.int(month), C.int(year));
-}
-
-func Filesystem_set_file(handle HANDLE, ptr POINTER, row int, filename string, icon HICN) {
+func Filesystem_set_item(handle HANDLE, contins HCONTINS, column int, row int, data POINTER) {
+   C.go_filesystem_set_item(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), unsafe.Pointer(data));
+}
+
+func Filesystem_set_item_ulong(handle HANDLE, contins HCONTINS, column int, row int, val uint) {
+   C.go_filesystem_set_item_ulong(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), C.ulong(val));
+}
+
+func Filesystem_set_item_icon(handle HANDLE, contins HCONTINS, column int, row int, icon HICN) {
+   C.go_filesystem_set_item_icon(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), unsafe.Pointer(icon));
+}
+
+func Filesystem_set_item_time(handle HANDLE, contins HCONTINS, column int, row int, seconds int, minutes int, hours int) {
+   C.go_filesystem_set_item_time(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), C.int(seconds), C.int(minutes), C.int(hours));
+}
+
+func Filesystem_set_item_date(handle HANDLE, contins HCONTINS, column int, row int, day int, month int, year int) {
+   C.go_filesystem_set_item_date(handle.GetHandle(), contins.ptr, C.int(column), C.int(row), C.int(day), C.int(month), C.int(year));
+}
+
+func Filesystem_set_file(handle HANDLE, contins HCONTINS, row int, filename string, icon HICN) {
    cfilename := C.CString(filename);
    defer C.free(unsafe.Pointer(cfilename));
    
-   C.go_filesystem_set_file(handle.GetHandle(), unsafe.Pointer(ptr), C.int(row), cfilename, unsafe.Pointer(icon));
-}
-
-func Filesystem_change_item(handle HANDLE, column int, row int, data unsafe.Pointer) {
-   C.go_filesystem_change_item(handle.GetHandle(), C.int(column), C.int(row), data);
+   C.go_filesystem_set_file(handle.GetHandle(), contins.ptr, C.int(row), cfilename, unsafe.Pointer(icon));
+}
+
+func (handle HCONTINS) SetFile(row int, filename string, icon HICN) {
+    if handle.filesystem == true {
+        Filesystem_set_file(handle.hcont, handle, row, filename, icon);
+    }
+}
+
+func Filesystem_change_item(handle HANDLE, column int, row int, data POINTER) {
+   C.go_filesystem_change_item(handle.GetHandle(), C.int(column), C.int(row), unsafe.Pointer(data));
 }
 
 func Filesystem_change_item_ulong(handle HANDLE, column int, row int, val uint) {
@@ -2279,14 +2467,28 @@
    C.go_filesystem_change_file(handle.GetHandle(), C.int(row), cfilename, unsafe.Pointer(icon));
 }
 
+func (handle HCONTAINER) ChangeFile(row int, filename string, icon HICN) {
+    if handle.filesystem == true {
+        Filesystem_change_file(handle, row, filename, icon);
+    }
+}
+
 func Calendar_new(id uint) HCALENDAR {
     return HCALENDAR{C.go_calendar_new(C.ulong(id))};
 }
 
+func CalendarNew(id uint) HCALENDAR {
+    return Calendar_new(id);
+}
+
 func Calendar_set_date(handle HANDLE, year uint, month uint, day uint) {
    C.go_calendar_set_date(handle.GetHandle(), C.uint(year), C.uint(month), C.uint(day));
 }
 
+func (handle HCALENDAR) SetDate(year uint, month uint, day uint) {
+    Calendar_set_date(handle, year, month, day);
+}
+
 func Calendar_get_date(handle HANDLE) (uint, uint, uint) {
    var year, month, day C.uint;
    
@@ -2294,44 +2496,71 @@
    return uint(year), uint(month), uint(day);
 }
 
-func Bitmap_new(id uint) HWND {
-    return HWND{C.go_bitmap_new(C.ulong(id))};
-}
-
-func Bitmapbutton_new(text string, id uint) HWND {
+func (handle HCALENDAR) GetDate() (uint, uint, uint) {
+    return Calendar_get_date(handle);
+}
+
+func Bitmap_new(id uint) HBITMAP {
+    return HBITMAP{C.go_bitmap_new(C.ulong(id))};
+}
+
+func BitmapNew(id uint) HBITMAP {
+    return Bitmap_new(id);
+}
+
+func Bitmapbutton_new(text string, id uint) HBUTTON {
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
    
-   return HWND{C.go_bitmapbutton_new(ctext, C.ulong(id))};
-}
-
-func Bitmapbutton_new_from_file(text string, id uint, filename string) HWND {
+   return HBUTTON{C.go_bitmapbutton_new(ctext, C.ulong(id))};
+}
+
+func BitmapButtonNew(text string, id uint) HBUTTON {
+    return Bitmapbutton_new(text, id);
+}
+
+func Bitmapbutton_new_from_file(text string, id uint, filename string) HBUTTON {
    ctext := C.CString(text);
    defer C.free(unsafe.Pointer(ctext));
    cfilename := C.CString(filename);
    defer C.free(unsafe.Pointer(cfilename));
    
-   return HWND{C.go_bitmapbutton_new_from_file(ctext, C.ulong(id), cfilename)};
-}
-
-func Splitbar_new(btype int, topleft HWND, bottomright HWND, id uint) HWND {
-    return HWND{C.go_splitbar_new(C.int(btype), unsafe.Pointer(topleft.hwnd), unsafe.Pointer(bottomright.hwnd), C.ulong(id))};
-}
-
-func Splitbar_set(handle HWND, position float32) {
-   C.go_splitbar_set(unsafe.Pointer(handle.hwnd), C.float(position));
-}
-
-func Splitbar_get(handle HWND) float32 {
-   return float32(C.go_splitbar_get(unsafe.Pointer(handle.hwnd)));
-}
-
-func Print_new(jobname string) HPRINT {
+   return HBUTTON{C.go_bitmapbutton_new_from_file(ctext, C.ulong(id), cfilename)};
+}
+
+func BitmapButtonNewFromFile(text string, id uint, filename string) HBUTTON {
+    return Bitmapbutton_new_from_file(text, id, filename);
+}
+
+func Splitbar_new(btype int, topleft HWND, bottomright HWND, id uint) HSPLITBAR {
+    return HSPLITBAR{C.go_splitbar_new(C.int(btype), unsafe.Pointer(topleft.hwnd), unsafe.Pointer(bottomright.hwnd), C.ulong(id))};
+}
+
+func SplitbarNew(btype int, topleft HWND, bottomright HWND, id uint) HSPLITBAR {
+    return Splitbar_new(btype, topleft, bottomright, id);
+}
+
+func Splitbar_set(handle HANDLE, position float32) {
+   C.go_splitbar_set(handle.GetHandle(), C.float(position));
+}
+
+func (handle HSPLITBAR) Set(position float32) {
+    Splitbar_set(handle, position);
+}
+
+func Splitbar_get(handle HANDLE) float32 {
+    return float32(C.go_splitbar_get(handle.GetHandle()));
+}
+
+func (handle HSPLITBAR) Get() float32 {
+    return Splitbar_get(handle);
+}
+
+func PrintNew(jobname string) HPRINT {
    return HPRINT{nil, jobname};
 }
 
-/* Classic version... */
-func Print_new2(jobname string, flags uint, pages uint, drawfunc SIGNAL_FUNC, drawdata POINTER) HPRINT {
+func Print_new(jobname string, flags uint, pages uint, drawfunc SIGNAL_FUNC, drawdata POINTER) HPRINT {
    backs = append(backs, unsafe.Pointer(drawfunc));
    cjobname := C.CString(jobname);
    defer C.free(unsafe.Pointer(cjobname));
@@ -2536,110 +2765,120 @@
 //export go_int_callback_basic
 func go_int_callback_basic(pfunc unsafe.Pointer, window unsafe.Pointer, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND) int)(pfunc);
+      thisfunc := *(*func(HANDLE) int)(pfunc);
       return C.int(thisfunc(HWND{window}));
    }
-   thisfunc := *(*func(HWND, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, POINTER(data)));
 }
 
 //export go_int_callback_configure
 func go_int_callback_configure(pfunc unsafe.Pointer, window unsafe.Pointer, width C.int, height C.int, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, int, int) C.int)(pfunc);
+      thisfunc := *(*func(HANDLE, int, int) C.int)(pfunc);
       return C.int(thisfunc(HWND{window}, int(width), int(height)));
    }
-   thisfunc := *(*func(HWND, int, int, POINTER) C.int)(pfunc);
+   thisfunc := *(*func(HANDLE, int, int, POINTER) C.int)(pfunc);
    return C.int(thisfunc(HWND{window}, int(width), int(height), POINTER(data)));
 }
 
 //export go_int_callback_keypress
 func go_int_callback_keypress(pfunc unsafe.Pointer, window unsafe.Pointer, ch C.char, vk C.int, state C.int, data unsafe.Pointer, utf8 *C.char, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, uint8, int, int, string) int)(pfunc);
+      thisfunc := *(*func(HANDLE, uint8, int, int, string) int)(pfunc);
       return C.int(thisfunc(HWND{window}, uint8(ch), int(vk), int(state), C.GoString(utf8)));
    }
-   thisfunc := *(*func(HWND, uint8, int, int, POINTER, string) int)(pfunc);
+   thisfunc := *(*func(HANDLE, uint8, int, int, POINTER, string) int)(pfunc);
    return C.int(thisfunc(HWND{window}, uint8(ch), int(vk), int(state), POINTER(data), C.GoString(utf8)));
 }
 
 //export go_int_callback_mouse
 func go_int_callback_mouse(pfunc unsafe.Pointer, window unsafe.Pointer, x C.int, y C.int, mask C.int, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, int, int, int) int)(pfunc);
+      thisfunc := *(*func(HANDLE, int, int, int) int)(pfunc);
       return C.int(thisfunc(HWND{window}, int(x), int(y), int(mask)));
    }
-   thisfunc := *(*func(HWND, int, int, int, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, int, int, int, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, int(x), int(y), int(mask), POINTER(data)));
 }
 
 //export go_int_callback_expose
 func go_int_callback_expose(pfunc unsafe.Pointer, window unsafe.Pointer, x C.int, y C.int, width C.int, height C.int, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, int, int, int, int) int)(pfunc);
+      thisfunc := *(*func(HANDLE, int, int, int, int) int)(pfunc);
       return C.int(thisfunc(HWND{window}, int(x), int(y), int(width), int(height)));
    }
-   thisfunc := *(*func(HWND, int, int, int, int, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, int, int, int, int, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, int(x), int(y), int(width), int(height), POINTER(data)));
 }
 
 //export go_int_callback_string
 func go_int_callback_string(pfunc unsafe.Pointer, window unsafe.Pointer, str *C.char, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, string) int)(pfunc);
+      thisfunc := *(*func(HANDLE, string) int)(pfunc);
       return C.int(thisfunc(HWND{window}, C.GoString(str)));
    }
-   thisfunc := *(*func(HWND, string, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, string, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, C.GoString(str), POINTER(data)));
 }
 
 //export go_int_callback_item_context
 func go_int_callback_item_context(pfunc unsafe.Pointer, window unsafe.Pointer, text *C.char, x C.int, y C.int, data unsafe.Pointer, itemdata unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, string, int, int, POINTER) int)(pfunc);
+      thisfunc := *(*func(HANDLE, string, int, int, POINTER) int)(pfunc);
       return C.int(thisfunc(HWND{window}, C.GoString(text), int(x), int(y), POINTER(itemdata)));
    }
-   thisfunc := *(*func(HWND, string, int, int, POINTER, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, string, int, int, POINTER, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, C.GoString(text), int(x), int(y), POINTER(data), POINTER(itemdata)));
 }
 
 //export go_int_callback_item_select
 func go_int_callback_item_select(pfunc unsafe.Pointer, window unsafe.Pointer, item unsafe.Pointer, text *C.char, data unsafe.Pointer, itemdata unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, HTREEITEM, string, POINTER) int)(pfunc);
+      thisfunc := *(*func(HANDLE, HTREEITEM, string, POINTER) int)(pfunc);
       return C.int(thisfunc(HWND{window}, HTREEITEM{item, HWND{window}}, C.GoString(text), POINTER(itemdata)));
    }
-   thisfunc := *(*func(HWND, HTREEITEM, string, POINTER, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, HTREEITEM, string, POINTER, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, HTREEITEM{item, HWND{window}}, C.GoString(text), POINTER(data), POINTER(itemdata)));
 }
 
 //export go_int_callback_numeric
 func go_int_callback_numeric(pfunc unsafe.Pointer, window unsafe.Pointer, val C.int, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, int) int)(pfunc);
+      thisfunc := *(*func(HANDLE, int) int)(pfunc);
       return C.int(thisfunc(HWND{window}, int(val)));
    }
-   thisfunc := *(*func(HWND, int, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, int, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, int(val), POINTER(data)));
 }
 
 //export go_int_callback_ulong
 func go_int_callback_ulong(pfunc unsafe.Pointer, window unsafe.Pointer, val C.ulong, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, uint) int)(pfunc);
+      thisfunc := *(*func(HANDLE, uint) int)(pfunc);
       return C.int(thisfunc(HWND{window}, uint(val)));
    }
-   thisfunc := *(*func(HWND, uint, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, uint, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, uint(val), POINTER(data)));
 }
 
+//export go_int_callback_notepage
+func go_int_callback_notepage(pfunc unsafe.Pointer, window unsafe.Pointer, val C.ulong, data unsafe.Pointer, flags C.int) C.int {
+   if (flags & go_flags_no_data) == go_flags_no_data {
+      thisfunc := *(*func(HANDLE, HNOTEPAGE) int)(pfunc);
+      return C.int(thisfunc(HWND{window}, HNOTEPAGE{val, HWND{window}}));
+   }
+   thisfunc := *(*func(HANDLE, HNOTEPAGE, POINTER) int)(pfunc);
+   return C.int(thisfunc(HWND{window}, HNOTEPAGE{val, HWND{window}}, POINTER(data)));
+}
+
 //export go_int_callback_tree
 func go_int_callback_tree(pfunc unsafe.Pointer, window unsafe.Pointer, tree unsafe.Pointer, data unsafe.Pointer, flags C.int) C.int {
    if (flags & go_flags_no_data) == go_flags_no_data {
-      thisfunc := *(*func(HWND, HTREEITEM) int)(pfunc);
+      thisfunc := *(*func(HANDLE, HTREEITEM) int)(pfunc);
       return C.int(thisfunc(HWND{window}, HTREEITEM{tree, HWND{window}}));
    }
-   thisfunc := *(*func(HWND, HTREEITEM, POINTER) int)(pfunc);
+   thisfunc := *(*func(HANDLE, HTREEITEM, POINTER) int)(pfunc);
    return C.int(thisfunc(HWND{window}, HTREEITEM{tree, HWND{window}}, POINTER(data)));
 }
 
--- a/src/dw/dwglue.c	Thu Mar 14 12:58:49 2013 -0500
+++ b/src/dw/dwglue.c	Thu Mar 14 19:30:41 2013 -0500
@@ -1101,6 +1101,7 @@
 extern int go_int_callback_item_select(void *pfunc, void *window, void *item, char *text, void *data, void *itemdata, int flags);
 extern int go_int_callback_numeric(void *pfunc, void* window, int val, void *data, int flags);
 extern int go_int_callback_ulong(void *pfunc, void* window, unsigned long val, void *data, int flags);
+extern int go_int_callback_notepage(void *pfunc, void* window, unsigned long val, void *data, int flags);
 extern int go_int_callback_tree(void *pfunc, void* window, void *item, void *data, int flags);
 extern int go_int_callback_timer(void *pfunc, void *data, int flags);
 extern int go_int_callback_print(void *pfunc, void *print, void *pixmap, int page_num, void *data, int flags);
@@ -1196,7 +1197,7 @@
    return 0;
 }
 
-static int DWSIGNAL go_callback_ulong(HWND window, unsigned long val, void *data)
+/*static int DWSIGNAL go_callback_ulong(HWND window, unsigned long val, void *data)
 {
    if(data)
    {
@@ -1204,6 +1205,16 @@
       return go_int_callback_ulong(param[0], (void *)window, val, param[1], DW_POINTER_TO_INT(param[2]));
    }
    return 0;
+}*/
+
+static int DWSIGNAL go_callback_notepage(HWND window, unsigned long val, void *data)
+{
+   if(data)
+   {
+      void **param = (void **)data;
+      return go_int_callback_notepage(param[0], (void *)window, val, param[1], DW_POINTER_TO_INT(param[2]));
+   }
+   return 0;
 }
 
 static int DWSIGNAL go_callback_tree(HWND window, HTREEITEM tree, void *data)
@@ -1323,7 +1334,7 @@
       }
       else if(strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0)
       {
-         func = (void *)go_callback_ulong;
+         func = (void *)go_callback_notepage;
       }
       else if(strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0)
       {
--- a/src/dwib/dwib.go	Thu Mar 14 12:58:49 2013 -0500
+++ b/src/dwib/dwib.go	Thu Mar 14 19:30:41 2013 -0500
@@ -15,11 +15,11 @@
 
 type DWIB unsafe.Pointer
 
-func Load(handle DWIB, name string) dw.HWND {
+func Load(handle DWIB, name string) dw.HANDLE {
    cname := C.CString(name);
    defer C.free(unsafe.Pointer(cname));
    
-   return dw.POINTER_TO_HWND(dw.POINTER(C.goib_load(unsafe.Pointer(handle), cname)));
+   return dw.POINTER_TO_HANDLE(dw.POINTER(C.goib_load(unsafe.Pointer(handle), cname)));
 }
 
 func Load_at_index(handle DWIB, name string, dataname string, window dw.HWND, box dw.HWND, index int) int {
@@ -28,11 +28,11 @@
    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.HWND_TO_POINTER(window)), unsafe.Pointer(dw.HWND_TO_POINTER(box)), C.int(index)));
+   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)));
 }
 
-func Show(handle dw.HWND) {
-   C.goib_show(unsafe.Pointer(dw.HWND_TO_POINTER(handle)));
+func Show(handle dw.HANDLE) {
+   C.goib_show(unsafe.Pointer(dw.HANDLE_TO_POINTER(handle)));
 }
 
 func Open(filename string) DWIB {
@@ -60,10 +60,10 @@
    return int(C.goib_locale_set(cloc));
 }
 
-func Window_get_handle(handle dw.HWND, dataname string) dw.HWND {
+func Window_get_handle(handle dw.HANDLE, dataname string) dw.HANDLE {
    cdataname := C.CString(dataname);
    defer C.free(unsafe.Pointer(cdataname));
 
-   return dw.POINTER_TO_HWND(dw.POINTER(C.goib_window_get_handle(unsafe.Pointer(dw.HWND_TO_POINTER(handle)), cdataname)));
+   return dw.POINTER_TO_HANDLE(dw.POINTER(C.goib_window_get_handle(unsafe.Pointer(dw.HANDLE_TO_POINTER(handle)), cdataname)));
 }
 
--- a/src/dwtest/dwtest.go	Thu Mar 14 12:58:49 2013 -0500
+++ b/src/dwtest/dwtest.go	Thu Mar 14 19:30:41 2013 -0500
@@ -19,15 +19,25 @@
 
 var FIXEDFONT = "10.monospace"
 
+var mainwindow dw.HWND
+
 // Page 1
-var notebookbox1, cursortogglebutton, mainwindow, noncheckable_menuitem, checkable_menuitem dw.HWND
+var notebookbox1 dw.HBOX
+var cursortogglebutton dw.HBUTTON
+var noncheckable_menuitem, checkable_menuitem dw.HMENUITEM
 var copypastefield, entryfield dw.HENTRYFIELD
 var current_color dw.COLOR = dw.RGB(100, 100, 100)
 var cursor_arrow bool = true
 var timerid dw.HTIMER
 
 // Page 2
-var notebookbox2, textbox1, textbox2, status1, status2, vscrollbar, hscrollbar, rendcombo, imagexspin, imageyspin, imagestretchcheck dw.HWND
+var notebookbox2 dw.HBOX
+var textbox1, textbox2 dw.HRENDER
+var status1, status2 dw.HTEXT
+var vscrollbar, hscrollbar dw.HSCROLLBAR
+var rendcombo dw.HLISTBOX 
+var imagexspin, imageyspin dw.HSPINBUTTON
+var imagestretchcheck dw.HBUTTON
 var text1pm, text2pm, image dw.HPIXMAP
 var image_x = 20
 var image_y = 20
@@ -43,20 +53,30 @@
 var max_linewidth = 0
 
 // Page 3
-var notebookbox3, tree dw.HWND
+var notebookbox3 dw.HBOX
+var tree dw.HTREE
 
 // Page 4
-var notebookbox4, container_mle, container dw.HWND
+var notebookbox4 dw.HBOX
+var container_mle dw.HMLE
+var container dw.HCONTAINER
 var mle_point = 0
 
 // Page 5
-var notebookbox5, combobox1, combobox2, cal, spinbutton, slider, percent, buttonsbox, buttonboxperm dw.HWND
+var notebookbox5, buttonboxperm, buttonsbox dw.HBOX
+var combobox1, combobox2 dw.HLISTBOX
+var cal dw.HCALENDAR
+var spinbutton dw.HSPINBUTTON
+var slider dw.HSLIDER
+var percent dw.HPERCENT
 
 // Page 7
-var notebookbox7, html dw.HWND
+var notebookbox7 dw.HBOX
+var html dw.HHTML
 
 // Page 8
-var notebookbox8, scrollbox dw.HWND
+var notebookbox8 dw.HBOX
+var scrollbox dw.HSCROLLBOX
 var MAX_WIDGETS = 20
 
 var iteration = 0;
@@ -114,26 +134,26 @@
 }
 
 // Call back section
-func exit_callback(window dw.HWND, data dw.POINTER) int {
+func exit_callback(window dw.HANDLE, data dw.POINTER) int {
    if dw.Messagebox("dwtest", dw.MB_YESNO | dw.MB_QUESTION, "Are you sure you want to exit?") != 0 {
       dw.Main_quit();
    }
    return TRUE;
 }
 
-func switch_page_callback(window dw.HWND, page_num dw.HNOTEPAGE, itemdata dw.POINTER) int {
-    fmt.Printf("DW_SIGNAL_SWITCH_PAGE: PageNum: %d\n", uint(page_num));
+func switch_page_callback(window dw.HANDLE, page_num dw.HNOTEPAGE, itemdata dw.POINTER) int {
+    fmt.Printf("DW_SIGNAL_SWITCH_PAGE: PageNum: %d\n", dw.HNOTEPAGE_TO_UINT(page_num));
     return FALSE;
 }
 
-func menu_callback(window dw.HWND, data dw.POINTER) int {
+func menu_callback(window dw.HANDLE, data dw.POINTER) int {
     info:= *(*string)(data);
     buf := fmt.Sprintf("%s menu item selected", info);
     dw.Messagebox("Menu Item Callback", dw.MB_OK | dw.MB_INFORMATION, buf);
     return FALSE;
 }
 
-func menutoggle_callback(window dw.HWND, data dw.POINTER) int {
+func menutoggle_callback(window dw.HANDLE, data dw.POINTER) int {
     if menu_enabled {
         dw.Window_set_style(checkable_menuitem, dw.MIS_DISABLED, dw.MIS_DISABLED);
         dw.Window_set_style(noncheckable_menuitem, dw.MIS_DISABLED, dw.MIS_DISABLED);
@@ -146,7 +166,7 @@
     return FALSE;
 }
 
-func helpabout_callback(window dw.HWND, data dw.POINTER) int {
+func helpabout_callback(window dw.HANDLE, data dw.POINTER) int {
     var env dw.Env;
 
     dw.Environment_query(&env);
@@ -159,7 +179,7 @@
 }
 
 // Page 1 Callbacks
-func paste_clicked_callback(button dw.HWND, data dw.POINTER) int {
+func paste_clicked_callback(button dw.HANDLE, data dw.POINTER) int {
     test := dw.Clipboard_get_text();
 
     if len(test) > 0 {
@@ -168,7 +188,7 @@
     return TRUE;
 }
 
-func copy_clicked_callback(button dw.HWND, data dw.POINTER) int {
+func copy_clicked_callback(button dw.HANDLE, data dw.POINTER) int {
    test := dw.Window_get_text(copypastefield);
 
    if len(test) > 0 {
@@ -178,7 +198,7 @@
    return TRUE;
 }
 
-func browse_file_callback(window dw.HWND, data dw.POINTER) int {
+func browse_file_callback(window dw.HANDLE, data dw.POINTER) int {
     tmp := dw.File_browse("Pick a file", "dwtest.c", "c", dw.FILE_OPEN);
     if len(tmp) > 0 {
         current_file = tmp;
@@ -192,18 +212,18 @@
     return FALSE;
 }
 
-func browse_folder_callback(window dw.HWND, data dw.POINTER) int {
+func browse_folder_callback(window dw.HANDLE, data dw.POINTER) int {
     tmp := dw.File_browse("Pick a folder", ".", "c", dw.DIRECTORY_OPEN);
     fmt.Printf("Folder picked: %s\n", tmp);
     return FALSE;
 }
 
-func colorchoose_callback(window dw.HWND, data dw.POINTER) int {
+func colorchoose_callback(window dw.HANDLE, data dw.POINTER) int {
     current_color = dw.Color_choose(current_color);
     return FALSE;
 }
 
-func cursortoggle_callback(window dw.HWND, data dw.POINTER) int {
+func cursortoggle_callback(window dw.HANDLE, data dw.POINTER) int {
     if cursor_arrow {
         dw.Window_set_text(cursortogglebutton, "Set Cursor pointer - ARROW");
         dw.Window_set_pointer(dw.POINTER_TO_HANDLE(data), dw.POINTER_CLOCK);
@@ -216,7 +236,7 @@
     return FALSE;
 }
 
-func beep_callback(window dw.HWND, data dw.POINTER) int {
+func beep_callback(window dw.HANDLE, data dw.POINTER) int {
     dw.Timer_disconnect(timerid);
     return TRUE;
 }
@@ -230,7 +250,7 @@
 }
 
 // Page 2 Callbacks
-func motion_notify_event(window dw.HWND, x int, y int, buttonmask int, data dw.POINTER) int {
+func motion_notify_event(window dw.HANDLE, x int, y int, buttonmask int, data dw.POINTER) int {
     var which = "button_press";
 
     if(uintptr(data) > 0) {
@@ -240,7 +260,7 @@
     return FALSE;
 }
 
-func show_window_callback(window dw.HWND, data dw.POINTER) int {
+func show_window_callback(window dw.HANDLE, data dw.POINTER) int {
     thiswindow := dw.POINTER_TO_HANDLE(data);
 
     if thiswindow != dw.NOHWND {
@@ -250,7 +270,7 @@
     return TRUE;
 }
 
-func context_menu_event(window dw.HWND, x int, y int, buttonmask int, data dw.POINTER) int {
+func context_menu_event(window dw.HANDLE, x int, y int, buttonmask int, data dw.POINTER) int {
     hwndMenu := dw.Menu_new(0);
     menuitem := dw.Menu_append_item(hwndMenu, "~Quit", dw.MENU_POPUP, 0, TRUE, FALSE, dw.NOMENU);
 
@@ -310,7 +330,7 @@
 /* When hpma is not NULL we are printing.. so handle things differently */
 func draw_shapes(direct int, hpma dw.HPIXMAP) {
     var hpm, pixmap dw.HPIXMAP = dw.NOHPIXMAP, dw.NOHPIXMAP
-    var window dw.HWND
+    var window dw.HRENDER
     if hpma != dw.NOHPIXMAP {
         hpm = hpma;
     } else {
@@ -410,15 +430,15 @@
    return TRUE;
 }
 
-func print_callback(window dw.HWND, data dw.POINTER) int {
-   print := dw.Print_new2("DWTest Job", 0, 2, dw.SIGNAL_FUNC(&draw_page_func), nil);
+func print_callback(window dw.HANDLE, data dw.POINTER) int {
+   print := dw.Print_new("DWTest Job", 0, 2, dw.SIGNAL_FUNC(&draw_page_func), nil);
    dw.Print_run(print, 0);
    return FALSE;
 }
 
 
 /* This gets called when a part of the graph needs to be repainted. */
-func text_expose(hwnd dw.HWND, x int, y int, width int, height int, data dw.POINTER) int {
+func text_expose(hwnd dw.HRENDER, x int, y int, width int, height int, data dw.POINTER) int {
     if render_type != 1 {
         var hpm dw.HPIXMAP
 
@@ -442,7 +462,7 @@
 }
 
 /* Handle size change of the main render window */
-func configure_event(hwnd dw.HWND, width int, height int, data dw.POINTER) int {
+func configure_event(hwnd dw.HANDLE, width int, height int, data dw.POINTER) int {
     old1 := text1pm;
     old2 := text2pm;
     depth := dw.Color_depth_get();
@@ -471,12 +491,12 @@
     return TRUE;
 }
 
-func refresh_callback(window dw.HWND, data dw.POINTER) int {
+func refresh_callback(window dw.HANDLE, data dw.POINTER) int {
     update_render();
     return FALSE;
 }
 
-func render_select_event_callback(window dw.HWND, index int, data dw.POINTER) int {
+func render_select_event_callback(window dw.HANDLE, index int, data dw.POINTER) int {
     if index != render_type {
         if index == 2 {
             dw.Scrollbar_set_range(hscrollbar, uint(max_linewidth), uint(cols));
@@ -498,11 +518,11 @@
 }
 
 /* Callback to handle user selection of the scrollbar position */
-func scrollbar_valuechanged_callback(hwnd dw.HWND, value int, data dw.POINTER) int {
+func scrollbar_valuechanged_callback(hwnd dw.HANDLE, value int, data dw.POINTER) int {
     if data != nil {
         stext := dw.POINTER_TO_HANDLE(data);
 
-        if hwnd == vscrollbar {
+        if hwnd.GetHandle() == vscrollbar.GetHandle() {
             current_row = value;
         } else {
             current_col = value;
@@ -614,7 +634,7 @@
     return "none";
 }
 
-func keypress_callback(window dw.HWND, ch uint8, vk int, state int, data dw.POINTER, utf8 string) int {
+func keypress_callback(window dw.HANDLE, ch uint8, vk int, state int, data dw.POINTER, utf8 string) int {
     var message string
 
     if ch != 0 {
@@ -627,35 +647,35 @@
 }
 
 // Page 3 and 4 Callbacks
-func item_enter_cb(window dw.HWND, text string, data dw.POINTER) int {
+func item_enter_cb(window dw.HANDLE, text string, data dw.POINTER) int {
     message := fmt.Sprintf("DW_SIGNAL_ITEM_ENTER: Window: %x Text: %s", dw.HANDLE_TO_UINTPTR(window), text);
     dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message);
     return FALSE;
 }
 
-func item_context_cb(window dw.HWND, text string, x int, y int, data dw.POINTER, itemdata dw.POINTER) int {
+func item_context_cb(window dw.HANDLE, text string, x int, y int, data dw.POINTER, itemdata dw.POINTER) int {
     message := fmt.Sprintf("DW_SIGNAL_ITEM_CONTEXT: Window: %x Text: %s x: %d y: %d Itemdata: %x", dw.HANDLE_TO_UINTPTR(window), 
           text, x, y, uintptr(itemdata));
     dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message);
     return FALSE;
 }
 
-func list_select_cb(window dw.HWND, item int, data dw.POINTER) int {
+func list_select_cb(window dw.HANDLE, item int, data dw.POINTER) int {
     message := fmt.Sprintf("DW_SIGNAL_LIST_SELECT: Window: %x Item: %d", dw.HANDLE_TO_UINTPTR(window), item);
     dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message);
     return FALSE;
 }
 
-func item_select_cb(window dw.HWND, item dw.HTREEITEM, text string, data dw.POINTER, itemdata dw.POINTER) int {
+func item_select_cb(window dw.HANDLE, item dw.HTREEITEM, text string, data dw.POINTER, itemdata dw.POINTER) int {
     message := fmt.Sprintf("DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", dw.HANDLE_TO_UINTPTR(window),
-            uintptr(dw.POINTER(item)), text, uintptr(itemdata));
+            dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata));
     dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message);
     return FALSE;
 }
 
-func container_select_cb(window dw.HWND, item dw.HTREEITEM, text string, data dw.POINTER, itemdata dw.POINTER)  int {
+func container_select_cb(window dw.HANDLE, item dw.HTREEITEM, text string, data dw.POINTER, itemdata dw.POINTER)  int {
     message := fmt.Sprintf("DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", dw.HANDLE_TO_UINTPTR(window),
-            uintptr(dw.POINTER(item)), text, uintptr(itemdata));
+            dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata));
     dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message);
     mle_point = dw.Mle_import(container_mle, message, mle_point);
     str := dw.Container_query_start(container, dw.CRA_SELECTED);
@@ -671,13 +691,13 @@
     return FALSE;
 }
 
-func combobox_select_event_callback(window dw.HWND, index int, data dw.POINTER) int {
+func combobox_select_event_callback(window dw.HANDLE, index int, data dw.POINTER) int {
     fmt.Printf("got combobox_select_event for index: %d, iteration: %d\n", index, iteration);
     iteration++;
     return FALSE;
 }
 
-func column_click_cb(window dw.HWND, column_num int, data dw.POINTER) int {
+func column_click_cb(window dw.HANDLE, column_num int, data dw.POINTER) int {
     var stype = "Unknown";
 
     if column_num == 0 {
@@ -703,7 +723,7 @@
 }
 
 // Page 5 Callbacks
-func button_callback(window dw.HWND, data dw.POINTER) int {
+func button_callback(window dw.HANDLE, data dw.POINTER) int {
     idx := dw.Listbox_selected(combobox1);
     buf1 := dw.Listbox_get_text(combobox1, idx);
     idx = dw.Listbox_selected( combobox2 );
@@ -720,7 +740,7 @@
 
 var isfoldericon bool = true
 
-func bitmap_toggle_callback(window dw.HWND, data dw.POINTER) int {
+func bitmap_toggle_callback(window dw.HANDLE, data dw.POINTER) int {
     if isfoldericon == true {
        isfoldericon = false;
        dw.Window_set_bitmap(window, 0, FILE_ICON_NAME);
@@ -733,37 +753,37 @@
     return FALSE;
 }
 
-func percent_button_box_callback(window dw.HWND, data dw.POINTER) int {
+func percent_button_box_callback(window dw.HANDLE, data dw.POINTER) int {
     dw.Percent_set_pos(percent, dw.PERCENT_INDETERMINATE);
     return FALSE;
 }
 
-func change_color_red_callback(window dw.HWND, data dw.POINTER) int {
+func change_color_red_callback(window dw.HANDLE, data dw.POINTER) int {
     dw.Window_set_color(buttonsbox, dw.CLR_RED, dw.CLR_RED);
     return FALSE;
 }
 
-func change_color_yellow_callback(window dw.HWND, data dw.POINTER) int {
+func change_color_yellow_callback(window dw.HANDLE, data dw.POINTER) int {
     dw.Window_set_color(buttonsbox, dw.CLR_YELLOW, dw.CLR_YELLOW);
     return FALSE;
 }
 
 /* Callback to handle user selection of the spinbutton position */
-func spinbutton_valuechanged_callback(hwnd dw.HWND, value int, data dw.POINTER) int {
+func spinbutton_valuechanged_callback(hwnd dw.HANDLE, value int, data dw.POINTER) int {
     dw.Messagebox("DWTest", dw.MB_OK, fmt.Sprintf("New value from spinbutton: %d\n", value));
     return FALSE;
 }
 
 /* Callback to handle user selection of the slider position */
-func slider_valuechanged_callback(hwnd dw.HWND, value int, data dw.POINTER) int {
+func slider_valuechanged_callback(hwnd dw.HANDLE, value int, data dw.POINTER) int {
     dw.Percent_set_pos(percent, uint(value * 10));
     return FALSE;
 }
 
 // Page 8 Callbacks
-func scrollbox_button_callback(window dw.HWND, data dw.POINTER) int {
-    pos := dw.Scrollbox_get_pos(scrollbox, dw.VERT);
-    rng := dw.Scrollbox_get_range(scrollbox, dw.VERT);
+func scrollbox_button_callback(window dw.HANDLE, data dw.POINTER) int {
+    _, pos := dw.Scrollbox_get_pos(scrollbox);
+    _, rng := dw.Scrollbox_get_range(scrollbox);
     fmt.Printf("Pos %d Range %d\n", pos, rng);
     return FALSE;
 }
@@ -1080,8 +1100,8 @@
     dw.Signal_connect(tree, dw.SIGNAL_ITEM_CONTEXT, dw.SIGNAL_FUNC(&item_context_cb_func), dw.HANDLE_TO_POINTER(tree_status));
     dw.Signal_connect(tree, dw.SIGNAL_ITEM_SELECT, dw.SIGNAL_FUNC(&item_select_cb_func), dw.HANDLE_TO_POINTER(tree_status));
 
-    t1 := dw.Tree_insert(tree, "tree folder 1", foldericon, nil, dw.POINTER(uintptr(1)));
-    t2 := dw.Tree_insert(tree, "tree folder 2", foldericon, nil, dw.POINTER(uintptr(2)));
+    t1 := dw.Tree_insert(tree, "tree folder 1", foldericon, dw.NOHTREEITEM, dw.POINTER(uintptr(1)));
+    t2 := dw.Tree_insert(tree, "tree folder 2", foldericon, dw.NOHTREEITEM, dw.POINTER(uintptr(2)));
     dw.Tree_insert(tree, "tree file 1", fileicon, t1, dw.POINTER(uintptr(3)));
     dw.Tree_insert(tree, "tree file 2", fileicon, t1, dw.POINTER(uintptr(4)));
     dw.Tree_insert(tree, "tree file 3", fileicon, t2, dw.POINTER(uintptr(5)));
@@ -1124,7 +1144,7 @@
              thisicon = foldericon;
         } 
         fmt.Printf("Initial: container: %x containerinfo: %x icon: %x\n", uintptr(dw.HANDLE_TO_POINTER(container)),
-                  uintptr(containerinfo), uintptr(dw.POINTER(thisicon)));
+                  dw.HANDLE_TO_UINTPTR(containerinfo), uintptr(dw.POINTER(thisicon)));
         dw.Filesystem_set_file(container, containerinfo, z, fmt.Sprintf("Filename %d", z+1), thisicon);
         dw.Filesystem_set_item_icon(container, containerinfo, 0, z, thisicon);
         dw.Filesystem_set_item_ulong(container, containerinfo, 1, z, uint(z*100));
@@ -1368,15 +1388,15 @@
    dw.Notebook_page_set_text(notebook, notebookpage7, "html");
    
    rawhtml := dw.Html_new(1001);
-   if rawhtml != dw.NOHWND {
+   if rawhtml.GetHandle() != nil {
        dw.Box_pack_start(notebookbox7, rawhtml, 0, 100, TRUE, FALSE, 0);
        dw.Html_raw(rawhtml, "<html><body><center><h1>dwtest</h1></center></body></html>");
        html = dw.Html_new(1002);
        dw.Box_pack_start(notebookbox7, html, 0, 100, TRUE, TRUE, 0);
        dw.Html_url(html, "http://dwindows.netlabs.org");
    } else {
-       html = dw.Text_new("HTML widget not available.", 0);
-       dw.Box_pack_start(notebookbox7, html, 0, 100, TRUE, TRUE, 0);
+       label := dw.Text_new("HTML widget not available.", 0);
+       dw.Box_pack_start(notebookbox7, label, 0, 100, TRUE, TRUE, 0);
    }
 
    notebookbox8 = dw.Box_new(dw.VERT, 7);