changeset 111:a01a9f21ed83

Add word wrap, color, font style and size options to the container tab.
author Brian Smith <brian@dbsoft.org>
date Fri, 12 Nov 2021 03:09:46 -0600
parents 692733612332
children 2307b192b129
files dw/dw.go dwootest/dwootest.go dwtest/dwtest.go
diffstat 3 files changed, 370 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dw/dw.go	Thu Nov 11 18:24:09 2021 -0600
+++ b/dw/dw.go	Fri Nov 12 03:09:46 2021 -0600
@@ -1252,8 +1252,13 @@
 }
 
 // Check if two window handles are the same window
-func Window_compare(handle1 HANDLE, handle2 HANDLE) int {
-	return int(C.go_window_compare(handle1.GetHandle(), handle2.GetHandle()))
+func Window_compare(handle1 HANDLE, handle2 HANDLE) bool {
+	return C.go_window_compare(handle1.GetHandle(), handle2.GetHandle()) != 0
+}
+
+// Check if two window handles are the same window
+func (window HWND) Compare(other HANDLE) bool {
+	return Window_compare(window, other)
 }
 
 // Causes entire window to be invalidated and redrawn.
--- a/dwootest/dwootest.go	Thu Nov 11 18:24:09 2021 -0600
+++ b/dwootest/dwootest.go	Fri Nov 12 03:09:46 2021 -0600
@@ -477,6 +477,105 @@
 	return "none"
 }
 
