summaryrefslogtreecommitdiff
path: root/toolkit/gocui/mouse.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-12-14 10:36:56 -0600
committerJeff Carr <[email protected]>2023-12-14 10:36:56 -0600
commit282119d970faed3f8a60d5105a2f26ee14681ff4 (patch)
tree1680731c899f0e147487b9ba4d50ace2f3e96eb1 /toolkit/gocui/mouse.go
parent9d075afb1df62276dea06be4a188eaee8fc69420 (diff)
tabs, windows + gocui dropdown menu (almost)
dropdown menu figures out what text was clicked dropdown menu movement changes line colors dropdown menus force user to select a response accidentally committed a binary tab selection works tab and window views almost working tabs and windows almost working window widgets selection works better color handling using gocui view.Visable flag removal of old color setting code still need an artificial delay for andlabs SetText() catching more 'nil' errors fixed the stupid duplicate tab problem in andlabs figured out how andlabs had a tab/box mess works on more than one domain builds and runs again debugging double tabs in andlabs gui GO111MODULE compile notes code reorg further improvements example cloudflare app does first successful dns update add NewEntryLine() for single line entry boxes Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'toolkit/gocui/mouse.go')
-rw-r--r--toolkit/gocui/mouse.go66
1 files changed, 65 insertions, 1 deletions
diff --git a/toolkit/gocui/mouse.go b/toolkit/gocui/mouse.go
index dbe2c6d..64786ab 100644
--- a/toolkit/gocui/mouse.go
+++ b/toolkit/gocui/mouse.go
@@ -24,6 +24,7 @@ func mouseMove(g *gocui.Gui) {
func msgDown(g *gocui.Gui, v *gocui.View) error {
initialMouseX, initialMouseY = g.MousePosition()
+ log(true, "msgDown() X,Y", initialMouseX, initialMouseY)
if vx, vy, _, _, err := g.ViewPosition("msg"); err == nil {
xOffset = initialMouseX - vx
yOffset = initialMouseY - vy
@@ -32,7 +33,58 @@ func msgDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
+func hideDDview() error {
+ w, h := me.baseGui.MousePosition()
+ log(true, "hide dropdown menu() view msgMouseDown (w,h) =", w, h)
+ if (me.ddview == nil) {
+ return gocui.ErrUnknownView
+ }
+ if (me.ddview.tk.v == nil) {
+ return gocui.ErrUnknownView
+ }
+ me.ddview.SetVisible(false)
+ return nil
+}
+
+func showDDview() error {
+ w, h := me.baseGui.MousePosition()
+ log(true, "show dropdown menu() view msgMouseDown (w,h) =", w, h)
+ if (me.ddview == nil) {
+ return gocui.ErrUnknownView
+ }
+ if (me.ddview.tk.v == nil) {
+ return gocui.ErrUnknownView
+ }
+ me.ddview.SetVisible(true)
+ return nil
+}
+
func mouseUp(g *gocui.Gui, v *gocui.View) error {
+ w, h := g.MousePosition()
+ log(true, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", w, h)
+ if (me.ddClicked) {
+ log(true, "mouseUp() ddview is the thing that was clicked", w, h)
+ log(true, "mouseUp() find out what the string is here", w, h, me.ddview.tk.gocuiSize.h1)
+
+ if (me.ddNode != nil) {
+ value := h - me.ddview.tk.gocuiSize.h0 - 1
+ log(true, "mouseUp() me.ddview.tk.gocuiSize.h1 =", me.ddview.tk.gocuiSize.h1)
+ log(true, "mouseUp() me.ddNode.vals =", me.ddNode.vals)
+ valsLen := len(me.ddNode.vals)
+ log(true, "mouseUp() value =", value, "valsLen =", valsLen)
+ log(true, "mouseUp() me.ddNode.vals =", me.ddNode.vals)
+ if ((value >= 0) && (value < valsLen)) {
+ str := me.ddNode.vals[value]
+ log(true, "mouseUp() value =", value, "str =", str)
+ }
+ }
+ }
+ /*
+ // if there is a drop down view active, treat it like a dialog box and close it
+ if (hideDDview() == nil) {
+ return nil
+ }
+ */
if msgMouseDown {
msgMouseDown = false
if movingMsg {
@@ -57,13 +109,25 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error {
}
globalMouseDown = true
maxX, _ := g.Size()
- msg := fmt.Sprintf("Mouse really down at: %d,%d", mx, my) + "foo\n" + "bar\n"
+ test := findUnderMouse()
+ msg := fmt.Sprintf("Mouse really down at: %d,%d", mx, my) + "foobar"
+ if (test == me.ddview) {
+ if (me.ddview.Visible()) {
+ log(true, "hide DDview() Mouse really down at:", mx, my)
+ hideDDview()
+ } else {
+ log(true, "show DDview() Mouse really down at:", mx, my)
+ showDDview()
+ }
+ return nil
+ }
x := mx - len(msg)/2
if x < 0 {
x = 0
} else if x+len(msg)+1 > maxX-1 {
x = maxX - 1 - len(msg) - 1
}
+ log(true, "mouseDown() about to write out message to 'globalDown' view. msg =", msg)
if v, err := g.SetView("globalDown", x, my-1, x+len(msg)+1, my+1, 0); err != nil {
if !errors.Is(err, gocui.ErrUnknownView) {
return err