diff options
Diffstat (limited to 'click.go')
| -rw-r--r-- | click.go | 115 |
1 files changed, 37 insertions, 78 deletions
@@ -1,9 +1,10 @@ package main import ( + "errors" + "github.com/awesome-gocui/gocui" "go.wit.com/log" - "go.wit.com/toolkits/tree" "go.wit.com/widget" ) @@ -178,53 +179,13 @@ func (w *guiWidget) doWidgetClick() { w.toggleTree() case widget.Button: // doUserEvent(n) - me.myTree.SendUserEvent(w.node) + me.myTree.SendFromUser(w.node) case widget.Combobox: log.Log(NOW, "do the combobox here") - var ddItems string - for i, s := range w.vals { - log.Log(NOW, "ddItem:", w.String(), i, s) - ddItems += s + "\n" - } - if me.ddview == nil { - me.ddview = makeDropdownView(ddItems) - } - showDropdownItems(ddItems) - me.ddNode = w.node + w.showDropdown() case widget.Dropdown: log.Log(NOW, "do the dropdown here") - var ddItems string - for i, s := range w.vals { - log.Log(NOW, "ddItem:", w.String(), i, s) - ddItems += s + "\n" - } - /* - if me.ddview == nil { - me.ddview = makeDropdownView(ddItems) - } - */ - showDropdownItems(ddItems) - me.ddNode = w.node - /* - 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 { - me.ddNode = w.node - log.Log(NOW, "new dns list should be set to:", ddItems) - tk.labelN = ddItems - tk.SetText(ddItems) - tk.SetVisible(true) - fmt.Fprint(tk.v, ddItems) - } - for i, s := range tk.vals { - log.Log(NOW, "AddText()", tk.String(), i, s) - } - */ + w.showDropdown() default: } } @@ -263,21 +224,18 @@ func click(g *gocui.Gui, v *gocui.View) error { // var l string // var err error - log.Log(INFO, "click() START", v.Name()) + log.Log(NOW, "click() START gocui name:", v.Name()) // n := me.rootNode.findWidgetName(v.Name()) - n := findUnderMouse() - var w *guiWidget - w = n.TK.(*guiWidget) - if w != nil { + w := findUnderMouse() + if w == nil { + log.Error(errors.New("click() could not find widget for view =" + v.Name())) + } else { log.Log(NOW, "click() Found widget =", w.node.WidgetId, w.String(), ",", w.labelN) if w.String() == "DropBox" { log.Log(NOW, "click() this is the dropdown menu. set a flag here what did I click? where is the mouse?") log.Log(NOW, "click() set a global dropdown clicked flag=true here") - me.ddClicked = true } w.doWidgetClick() - } else { - log.Log(NOW, "click() could not find node name =", v.Name()) } if _, err := g.SetCurrentView(v.Name()); err != nil { @@ -285,55 +243,57 @@ func click(g *gocui.Gui, v *gocui.View) error { return err } - log.Log(NOW, "click() END") + log.Log(NOW, "click() END gocui name:", v.Name()) return nil } -func findUnderMouse() *tree.Node { - var found *tree.Node - var widgets []*tree.Node - var f func(n *tree.Node) +func findUnderMouse() *guiWidget { + var widgets []*guiWidget + var f func(w *guiWidget) w, h := me.baseGui.MousePosition() - ddTK := me.ddview.TK.(*guiWidget) // if the dropdown view is visable, close it - if ddTK.Visible() { - ddTK.dropdownClicked(w, h) - return me.ddview + if me.dropdownV.Visible() { + me.dropdownV.dropdownClicked(w, h) + return me.dropdownV } // find buttons that are below where the mouse button click - f = func(n *tree.Node) { - var widget *guiWidget - widget = n.TK.(*guiWidget) - + f = func(widget *guiWidget) { // ignore widgets that are not visible if widget.Visible() { if (widget.gocuiSize.w0 <= w) && (w <= widget.gocuiSize.w1) && (widget.gocuiSize.h0 <= h) && (h <= widget.gocuiSize.h1) { - widgets = append(widgets, n) - found = n + widgets = append(widgets, widget) } } for _, child := range widget.children { - f(child.node) + f(child) } } - f(me.treeRoot) + rootW := me.treeRoot.TK.(*guiWidget) + f(rootW) + + var found *guiWidget // widgets has everything that matches - // TODO: pop up menu with a list of them - for _, n := range widgets { - //log(logNow, "ctrlDown() FOUND widget", widget.id, widget.name) - widget := n.TK.(*guiWidget) - widget.showWidgetPlacement("findUnderMouse() FOUND") + for _, w := range widgets { + w.showWidgetPlacement("findUnderMouse() FOUND") + // prioritize window buttons. This means if some code covers + // up the window widgets, then it will ignore everything else + // and allow the user (hopefully) to redraw or switch windows + // TODO: display the window widgets on top + if w.WidgetType == widget.Window { + return w + } + found = w } return found } // find the widget under the mouse click func ctrlDown(g *gocui.Gui, v *gocui.View) error { - var found *tree.Node + var found *guiWidget // var widgets []*node // var f func (n *node) found = findUnderMouse() @@ -349,11 +309,10 @@ func ctrlDown(g *gocui.Gui, v *gocui.View) error { var tk *guiWidget tk = me.ctrlDown.TK.(*guiWidget) if found == nil { - found = me.treeRoot + found = me.treeRoot.TK.(*guiWidget) } tk.labelN = found.String() - foundtk := found.TK.(*guiWidget) - newR := foundtk.realGocuiSize() + newR := found.realGocuiSize() tk.gocuiSize.w0 = newR.w0 tk.gocuiSize.h0 = newR.h0 tk.gocuiSize.w1 = newR.w1 |