+func color_combobox() dw.HLISTBOX {
+	combobox := dw.ComboboxNew("DW_CLR_DEFAULT", 0)
+
+	combobox.Append("DW_CLR_DEFAULT")
+	combobox.Append("DW_CLR_BLACK")
+	combobox.Append("DW_CLR_DARKRED")
+	combobox.Append("DW_CLR_DARKGREEN")
+	combobox.Append("DW_CLR_BROWN")
+	combobox.Append("DW_CLR_DARKBLUE")
+	combobox.Append("DW_CLR_DARKPINK")
+	combobox.Append("DW_CLR_DARKCYAN")
+	combobox.Append("DW_CLR_PALEGRAY")
+	combobox.Append("DW_CLR_DARKGRAY")
+	combobox.Append("DW_CLR_RED")
+	combobox.Append("DW_CLR_GREEN")
+	combobox.Append("DW_CLR_YELLOW")
+	combobox.Append("DW_CLR_BLUE")
+	combobox.Append("DW_CLR_PINK")
+	combobox.Append("DW_CLR_CYAN")
+	combobox.Append("DW_CLR_WHITE")
+	return combobox
+}
+
+func combobox_color(colortext string) dw.COLOR {
+	color := dw.CLR_DEFAULT
+
+	if colortext == "DW_CLR_BLACK" {
+		color = dw.CLR_BLACK
+	} else if colortext == "DW_CLR_DARKRED" {
+		color = dw.CLR_DARKRED
+	} else if colortext == "DW_CLR_DARKGREEN" {
+		color = dw.CLR_DARKGREEN
+	} else if colortext == "DW_CLR_BROWN" {
+		color = dw.CLR_BROWN
+	} else if colortext == "DW_CLR_DARKBLUE" {
+		color = dw.CLR_DARKBLUE
+	} else if colortext == "DW_CLR_DARKPINK" {
+		color = dw.CLR_DARKPINK
+	} else if colortext == "DW_CLR_DARKCYAN" {
+		color = dw.CLR_DARKCYAN
+	} else if colortext == "DW_CLR_PALEGRAY" {
+		color = dw.CLR_PALEGRAY
+	} else if colortext == "DW_CLR_DARKGRAY" {
+		color = dw.CLR_DARKGRAY
+	} else if colortext == "DW_CLR_RED" {
+		color = dw.CLR_RED
+	} else if colortext == "DW_CLR_GREEN" {
+		color = dw.CLR_GREEN
+	} else if colortext == "DW_CLR_YELLOW" {
+		color = dw.CLR_YELLOW
+	} else if colortext == "DW_CLR_BLUE" {
+		color = dw.CLR_BLUE
+	} else if colortext == "DW_CLR_PINK" {
+		color = dw.CLR_PINK
+	} else if colortext == "DW_CLR_CYAN" {
+		color = dw.CLR_CYAN
+	} else if colortext == "DW_CLR_WHITE" {
+		color = dw.CLR_WHITE
+	}
+
+	return color
+}
+
+func mle_color(hwnd dw.HLISTBOX, mlefore dw.HLISTBOX, mleback dw.HLISTBOX, container_mle dw.HMLE, pos int) {
+	fore := dw.CLR_DEFAULT
+	back := dw.CLR_DEFAULT
+
+	if dw.HWND(hwnd).Compare(mlefore) {
+		colortext := mlefore.GetText(pos)
+		fore = combobox_color(colortext)
+	} else {
+		text := dw.HWND(mlefore).GetText()
+
+		if text != "" {
+			fore = combobox_color(text)
+		}
+	}
+	if dw.HWND(hwnd).Compare(mleback) {
+		colortext := mleback.GetText(pos)
+		back = combobox_color(colortext)
+	} else {
+		text := dw.HWND(mleback).GetText()
+
+		if text != "" {
+			back = combobox_color(text)
+		}
+	}
+
+	container_mle.SetColor(fore, back)
+}
+
+func mle_font_set(mle dw.HMLE, fontsize int, fontname string) {
+	if fontname != "" {
+		mle.SetFont(fmt.Sprintf("%d.%s", fontsize, fontname))
+	} else {
+		mle.SetFont(fontname)
+	}
+}
+
 func button_callback(combobox1 dw.HLISTBOX, combobox2 dw.HLISTBOX, spinbutton dw.HSPINBUTTON, cal dw.HCALENDAR) {
 	idx := combobox1.Selected()
 	buf1 := combobox1.GetText(idx)
@@ -946,6 +1045,43 @@
 	containerbox := dw.BoxNew(dw.HORZ, 2)
 	notebookbox4.PackStart(containerbox, 500, 200, dw.TRUE, dw.TRUE, 0)
 
+	/* Add a word wrap/font style box */
+	hbox := dw.BoxNew(dw.HORZ, 0)
+
+	checkbox := dw.CheckButtonNew("Word wrap", 0)
+	hbox.PackStart(checkbox, -1, -1, dw.FALSE, dw.TRUE, 1)
+	text := dw.TextNew("Foreground:", 0)
+	text.SetStyle(dw.DT_VCENTER, dw.DT_VCENTER)
+	hbox.PackStart(text, -1, -1, dw.FALSE, dw.TRUE, 1)
+	mlefore := color_combobox()
+	hbox.PackStart(mlefore, 150, -1, dw.TRUE, dw.FALSE, 1)
+	text = dw.TextNew("Background:", 0)
+	text.SetStyle(dw.DT_VCENTER, dw.DT_VCENTER)
+	hbox.PackStart(text, -1, -1, dw.FALSE, dw.TRUE, 1)
+	mleback := color_combobox()
+	hbox.PackStart(mleback, 150, -1, dw.TRUE, dw.FALSE, 1)
+	checkbox.Set(dw.TRUE)
+	text = dw.TextNew("Font:", 0)
+	text.SetStyle(dw.DT_VCENTER, dw.DT_VCENTER)
+	hbox.PackStart(text, -1, -1, dw.FALSE, dw.TRUE, 1)
+	fontsize := dw.SpinButtonNew("9", 0)
+	hbox.PackStart(fontsize, -1, -1, dw.FALSE, dw.FALSE, 1)
+	fontsize.SetLimits(100, 5)
+	fontsize.SetPos(9)
+	fontname := dw.ComboboxNew("Default", 0)
+	fontname.Append("Default")
+	fontname.Append("Arial")
+	fontname.Append("Geneva")
+	fontname.Append("Verdana")
+	fontname.Append("Helvetica")
+	fontname.Append("DejaVu Sans")
+	fontname.Append("Times New Roman")
+	fontname.Append("Times New Roman Bold")
+	fontname.Append("Times New Roman Italic")
+	fontname.Append("Times New Roman Bold Italic")
+	hbox.PackStart(fontname, 150, -1, dw.TRUE, dw.FALSE, 1)
+	notebookbox4.PackStart(hbox, -1, -1, dw.TRUE, dw.FALSE, 1)
+
 	/* now a container area under this box */
 	container := dw.ContainerNew(100, dw.TRUE)
 	notebookbox4.PackStart(container, 500, 200, dw.TRUE, dw.FALSE, 1)
@@ -1054,6 +1190,46 @@
 			dw.HANDLE_TO_UINTPTR(window), column_num, stype))
 		return dw.FALSE
 	})
