Mercurial > godwindows
changeset 107:14e1582e6297
Port the new HTML code to dwootest using object references and closures.
author | Brian Smith <brian@dbsoft.org> |
---|---|
date | Tue, 09 Nov 2021 09:12:23 -0600 |
parents | 6e4d43f389d3 |
children | 279735652a39 |
files | dw/dw.go dwootest/dwootest.go dwtest/dwtest.go |
diffstat | 3 files changed, 127 insertions(+), 51 deletions(-) [+] |
line wrap: on
line diff
--- a/dw/dw.go Tue Nov 09 07:48:36 2021 -0600 +++ b/dw/dw.go Tue Nov 09 09:12:23 2021 -0600 @@ -5189,7 +5189,7 @@ } // Connect a function or closure to a HTML javascript result event. -func (window HHTML) ConnectResult(sigfunc func(window HHTML, status int, result string) int) { +func (window HHTML) ConnectResult(sigfunc func(window HHTML, status int, result string, script_data POINTER) int) { csigname := C.CString(C.DW_SIGNAL_HTML_RESULT) defer C.free(unsafe.Pointer(csigname))
--- a/dwootest/dwootest.go Tue Nov 09 07:48:36 2021 -0600 +++ b/dwootest/dwootest.go Tue Nov 09 09:12:23 2021 -0600 @@ -1152,6 +1152,93 @@ filetoolbarbox.PackStart(dw.NOHWND, 25, 5, dw.FALSE, dw.FALSE, 0) } +// Page 7 +func html_add(notebookbox7 dw.HBOX) { + rawhtml := dw.HtmlNew(1001) + if rawhtml.GetHandle() != 0 { + hbox := dw.BoxNew(dw.HORZ, 0) + javascript := dw.ComboboxNew("", 0) + + javascript.Append("window.scrollTo(0,500);") + javascript.Append("window.document.title;") + javascript.Append("window.navigator.userAgent;") + + notebookbox7.PackStart(rawhtml, 0, 100, dw.TRUE, dw.FALSE, 0) + rawhtml.Raw("<html><body><center><h1>dwtest</h1></center></body></html>") + html := dw.HtmlNew(1002) + + notebookbox7.PackStart(hbox, 0, 0, dw.TRUE, dw.FALSE, 0) + + /* Add navigation buttons */ + item := dw.ButtonNew("Back", 0) + hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0) + item.ConnectClicked(func(window dw.HBUTTON) int { + html.Action(dw.HTML_GOBACK) + return dw.FALSE + }) + + item = dw.ButtonNew("Forward", 0) + hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0) + item.ConnectClicked(func(window dw.HBUTTON) int { + html.Action(dw.HTML_GOFORWARD) + return dw.FALSE + }) + + /* Put in some extra space */ + hbox.PackStart(dw.NOHWND, 5, 1, dw.FALSE, dw.FALSE, 0) + + item = dw.ButtonNew("Reload", 0) + hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0) + item.ConnectClicked(func(window dw.HBUTTON) int { + html.Action(dw.HTML_RELOAD) + return dw.FALSE + }) + + /* Put in some extra space */ + hbox.PackStart(dw.NOHWND, 5, 1, dw.FALSE, dw.FALSE, 0) + hbox.PackStart(javascript, -1, -1, dw.TRUE, dw.FALSE, 0) + + item = dw.ButtonNew("Run", 0) + hbox.PackStart(item, -1, -1, dw.FALSE, dw.FALSE, 0) + item.ConnectClicked(func(window dw.HBUTTON) int { + script := dw.Window_get_text(javascript) + html.JavascriptRun(script, nil) + return dw.FALSE + }) + //javascript.ClickDefault(item) + + notebookbox7.PackStart(html, 0, 100, dw.TRUE, dw.TRUE, 0) + htmlstatus := dw.StatusTextNew("HTML status loading...", 0) + notebookbox7.PackStart(htmlstatus, 100, -1, dw.TRUE, dw.FALSE, 1) + + html.ConnectChanged(func(window dw.HHTML, status int, url string) int { + statusnames := []string{"none", "started", "redirect", "loading", "complete"} + + if status < 5 { + htmlstatus.SetText("Status " + statusnames[status] + ": " + url) + } + return dw.FALSE + }) + html.ConnectResult(func(window dw.HHTML, status int, result string, script_data dw.POINTER) int { + var style = dw.MB_INFORMATION + var message = result + if status != dw.ERROR_NONE { + style = dw.MB_ERROR + } + if result == "" { + message = "Javascript result is not a string value" + } + dw.Messagebox("Javascript Result", style, message) + return dw.FALSE + }) + + html.URL("https://dbsoft.org/dw_help.php") + } else { + label := dw.TextNew("HTML widget not available.", 0) + notebookbox7.PackStart(label, 0, 100, dw.TRUE, dw.TRUE, 0) + } +} + // Page 8 func scrollbox_add(notebookbox8 dw.HBOX) { var i int @@ -1393,18 +1480,7 @@ notebookpage7 := notebook.PageNew(1, dw.FALSE) notebookpage7.Pack(notebookbox7) notebookpage7.SetText("html") - - rawhtml := dw.HtmlNew(1001) - if rawhtml.GetHandle() != 0 { - notebookbox7.PackStart(rawhtml, 0, 100, dw.TRUE, dw.FALSE, 0) - rawhtml.Raw("<html><body><center><h1>dwtest</h1></center></body></html>") - html := dw.HtmlNew(1002) - notebookbox7.PackStart(html, 0, 100, dw.TRUE, dw.TRUE, 0) - html.URL("http://dwindows.netlabs.org") - } else { - label := dw.Text_new("HTML widget not available.", 0) - notebookbox7.PackStart(label, 0, 100, dw.TRUE, dw.TRUE, 0) - } + html_add(notebookbox7) notebookbox8 := dw.BoxNew(dw.VERT, 7) notebookpage8 := notebook.PageNew(1, dw.FALSE)
--- a/dwtest/dwtest.go Tue Nov 09 07:48:36 2021 -0600 +++ b/dwtest/dwtest.go Tue Nov 09 09:12:23 2021 -0600 @@ -1017,10 +1017,10 @@ func web_html_result(html dw.HHTML, status int, result string, script_data dw.POINTER, user_data dw.POINTER) int { var style = dw.MB_INFORMATION var message = result - if(status != dw.ERROR_NONE) { + if status != dw.ERROR_NONE { style = dw.MB_ERROR } - if(result == "") { + if result == "" { message = "Javascript result is not a string value" } dw.Messagebox("Javascript Result", style, message) @@ -1029,10 +1029,10 @@ /* Handle web html changed */ func web_html_changed(html dw.HHTML, status int, url string, data dw.POINTER) int { - statusnames := []string{"none", "started", "redirect", "loading", "complete" } + statusnames := []string{"none", "started", "redirect", "loading", "complete"} - if(status < 5) { - dw.Window_set_text(dw.POINTER_TO_HANDLE(data), "Status " + statusnames[status] + ": " + url) + if status < 5 { + dw.Window_set_text(dw.POINTER_TO_HANDLE(data), "Status "+statusnames[status]+": "+url) } return FALSE } @@ -1498,53 +1498,53 @@ // Page 7 func html_add() { - rawhtml := dw.Html_new(1001); + rawhtml := dw.Html_new(1001) if rawhtml.GetHandle() != 0 { - hbox := dw.Box_new(dw.HORZ, 0); - javascript := dw.Combobox_new("", 0); + hbox := dw.Box_new(dw.HORZ, 0) + javascript := dw.Combobox_new("", 0) - dw.Listbox_append(javascript, "window.scrollTo(0,500);"); - dw.Listbox_append(javascript, "window.document.title;"); - dw.Listbox_append(javascript, "window.navigator.userAgent;"); + dw.Listbox_append(javascript, "window.scrollTo(0,500);") + dw.Listbox_append(javascript, "window.document.title;") + dw.Listbox_append(javascript, "window.navigator.userAgent;") - 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, 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, hbox, 0, 0, TRUE, FALSE, 0); + dw.Box_pack_start(notebookbox7, hbox, 0, 0, TRUE, FALSE, 0) /* Add navigation buttons */ - item := dw.Button_new("Back", 0); - dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0); - dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_back_clicked), dw.HANDLE_TO_POINTER(html)); + item := dw.Button_new("Back", 0) + dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0) + dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_back_clicked), dw.HANDLE_TO_POINTER(html)) - item = dw.Button_new("Forward", 0); - dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0); - dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_forward_clicked), dw.HANDLE_TO_POINTER(html)); + item = dw.Button_new("Forward", 0) + dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0) + dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_forward_clicked), dw.HANDLE_TO_POINTER(html)) /* Put in some extra space */ - dw.Box_pack_start(hbox, dw.NOHWND, 5, 1, FALSE, FALSE, 0); + dw.Box_pack_start(hbox, dw.NOHWND, 5, 1, FALSE, FALSE, 0) - item = dw.Button_new("Reload", 0); - dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0); - dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_reload_clicked), dw.HANDLE_TO_POINTER(html)); + item = dw.Button_new("Reload", 0) + dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0) + dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_reload_clicked), dw.HANDLE_TO_POINTER(html)) /* Put in some extra space */ - dw.Box_pack_start(hbox, dw.NOHWND, 5, 1, FALSE, FALSE, 0); - dw.Box_pack_start(hbox, javascript, -1, -1, TRUE, FALSE, 0); + dw.Box_pack_start(hbox, dw.NOHWND, 5, 1, FALSE, FALSE, 0) + dw.Box_pack_start(hbox, javascript, -1, -1, TRUE, FALSE, 0) - item = dw.Button_new("Run", 0); - dw.Window_set_data(item, "javascript", dw.HANDLE_TO_POINTER(javascript)); - dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0); - dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_run_clicked), dw.HANDLE_TO_POINTER(html)); - dw.Window_click_default(javascript, item); + item = dw.Button_new("Run", 0) + dw.Window_set_data(item, "javascript", dw.HANDLE_TO_POINTER(javascript)) + dw.Box_pack_start(hbox, item, -1, -1, FALSE, FALSE, 0) + dw.Signal_connect(item, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(web_run_clicked), dw.HANDLE_TO_POINTER(html)) + dw.Window_click_default(javascript, item) - dw.Box_pack_start(notebookbox7, html, 0, 100, TRUE, TRUE, 0); - dw.Html_url(html, "https://dbsoft.org/dw_help.php"); - htmlstatus := dw.Status_text_new("HTML status loading...", 0); - dw.Box_pack_start(notebookbox7, htmlstatus, 100, -1, TRUE, FALSE, 1); - dw.Signal_connect(html, dw.SIGNAL_HTML_CHANGED, dw.SIGNAL_FUNC(web_html_changed), dw.HANDLE_TO_POINTER(htmlstatus)); - dw.Signal_connect(html, dw.SIGNAL_HTML_RESULT, dw.SIGNAL_FUNC(web_html_result), dw.HANDLE_TO_POINTER(javascript)); + dw.Box_pack_start(notebookbox7, html, 0, 100, TRUE, TRUE, 0) + dw.Html_url(html, "https://dbsoft.org/dw_help.php") + htmlstatus := dw.Status_text_new("HTML status loading...", 0) + dw.Box_pack_start(notebookbox7, htmlstatus, 100, -1, TRUE, FALSE, 1) + dw.Signal_connect(html, dw.SIGNAL_HTML_CHANGED, dw.SIGNAL_FUNC(web_html_changed), dw.HANDLE_TO_POINTER(htmlstatus)) + dw.Signal_connect(html, dw.SIGNAL_HTML_RESULT, dw.SIGNAL_FUNC(web_html_result), dw.HANDLE_TO_POINTER(javascript)) } else { label := dw.Text_new("HTML widget not available.", 0) dw.Box_pack_start(notebookbox7, label, 0, 100, TRUE, TRUE, 0)