summaryrefslogtreecommitdiff
path: root/eventMouse.go
blob: 6512805a664080ca2268e8026620738d24b6c0ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0

package main

import (
	"errors"
	"fmt"

	"github.com/awesome-gocui/gocui"

	"go.wit.com/log"
	"go.wit.com/widget"
)

func mouseUp(g *gocui.Gui, v *gocui.View) error {
	w, h := g.MousePosition()

	// useful to debug everything that is being clicked on
	/*
		for _, tk := range findByXY(w, h) {
			tk.dumpWidget("mouseUp()")
		}
	*/

	log.Info("mouseUp() setting me.globalMouseDown = false")
	me.globalMouseDown = false
	currentDrag = nil

	dropdownUnclicked(w, h)

	/*
		if msgMouseDown {
			log.Info("setting mousedown to false")
			msgMouseDown = false
		} else if globalMouseDown {
			globalMouseDown = false
			g.DeleteView("globalDown")
		}
	*/
	return nil
}

// this is where you have to figure out what
// widget was underneath so you can active
// the right response for the toolkit user's app
func mouseDown(g *gocui.Gui, v *gocui.View) error {
	mx, my := g.MousePosition()
	log.Info("mouseDown() setting globalMouseDown = true")
	me.globalMouseDown = true

	var found bool = false
	for _, tk := range findByXY(mx, my) {
		tk.dumpWidget("mouseDown()")
		if tk.node.WidgetType == widget.Button {
			log.Info("SENDING CLICK TO Button")
			tk.doWidgetClick(mx, my)
			return nil
		}
		if tk.node.WidgetType == widget.Checkbox {
			log.Info("SENDING CLICK TO Checkbox")
			tk.doWidgetClick(mx, my)
			return nil
		}
		found = true
	}
	for _, tk := range findByXY(mx, my) {
		if tk.node.WidgetType == widget.Window {
			tk.dragW = mx - tk.gocuiSize.w0
			tk.dragH = my - tk.gocuiSize.h0
			log.Info("SENDING CLICK TO WINDOW", tk.dragW, tk.dragH)
			tk.doWidgetClick(mx-tk.dragW, my-tk.dragH)
			return nil
		}
		if tk.node.WidgetType == widget.Label {
			log.Info("IGNORE LABLE")
			found = false
			log.Info("setting mousedown to true")
			// msgMouseDown = true
			return nil
		}
		/*
			if tk.node.WidgetType == widget.Label {
				log.Info("SENDING CLICK TO Label")
				tk.doWidgetClick(mx, my)
				return nil
			}
		*/
		found = true
	}
	if !found {
		log.Log(GOCUI, fmt.Sprintf("mouseDown() found nothing at (%d,%d)", mx, my))
	}

	vx0, vy0, vx1, vy1, err := g.ViewPosition("msg")
	if err == nil {
		if mx >= vx0 && mx <= vx1 && my >= vy0 && my <= vy1 {
			return msgDown(g, v)
		}
	}

	maxX, _ := g.Size()

	// why was this here?
	// findUnderMouse()

	// TODO: USE THIS TO MAKE TEMPORARY HELP / INSTRUCTION DIALOGS

	// this message will pop up when you click on the magic thing
	// figure out how this works and make it generically useful.
	msg := fmt.Sprintf("This is -222 widget demo. %d,%d", mx, my)
	// dropdownClicked(mx, my)
	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.Log(GOCUI, "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
		}
		v.WriteString(msg)
	}
	return nil
}

// this needs to go
// event triggers when you push down on a mouse button
func msgDown(g *gocui.Gui, v *gocui.View) error {
	initialMouseX, initialMouseY = g.MousePosition()

	w := initialMouseX
	h := initialMouseY

	for _, tk := range findByXY(w, h) {
		tk.dumpWidget("msgDown()")
	}

	vx, vy, _, _, err := g.ViewPosition("msg")
	if err == nil {
		xOffset = initialMouseX - vx
		yOffset = initialMouseY - vy
	}
	log.Info("setting mousedown to true")
	// msgMouseDown = true
	return nil
}