diff options
| author | Jeff Carr <[email protected]> | 2024-02-01 20:12:26 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-02-01 20:12:26 -0600 |
| commit | 13b0daed7cb950c1244a8e6e42523813178d4c7d (patch) | |
| tree | a11d0dd527b048a812749882c27c0c02fb57edb9 /dropdown.go | |
| parent | f2f43a2b0bba96b9b8ed15d7996ccfe0181f846a (diff) | |
restore STDOUT and STDERR on panic()
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'dropdown.go')
| -rw-r--r-- | dropdown.go | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/dropdown.go b/dropdown.go new file mode 100644 index 0000000..79bf302 --- /dev/null +++ b/dropdown.go @@ -0,0 +1,204 @@ +package main + +import ( + "fmt" + "strings" + + "github.com/awesome-gocui/gocui" + log "go.wit.com/log" + "go.wit.com/toolkits/tree" + "go.wit.com/widget" +) + +func makeDropdownView(ddItems string) *tree.Node { + newNode := addDropdown() + tk := newNode.TK.(*guiWidget) + tk.labelN = ddItems + tk.SetText(ddItems) + tk.gocuiSize.w0 = 20 + tk.gocuiSize.w1 = 40 + tk.gocuiSize.h0 = 10 + tk.gocuiSize.h1 = 25 + tk.v, _ = me.baseGui.SetView("ddview", + tk.gocuiSize.w0, + tk.gocuiSize.h0, + tk.gocuiSize.w1, + tk.gocuiSize.h1, 0) + if tk.v == nil { + return newNode + } + tk.v.Wrap = true + tk.v.Frame = true + tk.v.Clear() + fmt.Fprint(tk.v, ddItems) + tk.SetVisible(true) + return newNode +} + +func makeDropdownViewOrig() { + if me.ddview != nil { + return + } + me.ddview = addDropdown() + // n.TK = initWidget(n) + var tk *guiWidget + tk = me.ddview.TK.(*guiWidget) + tk.gocuiSize.w0 = 20 + tk.gocuiSize.w1 = 40 + tk.gocuiSize.h0 = 10 + tk.gocuiSize.h1 = 25 + 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.v.Wrap = true + tk.v.Frame = true + tk.v.Clear() + fmt.Fprint(tk.v, tk.labelN) +} + +func addDropdown() *tree.Node { + n := new(tree.Node) + n.WidgetType = widget.Flag + n.WidgetId = 2222 + n.ParentId = 0 + + // store the internal toolkit information + tk := new(guiWidget) + tk.frame = true + tk.labelN = "DropBox text" + + tk.node = n + // copy the data from the action message + tk.node.State.Label = "DropBox" + + // set the name used by gocui to the id + tk.cuiName = "-1 dropbox" + + tk.color = &colorFlag + + // 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") + } else { + tk.parent.children = append(tk.parent.children, tk) + } + + n.TK = tk + return n +} + +func showDropdownItems(ddItems string) { + for i, s := range strings.Split(ddItems, "\n") { + log.Log(NOW, "showDropdownItems() found =", i, s) + } + var tk *guiWidget + tk = me.ddview.TK.(*guiWidget) + log.Log(NOW, "doWidgetClick() visible =", tk.Visible()) + if tk.Visible() { + tk.SetVisible(false) + me.baseGui.DeleteView("ddview") + tk.v = nil + } else { + log.Log(NOW, "new dns list should be set to:", ddItems) + tk.labelN = ddItems + tk.SetText(ddItems) + tk.SetVisible(true) + tk.v.Clear() + fmt.Fprint(tk.v, ddItems) + } +} + +func dropdownClicked(mouseX, mouseH int) { + tk := me.ddview.TK.(*guiWidget) + if tk.Visible() { + log.Log(NOW, "hide DDview() Mouse really down at:", mouseX, mouseH) + hideDDview() + } else { + log.Log(NOW, "show DDview() Mouse really down at:", mouseX, mouseH) + showDDview() + } +} + +func hideDDview() error { + var tk *guiWidget + tk = me.ddview.TK.(*guiWidget) + w, h := me.baseGui.MousePosition() + log.Log(NOW, "hide dropdown menu() view msgMouseDown (w,h) =", w, h) + if me.ddview == nil { + return gocui.ErrUnknownView + } + if tk.v == nil { + return gocui.ErrUnknownView + } + tk.SetVisible(false) + return nil +} + +func showDDview() error { + w, h := me.baseGui.MousePosition() + log.Log(NOW, "show dropdown menu() view msgMouseDown (w,h) =", w, h) + if me.ddview == nil { + return gocui.ErrUnknownView + } + var tk *guiWidget + tk = me.ddview.TK.(*guiWidget) + if tk.v == nil { + return gocui.ErrUnknownView + } + tk.SetVisible(true) + return nil +} + + /* + // if there is a drop down view active, treat it like a dialog box and close it + if (hideDDview() == nil) { + return nil + } + */ +func (w *guiWidget) dropdownClicked(mouseW, mouseH int) { + log.Log(NOW, "dropdownClicked() (w,h) =", mouseW, mouseH) + w.SetVisible(false) +} + +func dropdownUnclicked(mouseX, mouseH int) { + tk := me.ddview.TK.(*guiWidget) + log.Log(NOW, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", mouseX, mouseH) + if me.ddClicked { + me.ddClicked = false + log.Log(NOW, "mouseUp() ddview is the thing that was clicked", mouseX, mouseH) + log.Log(NOW, "mouseUp() find out what the string is here", mouseX, mouseH, tk.gocuiSize.h1) + + var newZone string = "" + if me.ddNode != nil { + var ddtk *guiWidget + ddtk = me.ddview.TK.(*guiWidget) + value := mouseH - tk.gocuiSize.h0 - 1 + log.Log(NOW, "mouseUp() me.ddview.tk.gocuiSize.h1 =", tk.gocuiSize.h1) + log.Log(NOW, "mouseUp() me.ddNode.vals =", ddtk.vals) + valsLen := len(ddtk.vals) + log.Log(NOW, "mouseUp() value =", value, "valsLen =", valsLen) + log.Log(NOW, "mouseUp() me.ddNode.vals =", ddtk.vals) + if (value >= 0) && (value < valsLen) { + newZone = ddtk.vals[value] + log.Log(NOW, "mouseUp() value =", value, "newZone =", newZone) + } + } + hideDDview() + if newZone != "" { + if me.ddNode != nil { + var ddtk *guiWidget + ddtk = me.ddview.TK.(*guiWidget) + ddtk.SetText(newZone) + ddtk.value = newZone + // me.ddNode.doUserEvent() + me.myTree.SendUserEvent(me.ddNode) + } + } + } +} |