+
+	checkbox.ConnectClicked(func(window dw.HBUTTON) int {
+		container_mle.SetWordWrap(checkbox.Get())
+		return dw.TRUE
+	})
+
+	mlefore.ConnectListSelect(func(window dw.HLISTBOX, index int) int {
+		mle_color(window, mlefore, mleback, container_mle, index)
+		return dw.FALSE
+	})
+
+	mleback.ConnectListSelect(func(window dw.HLISTBOX, index int) int {
+		mle_color(window, mlefore, mleback, container_mle, index)
+		return dw.FALSE
+	})
+
+	fontname.ConnectListSelect(func(window dw.HLISTBOX, pos int) int {
+		font := fontname.GetText(pos)
+
+		if font == "Default" {
+			font = ""
+		}
+
+		mle_font_set(container_mle, fontsize.GetPos(), font)
+		return dw.FALSE
+	})
+
+	fontsize.ConnectValueChanged(func(window dw.HSPINBUTTON, size int) int {
+		font := dw.HWND(fontname).GetText()
+
+		if font != "" {
+			if font == "Default" {
+				font = ""
+			}
+			mle_font_set(container_mle, size, font)
+		} else {
+			mle_font_set(container_mle, size, "")
+		}
+		return dw.FALSE
+	})
 }
 
 // Page 5
--- a/dwtest/dwtest.go	Thu Nov 11 18:24:09 2021 -0600
+++ b/dwtest/dwtest.go	Fri Nov 12 03:09:46 2021 -0600
@@ -755,6 +755,146 @@
 }
 
 // Page 3 and 4 Callbacks
