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)