summaryrefslogtreecommitdiff
path: root/dropdown.go
diff options
context:
space:
mode:
Diffstat (limited to 'dropdown.go')
-rw-r--r--dropdown.go83
1 files changed, 27 insertions, 56 deletions
diff --git a/dropdown.go b/dropdown.go
index f14e54b..4828736 100644
--- a/dropdown.go
+++ b/dropdown.go
@@ -12,50 +12,18 @@ import (
"go.wit.com/widget"
)
-// dropdowns don't exist so this is an attempt to pretend they exist
-// by having a fake window view in gocui that appears with the dropdown
-// items. by detecting where the user clicks, we should be
-// able to set the text of the button to that value (and
-// rezise it.
-
-// the thing is this is so damned complicated because it
-// is very hard to debug this. thanks to the floating on
-// screen debugging output I might be able to figure it
-// it out now. maybe. notsure.
+// simulates a dropdown menu in gocui
/*
-func makeDropdownView(ddItems string) *guiWidget {
- newNode := addDropdown()
- tk := newNode.TK.(*guiWidget)
- tk.labelN = ddItems
- tk.SetText(ddItems)
- tk.gocuiSize.w0 = 100
- tk.gocuiSize.w1 = 120
- tk.gocuiSize.h0 = 15
- tk.gocuiSize.h1 = 18
- tk.v, _ = me.baseGui.SetView("ddview",
- tk.gocuiSize.w0,
- tk.gocuiSize.h0,
- tk.gocuiSize.w1,
- tk.gocuiSize.h1, 0)
- if tk.v == nil {
- return tk
- }
- tk.v.Wrap = true
- tk.v.Frame = true
- tk.v.Clear()
- fmt.Fprint(tk.v, ddItems)
- tk.Show()
+func addInternalTK(wId int) *guiWidget {
+ n := addDropdownNew(wId)
+ tk := n.TK.(*guiWidget)
+ tk.internal = true
return tk
}
*/
-func addDropdownTK(wId int) *guiWidget {
- n := addDropdownNew(wId)
- return n.TK.(*guiWidget)
-}
-
-func addDropdownNew(wId int) *tree.Node {
+func addInternalTK(wId int) *guiWidget {
n := new(tree.Node)
n.WidgetType = widget.Flag
n.WidgetId = wId
@@ -64,14 +32,11 @@ func addDropdownNew(wId int) *tree.Node {
// store the internal toolkit information
tk := new(guiWidget)
tk.frame = true
- tk.labelN = "DropBox text"
tk.node = n
if tk.node.Parent == nil {
tk.node.Parent = me.treeRoot
}
- // copy the data from the action message
- tk.node.State.Label = "DropBox"
// set the name used by gocui to the id
tk.cuiName = fmt.Sprintf("%d DR", wId)
@@ -81,39 +46,44 @@ func addDropdownNew(wId int) *tree.Node {
// add this new widget on the binary tree
tk.parent = me.treeRoot.TK.(*guiWidget)
if tk.parent == nil {
- panic("addDropdown() didn't get treeRoot guiWidget")
+ panic("addInternalNode() didn't get treeRoot guiWidget")
} else {
tk.parent.children = append(tk.parent.children, tk)
}
n.TK = tk
- return n
+ tk.internal = true
+ return tk
}
func (tk *guiWidget) showDropdown() {
+ if me.dropdown.tk == nil {
+ // should only happen once
+ me.dropdown.tk = addInternalTK(me.dropdown.wId)
+ me.dropdown.tk.dumpWidget("init() dropdown")
+ }
+ if me.dropdown.tk == nil {
+ log.Log(GOCUI, "showDropdown() Is Broken!")
+ return
+ }
+
// todo: fix this after switching to protobuf
me.dropdown.items = []string{} // zero out whatever was there before
for i, s := range tk.node.Strings() {
log.Log(GOCUI, "showDropdown()", tk.String(), i, s)
me.dropdown.items = append(me.dropdown.items, s)
}
-
log.Log(GOCUI, "new dropdown items should be set to:", me.dropdown.items)
- if me.dropdown.tk == nil {
- me.dropdown.tk = addDropdownTK(me.dropdown.wId)
- }
- if me.dropdown.tk == nil {
- log.Log(GOCUI, "showDropdown() IS BROKEN")
- return
- }
startW, startH := tk.Position()
log.Log(GOCUI, "showDropdown() SHOWING AT W,H=", startW, startH)
+ me.dropdown.tk.Hide()
me.dropdown.tk.MoveToOffset(startW+3, startH+2)
me.dropdown.tk.labelN = strings.Join(me.dropdown.items, "\n")
me.dropdown.tk.Show()
me.dropdown.active = true
me.dropdown.callerTK = tk
+ me.dropdown.tk.dumpWidget("showDropdown()")
}
// if there is a drop down view active, treat it like a dialog box and close it
@@ -163,20 +133,21 @@ func dropdownUnclicked(w, h int) {
}
func (tk *guiWidget) showTextbox() {
- // todo: fix this after switching to protobuf
-
if me.textbox.tk == nil {
- me.textbox.tk = addDropdownTK(me.textbox.wId)
+ // should only happen once
+ me.textbox.tk = addInternalTK(me.textbox.wId)
+ me.dropdown.tk.dumpWidget("init() textbox")
}
if me.textbox.tk == nil {
- log.Log(GOCUI, "showDropdown() IS BROKEN")
+ log.Log(GOCUI, "showTextbox() Is Broken")
return
}
startW, startH := tk.Position()
- log.Log(GOCUI, "showDropdown() SHOWING AT W,H=", startW, startH)
+ // log.Log(GOCUI, "showTextbox() SHOWING AT W,H=", startW, startH)
me.textbox.tk.MoveToOffset(startW+3, startH+2)
me.textbox.tk.labelN = "holy cow"
me.textbox.tk.Show()
me.textbox.active = true
me.textbox.callerTK = tk
+ me.textbox.tk.dumpWidget("showTextbox()")
}