diff options
Diffstat (limited to 'click.go')
| -rw-r--r-- | click.go | 274 |
1 files changed, 157 insertions, 117 deletions
@@ -2,22 +2,23 @@ package main import ( "fmt" + "github.com/awesome-gocui/gocui" "go.wit.com/log" + "go.wit.com/toolkits/tree" "go.wit.com/widget" ) // set isCurrent = false everywhere -func unsetCurrent(n *node) { - w := n.tk +func unsetCurrent(w *guiWidget) { w.isCurrent = false - if n.WidgetType == widget.Tab { + if w.node.WidgetType == widget.Tab { // n.tk.color = &colorTab // n.setColor() } - for _, child := range n.children { + for _, child := range w.children { unsetCurrent(child) } } @@ -25,14 +26,17 @@ func unsetCurrent(n *node) { // when adding a new widget, this will update the display // of the current widgets if that widget is supposed // to be in current display -func (n *node) updateCurrent() { - log.Log(NOW, "updateCurrent()", n.progname) +func updateCurrent(n *tree.Node) { + var w *guiWidget + w = n.TK.(*guiWidget) + + log.Log(NOW, "updateCurrent()", w.String()) if n.WidgetType == widget.Tab { - if n.IsCurrent() { + if w.IsCurrent() { // n.tk.color = &colorActiveT - n.setColor(&colorActiveT) - n.hideView() - n.showView() + setColor(n, &colorActiveT) + w.hideView() + w.showView() setCurrentTab(n) } else { // n.tk.color = &colorTab @@ -41,7 +45,7 @@ func (n *node) updateCurrent() { return } if n.WidgetType == widget.Window { - if n.IsCurrent() { + if w.IsCurrent() { // setCurrentWindow(n) } return @@ -49,24 +53,27 @@ func (n *node) updateCurrent() { if n.WidgetType == widget.Root { return } - n.parent.updateCurrent() + updateCurrent(n.Parent) } // shows the widgets in a window -func setCurrentWindow(n *node) { - if n.IsCurrent() { +func setCurrentWindow(n *tree.Node) { + var w *guiWidget + w = n.TK.(*guiWidget) + if w.IsCurrent() { return } - w := n.tk if n.WidgetType != widget.Window { return } - unsetCurrent(me.rootNode) + var rootTK *guiWidget + rootTK = me.treeRoot.TK.(*guiWidget) + unsetCurrent(rootTK) - if n.hasTabs { + if w.hasTabs { // set isCurrent = true on the first tab - for _, child := range n.children { - child.tk.isCurrent = true + for _, child := range w.children { + child.isCurrent = true break } } else { @@ -75,46 +82,53 @@ func setCurrentWindow(n *node) { } // shows the widgets in a tab -func setCurrentTab(n *node) { - w := n.tk +func setCurrentTab(n *tree.Node) { + var w, p, rootTK *guiWidget + w = n.TK.(*guiWidget) if n.WidgetType != widget.Tab { return } - unsetCurrent(me.rootNode) + rootTK = me.treeRoot.TK.(*guiWidget) + unsetCurrent(rootTK) w.isCurrent = true - p := n.parent.tk + p = n.Parent.TK.(*guiWidget) p.isCurrent = true - log.Log(NOW, "setCurrent()", n.progname) + log.Log(NOW, "setCurrent()", n.String()) } -func (n *node) doWidgetClick() { +func doWidgetClick(n *tree.Node) { switch n.WidgetType { case widget.Root: // THIS IS THE BEGINING OF THE LAYOUT - log.Log(NOW, "doWidgetClick()", n.progname) + log.Log(NOW, "doWidgetClick()", n.String()) redoWindows(0, 0) case widget.Flag: - log.Log(NOW, "doWidgetClick() FLAG widget name =", n.progname) + log.Log(NOW, "doWidgetClick() FLAG widget name =", n.String()) log.Log(NOW, "doWidgetClick() if this is the dropdown menu, handle it here?") case widget.Window: if me.currentWindow == n { return } if me.currentWindow != nil { - unsetCurrent(me.currentWindow) - me.currentWindow.setColor(&colorWindow) - me.currentWindow.hideWidgets() + var w *guiWidget + w = me.currentWindow.TK.(*guiWidget) + unsetCurrent(w) + setColor(me.currentWindow, &colorWindow) + w.hideWidgets() } - n.hideWidgets() me.currentWindow = n // setCurrentWindow(n) // probably delete this - n.setColor(&colorActiveW) - n.redoTabs(me.TabW, me.TabH) - for _, child := range n.children { + setColor(n, &colorActiveW) + + var w *guiWidget + w = n.TK.(*guiWidget) + w.hideWidgets() + w.redoTabs(me.TabW, me.TabH) + for _, child := range w.children { if child.currentTab == true { - log.Log(NOW, "FOUND CURRENT TAB", child.progname) - setCurrentTab(child) - child.placeWidgets(me.RawW, me.RawH) + log.Log(NOW, "FOUND CURRENT TAB", child.String()) + setCurrentTab(child.node) + placeWidgets(child.node, me.RawW, me.RawH) child.showWidgets() return } @@ -124,62 +138,76 @@ func (n *node) doWidgetClick() { } */ case widget.Tab: - if n.IsCurrent() { + var w *guiWidget + w = n.TK.(*guiWidget) + if w.IsCurrent() { return // do nothing if you reclick on the already selected tab } // find the window and disable the active tab - p := n.parent + p := n.Parent if p != nil { - p.hideWidgets() - p.redoTabs(me.TabW, me.TabH) - unsetCurrent(p) - for _, child := range p.children { - if child.WidgetType == widget.Tab { - child.setColor(&colorTab) - n.currentTab = false + var w *guiWidget + w = p.TK.(*guiWidget) + w.hideWidgets() + w.redoTabs(me.TabW, me.TabH) + unsetCurrent(w) + for _, child := range w.children { + if child.node.WidgetType == widget.Tab { + setColor(child.node, &colorTab) + child.currentTab = false } } } - n.currentTab = true - n.setColor(&colorActiveT) + w.currentTab = true + setColor(n, &colorActiveT) setCurrentTab(n) - n.placeWidgets(me.RawW, me.RawH) - n.showWidgets() + placeWidgets(n, me.RawW, me.RawH) + w.showWidgets() case widget.Group: // n.placeWidgets(p.tk.startH, newH) - n.toggleTree() + toggleTree(n) case widget.Checkbox: - if widget.GetBool(n.value) { - n.setCheckbox(false) + var w *guiWidget + w = n.TK.(*guiWidget) + if widget.GetBool(w.value) { + w.setCheckbox(false) } else { - n.setCheckbox(true) + w.setCheckbox(true) } - n.doUserEvent() + // n.doUserEvent() + me.myTree.SendUserEvent(me.treeRoot) case widget.Grid: - newR := n.realGocuiSize() + newR := realGocuiSize(n) // w,h := n.logicalSize() // w := newR.w1 - newR.w0 // h := newR.h1 - newR.h0 - n.placeGrid(newR.w0, newR.h0) - n.showWidgets() + placeGrid(n, newR.w0, newR.h0) + var w *guiWidget + w = n.TK.(*guiWidget) + w.showWidgets() case widget.Box: + var w *guiWidget + w = n.TK.(*guiWidget) // w.showWidgetPlacement(logNow, "drawTree()") - if n.direction == widget.Horizontal { - log.Log(NOW, "BOX IS HORIZONTAL", n.progname) + if w.direction == widget.Horizontal { + log.Log(NOW, "BOX IS HORIZONTAL", n.String()) } else { - log.Log(NOW, "BOX IS VERTICAL", n.progname) + log.Log(NOW, "BOX IS VERTICAL", n.String()) } - // n.placeWidgets() - n.toggleTree() + placeWidgets(n, me.RawW, me.RawH) + toggleTree(n) case widget.Button: - n.doUserEvent() + // doUserEvent(n) + me.myTree.SendUserEvent(n) case widget.Dropdown: log.Log(NOW, "do the dropdown here") if me.ddview == nil { me.ddview = addDropdown() - tk := me.ddview.tk + // n.TK = initWidget(n) + var tk *guiWidget + tk = me.ddview.TK.(*guiWidget) tk.gocuiSize.w0 = 20 tk.gocuiSize.w1 = 40 tk.gocuiSize.h0 = 10 @@ -196,28 +224,30 @@ func (n *node) doWidgetClick() { tk.v.Frame = true tk.v.Clear() fmt.Fprint(tk.v, "example.com\nwit.com") - me.ddview.SetVisible(true) + SetVisible(me.ddview, true) return } - log.Log(NOW, "doWidgetClick() visible =", me.ddview.Visible()) - if me.ddview.Visible() { - me.ddview.SetVisible(false) + log.Log(NOW, "doWidgetClick() visible =", Visible(me.ddview)) + var tk *guiWidget + tk = me.ddview.TK.(*guiWidget) + if Visible(me.ddview) { + SetVisible(me.ddview, false) me.baseGui.DeleteView("ddview") - me.ddview.tk.v = nil + tk.v = nil } else { var dnsList string - for i, s := range n.vals { - log.Log(NOW, "AddText()", n.progname, i, s) + for i, s := range tk.vals { + log.Log(NOW, "AddText()", n.String(), i, s) dnsList += s + "\n" } me.ddNode = n log.Log(NOW, "new dns list should be set to:", dnsList) - me.ddview.label = dnsList - me.ddview.SetText(dnsList) - me.ddview.SetVisible(true) + tk.label = dnsList + tk.SetText(dnsList) + SetVisible(me.ddview, true) } - for i, s := range n.vals { - log.Log(NOW, "AddText()", n.progname, i, s) + for i, s := range tk.vals { + log.Log(NOW, "AddText()", tk.String(), i, s) } default: } @@ -225,32 +255,35 @@ func (n *node) doWidgetClick() { var toggle bool = true -func (n *node) toggleTree() { +func toggleTree(n *tree.Node) { + var w *guiWidget + w = n.TK.(*guiWidget) if toggle { - n.drawTree(toggle) + drawTree(n, toggle) toggle = false } else { - n.hideWidgets() + w.hideWidgets() toggle = true } } // display the widgets in the binary tree -func (n *node) drawTree(draw bool) { - w := n.tk +func drawTree(n *tree.Node, draw bool) { + var w *guiWidget + w = n.TK.(*guiWidget) if w == nil { return } - n.showWidgetPlacement(true, "drawTree()") + showWidgetPlacement(n, true, "drawTree()") if draw { // w.textResize() - n.showView() + w.showView() } else { - n.deleteView() + w.deleteView() } - for _, child := range n.children { - child.drawTree(draw) + for _, child := range w.children { + drawTree(child.node, draw) } } @@ -261,14 +294,16 @@ func click(g *gocui.Gui, v *gocui.View) error { log.Log(INFO, "click() START", v.Name()) // n := me.rootNode.findWidgetName(v.Name()) n := findUnderMouse() + var w *guiWidget + w = n.TK.(*guiWidget) if n != nil { - log.Log(NOW, "click() Found widget =", n.WidgetId, n.progname, ",", n.label) - if n.progname == "DropBox" { + log.Log(NOW, "click() Found widget =", n.WidgetId, n.String(), ",", w.label) + if n.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 } - n.doWidgetClick() + doWidgetClick(n) } else { log.Log(NOW, "click() could not find node name =", v.Name()) } @@ -282,17 +317,18 @@ func click(g *gocui.Gui, v *gocui.View) error { return nil } -func findUnderMouse() *node { - var found *node - var widgets []*node - var f func(n *node) +func findUnderMouse() *tree.Node { + var found *tree.Node + var widgets []*tree.Node + var f func(n *tree.Node) w, h := me.baseGui.MousePosition() // find buttons that are below where the mouse button click - f = func(n *node) { - widget := n.tk + f = func(n *tree.Node) { + var widget *guiWidget + widget = n.TK.(*guiWidget) // ignore widgets that are not visible - if n.Visible() { + if Visible(n) { if (widget.gocuiSize.w0 <= w) && (w <= widget.gocuiSize.w1) && (widget.gocuiSize.h0 <= h) && (h <= widget.gocuiSize.h1) { widgets = append(widgets, n) @@ -301,7 +337,7 @@ func findUnderMouse() *node { } if n == me.ddview { log.Log(NOW, "findUnderMouse() found ddview") - if n.Visible() { + if Visible(n) { log.Log(NOW, "findUnderMouse() and ddview is visable. hide it here. TODO: find highlighted row") found = n // find the actual value here and set the dropdown widget @@ -311,47 +347,51 @@ func findUnderMouse() *node { } } - for _, child := range n.children { - f(child) + for _, child := range widget.children { + f(child.node) } } - f(me.rootNode) + f(me.treeRoot) // 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) - n.showWidgetPlacement(true, "findUnderMouse() FOUND") + showWidgetPlacement(n, true, "findUnderMouse() FOUND") } return found } // find the widget under the mouse click func ctrlDown(g *gocui.Gui, v *gocui.View) error { - var found *node + var found *tree.Node // var widgets []*node // var f func (n *node) found = findUnderMouse() if me.ctrlDown == nil { setupCtrlDownWidget() - me.ctrlDown.label = found.progname - me.ctrlDown.tk.cuiName = "ctrlDown" + + var tk *guiWidget + tk = me.ctrlDown.TK.(*guiWidget) + tk.label = found.String() + tk.cuiName = "ctrlDown" // me.ctrlDown.parent = me.rootNode } - cd := me.ctrlDown.tk + var tk *guiWidget + tk = me.ctrlDown.TK.(*guiWidget) if found == nil { - found = me.rootNode + found = me.treeRoot } - me.ctrlDown.label = found.progname - newR := found.realGocuiSize() - cd.gocuiSize.w0 = newR.w0 - cd.gocuiSize.h0 = newR.h0 - cd.gocuiSize.w1 = newR.w1 - cd.gocuiSize.h1 = newR.h1 - if me.ctrlDown.Visible() { - me.ctrlDown.hideView() + tk.label = found.String() + newR := realGocuiSize(found) + tk.gocuiSize.w0 = newR.w0 + tk.gocuiSize.h0 = newR.h0 + tk.gocuiSize.w1 = newR.w1 + tk.gocuiSize.h1 = newR.h1 + if tk.Visible() { + // me.ctrlDown.hideView() } else { - me.ctrlDown.showView() + // me.ctrlDown.showView() } - me.ctrlDown.showWidgetPlacement(true, "ctrlDown:") + // me.ctrlDown.showWidgetPlacement(true, "ctrlDown:") return nil } |