+func word_wrap_click_cb(wordwrap dw.HBUTTON, data dw.POINTER) int {
+	container_mle := dw.POINTER_TO_HANDLE(data)
+
+	dw.Mle_set_word_wrap(container_mle, dw.Checkbox_get(wordwrap))
+	return TRUE
+}
+
+func color_combobox() dw.HLISTBOX {
+	combobox := dw.Combobox_new("DW_CLR_DEFAULT", 0)
+
+	dw.Listbox_append(combobox, "DW_CLR_DEFAULT")
+	dw.Listbox_append(combobox, "DW_CLR_BLACK")
+	dw.Listbox_append(combobox, "DW_CLR_DARKRED")
+	dw.Listbox_append(combobox, "DW_CLR_DARKGREEN")
+	dw.Listbox_append(combobox, "DW_CLR_BROWN")
+	dw.Listbox_append(combobox, "DW_CLR_DARKBLUE")
+	dw.Listbox_append(combobox, "DW_CLR_DARKPINK")
+	dw.Listbox_append(combobox, "DW_CLR_DARKCYAN")
+	dw.Listbox_append(combobox, "DW_CLR_PALEGRAY")
+	dw.Listbox_append(combobox, "DW_CLR_DARKGRAY")
+	dw.Listbox_append(combobox, "DW_CLR_RED")
+	dw.Listbox_append(combobox, "DW_CLR_GREEN")
+	dw.Listbox_append(combobox, "DW_CLR_YELLOW")
+	dw.Listbox_append(combobox, "DW_CLR_BLUE")
+	dw.Listbox_append(combobox, "DW_CLR_PINK")
+	dw.Listbox_append(combobox, "DW_CLR_CYAN")
+	dw.Listbox_append(combobox, "DW_CLR_WHITE")
+	return combobox
+}
+
+func combobox_color(colortext string) dw.COLOR {
+	color := dw.CLR_DEFAULT
+
+	if colortext == "DW_CLR_BLACK" {
+		color = dw.CLR_BLACK
+	} else if colortext == "DW_CLR_DARKRED" {
+		color = dw.CLR_DARKRED
+	} else if colortext == "DW_CLR_DARKGREEN" {
+		color = dw.CLR_DARKGREEN
+	} else if colortext == "DW_CLR_BROWN" {
+		color = dw.CLR_BROWN
+	} else if colortext == "DW_CLR_DARKBLUE" {
+		color = dw.CLR_DARKBLUE
+	} else if colortext == "DW_CLR_DARKPINK" {
+		color = dw.CLR_DARKPINK
+	} else if colortext == "DW_CLR_DARKCYAN" {
+		color = dw.CLR_DARKCYAN
+	} else if colortext == "DW_CLR_PALEGRAY" {
+		color = dw.CLR_PALEGRAY
+	} else if colortext == "DW_CLR_DARKGRAY" {
+		color = dw.CLR_DARKGRAY
+	} else if colortext == "DW_CLR_RED" {
+		color = dw.CLR_RED
+	} else if colortext == "DW_CLR_GREEN" {
+		color = dw.CLR_GREEN
+	} else if colortext == "DW_CLR_YELLOW" {
+		color = dw.CLR_YELLOW
+	} else if colortext == "DW_CLR_BLUE" {
+		color = dw.CLR_BLUE
+	} else if colortext == "DW_CLR_PINK" {
+		color = dw.CLR_PINK
+	} else if colortext == "DW_CLR_CYAN" {
+		color = dw.CLR_CYAN
+	} else if colortext == "DW_CLR_WHITE" {
+		color = dw.CLR_WHITE
+	}
+
+	return color
+}
+
+func mle_color_cb(hwnd dw.HLISTBOX, pos int, data dw.POINTER) int {
+	hbox := dw.POINTER_TO_HANDLE(data)
+	mlefore := dw.POINTER_TO_HANDLE(dw.Window_get_data(hbox, "mlefore"))
+	mleback := dw.POINTER_TO_HANDLE(dw.Window_get_data(hbox, "mleback"))
+	fore := dw.CLR_DEFAULT
+	back := dw.CLR_DEFAULT
+
+	if dw.Window_compare(hwnd, mlefore) {
+		colortext := dw.Listbox_get_text(mlefore, pos)
+		fore = combobox_color(colortext)
+	} else {
+		text := dw.Window_get_text(mlefore)
+
+		if text != "" {
+			fore = combobox_color(text)
+		}
+	}
+	if dw.Window_compare(hwnd, mleback) {
+		colortext := dw.Listbox_get_text(mleback, pos)
+		back = combobox_color(colortext)
+	} else {
+		text := dw.Window_get_text(mleback)
+
+		if text != "" {
+			back = combobox_color(text)
+		}
+	}
+
+	dw.Window_set_color(container_mle, fore, back)
+	return FALSE
+}
+
+func mle_font_set(mle dw.HMLE, fontsize int, fontname string) {
+	if fontname != "" {
+		dw.Window_set_font(mle, fmt.Sprintf("%d.%s", fontsize, fontname))
+	} else {
+		dw.Window_set_font(mle, fontname)
+	}
+}
+
+func mle_fontname_cb(hwnd dw.HLISTBOX, pos int, data dw.POINTER) int {
+	hbox := dw.POINTER_TO_HANDLE(data)
+	fontsize := dw.POINTER_TO_HANDLE(dw.Window_get_data(hbox, "fontsize"))
+	fontname := dw.POINTER_TO_HANDLE(dw.Window_get_data(hbox, "fontname"))
+	font := dw.Listbox_get_text(fontname, pos)
+
+	if font == "Default" {
+		font = ""
+	}
+
+	mle_font_set(container_mle, dw.Spinbutton_get_pos(fontsize), font)
+	return FALSE
+}
+
+func mle_fontsize_cb(hwnd dw.HSPINBUTTON, size int, data dw.POINTER) int {
+	hbox := dw.POINTER_TO_HANDLE(data)
+	fontname := dw.POINTER_TO_HANDLE(dw.Window_get_data(hbox, "fontname"))
+	font := dw.Window_get_text(fontname)
+
+	if font != "" {
+		if font == "Default" {
+			font = ""
+		}
+		mle_font_set(container_mle, size, font)
+	} else {
+		mle_font_set(container_mle, size, "")
+	}
+	return FALSE
+}
+
 func item_enter_cb(window dw.HCONTAINER, text string, data dw.POINTER, itemdata dw.POINTER) int {
 	message := fmt.Sprintf("DW_SIGNAL_ITEM_ENTER: Window: %x Text: %s Itemdata: %x", dw.HANDLE_TO_UINTPTR(window), text, uintptr(itemdata))
 	dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message)
@@ -1352,6 +1492,48 @@
 	containerbox := dw.Box_new(dw.HORZ, 2)
 	dw.Box_pack_start(notebookbox4, containerbox, 500, 200, TRUE, TRUE, 0)
 
