Mercurial > godwindows
changeset 66:e9b21845873e
Almost done with OO conversion... completely using closures...
Running into a few minor issues to sort out... but close!
author | Brian Smith <brian@dbsoft.org> |
---|---|
date | Sun, 17 Mar 2013 05:16:50 -0500 |
parents | 4960219e245b |
children | 94c755ac489c |
files | src/dw/dw.go src/dwootest/dwootest.go |
diffstat | 2 files changed, 310 insertions(+), 452 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dw/dw.go Sat Mar 16 23:32:05 2013 -0500 +++ b/src/dw/dw.go Sun Mar 17 05:16:50 2013 -0500 @@ -2097,6 +2097,10 @@ return HTIMER{C.go_timer_connect(C.int(interval), unsafe.Pointer(sigfunc), unsafe.Pointer(data), 0)}; } +func TimerNew() HTIMER { + return HTIMER{0}; +} + func Timer_disconnect(id HTIMER) { if id.tid > 0 { C.dw_timer_disconnect(C.int(id.tid)); @@ -3747,6 +3751,14 @@ C.go_signal_connect(unsafe.Pointer(window.hwnd), csigname, unsafe.Pointer(&sigfunc), nil, (window.GetType() << 8) | go_flags_no_data); } +func (window HRENDER) ConnectConfigure(sigfunc func(window HRENDER, width int, height int) int) { + csigname := C.CString(C.DW_SIGNAL_CONFIGURE); + defer C.free(unsafe.Pointer(csigname)); + + backs = append(backs, unsafe.Pointer(&sigfunc)); + C.go_signal_connect(unsafe.Pointer(window.hwnd), csigname, unsafe.Pointer(&sigfunc), nil, (window.GetType() << 8) | go_flags_no_data); +} + func (window HTREE) ConnectItemEnter(sigfunc func(window HTREE, str string) int) { csigname := C.CString(C.DW_SIGNAL_ITEM_ENTER); defer C.free(unsafe.Pointer(csigname)); @@ -3778,6 +3790,7 @@ backs = append(backs, unsafe.Pointer(&sigfunc)); C.go_signal_connect(unsafe.Pointer(window.hwnd), csigname, unsafe.Pointer(&sigfunc), nil, (window.GetType() << 8) | go_flags_no_data); } + func (window HTREE) ConnectItemSelect(sigfunc func(window HTREE, item HTREEITEM, text string, itemdata POINTER) int) { csigname := C.CString(C.DW_SIGNAL_ITEM_SELECT); defer C.free(unsafe.Pointer(csigname)); @@ -3786,6 +3799,14 @@ C.go_signal_connect(unsafe.Pointer(window.hwnd), csigname, unsafe.Pointer(&sigfunc), nil, (window.GetType() << 8) | go_flags_no_data); } +func (window HCONTAINER) ConnectItemSelect(sigfunc func(window HCONTAINER, item HTREEITEM, text string, itemdata POINTER) int) { + csigname := C.CString(C.DW_SIGNAL_ITEM_SELECT); + defer C.free(unsafe.Pointer(csigname)); + + backs = append(backs, unsafe.Pointer(&sigfunc)); + C.go_signal_connect(unsafe.Pointer(window.hwnd), csigname, unsafe.Pointer(&sigfunc), nil, (window.GetType() << 8) | go_flags_no_data); +} + func (window HLISTBOX) ConnectListSelect(sigfunc func(window HLISTBOX, index int) int) { csigname := C.CString(C.DW_SIGNAL_LIST_SELECT); defer C.free(unsafe.Pointer(csigname)); @@ -3826,7 +3847,7 @@ C.go_signal_connect(unsafe.Pointer(window.hwnd), csigname, unsafe.Pointer(&sigfunc), nil, (window.GetType() << 8) | go_flags_no_data); } -func (window HNOTEBOOK) ConnectSwitchPage(sigfunc func(window HNOTEBOOK, index uint) int) { +func (window HNOTEBOOK) ConnectSwitchPage(sigfunc func(window HNOTEBOOK, pageid HNOTEPAGE) int) { csigname := C.CString(C.DW_SIGNAL_SWITCH_PAGE); defer C.free(unsafe.Pointer(csigname)); @@ -3857,7 +3878,7 @@ } } -func (id HTIMER) Disconnect(sigfunc func() int) { +func (id HTIMER) Disconnect() { if id.tid > 0 { C.dw_timer_disconnect(C.int(id.tid)); }
--- a/src/dwootest/dwootest.go Sat Mar 16 23:32:05 2013 -0500 +++ b/src/dwootest/dwootest.go Sun Mar 17 05:16:50 2013 -0500 @@ -128,154 +128,13 @@ } // Call back section -func exit_callback(window dw.HWND, data dw.POINTER) int { +func exit_handler() int { if dw.Messagebox("dwtest", dw.MB_YESNO | dw.MB_QUESTION, "Are you sure you want to exit?") != 0 { dw.Main_quit(); } return dw.TRUE; } -func switch_page_callback(window dw.HNOTEBOOK, page_num dw.HNOTEPAGE, itemdata dw.POINTER) int { - fmt.Printf("DW_SIGNAL_SWITCH_PAGE: PageNum: %d\n", dw.HNOTEPAGE_TO_UINT(page_num)); - return dw.FALSE; -} - -func menu_callback(window dw.HMENUITEM, 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 dw.FALSE; -} - -func menutoggle_callback(window dw.HMENUITEM, data dw.POINTER) int { - if menu_enabled { - checkable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_DISABLED); - noncheckable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_DISABLED); - menu_enabled = false; - } else { - checkable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_ENABLED); - noncheckable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_ENABLED); - menu_enabled = true; - } - return dw.FALSE; -} - -func helpabout_callback(window dw.HMENUITEM, data dw.POINTER) int { - var env dw.Env; - - dw.Environment_query(&env); - message := fmt.Sprintf("dwindows test\n\nOS: %s %s %s Version: %d.%d.%d.%d\n\ndwindows Version: %d.%d.%d", - env.OSName, env.BuildDate, env.BuildTime, - env.MajorVersion, env.MinorVersion, env.MajorBuild, env.MinorBuild, - env.DWMajorVersion, env.DWMinorVersion, env.DWSubVersion); - dw.Messagebox("About dwindows", dw.MB_OK | dw.MB_INFORMATION, message); - return dw.FALSE; -} - -// Page 1 Callbacks -func paste_clicked_callback(button dw.HBUTTON, data dw.POINTER) int { - test := dw.ClipboardGetText(); - - if len(test) > 0 { - copypastefield.SetText(test); - } - return dw.TRUE; -} - -func copy_clicked_callback(button dw.HBUTTON, data dw.POINTER) int { - test := copypastefield.GetText(); - - if len(test) > 0 { - dw.ClipboardSetText(test); - } - entryfield.SetFocus(); - return dw.TRUE; -} - -func browse_file_callback(window dw.HBUTTON, data dw.POINTER) int { - tmp := dw.FileBrowse("Pick a file", "dwtest.c", "c", dw.FILE_OPEN); - if len(tmp) > 0 { - current_file = tmp; - entryfield.SetText(current_file); - read_file(); - current_col = 0; - current_row = 0; - update_render(); - } - copypastefield.SetFocus(); - return dw.FALSE; -} - -func browse_folder_callback(window dw.HBUTTON, data dw.POINTER) int { - tmp := dw.FileBrowse("Pick a folder", ".", "c", dw.DIRECTORY_OPEN); - fmt.Printf("Folder picked: %s\n", tmp); - return dw.FALSE; -} - -func colorchoose_callback(window dw.HBUTTON, data dw.POINTER) int { - current_color = dw.Color_choose(current_color); - return dw.FALSE; -} - -func cursortoggle_callback(window dw.HBUTTON, 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); - cursor_arrow = false; - } else { - dw.Window_set_text(cursortogglebutton, "Set Cursor pointer - CLOCK"); - dw.Window_set_pointer(dw.POINTER_TO_HANDLE(data), dw.POINTER_DEFAULT); - cursor_arrow = true; - } - return dw.FALSE; -} - -func beep_callback(window dw.HBUTTON, data dw.POINTER) int { - dw.Timer_disconnect(timerid); - return dw.TRUE; -} - -/* Beep every second */ -func timer_callback(data dw.POINTER) int { - dw.Beep(200, 200); - - /* Return dw.TRUE so we get called again */ - return dw.TRUE; -} - -// Page 2 Callbacks -func motion_notify_event(window dw.HRENDER, x int, y int, buttonmask int, data dw.POINTER) int { - var which = "button_press"; - - if(uintptr(data) > 0) { - which = "motion_notify"; - } - status2.SetText(fmt.Sprintf("%s: %dx%d", which, x, y)); - return dw.FALSE; -} - -func context_menu_event(window dw.HANDLE, x int, y int, buttonmask int, data dw.POINTER) int { - hwndMenu := dw.MenuNew(0); - menuitem := hwndMenu.AppendItem("~Quit", dw.MENU_POPUP, 0, dw.TRUE, dw.FALSE, dw.NOMENU); - - dw.Signal_connect(menuitem, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&exit_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); - hwndMenu.AppendItem(dw.MENU_SEPARATOR, dw.MENU_POPUP, 0, dw.TRUE, dw.FALSE, dw.NOMENU); - menuitem = hwndMenu.AppendItem("~Show Window", dw.MENU_POPUP, 0, dw.TRUE, dw.FALSE, dw.NOMENU); - menuitem.ConnectClicked(func(window dw.HMENUITEM) int { - mainwindow.Show(); - mainwindow.Raise(); - return dw.TRUE; - }); - px, py := dw.PointerGetPos(); - /* Use the toplevel window handle here.... because on the Mac.. - * using the control itself, when a different tab is active - * the control is removed from the window and can no longer - * handle the messages. - */ - hwndMenu.Popup(mainwindow, px, py); - return dw.TRUE; -} - /* When hpma is not NULL we are printing.. so handle things differently */ func draw_file(row int, col int, nrows int, fheight int, hpma dw.HPIXMAP) { var hpm dw.HPIXMAP @@ -309,8 +168,8 @@ } } if hpma == dw.NOHPIXMAP { - text_expose(textbox1, 0, 0, 0, 0, nil); - text_expose(textbox2, 0, 0, 0, 0, nil); + text_expose(textbox1); + text_expose(textbox2); } } } @@ -370,7 +229,7 @@ /* If we aren't drawing direct do a bitblt */ if direct == dw.FALSE && hpma == dw.NOHPIXMAP { - text_expose(textbox2, 0, 0, 0, 0, nil); + text_expose(textbox2); } } @@ -385,7 +244,7 @@ } } -func print_callback(window dw.HANDLE, data dw.POINTER) int { +func print_callback() { print := dw.PrintNew("DWTest Job"); print.Connect(func(print dw.HPRINT, pixmap dw.HPIXMAP, page_num int) int { pixmap.SetFont(FIXEDFONT); @@ -417,13 +276,32 @@ } return dw.TRUE; }, 0, 2); - dw.Print_run(print, 0); - return dw.FALSE; + print.Run(0); } +func context_menu() { + hwndMenu := dw.MenuNew(0); + menuitem := hwndMenu.AppendItem("~Quit", dw.MENU_POPUP, 0, dw.TRUE, dw.FALSE, dw.NOMENU); + + menuitem.ConnectClicked(func(window dw.HMENUITEM) int { return exit_handler(); }); + hwndMenu.AppendItem(dw.MENU_SEPARATOR, dw.MENU_POPUP, 0, dw.TRUE, dw.FALSE, dw.NOMENU); + menuitem = hwndMenu.AppendItem("~Show Window", dw.MENU_POPUP, 0, dw.TRUE, dw.FALSE, dw.NOMENU); + menuitem.ConnectClicked(func(window dw.HMENUITEM) int { + mainwindow.Show(); + mainwindow.Raise(); + return dw.TRUE; + }); + px, py := dw.PointerGetPos(); + /* Use the toplevel window handle here.... because on the Mac.. + * using the control itself, when a different tab is active + * the control is removed from the window and can no longer + * handle the messages. + */ + hwndMenu.Popup(mainwindow, px, py); +} /* This gets called when a part of the graph needs to be repainted. */ -func text_expose(hwnd dw.HRENDER, x int, y int, width int, height int, data dw.POINTER) int { +func text_expose(hwnd dw.HRENDER) int { if render_type != 1 { var hpm dw.HPIXMAP @@ -435,8 +313,8 @@ return dw.TRUE; } - width = hpm.GetWidth(); - height = hpm.GetHeight(); + width := hpm.GetWidth(); + height := hpm.GetHeight(); hwnd.BitBltPixmap(0, 0, width, height, hpm, 0, 0); dw.Flush(); @@ -446,78 +324,6 @@ return dw.TRUE; } -/* Handle size change of the main render window */ -func configure_event(hwnd dw.HRENDER, width int, height int, data dw.POINTER) int { - old1 := text1pm; - old2 := text2pm; - depth := dw.ColorDepthGet(); - - rows = height / font_height; - cols = width / font_width; - - /* Create new pixmaps with the current sizes */ - text1pm = dw.PixmapNew(textbox1, uint(font_width*(width1)), uint(height), depth); - text2pm = dw.PixmapNew(textbox2, uint(width), uint(height), depth); - - /* Make sure the side area is cleared */ - dw.ColorForegroundSet(dw.CLR_WHITE); - text1pm.DrawRect(dw.DRAW_FILL | dw.DRAW_NOAA, 0, 0, dw.Pixmap_width(text1pm), dw.Pixmap_height(text1pm)); - - /* Destroy the old pixmaps */ - old1.Destroy(); - old2.Destroy(); - - /* Update scrollbar ranges with new values */ - hscrollbar.SetRange(uint(max_linewidth), uint(cols)); - vscrollbar.SetRange(uint(len(lines)), uint(rows)); - - /* Redraw the window */ - update_render(); - return dw.TRUE; -} - -func refresh_callback(window dw.HBUTTON, data dw.POINTER) int { - update_render(); - return dw.FALSE; -} - -func render_select_event_callback(window dw.HLISTBOX, index int, data dw.POINTER) int { - if index != render_type { - if index == 2 { - hscrollbar.SetRange(uint(max_linewidth), uint(cols)); - hscrollbar.SetPos(0); - vscrollbar.SetRange(uint(len(lines)), uint(rows)); - vscrollbar.SetPos(0); - current_col = 0; - current_row = 0; - } else { - hscrollbar.SetRange(0, 0); - hscrollbar.SetPos(0); - vscrollbar.SetRange(0, 0); - vscrollbar.SetPos(0); - } - render_type = index; - update_render(); - } - return dw.FALSE; -} - -/* Callback to handle user selection of the scrollbar position */ -func scrollbar_valuechanged_callback(hwnd dw.HSCROLLBAR, value int, data dw.POINTER) int { - if data != nil { - stext := dw.POINTER_TO_HANDLE(data); - - if hwnd == vscrollbar { - current_row = value; - } else { - current_col = value; - } - dw.Window_set_text(stext, fmt.Sprintf("Row:%d Col:%d Lines:%d Cols:%d", current_row, current_col, len(lines), max_linewidth)); - update_render(); - } - return dw.FALSE; -} - func resolve_keyname(vk int) string { var keyname string = "<unknown>" @@ -619,96 +425,8 @@ return "none"; } -func keypress_callback(window dw.HWND, ch uint8, vk int, state int, data dw.POINTER, utf8 string) int { - var message string - if ch != 0 { - message = fmt.Sprintf("Key: %c(%d) Modifiers: %s(%d) utf8 %s", ch, ch, resolve_keymodifiers(state), state, utf8); - } else { - message = fmt.Sprintf("Key: %s(%d) Modifiers: %s(%d) utf8 %s", resolve_keyname(vk), vk, resolve_keymodifiers(state), state, utf8); - } - status1.SetText(message); - return dw.FALSE; -} - -// Page 3 and 4 Callbacks -func item_enter_cb(window dw.HCONTAINER, 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 dw.FALSE; -} - -func item_context_cb(window dw.HCONTAINER, 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 dw.FALSE; -} - -func list_select_cb(window dw.HLISTBOX, 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 dw.FALSE; -} - -func item_select_cb(window dw.HTREE, 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), - dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata)); - dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message); - return dw.FALSE; -} - -func container_select_cb(window dw.HCONTAINER, 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), - dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata)); - dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message); - mle_point = container_mle.Import(message, mle_point); - str := container.QueryStart(dw.CRA_SELECTED); - for len(str) > 0 { - mle_point = container_mle.Import(fmt.Sprintf("Selected: %s\r\n", str), mle_point); - str = container.QueryNext(dw.CRA_SELECTED); - } - /* Make the last inserted point the cursor location */ - container_mle.SetCursor(mle_point); - /* set the details of item 0 to new data */ - container.ChangeFile(0, "new data", fileicon); - container.ChangeItemULong(1, 0, 999); - return dw.FALSE; -} - -func combobox_select_event_callback(window dw.HLISTBOX, index int, data dw.POINTER) int { - fmt.Printf("got combobox_select_event for index: %d, iteration: %d\n", index, iteration); - iteration++; - return dw.FALSE; -} - -func column_click_cb(window dw.HCONTAINER, column_num int, data dw.POINTER) int { - var stype = "Unknown"; - - if column_num == 0 { - stype = "Filename"; - } else { - column_type := window.GetColumnType(column_num-1); - if column_type == dw.CFA_STRING { - stype = "String"; - } else if column_type == dw.CFA_ULONG { - stype = "ULong"; - } else if column_type == dw.CFA_DATE { - stype = "Date"; - } else if column_type == dw.CFA_TIME { - stype = "Time"; - } else if column_type == dw.CFA_BITMAPORICON { - stype = "BitmapOrIcon"; - } - } - message := fmt.Sprintf("DW_SIGNAL_COLUMN_CLICK: Window: %x Column: %d Type: %s Itemdata: %x", dw.HANDLE_TO_UINTPTR(window), - column_num, stype); - dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message); - return dw.FALSE; -} - -// Page 5 Callbacks -func button_callback(window dw.HBUTTON, data dw.POINTER) int { +func button_callback() { idx := combobox1.Selected(); buf1 := combobox1.GetText(idx); idx = combobox2.Selected(); @@ -720,107 +438,15 @@ buf1, buf2, y, m, d ); dw.Messagebox( "Values", dw.MB_OK | dw.MB_INFORMATION, message); - return dw.FALSE; } -var isfoldericon bool = true - -func bitmap_toggle_callback(window dw.HBUTTON, data dw.POINTER) int { - if isfoldericon == true { - isfoldericon = false; - window.SetBitmap(0, FILE_ICON_NAME); - window.SetTooltip("File Icon" ); - } else { - isfoldericon = true; - //dw.Window_set_bitmap_from_data(window, 0, folder_ico, sizeof(folder_ico)); - window.SetTooltip("Folder Icon"); - } - return dw.FALSE; -} - -func percent_button_box_callback(window dw.HBUTTON, data dw.POINTER) int { - percent.SetPos(dw.PERCENT_INDETERMINATE); - return dw.FALSE; -} - -func change_color_red_callback(window dw.HBUTTON, data dw.POINTER) int { - buttonsbox.SetColor(dw.CLR_RED, dw.CLR_RED); - return dw.FALSE; -} - -func change_color_yellow_callback(window dw.HBUTTON, data dw.POINTER) int { - buttonsbox.SetColor(dw.CLR_YELLOW, dw.CLR_YELLOW); - return dw.FALSE; -} - -/* Callback to handle user selection of the spinbutton position */ -func spinbutton_valuechanged_callback(hwnd dw.HSPINBUTTON, value int, data dw.POINTER) int { - dw.Messagebox("DWTest", dw.MB_OK, fmt.Sprintf("New value from spinbutton: %d\n", value)); - return dw.FALSE; -} - -/* Callback to handle user selection of the slider position */ -func slider_valuechanged_callback(hwnd dw.HSLIDER, value int, data dw.POINTER) int { - percent.SetPos(uint(value * 10)); - return dw.FALSE; -} - -// Page 8 Callbacks -func scrollbox_button_callback(window dw.HBUTTON, data dw.POINTER) int { - _, pos := scrollbox.GetPos(); - _, rng := scrollbox.GetRange(); - fmt.Printf("Pos %d Range %d\n", pos, rng); - return dw.FALSE; -} - -var exit_callback_func = exit_callback; -var copy_clicked_callback_func = copy_clicked_callback; -var paste_clicked_callback_func = paste_clicked_callback; -var browse_file_callback_func = browse_file_callback; -var browse_folder_callback_func = browse_folder_callback; -var colorchoose_callback_func = colorchoose_callback; -var cursortoggle_callback_func = cursortoggle_callback; -var beep_callback_func = beep_callback; -var timer_callback_func = timer_callback; -var switch_page_callback_func = switch_page_callback; -var helpabout_callback_func = helpabout_callback; -var menu_callback_func = menu_callback; -var menutoggle_callback_func = menutoggle_callback; -var text_expose_func = text_expose; -var configure_event_func = configure_event; -var motion_notify_event_func = motion_notify_event; -var context_menu_event_func = context_menu_event; -var refresh_callback_func = refresh_callback; -var render_select_event_callback_func = render_select_event_callback; -var scrollbar_valuechanged_callback_func = scrollbar_valuechanged_callback; -var keypress_callback_func = keypress_callback; -var item_enter_cb_func = item_enter_cb; -var item_context_cb_func = item_context_cb; -var list_select_cb_func = list_select_cb; -var item_select_cb_func = item_select_cb; -var column_click_cb_func = column_click_cb; -var container_select_cb_func = container_select_cb; -var combobox_select_event_callback_func = combobox_select_event_callback; -var scrollbox_button_callback_func = scrollbox_button_callback; -var button_callback_func = button_callback; -var bitmap_toggle_callback_func = bitmap_toggle_callback; -var percent_button_box_callback_func = percent_button_box_callback; -var change_color_red_callback_func = change_color_red_callback; -var change_color_yellow_callback_func = change_color_yellow_callback; -var spinbutton_valuechanged_callback_func = spinbutton_valuechanged_callback; -var slider_valuechanged_callback_func = slider_valuechanged_callback; -var print_callback_func = print_callback; - -var checkable_string = "checkable"; -var noncheckable_string = "non-checkable"; - // Create the menu func menu_add() { mainmenubar := mainwindow.MenubarNew(); /* add menus to the menubar */ menu := dw.MenuNew(0); menuitem := menu.AppendItem("~Quit", dw.MENU_AUTO, 0, dw.TRUE, dw.FALSE, dw.NOMENU); - dw.Signal_connect(menuitem, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&exit_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); + menuitem.ConnectClicked(func(window dw.HMENUITEM) int { return exit_handler(); }); /* * Add the "File" menu to the menubar... */ @@ -828,14 +454,29 @@ changeable_menu := dw.MenuNew(0); checkable_menuitem = changeable_menu.AppendItem("~Checkable Menu Item", dw.MENU_AUTO, 0, dw.TRUE, dw.TRUE, dw.NOMENU); - dw.Signal_connect(checkable_menuitem, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&menu_callback_func), dw.POINTER(&checkable_string)); + checkable_menuitem.ConnectClicked(func(window dw.HMENUITEM) int { dw.Messagebox("Menu Item Callback", dw.MB_OK | dw.MB_INFORMATION, "Checkable menu item selected"); return dw.FALSE }); + + noncheckable_menuitem = changeable_menu.AppendItem("~Non-checkable Menu Item", dw.MENU_AUTO, 0, dw.TRUE, dw.FALSE, dw.NOMENU); - dw.Signal_connect(noncheckable_menuitem, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&menu_callback_func), dw.POINTER(&noncheckable_string)); + noncheckable_menuitem.ConnectClicked(func(window dw.HMENUITEM) int { dw.Messagebox("Menu Item Callback", dw.MB_OK | dw.MB_INFORMATION, "Non-checkable menu item selected"); return dw.FALSE }); changeable_menu.AppendItem("~Disabled menu Item", dw.MENU_AUTO, dw.MIS_DISABLED | dw.MIS_CHECKED, dw.TRUE, dw.TRUE, dw.NOMENU); /* seperator */ changeable_menu.AppendItem(dw.MENU_SEPARATOR, dw.MENU_AUTO, 0, dw.TRUE, dw.FALSE, dw.NOMENU); menuitem = changeable_menu.AppendItem("~Menu Items Disabled", dw.MENU_AUTO, 0, dw.TRUE, dw.TRUE, dw.NOMENU); - dw.Signal_connect(menuitem, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&menutoggle_callback_func), nil); + menuitem.ConnectClicked(func(window dw.HMENUITEM) int { + if menu_enabled { + checkable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_DISABLED); + noncheckable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_DISABLED); + menu_enabled = false; + } else { + checkable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_ENABLED); + noncheckable_menuitem.SetStyle(dw.MIS_DISABLED, dw.MIS_ENABLED); + menu_enabled = true; + } + return dw.FALSE; + }); + + /* * Add the "Menu" menu to the menubar... */ @@ -843,7 +484,18 @@ menu = dw.MenuNew(0); menuitem = menu.AppendItem("~About", dw.MENU_AUTO, 0, dw.TRUE, dw.FALSE, dw.NOMENU); - dw.Signal_connect(menuitem, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&helpabout_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); + menuitem.ConnectClicked(func(window dw.HMENUITEM) int { + var env dw.Env; + + dw.Environment_query(&env); + message := fmt.Sprintf("dwindows test\n\nOS: %s %s %s Version: %d.%d.%d.%d\n\ndwindows Version: %d.%d.%d", + env.OSName, env.BuildDate, env.BuildTime, + env.MajorVersion, env.MinorVersion, env.MajorBuild, env.MinorBuild, + env.DWMajorVersion, env.DWMinorVersion, env.DWSubVersion); + dw.Messagebox("About dwindows", dw.MB_OK | dw.MB_INFORMATION, message); + return dw.FALSE; + }); + /* * Add the "Help" menu to the menubar... */ @@ -929,14 +581,57 @@ buttonbox.SetColor(dw.CLR_DARKCYAN, dw.CLR_PALEGRAY); okbutton.SetColor(dw.CLR_PALEGRAY, dw.CLR_DARKCYAN); - dw.Signal_connect(browsefilebutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&browse_file_callback_func), nil); - dw.Signal_connect(browsefolderbutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&browse_folder_callback_func), nil); - dw.Signal_connect(copybutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(©_clicked_callback_func), dw.HANDLE_TO_POINTER(copypastefield)); - dw.Signal_connect(pastebutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&paste_clicked_callback_func), dw.HANDLE_TO_POINTER(copypastefield)); - dw.Signal_connect(okbutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&beep_callback_func), nil); - dw.Signal_connect(cancelbutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&exit_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); - dw.Signal_connect(cursortogglebutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&cursortoggle_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); - dw.Signal_connect(colorchoosebutton, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&colorchoose_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); + browsefilebutton.ConnectClicked(func(window dw.HBUTTON) int { + tmp := dw.FileBrowse("Pick a file", "dwtest.c", "c", dw.FILE_OPEN); + if len(tmp) > 0 { + current_file = tmp; + entryfield.SetText(current_file); + read_file(); + current_col = 0; + current_row = 0; + update_render(); + } + copypastefield.SetFocus(); + return dw.FALSE; + }); + + browsefolderbutton.ConnectClicked(func(window dw.HBUTTON) int { + tmp := dw.FileBrowse("Pick a folder", ".", "c", dw.DIRECTORY_OPEN); + fmt.Printf("Folder picked: %s\n", tmp); + return dw.FALSE; + }); + copybutton.ConnectClicked(func(button dw.HBUTTON) int { + test := copypastefield.GetText(); + + if len(test) > 0 { + dw.ClipboardSetText(test); + } + entryfield.SetFocus(); + return dw.TRUE; + }); + pastebutton.ConnectClicked(func(button dw.HBUTTON) int { + test := dw.ClipboardGetText(); + + if len(test) > 0 { + copypastefield.SetText(test); + } + return dw.TRUE; + }); + okbutton.ConnectClicked(func(window dw.HBUTTON) int { timerid.Disconnect(); return dw.TRUE; }); + cancelbutton.ConnectClicked(func(window dw.HBUTTON) int { return exit_handler(); }); + cursortogglebutton.ConnectClicked(func(window dw.HBUTTON) int { + if cursor_arrow { + cursortogglebutton.SetText("Set Cursor pointer - ARROW"); + mainwindow.SetPointer(dw.POINTER_CLOCK); + cursor_arrow = false; + } else { + cursortogglebutton.SetText("Set Cursor pointer - CLOCK"); + mainwindow.SetPointer(dw.POINTER_DEFAULT); + cursor_arrow = true; + } + return dw.FALSE; + }); + colorchoosebutton.ConnectClicked(func(window dw.HBUTTON) int { current_color = dw.Color_choose(current_color); return dw.FALSE;}); } // Create Page 2 @@ -1043,19 +738,86 @@ dw.Messagebox("DWTest", dw.MB_OK | dw.MB_INFORMATION, fmt.Sprintf("Width: %d Height: %d\n", font_width, font_height)); text1pm.DrawRect(dw.DRAW_FILL | dw.DRAW_NOAA, 0, 0, font_width * width1, font_height * rows); text2pm.DrawRect(dw.DRAW_FILL | dw.DRAW_NOAA, 0, 0, font_width * cols, font_height * rows); - dw.Signal_connect(textbox1, dw.SIGNAL_BUTTON_PRESS, dw.SIGNAL_FUNC(&context_menu_event_func), nil); - dw.Signal_connect(textbox1, dw.SIGNAL_EXPOSE, dw.SIGNAL_FUNC(&text_expose_func), nil); - dw.Signal_connect(textbox2, dw.SIGNAL_EXPOSE, dw.SIGNAL_FUNC(&text_expose_func), nil); - dw.Signal_connect(textbox2, dw.SIGNAL_CONFIGURE, dw.SIGNAL_FUNC(&configure_event_func), nil); - dw.Signal_connect(textbox2, dw.SIGNAL_MOTION_NOTIFY, dw.SIGNAL_FUNC(&motion_notify_event_func), dw.POINTER(uintptr(1))); - dw.Signal_connect(textbox2, dw.SIGNAL_BUTTON_PRESS, dw.SIGNAL_FUNC(&motion_notify_event_func), nil); - dw.Signal_connect(hscrollbar, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(&scrollbar_valuechanged_callback_func), dw.HANDLE_TO_POINTER(status1)); - dw.Signal_connect(vscrollbar, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(&scrollbar_valuechanged_callback_func), dw.HANDLE_TO_POINTER(status1)); - dw.Signal_connect(imagestretchcheck, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&refresh_callback_func), nil); - dw.Signal_connect(button1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&refresh_callback_func), nil); - dw.Signal_connect(button2, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&print_callback_func), nil); - dw.Signal_connect(rendcombo, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(&render_select_event_callback_func), nil); - dw.Signal_connect(mainwindow, dw.SIGNAL_KEY_PRESS, dw.SIGNAL_FUNC(&keypress_callback_func), nil); + textbox1.ConnectButtonPress(func(window dw.HRENDER, x int, y int, buttonmask int) int { context_menu(); return dw.TRUE; }); + textbox1.ConnectExpose(func(hwnd dw.HRENDER, x int, y int, width int, height int) int { return text_expose(hwnd); }); + textbox2.ConnectExpose(func(hwnd dw.HRENDER, x int, y int, width int, height int) int { return text_expose(hwnd); }); + textbox2.ConnectConfigure(func(hwnd dw.HRENDER, width int, height int) int { + old1 := text1pm; + old2 := text2pm; + depth := dw.ColorDepthGet(); + + rows = height / font_height; + cols = width / font_width; + + /* Create new pixmaps with the current sizes */ + text1pm = dw.PixmapNew(textbox1, uint(font_width*(width1)), uint(height), depth); + text2pm = dw.PixmapNew(textbox2, uint(width), uint(height), depth); + + /* Make sure the side area is cleared */ + dw.ColorForegroundSet(dw.CLR_WHITE); + text1pm.DrawRect(dw.DRAW_FILL | dw.DRAW_NOAA, 0, 0, dw.Pixmap_width(text1pm), dw.Pixmap_height(text1pm)); + + /* Destroy the old pixmaps */ + old1.Destroy(); + old2.Destroy(); + + /* Update scrollbar ranges with new values */ + hscrollbar.SetRange(uint(max_linewidth), uint(cols)); + vscrollbar.SetRange(uint(len(lines)), uint(rows)); + + /* Redraw the window */ + update_render(); + return dw.TRUE; + }); + textbox2.ConnectMotion(func(window dw.HRENDER, x int, y int, buttonmask int) int { status2.SetText(fmt.Sprintf("motion_notify: %dx%d", x, y)); return dw.FALSE; }); + textbox2.ConnectButtonPress(func(window dw.HRENDER, x int, y int, buttonmask int) int { status2.SetText(fmt.Sprintf("button_press: %dx%d", x, y)); return dw.FALSE; }); + hscrollbar.ConnectValueChanged(func(hwnd dw.HSCROLLBAR, value int) int { + current_col = value; + status1.SetText(fmt.Sprintf("Row:%d Col:%d Lines:%d Cols:%d", current_row, current_col, len(lines), max_linewidth)); + update_render(); + return dw.FALSE; + }); + vscrollbar.ConnectValueChanged(func(hwnd dw.HSCROLLBAR, value int) int { + current_row = value; + status1.SetText(fmt.Sprintf("Row:%d Col:%d Lines:%d Cols:%d", current_row, current_col, len(lines), max_linewidth)); + update_render(); + return dw.FALSE; + }); + imagestretchcheck.ConnectClicked(func(window dw.HBUTTON) int { update_render(); return dw.FALSE; }); + button1.ConnectClicked(func(window dw.HBUTTON) int { update_render(); return dw.FALSE; }); + button2.ConnectClicked(func(window dw.HBUTTON) int { print_callback(); return dw.FALSE; }); + rendcombo.ConnectListSelect(func(window dw.HLISTBOX, index int) int { + if index != render_type { + if index == 2 { + hscrollbar.SetRange(uint(max_linewidth), uint(cols)); + hscrollbar.SetPos(0); + vscrollbar.SetRange(uint(len(lines)), uint(rows)); + vscrollbar.SetPos(0); + current_col = 0; + current_row = 0; + } else { + hscrollbar.SetRange(0, 0); + hscrollbar.SetPos(0); + vscrollbar.SetRange(0, 0); + vscrollbar.SetPos(0); + } + render_type = index; + update_render(); + } + return dw.FALSE; + }); + mainwindow.ConnectKeyPress(func(window dw.HWND, ch uint8, vk int, state int, utf8 string) int { + var message string + + if ch != 0 { + message = fmt.Sprintf("Key: %c(%d) Modifiers: %s(%d) utf8 %s", ch, ch, resolve_keymodifiers(state), state, utf8); + } else { + message = fmt.Sprintf("Key: %s(%d) Modifiers: %s(%d) utf8 %s", resolve_keyname(vk), vk, resolve_keymodifiers(state), state, utf8); + } + status1.SetText(message); + return dw.FALSE; + }); + dw.Taskbar_insert(textbox1, fileicon, "DWTest"); } @@ -1080,8 +842,16 @@ notebookbox3.PackStart(tree_status, 100, -1, dw.TRUE, dw.FALSE, 1); /* set up our signal trappers... */ - 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)); + tree.ConnectItemContext(func(window dw.HTREE, text string, x int, y int, itemdata dw.POINTER) int { + tree_status.SetText(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))); + return dw.FALSE; + }); + tree.ConnectItemSelect(func(window dw.HTREE, item dw.HTREEITEM, text string, itemdata dw.POINTER) int { + tree_status.SetText(fmt.Sprintf("DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", + dw.HANDLE_TO_UINTPTR(window), dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata))); + return dw.FALSE; + }); t1 := tree.Insert("tree folder 1", foldericon, dw.NOHTREEITEM, dw.POINTER(uintptr(1))); t2 := tree.Insert("tree folder 2", foldericon, dw.NOHTREEITEM, dw.POINTER(uintptr(2))); @@ -1161,10 +931,57 @@ mle_point = container_mle.Import(fmt.Sprintf("[%d]\r\n\r\n", mle_point), mle_point); container_mle.SetCursor(mle_point); /* connect our event trappers... */ - dw.Signal_connect(container, dw.SIGNAL_ITEM_ENTER, dw.SIGNAL_FUNC(&item_enter_cb_func), dw.HANDLE_TO_POINTER(container_status)); - dw.Signal_connect(container, dw.SIGNAL_ITEM_CONTEXT, dw.SIGNAL_FUNC(&item_context_cb_func), dw.HANDLE_TO_POINTER(container_status)); - dw.Signal_connect(container, dw.SIGNAL_ITEM_SELECT, dw.SIGNAL_FUNC(&container_select_cb_func), dw.HANDLE_TO_POINTER(container_status)); - dw.Signal_connect(container, dw.SIGNAL_COLUMN_CLICK, dw.SIGNAL_FUNC(&column_click_cb_func), dw.HANDLE_TO_POINTER(container_status)); + container.ConnectItemEnter(func(window dw.HCONTAINER, text string) int { + container_status.SetText(fmt.Sprintf("DW_SIGNAL_ITEM_ENTER: Window: %x Text: %s", dw.HANDLE_TO_UINTPTR(window), text)); + return dw.FALSE; + }); + container.ConnectItemContext(func(window dw.HCONTAINER, text string, x int, y int, itemdata dw.POINTER) int { + container_status.SetText(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))); + return dw.FALSE; + }); + + container.ConnectItemSelect(func(window dw.HCONTAINER, item dw.HTREEITEM, text string, itemdata dw.POINTER) int { + message := fmt.Sprintf("DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", + dw.HANDLE_TO_UINTPTR(window), dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata)); + container_status.SetText(message); + mle_point = container_mle.Import(message, mle_point); + str := container.QueryStart(dw.CRA_SELECTED); + for len(str) > 0 { + mle_point = container_mle.Import(fmt.Sprintf("Selected: %s\r\n", str), mle_point); + str = container.QueryNext(dw.CRA_SELECTED); + } + /* Make the last inserted point the cursor location */ + container_mle.SetCursor(mle_point); + /* set the details of item 0 to new data */ + container.ChangeFile(0, "new data", fileicon); + container.ChangeItemULong(1, 0, 999); + return dw.FALSE; + }); + + container.ConnectColumnClick(func(window dw.HCONTAINER, column_num int) int { + var stype = "Unknown"; + + if column_num == 0 { + stype = "Filename"; + } else { + column_type := window.GetColumnType(column_num-1); + if column_type == dw.CFA_STRING { + stype = "String"; + } else if column_type == dw.CFA_ULONG { + stype = "ULong"; + } else if column_type == dw.CFA_DATE { + stype = "Date"; + } else if column_type == dw.CFA_TIME { + stype = "Time"; + } else if column_type == dw.CFA_BITMAPORICON { + stype = "BitmapOrIcon"; + } + } + container_status.SetText(fmt.Sprintf("DW_SIGNAL_COLUMN_CLICK: Window: %x Column: %d Type: %s Itemdata: %x", + dw.HANDLE_TO_UINTPTR(window), column_num, stype)); + return dw.FALSE; + }); } // Page 5 @@ -1191,11 +1008,11 @@ buttonboxperm.SetColor(dw.CLR_WHITE, dw.CLR_WHITE); abutton1 := dw.BitmapButtonNewFromFile("Top Button", 0, fmt.Sprintf("%s/%s", SRCROOT, FILE_ICON_NAME)); buttonboxperm.PackStart(abutton1, 100, 30, dw.FALSE, dw.FALSE, 0); - dw.Signal_connect(abutton1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&button_callback_func), nil); + abutton1.ConnectClicked(func(window dw.HBUTTON) int { button_callback(); return dw.TRUE; }); buttonboxperm.PackStart(dw.NOHWND, 25, 5, dw.FALSE, dw.FALSE, 0); abutton2 := dw.BitmapButtonNewFromFile("Bottom", 0, fmt.Sprintf("%s/%s", SRCROOT, FOLDER_ICON_NAME)); buttonsbox.PackStart(abutton2, 25, 25, dw.FALSE, dw.FALSE, 0); - dw.Signal_connect(abutton2, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&button_callback_func), nil); + abutton2.ConnectClicked(func(window dw.HBUTTON) int { button_callback(); return dw.TRUE; }); abutton2.SetBitmap(0, FILE_ICON_NAME); create_button(); @@ -1208,14 +1025,23 @@ /* dw_window_set_text( combobox, "initial value"); */ - dw.Signal_connect(combobox1, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(&combobox_select_event_callback_func), nil); + combobox1.ConnectListSelect(func(window dw.HLISTBOX, index int) int { + fmt.Printf("got combobox_select_event for index: %d, iteration: %d\n", index, iteration); + iteration++; + return dw.FALSE; + }); + combobox2 = dw.ComboboxNew("joe", 0); /* no point in specifying an initial value */ combox.PackStart(combobox2, -1, -1, dw.TRUE, dw.FALSE, 0); /* dw_window_set_text( combobox, "initial value"); */ - dw.Signal_connect(combobox2, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(&combobox_select_event_callback_func), nil); + combobox2.ConnectListSelect(func(window dw.HLISTBOX, index int) int { + fmt.Printf("got combobox_select_event for index: %d, iteration: %d\n", index, iteration); + iteration++; + return dw.FALSE; + }); /* add LOTS of items */ fmt.Printf("before appending 500 items to combobox using dw_listbox_list_append()\n"); text := make([]string, 500); @@ -1232,11 +1058,13 @@ combox.PackStart(spinbutton, -1, -1, dw.TRUE, dw.FALSE, 0); spinbutton.SetLimits(100, 1); spinbutton.SetPos(30); - dw.Signal_connect(spinbutton, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(&spinbutton_valuechanged_callback_func), nil); + spinbutton.ConnectValueChanged(func(hwnd dw.HSPINBUTTON, value int) int { dw.Messagebox("DWTest", dw.MB_OK, fmt.Sprintf("New value from spinbutton: %d\n", value)); return dw.FALSE; }); + /* 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); - dw.Signal_connect(slider, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(&slider_valuechanged_callback_func), nil); + slider.ConnectValueChanged(func(hwnd dw.HSLIDER, value int) int { percent.SetPos(uint(value * 10)); return dw.FALSE; }); + /* make a percent */ percent = dw.PercentNew(0); combox.PackStart(percent, -1, -1, dw.TRUE, dw.FALSE, 0); @@ -1248,19 +1076,22 @@ abutton1 := dw.BitmapButtonNewFromFile("Empty image. Should be under Top button", 0, "junk"); filetoolbarbox.PackStart(abutton1, 25, 25, dw.FALSE, dw.FALSE, 0); - dw.Signal_connect(abutton1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&change_color_red_callback_func), nil); + abutton1.ConnectClicked(func(window dw.HBUTTON) int { buttonsbox.SetColor(dw.CLR_RED, dw.CLR_RED); return dw.FALSE; }); + filetoolbarbox.PackStart(dw.NOHWND, 25, 5, dw.FALSE, dw.FALSE, 0); abutton1 = dw.BitmapButtonNewFromFile("A borderless bitmapbitton", 0, fmt.Sprintf("%s/%s", SRCROOT, FOLDER_ICON_NAME)); filetoolbarbox.PackStart(abutton1, 25, 25, dw.FALSE, dw.FALSE, 0); - dw.Signal_connect(abutton1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&change_color_yellow_callback_func), nil); + abutton1.ConnectClicked(func(window dw.HBUTTON) int { buttonsbox.SetColor(dw.CLR_YELLOW, dw.CLR_YELLOW); return dw.FALSE; }); + filetoolbarbox.PackStart(dw.NOHWND, 25, 5, dw.FALSE, dw.FALSE, 0); abutton1.SetStyle(dw.BS_NOBORDER, dw.BS_NOBORDER); //abutton1 = dw.Bitmapbutton_new_from_data("A button from data", 0, folder_ico, 1718 ); abutton1 = dw.BitmapButtonNewFromFile("A button from data", 0, "junk"); filetoolbarbox.PackStart(abutton1, 25, 25, dw.FALSE, dw.FALSE, 0); - dw.Signal_connect(abutton1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&percent_button_box_callback_func), nil); + abutton1.ConnectClicked(func(window dw.HBUTTON) int { percent.SetPos(dw.PERCENT_INDETERMINATE); return dw.FALSE; }); + filetoolbarbox.PackStart(dw.NOHWND, 25, 5, dw.FALSE, dw.FALSE, 0); } @@ -1274,7 +1105,7 @@ abutton1 := dw.ButtonNew("Show Adjustments", 0); scrollbox.PackStart(abutton1, -1, 30, dw.FALSE, dw.FALSE, 0 ); - dw.Signal_connect(abutton1, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(&scrollbox_button_callback_func), nil); + abutton1.ConnectClicked(func(window dw.HBUTTON) int { _, pos := scrollbox.GetPos(); _, rng := scrollbox.GetRange(); fmt.Printf("Pos %d Range %d\n", pos, rng); return dw.FALSE; }); for i = 0; i < MAX_WIDGETS; i++ { tmpbox := dw.BoxNew(dw.HORZ, 0); @@ -1321,7 +1152,10 @@ } notebook := dw.NotebookNew(1, dw.TRUE); notebookbox.PackStart(notebook, 100, 100, dw.TRUE, dw.TRUE, 0); - dw.Signal_connect(notebook, dw.SIGNAL_SWITCH_PAGE, dw.SIGNAL_FUNC(&switch_page_callback_func), nil); + notebook.ConnectSwitchPage(func(window dw.HNOTEBOOK, page_num dw.HNOTEPAGE) int { + fmt.Printf("DW_SIGNAL_SWITCH_PAGE: PageNum: %d\n", dw.HNOTEPAGE_TO_UINT(page_num)); + return dw.FALSE; + }); notebookbox1 = dw.BoxNew(dw.VERT, 5); notebookpage1 := notebook.PageNew(0, dw.TRUE); @@ -1387,7 +1221,7 @@ /* Set the default field */ mainwindow.Default(copypastefield); - dw.Signal_connect(mainwindow, dw.SIGNAL_DELETE, dw.SIGNAL_FUNC(&exit_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); + mainwindow.ConnectDelete(func(window dw.HWND) int { return exit_handler(); }); /* * The following is a special case handler for the Mac and other platforms which contain * an application object which can be closed. It function identically to a window delete/close @@ -1395,8 +1229,11 @@ * handled or you allow the default handler to take place the entire application will close. * On platforms which do not have an application object this line will be ignored. */ - dw.Signal_connect(dw.DESKTOP, dw.SIGNAL_DELETE, dw.SIGNAL_FUNC(&exit_callback_func), dw.HANDLE_TO_POINTER(mainwindow)); - timerid = dw.Timer_connect(2000, dw.SIGNAL_FUNC(&timer_callback_func), nil); + dw.DESKTOP.ConnectDelete(func(window dw.HWND) int { return exit_handler(); }); + timerid = dw.TimerNew(); + /* Return dw.TRUE so we get called again */ + timerid.Connect(func() int { dw.Beep(200, 200); return dw.TRUE; }, 2000); + mainwindow.SetSize(640, 550); mainwindow.Show();