summaryrefslogtreecommitdiff
path: root/dropdown.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-02-01 20:12:26 -0600
committerJeff Carr <[email protected]>2024-02-01 20:12:26 -0600
commit13b0daed7cb950c1244a8e6e42523813178d4c7d (patch)
treea11d0dd527b048a812749882c27c0c02fb57edb9 /dropdown.go
parentf2f43a2b0bba96b9b8ed15d7996ccfe0181f846a (diff)
restore STDOUT and STDERR on panic()
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'dropdown.go')
-rw-r--r--dropdown.go204
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)
+ }
+ }
+ }
+}