+	/* Add a word wrap/font style box */
+	hbox := dw.Box_new(dw.HORZ, 0)
+
+	checkbox := dw.Checkbox_new("Word wrap", 0)
+	dw.Box_pack_start(hbox, checkbox, -1, -1, FALSE, TRUE, 1)
+	text := dw.Text_new("Foreground:", 0)
+	dw.Window_set_style(text, dw.DT_VCENTER, dw.DT_VCENTER)
+	dw.Box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1)
+	mlefore := color_combobox()
+	dw.Box_pack_start(hbox, mlefore, 150, -1, TRUE, FALSE, 1)
+	text = dw.Text_new("Background:", 0)
+	dw.Window_set_style(text, dw.DT_VCENTER, dw.DT_VCENTER)
+	dw.Box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1)
+	mleback := color_combobox()
+	dw.Box_pack_start(hbox, mleback, 150, -1, TRUE, FALSE, 1)
+	dw.Checkbox_set(checkbox, TRUE)
+	text = dw.Text_new("Font:", 0)
+	dw.Window_set_style(text, dw.DT_VCENTER, dw.DT_VCENTER)
+	dw.Box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1)
+	fontsize := dw.Spinbutton_new("9", 0)
+	dw.Box_pack_start(hbox, fontsize, -1, -1, FALSE, FALSE, 1)
+	dw.Spinbutton_set_limits(fontsize, 100, 5)
+	dw.Spinbutton_set_pos(fontsize, 9)
+	fontname := dw.Combobox_new("Default", 0)
+	dw.Listbox_append(fontname, "Default")
+	dw.Listbox_append(fontname, "Arial")
+	dw.Listbox_append(fontname, "Geneva")
+	dw.Listbox_append(fontname, "Verdana")
+	dw.Listbox_append(fontname, "Helvetica")
+	dw.Listbox_append(fontname, "DejaVu Sans")
+	dw.Listbox_append(fontname, "Times New Roman")
+	dw.Listbox_append(fontname, "Times New Roman Bold")
+	dw.Listbox_append(fontname, "Times New Roman Italic")
+	dw.Listbox_append(fontname, "Times New Roman Bold Italic")
+	dw.Box_pack_start(hbox, fontname, 150, -1, TRUE, FALSE, 1)
+	dw.Box_pack_start(notebookbox4, hbox, -1, -1, TRUE, FALSE, 1)
+
+	dw.Window_set_data(hbox, "mlefore", dw.HANDLE_TO_POINTER(mlefore))
+	dw.Window_set_data(hbox, "mleback", dw.HANDLE_TO_POINTER(mleback))
+	dw.Window_set_data(hbox, "fontsize", dw.HANDLE_TO_POINTER(fontsize))
+	dw.Window_set_data(hbox, "fontname", dw.HANDLE_TO_POINTER(fontname))
+
 	/* now a container area under this box */
 	container = dw.Container_new(100, TRUE)
 	dw.Box_pack_start(notebookbox4, container, 500, 200, TRUE, FALSE, 1)
@@ -1411,6 +1593,11 @@
 	dw.Signal_connect(container, dw.SIGNAL_ITEM_CONTEXT, dw.SIGNAL_FUNC(item_context_cb), dw.HANDLE_TO_POINTER(container_status))
 	dw.Signal_connect(container, dw.SIGNAL_ITEM_SELECT, dw.SIGNAL_FUNC(container_select_cb), dw.HANDLE_TO_POINTER(container_status))
 	dw.Signal_connect(container, dw.SIGNAL_COLUMN_CLICK, dw.SIGNAL_FUNC(column_click_cb), dw.HANDLE_TO_POINTER(container_status))
+	dw.Signal_connect(checkbox, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(word_wrap_click_cb), dw.HANDLE_TO_POINTER(container_mle))
+	dw.Signal_connect(mlefore, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(mle_color_cb), dw.HANDLE_TO_POINTER(hbox))
+	dw.Signal_connect(mleback, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(mle_color_cb), dw.HANDLE_TO_POINTER(hbox))
+	dw.Signal_connect(fontname, dw.SIGNAL_LIST_SELECT, dw.SIGNAL_FUNC(mle_fontname_cb), dw.HANDLE_TO_POINTER(hbox))
+	dw.Signal_connect(fontsize, dw.SIGNAL_VALUE_CHANGED, dw.SIGNAL_FUNC(mle_fontsize_cb), dw.HANDLE_TO_POINTER(hbox))
 }
 
 // Page 5