summaryrefslogtreecommitdiff
path: root/eventMouseClick.go
blob: 657cbf99bc18e870ddfc3a4ca086e805381ea1bd (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
package main

import (
	"fmt"

	"github.com/awesome-gocui/gocui"
	"go.wit.com/log"
	"go.wit.com/widget"
)

func (w *guiWidget) doWidgetClick() {
	switch w.WidgetType {
	/*
		case widget.Root:
			// THIS IS THE BEGINING OF THE LAYOUT
			log.Log(GOCUI, "doWidgetClick()", w.String())
			wRoot := me.treeRoot.TK.(*guiWidget)
			wRoot.redoWindows(0, 0)
		case widget.Flag:
			log.Log(GOCUI, "doWidgetClick() FLAG widget name =", w.String())
			log.Log(GOCUI, "doWidgetClick() if this is the dropdown menu, handle it here?")
	*/
	case widget.Window:
		log.Log(GOCUI, "doWidgetClick() START on window", w.String())
		// if the user clicked on the current window, do nothing
		/* Ignore this for now and redraw the window anyway
		if me.currentWindow == w {
			if !w.active {
				return
			}
		}
		*/

		// if there is a current window, hide it
		if me.currentWindow != nil {
			me.currentWindow.setColor(&colorWindow)
			me.currentWindow.hideWidgets()
			me.currentWindow.isCurrent = false
		}

		// now set this window as the current window
		me.currentWindow = w
		me.currentWindow.isCurrent = true

		// draw the current window
		log.Log(GOCUI, "doWidgetClick() set currentWindow to", w.String())
		w.setColor(&colorActiveW)
		w.DrawAt(3, 2)
		w.placeWidgets(3, 2) // compute the sizes & places for each widget
		w.active = false
		w.showWidgets()
		/*
			hideFake()
			showDebug = true
		*/
	case widget.Group:
		if w.active {
			w.active = false
			w.placeWidgets(w.startW, w.startH)
			w.showWidgets()
		} else {
			w.active = true
			for _, child := range w.children {
				child.hideWidgets()
			}
		}
	case widget.Checkbox:
		if w.node.State.Checked {
			log.Log(WARN, "checkbox is being set to false")
			w.node.State.Checked = false
			w.setCheckbox()
		} else {
			log.Log(WARN, "checkbox is being set to true")
			w.node.State.Checked = true
			w.setCheckbox()
		}
		me.myTree.SendUserEvent(w.node)
	case widget.Grid:
		newR := w.realGocuiSize()

		// w,h := n.logicalSize()
		// w := newR.w1 - newR.w0
		// h := newR.h1 - newR.h0

		w.placeGrid(newR.w0, newR.h0)
		w.showWidgets()
	case widget.Box:
		// w.showWidgetPlacement(logNow, "drawTree()")
		if w.node.State.Direction == widget.Horizontal {
			log.Log(GOCUI, "BOX IS HORIZONTAL", w.String())
		} else {
			log.Log(GOCUI, "BOX IS VERTICAL", w.String())
		}
		w.placeWidgets(w.startW, w.startH)
		w.toggleTree()
	case widget.Button:
		// doUserEvent(n)
		me.myTree.SendFromUser(w.node)
	case widget.Combobox:
		log.Log(GOCUI, "do the combobox here")
		w.showDropdown()
		me.dropdownW = w
	case widget.Dropdown:
		log.Log(GOCUI, "do the dropdown here")
		w.showDropdown()
		me.dropdownW = w
	default:
	}
}

// sends the mouse click to a widget underneath
func click(g *gocui.Gui, v *gocui.View) error {
	mouseW, mouseH := me.baseGui.MousePosition()

	w := mouseW
	h := mouseH

	for _, tk := range findByXY(w, h) {
		log.Log(GOCUI, fmt.Sprintf("findByXY() click() %s wId=%d cuiName=%s at (%d,%d)", tk.WidgetType, tk.node.WidgetId, tk.cuiName, w, h))
		tk.doWidgetClick()
		return nil
	}

	log.Log(GOCUI, "click() nothing was at:", v.Name(), mouseW, mouseH)
	return nil
	/*
		// not sure what SetCurrentView() does right now. it was here before
		// SetCurrentView dies if it's sent an non-existent view
		if _, err := g.SetCurrentView(v.Name()); err != nil {
			log.Log(GOCUI, "click() END v.Name =", v.Name(), "err =", err)
			// return err // return causes gocui.MainLoop() to exit. Do we ever want that to happen here?
			return nil
		}
	*/
	return nil
}