summaryrefslogtreecommitdiff
path: root/click.go
diff options
context:
space:
mode:
Diffstat (limited to 'click.go')
-rw-r--r--click.go274
1 files changed, 157 insertions, 117 deletions
diff --git a/click.go b/click.go
index 7de1e81..53c4abf 100644
--- a/click.go
+++ b/click.go
@@ -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
}