summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile5
-rw-r--r--README-goreadme.md2
-rw-r--r--button.go33
-rw-r--r--cmds/buttonplugin/Makefile1
-rw-r--r--cmds/buttonplugin/main.go17
-rw-r--r--cmds/plugin-consoleonly/main.go1
-rw-r--r--cmds/textbox/main.go1
-rw-r--r--debug.go13
-rw-r--r--debugFlags.go2
-rw-r--r--debugWidget.go6
-rw-r--r--debugWindow.go10
-rw-r--r--grid.go1
-rw-r--r--group.go2
-rw-r--r--node.go5
-rw-r--r--redraw.go19
-rw-r--r--toolkit/andlabs/action.go6
-rw-r--r--toolkit/andlabs/add.go4
-rw-r--r--toolkit/andlabs/button.go2
-rw-r--r--toolkit/andlabs/checkbox.go8
-rw-r--r--toolkit/andlabs/combobox.go4
-rw-r--r--toolkit/andlabs/common.go17
-rw-r--r--toolkit/andlabs/delete.go6
-rw-r--r--toolkit/andlabs/dropdown.go4
-rw-r--r--toolkit/andlabs/grid.go2
-rw-r--r--toolkit/andlabs/group.go8
-rw-r--r--toolkit/andlabs/image.go9
-rw-r--r--toolkit/andlabs/label.go7
-rw-r--r--toolkit/andlabs/plugin.go18
-rw-r--r--toolkit/andlabs/slider.go10
-rw-r--r--toolkit/andlabs/spinner.go5
-rw-r--r--toolkit/andlabs/structs.go5
-rw-r--r--toolkit/andlabs/tab.go2
-rw-r--r--toolkit/andlabs/textbox.go8
-rw-r--r--toolkit/andlabs/window.go15
-rw-r--r--toolkit/democui/Makefile15
-rw-r--r--toolkit/democui/click.go49
-rw-r--r--toolkit/democui/common.go90
-rw-r--r--toolkit/democui/debug.go111
-rw-r--r--toolkit/democui/keybindings.go62
-rw-r--r--toolkit/democui/log.go30
-rw-r--r--toolkit/democui/plugin.go18
-rw-r--r--toolkit/democui/tab.go52
-rw-r--r--toolkit/democui/view.go349
-rw-r--r--toolkit/gocui/, (renamed from toolkit/democui/,)0
-rw-r--r--toolkit/gocui/Makefile4
-rw-r--r--toolkit/gocui/button.go53
-rw-r--r--toolkit/gocui/click.go165
-rw-r--r--toolkit/gocui/color.go113
-rw-r--r--toolkit/gocui/common.go100
-rw-r--r--toolkit/gocui/debug.go143
-rw-r--r--toolkit/gocui/gocui.go112
-rw-r--r--toolkit/gocui/group.go36
-rw-r--r--toolkit/gocui/help.go (renamed from toolkit/democui/help.go)5
-rw-r--r--toolkit/gocui/keybindings.go146
-rw-r--r--toolkit/gocui/log.go8
-rw-r--r--toolkit/gocui/logical.go72
-rw-r--r--toolkit/gocui/main.go (renamed from toolkit/democui/main.go)37
-rw-r--r--toolkit/gocui/mouse.go (renamed from toolkit/democui/mouse.go)2
-rw-r--r--toolkit/gocui/place.go221
-rw-r--r--toolkit/gocui/plugin.go153
-rw-r--r--toolkit/gocui/structs.go (renamed from toolkit/democui/structs.go)41
-rw-r--r--toolkit/gocui/tab.go88
-rw-r--r--toolkit/gocui/view.go86
-rw-r--r--toolkit/gocui/views.go80
-rw-r--r--toolkit/gocui/window.go16
-rw-r--r--toolkit/widget.go7
-rw-r--r--window.go2
67 files changed, 1193 insertions, 1531 deletions
diff --git a/Makefile b/Makefile
index c390cd0..8793427 100644
--- a/Makefile
+++ b/Makefile
@@ -73,14 +73,11 @@ clean:
rm -f toolkit/*.so
cd debian && make clean
-plugins: plugins-gocui plugins-democui plugins-andlabs
+plugins: plugins-gocui plugins-andlabs
plugins-gocui:
make -C toolkit/gocui
-plugins-democui:
- make -C toolkit/democui
-
plugins-andlabs:
cd toolkit/andlabs/ && GO111MODULE="off" go build -buildmode=plugin -o ../andlabs.so
# make -C toolkit/andlabs
diff --git a/README-goreadme.md b/README-goreadme.md
index 847ca85..4b24a4d 100644
--- a/README-goreadme.md
+++ b/README-goreadme.md
@@ -123,7 +123,7 @@ Creates a window helpful for debugging this package
`func ExampleCatcher(f func())`
-### func [Indent](/debug.go#L125)
+### func [Indent](/debug.go#L120)
`func Indent(b bool, a ...interface{})`
diff --git a/button.go b/button.go
index a6026a1..8820734 100644
--- a/button.go
+++ b/button.go
@@ -15,6 +15,35 @@ func (n *Node) NewButton(name string, custom func()) *Node {
return newNode
}
-func callback(i int) {
- log(debugError, "button callback() i =", i)
+func callback(i int) bool {
+ log(debugError, "callback() for widget id =", i)
+ n := Config.rootNode.FindId(i)
+ log(debugError, "callback() found node =", n)
+ // running custom here means the button get's clicked twice
+ if (n.Custom == nil) {
+ log(debugError, "callback() = nil. SKIPPING")
+ return false
+ }
+ n.Custom()
+ return true
}
+
+// find widget by number
+func (n *Node) FindId(i int) (*Node) {
+ if (n == nil) {
+ return nil
+ }
+
+ if (n.id == i) {
+ return n
+ }
+
+ for _, child := range n.children {
+ newN := child.FindId(i)
+ if (newN != nil) {
+ return newN
+ }
+ }
+ return nil
+}
+
diff --git a/cmds/buttonplugin/Makefile b/cmds/buttonplugin/Makefile
index 12c23a8..84ff928 100644
--- a/cmds/buttonplugin/Makefile
+++ b/cmds/buttonplugin/Makefile
@@ -7,7 +7,6 @@
#
run: build
- # ./buttonplugin >/tmp/buttonplugin.log 2>&1
./buttonplugin >/tmp/witgui.log.stderr 2>&1
build-release:
diff --git a/cmds/buttonplugin/main.go b/cmds/buttonplugin/main.go
index b7f97d5..8168c31 100644
--- a/cmds/buttonplugin/main.go
+++ b/cmds/buttonplugin/main.go
@@ -58,6 +58,12 @@ func buttonWindow() {
w = gui.NewWindow()
t = w.NewTab("buttonTab")
g = t.NewGroup("buttonGroup")
+ g1 := t.NewGroup("buttonGroup 2")
+ more = g1.NewGroup("more")
+ g1.NewButton("hello2", func () {
+ log.Println("world2")
+ })
+ more2 = g1.NewGroup("more2")
g.NewButton("this app is useful for plugin debuggin", func () {
})
@@ -66,17 +72,16 @@ func buttonWindow() {
g.NewButton("hello", func () {
log.Println("world")
})
- more = g.NewGroup("more")
- g.NewButton("Load 'democui'", func () {
+ g.NewButton("Load 'gocui'", func () {
// this set the xterm and mate-terminal window title. maybe works generally?
fmt.Println("\033]0;" + title + "blah \007")
- gui.StartS("democui")
+ gui.StartS("gocui")
})
- g.NewButton("Redraw 'democui'", func () {
+ g.NewButton("Redraw 'gocui'", func () {
fmt.Println("\033]0;" + title + "blah2 \007")
- gui.Redraw("democui")
+ gui.Redraw("gocui")
})
g.NewButton("NewButton(more)", func () {
@@ -107,6 +112,4 @@ func buttonWindow() {
g.NewButton("gui.DebugWindow()", func () {
gui.DebugWindow()
})
-
- more2 = g.NewGroup("more2")
}
diff --git a/cmds/plugin-consoleonly/main.go b/cmds/plugin-consoleonly/main.go
index 1003530..fa428d6 100644
--- a/cmds/plugin-consoleonly/main.go
+++ b/cmds/plugin-consoleonly/main.go
@@ -8,7 +8,6 @@ import (
func main() {
gui.InitPlugins([]string{"gocui"})
- // gui.InitPlugins([]string{"democui"})
gui.Main(helloworld)
}
diff --git a/cmds/textbox/main.go b/cmds/textbox/main.go
index 0dd17e6..e02ff4a 100644
--- a/cmds/textbox/main.go
+++ b/cmds/textbox/main.go
@@ -26,7 +26,6 @@ func main() {
// gui.SetDebug(true)
// gui.InitPlugins([]string{"gocui"})
- // gui.InitPlugins([]string{"democui"})
gui.Main(initGUI)
}
diff --git a/debug.go b/debug.go
index 26fe5da..ffe15fd 100644
--- a/debug.go
+++ b/debug.go
@@ -102,11 +102,6 @@ func (n *Node) Dump(b bool) {
Indent(b, "Height = ", n.Height)
Indent(b, "(X,Y) = ", n.X, n.Y)
Indent(b, "Next (X,Y) = ", n.NextX, n.NextY)
- /*
- Indent(b, "Widget Name = ", n.widget.Name)
- Indent(b, "Widget Type = ", n.widget.Type)
- Indent(b, "Widget Id = ", n.widget.Id)
- */
if (n.parent == nil) {
Indent(b, "parent = nil")
@@ -133,13 +128,9 @@ func (n *Node) dumpWidget(b bool) string {
log(debugError, "dumpWidget() node == nil")
return ""
}
- info = n.widget.Type.String()
+ info = n.WidgetType.String()
- info += ", " + n.widget.Name
- if (n.Name != n.widget.Name) {
- info += " NAME MISMATCH"
- }
- if (n.widget.Type == toolkit.Checkbox) {
+ if (n.WidgetType == toolkit.Checkbox) {
info += " = " + strconv.FormatBool(n.widget.B)
}
diff --git a/debugFlags.go b/debugFlags.go
index a69eb9f..b7a7768 100644
--- a/debugFlags.go
+++ b/debugFlags.go
@@ -39,7 +39,7 @@ func (n *Node) DebugFlags(makeWindow bool) {
g.NewLabel("like verbose=1")
cb1.Custom = func() {
debugGui = cb1.widget.B
- log(debugGui, "Custom() n.widget =", cb1.widget.Name, cb1.widget.B)
+ log(debugGui, "Custom() n.widget =", cb1.Name, cb1.widget.B)
}
// errors. by default these always output somewhere
diff --git a/debugWidget.go b/debugWidget.go
index afe4302..cd712f4 100644
--- a/debugWidget.go
+++ b/debugWidget.go
@@ -43,7 +43,7 @@ func setActiveWidget(w *Node) {
// TODO: make a fake binary tree for this(?)
return
}
- title := "ID =" + strconv.Itoa(w.id) + " " + w.widget.Name
+ title := "ID =" + strconv.Itoa(w.id) + " " + w.Name
activeLabel.SetText(title)
activeLabelType.SetText("widget.Type = " + w.widget.Type.String())
return
@@ -180,7 +180,7 @@ func (n *Node) debugAddWidgetButtons() {
a.AddText("make something for tim for qflow")
a.AddText("and for riscv")
a.Custom = func () {
- log("custom dropdown() a =", a.widget.Name, a.widget.S, "id=", a.id)
+ log("custom dropdown() a =", a.Name, a.widget.S, "id=", a.id)
}
})
n.NewButton("Combobox", func () {
@@ -188,7 +188,7 @@ func (n *Node) debugAddWidgetButtons() {
a.AddText("mirrors.wit.com")
a.AddText("go.wit.com")
a.Custom = func () {
- log("custom combobox() a =", a.widget.Name, a.widget.S, "id=", a.id)
+ log("custom combobox() a =", a.Name, a.widget.S, "id=", a.id)
}
})
n.NewButton("Grid", func () {
diff --git a/debugWindow.go b/debugWindow.go
index ddbddc2..7994e82 100644
--- a/debugWindow.go
+++ b/debugWindow.go
@@ -40,7 +40,7 @@ func (n *Node) DebugTab(title string) *Node {
cb := gog.NewCheckbox("Seperate windows")
cb.Custom = func() {
makeTabs = cb.widget.B
- log(debugGui, "Custom() n.widget =", cb.widget.Name, cb.widget.B)
+ log(debugGui, "Custom() n.widget =", cb.Name, cb.widget.B)
}
makeTabs = false
cb.Set(false)
@@ -97,12 +97,8 @@ func (n *Node) DebugTab(title string) *Node {
StartS("gocui")
})
- g2.NewButton("load plugin 'democui'", func () {
- StartS("democui")
- })
-
- g2.NewButton("Redraw(democui)", func () {
- Redraw("democui")
+ g2.NewButton("Redraw(gocui)", func () {
+ Redraw("gocui")
})
return newN
diff --git a/grid.go b/grid.go
index cefe419..859d2e3 100644
--- a/grid.go
+++ b/grid.go
@@ -36,6 +36,7 @@ func (n *Node) NewGrid(name string, x int, y int) *Node {
func (n *Node) NewBox(name string, b bool) *Node {
newNode := n.New(name, toolkit.Box, nil)
+ newNode.B = b
var a toolkit.Action
a.ActionType = toolkit.Add
diff --git a/group.go b/group.go
index e0aeca6..3901c12 100644
--- a/group.go
+++ b/group.go
@@ -13,6 +13,8 @@ func (n *Node) NewGroup(name string) *Node {
var a toolkit.Action
a.ActionType = toolkit.Add
+ a.Name = name
+ a.Text = name
newaction(&a, newNode, n)
newBox := newNode.NewBox("group vBox", false)
diff --git a/node.go b/node.go
index d4be30b..30ebf02 100644
--- a/node.go
+++ b/node.go
@@ -26,10 +26,10 @@ func (n *Node) New(title string, t toolkit.WidgetType, custom func()) *Node {
log(debugChange, "newT.Custom() == nil. Not doing anything. SEND SOMETHING TO THE CHANNEL")
return
}
- log(debugChange, "newT.Custom() START SEND SOMETHING TO THE CHANNEL widget.Name =", newN.widget.Name)
+ log(debugChange, "newT.Custom() START SEND SOMETHING TO THE CHANNEL node =", newN.Name)
// send something to the channel here????
newN.Custom()
- log(debugChange, "newT.Custom() END SEND SOMETHING TO THE CHANNEL widget.Name =", newN.widget.Name)
+ log(debugChange, "newT.Custom() END SEND SOMETHING TO THE CHANNEL node =", newN.Name)
}
n.Append(newN)
@@ -44,7 +44,6 @@ func addNode(title string) *Node {
n := new(Node)
n.Name = title
n.Text = title
- n.widget.Name = title
n.id = Config.counter
n.widget.Id = n.id
log(debugNode, "addNode = widget setid =", n.id)
diff --git a/redraw.go b/redraw.go
index 38c3972..a562127 100644
--- a/redraw.go
+++ b/redraw.go
@@ -37,18 +37,35 @@ func (n *Node) Redraw(p *aplug) {
}
func (n *Node) redo(p *aplug) {
- log(logNow, "redo() on n.Widget")
+ log(logNow, "redo()", n.id, n.WidgetType, n.Name)
var a *toolkit.Action
a = new(toolkit.Action)
a.Name = n.Name
a.Text = n.Text
+
a.ActionType = toolkit.Add
a.WidgetType = n.WidgetType
a.WidgetId = n.id
+
+
+ // used for Windows
a.Width = n.Width
a.Height = n.Height
+ // used for anything that needs a range
+ a.X = n.X
+ a.Y = n.Y
+
+ // used for grids and tables
+// a.NextX = n.NextX
+// a.NextY = n.NextY
+
+ // used for values
+ a.I = n.I
+ a.S = n.S
+ a.B = n.B
+
if (n.parent == nil) {
a.ParentId = 0
} else {
diff --git a/toolkit/andlabs/action.go b/toolkit/andlabs/action.go
index 9d098df..10264aa 100644
--- a/toolkit/andlabs/action.go
+++ b/toolkit/andlabs/action.go
@@ -57,7 +57,7 @@ func pad(a *toolkit.Action) {
return
}
- switch t.Type {
+ switch t.WidgetType {
case toolkit.Group:
switch a.ActionType {
case toolkit.Margin:
@@ -138,7 +138,7 @@ func move(a *toolkit.Action) {
return
}
- switch tParent.Type {
+ switch tParent.WidgetType {
case toolkit.Group:
switch a.ActionType {
case toolkit.Margin:
@@ -202,7 +202,7 @@ func uiDelete(a *toolkit.Action) {
return
}
- switch tParent.Type {
+ switch tParent.WidgetType {
case toolkit.Group:
switch a.ActionType {
case toolkit.Margin:
diff --git a/toolkit/andlabs/add.go b/toolkit/andlabs/add.go
index b03ee9c..2a1b677 100644
--- a/toolkit/andlabs/add.go
+++ b/toolkit/andlabs/add.go
@@ -121,7 +121,7 @@ func place(a *toolkit.Action, t *andlabsT, newt *andlabsT) bool {
if (andlabs[a.WidgetId] == nil) {
log(logInfo, "newTab() MAPPED", a.WidgetId, a.ParentId)
andlabs[a.WidgetId] = newt
- newt.Type = a.WidgetType
+ newt.WidgetType = a.WidgetType
} else {
log(debugError, "newTab() DO WHAT?", a.WidgetId, a.ParentId)
log(debugError, "THIS IS BAD")
@@ -138,7 +138,7 @@ func place(a *toolkit.Action, t *andlabsT, newt *andlabsT) bool {
return false
}
- switch where.Type {
+ switch where.WidgetType {
case toolkit.Grid:
log(debugGrid, "add() Grid try at Parent X,Y =", a.X, a.Y)
newt.gridX = a.X
diff --git a/toolkit/andlabs/button.go b/toolkit/andlabs/button.go
index 1f9fdaf..94e2966 100644
--- a/toolkit/andlabs/button.go
+++ b/toolkit/andlabs/button.go
@@ -24,7 +24,7 @@ func newButton(a *toolkit.Action) {
newt.uiButton = b
newt.uiControl = b
newt.tw = a.Widget
- newt.Type = a.WidgetType
+ newt.WidgetType = a.WidgetType
newt.parent = t
b.OnClicked(func(*ui.Button) {
diff --git a/toolkit/andlabs/checkbox.go b/toolkit/andlabs/checkbox.go
index f73a284..69ba060 100644
--- a/toolkit/andlabs/checkbox.go
+++ b/toolkit/andlabs/checkbox.go
@@ -9,12 +9,14 @@ import (
func (t *andlabsT) newCheckbox(a *toolkit.Action) *andlabsT {
var newt andlabsT
w := a.Widget
- log(debugToolkit, "newCheckbox()", w.Name, w.Type)
+ log(debugToolkit, "newCheckbox()", a.Name, a.WidgetType)
newt.tw = w
- newt.Type = w.Type
+ newt.WidgetType = a.WidgetType
newt.wId = a.WidgetId
+ newt.Name = a.Name
+ newt.Text = a.Text
- newt.uiCheckbox = ui.NewCheckbox(w.Name)
+ newt.uiCheckbox = ui.NewCheckbox(a.Text)
newt.uiControl = newt.uiCheckbox
newt.uiCheckbox.OnToggled(func(spin *ui.Checkbox) {
diff --git a/toolkit/andlabs/combobox.go b/toolkit/andlabs/combobox.go
index e7d51a7..100434e 100644
--- a/toolkit/andlabs/combobox.go
+++ b/toolkit/andlabs/combobox.go
@@ -9,11 +9,11 @@ import (
func (t *andlabsT) newCombobox(a *toolkit.Action) *andlabsT {
var newt andlabsT
w := a.Widget
- log(debugToolkit, "newCombobox() START", w.Name)
+ log(debugToolkit, "newCombobox() START", a.Name)
newt.tw = w
newt.wId = a.WidgetId
- newt.Type = w.Type
+ newt.WidgetType = a.WidgetType
s := ui.NewEditableCombobox()
newt.uiEditableCombobox = s
newt.uiControl = s
diff --git a/toolkit/andlabs/common.go b/toolkit/andlabs/common.go
index 5e1b0fb..cddea3e 100644
--- a/toolkit/andlabs/common.go
+++ b/toolkit/andlabs/common.go
@@ -5,13 +5,17 @@ import (
)
func (t *andlabsT) commonChange(tw *toolkit.Widget, wId int) {
- log(debugChange, "commonChange() START widget =", t.tw.Name, t.tw.Type)
+ log(debugChange, "commonChange() START widget =", t.Name, t.WidgetType)
+ if (sendToChan(wId)) {
+ log(debugChange, "commonChange() END attempted channel worked", t.Name, t.WidgetType)
+ return
+ }
if (tw == nil) {
log(true, "commonChange() What the fuck. there is no widget t.tw == nil")
return
}
if (tw.Custom == nil) {
- log(debugChange, "commonChange() END Widget.Custom() = nil", t.tw.Name, t.tw.Type)
+ log(debugChange, "commonChange() END Widget.Custom() = nil", t.Name, t.WidgetType)
return
}
tw.Custom()
@@ -20,16 +24,15 @@ func (t *andlabsT) commonChange(tw *toolkit.Widget, wId int) {
log(debugError, "commonChange() ERROR: wId map == nil", wId)
return
}
- sendToChan(wId)
- log(debugChange, "commonChange() END Widget.Custom()", t.tw.Name, t.tw.Type)
+ log(debugChange, "commonChange() END Widget.Custom()", t.Name, t.WidgetType)
}
-func sendToChan(i int) {
+func sendToChan(i int) bool {
if (callback == nil) {
log(debugError, "commonChange() SHOULD SEND int back here, but callback == nil", i)
- return
+ return false
}
log(debugError, "commonChange() Running callback() i =", i)
- callback(i)
+ return callback(i)
}
diff --git a/toolkit/andlabs/delete.go b/toolkit/andlabs/delete.go
index 2d2e04a..dc28371 100644
--- a/toolkit/andlabs/delete.go
+++ b/toolkit/andlabs/delete.go
@@ -18,7 +18,7 @@ func destroy(pId int, cId int) {
return
}
- switch ct.Type {
+ switch ct.WidgetType {
case toolkit.Button:
log(true, "Should delete Button here:", ct.Name)
log(true, "Parent:")
@@ -40,8 +40,8 @@ func destroy(pId int, cId int) {
case toolkit.Window:
log(true, "Should delete Window here:", ct.Name)
default:
- log(true, "Don't know how to delete pt =", pt.tw.Type, pt.tw.Name, pt.uiButton)
- log(true, "Don't know how to delete ct =", ct.tw.Type, ct.tw.Name, ct.uiButton)
+ log(true, "Don't know how to delete pt =", pt.WidgetType, pt.Name, pt.uiButton)
+ log(true, "Don't know how to delete ct =", ct.WidgetType, ct.Name, ct.uiButton)
log(true, "Parent:")
pt.Dump(true)
log(true, "Child:")
diff --git a/toolkit/andlabs/dropdown.go b/toolkit/andlabs/dropdown.go
index d020ed8..036ed3e 100644
--- a/toolkit/andlabs/dropdown.go
+++ b/toolkit/andlabs/dropdown.go
@@ -12,7 +12,7 @@ func (t *andlabsT) newDropdown(a *toolkit.Action) *andlabsT {
log(debugToolkit, "gui.Toolbox.newDropdown() START", a.Name)
newt.tw = w
- newt.Type = w.Type
+ newt.WidgetType = a.WidgetType
newt.wId = a.WidgetId
s := ui.NewCombobox()
newt.uiCombobox = s
@@ -60,7 +60,7 @@ func AddDropdownName(a *toolkit.Action) {
t := andlabs[a.WidgetId]
if (t == nil) {
- log(debugToolkit, "go.andlabs.AddDropdownName() toolkit struct == nil. name=", a.Widget.Name, a.S)
+ log(debugToolkit, "go.andlabs.AddDropdownName() toolkit struct == nil. name=", a.Name, a.S)
listMap(debugToolkit)
return
}
diff --git a/toolkit/andlabs/grid.go b/toolkit/andlabs/grid.go
index be05b70..2f91c86 100644
--- a/toolkit/andlabs/grid.go
+++ b/toolkit/andlabs/grid.go
@@ -22,7 +22,7 @@ func newGrid(a *toolkit.Action) {
newt.uiGrid = c
newt.uiControl = c
newt.tw = a.Widget
- newt.Type = toolkit.Grid
+ newt.WidgetType = toolkit.Grid
newt.gridX = 0
newt.gridY = 0
diff --git a/toolkit/andlabs/group.go b/toolkit/andlabs/group.go
index 0769151..1551d66 100644
--- a/toolkit/andlabs/group.go
+++ b/toolkit/andlabs/group.go
@@ -8,15 +8,15 @@ import (
)
func newGroup(a *toolkit.Action) {
- w := a.Widget
- log(debugToolkit, "NewGroup()", w.Name)
+ // w := a.Widget
+ log(debugToolkit, "NewGroup()", a.Name)
t := andlabs[a.ParentId]
if (t == nil) {
- log(debugToolkit, "NewGroup() toolkit struct == nil. name=", w.Name)
+ log(debugToolkit, "NewGroup() toolkit struct == nil. name=", a.Name)
listMap(debugToolkit)
}
- newt := t.rawGroup(w.Name)
+ newt := t.rawGroup(a.Name)
place(a, t, newt)
}
diff --git a/toolkit/andlabs/image.go b/toolkit/andlabs/image.go
index a3d1cb6..cb1565c 100644
--- a/toolkit/andlabs/image.go
+++ b/toolkit/andlabs/image.go
@@ -9,15 +9,14 @@ import (
// make new Image here
func newImage(a *toolkit.Action) {
- w := a.Widget
- log(debugToolkit, "newImage()", w.Name)
+ log(debugToolkit, "newImage()", a.Name)
t := andlabs[a.ParentId]
if (t == nil) {
- log(debugToolkit, "newImage() toolkit struct == nil. name=", w.Name)
+ log(debugToolkit, "newImage() toolkit struct == nil. name=", a.Name)
listMap(debugToolkit)
}
- newt := t.rawImage(w.Name)
+ newt := t.rawImage(a.Name)
place(a, t, newt)
}
@@ -37,7 +36,7 @@ func (t *andlabsT) rawImage(title string) *andlabsT {
return &newt
}
/*
- if (w.Name == "image") {
+ if (a.Name == "image") {
log(true, "NewTextbox() trying to add a new image")
i := ui.NewImage(16, 16)
img, _, err := image.Decode(bytes.NewReader(rawImage))
diff --git a/toolkit/andlabs/label.go b/toolkit/andlabs/label.go
index c6bd670..7762827 100644
--- a/toolkit/andlabs/label.go
+++ b/toolkit/andlabs/label.go
@@ -9,8 +9,7 @@ import (
func newLabel(a *toolkit.Action) {
var newt *andlabsT
- w := a.Widget
- log(debugToolkit, "NewLabel()", w.Name)
+ log(debugToolkit, "NewLabel()", a.Name)
t := andlabs[a.ParentId]
if (t == nil) {
@@ -21,11 +20,11 @@ func newLabel(a *toolkit.Action) {
return
}
- log(debugToolkit, "NewLabel()", w.Name)
+ log(debugToolkit, "NewLabel()", a.Name)
newt = new(andlabsT)
- c := ui.NewLabel(w.Name)
+ c := ui.NewLabel(a.Name)
newt.uiLabel = c
newt.uiControl = c
diff --git a/toolkit/andlabs/plugin.go b/toolkit/andlabs/plugin.go
index 6c2dd76..2cac13c 100644
--- a/toolkit/andlabs/plugin.go
+++ b/toolkit/andlabs/plugin.go
@@ -138,9 +138,9 @@ func setText(a *toolkit.Action) {
actionDump(debugError, a)
return
}
- log(debugChange, "setText() Attempt on", t.Type, "with", a.S)
+ log(debugChange, "setText() Attempt on", t.WidgetType, "with", a.S)
- switch t.Type {
+ switch t.WidgetType {
case toolkit.Window:
t.uiWindow.SetTitle(a.S)
case toolkit.Tab:
@@ -157,7 +157,7 @@ func setText(a *toolkit.Action) {
// t.uiCheckbox.SetChecked(a.B)
t.tw.B = a.B
default:
- log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.tw.Name)
+ log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
}
case toolkit.Textbox:
switch a.ActionType {
@@ -170,7 +170,7 @@ func setText(a *toolkit.Action) {
case toolkit.GetText:
t.tw.S = t.s
default:
- log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.tw.Name)
+ log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
}
case toolkit.Label:
t.uiLabel.SetText(a.S)
@@ -183,7 +183,7 @@ func setText(a *toolkit.Action) {
case toolkit.Set:
t.uiSlider.SetValue(a.I)
default:
- log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.tw.Name)
+ log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
}
case toolkit.Spinner:
switch a.ActionType {
@@ -192,7 +192,7 @@ func setText(a *toolkit.Action) {
case toolkit.Set:
t.uiSpinbox.SetValue(a.I)
default:
- log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.tw.Name)
+ log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
}
case toolkit.Dropdown:
switch a.ActionType {
@@ -227,7 +227,7 @@ func setText(a *toolkit.Action) {
case toolkit.GetText:
t.tw.S = t.s
default:
- log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.tw.Name)
+ log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
}
case toolkit.Combobox:
switch a.ActionType {
@@ -244,9 +244,9 @@ func setText(a *toolkit.Action) {
case toolkit.GetText:
t.tw.S = t.s
default:
- log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.tw.Name)
+ log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
}
default:
- log(debugError, "plugin Send() Don't know how to setText on", t.tw.Type, "yet", a.ActionType)
+ log(debugError, "plugin Send() Don't know how to setText on", t.WidgetType, "yet", a.ActionType)
}
}
diff --git a/toolkit/andlabs/slider.go b/toolkit/andlabs/slider.go
index 5a16bff..ed96f98 100644
--- a/toolkit/andlabs/slider.go
+++ b/toolkit/andlabs/slider.go
@@ -10,13 +10,12 @@ import (
func (t *andlabsT) newSlider(a *toolkit.Action) *andlabsT {
var newt andlabsT
w := a.Widget
- // log(debugToolkit, w.Name, w.Type, w.X, w.Y)
s := ui.NewSlider(a.X, a.Y)
newt.uiSlider = s
newt.uiControl = s
newt.tw = w
- newt.Type = toolkit.Slider
+ newt.WidgetType = toolkit.Slider
newt.wId = a.WidgetId
s.OnChanged(func(spin *ui.Slider) {
@@ -29,16 +28,13 @@ func (t *andlabsT) newSlider(a *toolkit.Action) *andlabsT {
func newSlider(a *toolkit.Action) {
var newt *andlabsT
- w := a.Widget
- log(debugToolkit, "newSlider()", w.Name)
+ log(debugToolkit, "newSlider()", a.Name)
t := andlabs[a.ParentId]
if (t == nil) {
- log(debugError, "newSlider() ERROR toolkit struct == nil. name=", w.Name)
+ log(debugError, "newSlider() ERROR toolkit struct == nil. name=", a.Name)
return
}
- // w.X = a.X
- // w.Y = a.Y
newt = t.newSlider(a)
place(a, t, newt)
}
diff --git a/toolkit/andlabs/spinner.go b/toolkit/andlabs/spinner.go
index 58e0934..46be999 100644
--- a/toolkit/andlabs/spinner.go
+++ b/toolkit/andlabs/spinner.go
@@ -17,7 +17,7 @@ func (t *andlabsT) newSpinner(a *toolkit.Action) *andlabsT {
newt.uiControl = s
newt.tw = w
newt.wId = a.WidgetId
- newt.Type = toolkit.Spinner
+ newt.WidgetType = toolkit.Spinner
s.OnChanged(func(s *ui.Spinbox) {
newt.tw.I = newt.uiSpinbox.Value()
@@ -29,11 +29,10 @@ func (t *andlabsT) newSpinner(a *toolkit.Action) *andlabsT {
func newSpinner(a *toolkit.Action) {
var newt *andlabsT
- w := a.Widget
t := andlabs[a.ParentId]
if (t == nil) {
- log(debugError, "NewSpinner() toolkit struct == nil. name=", w.Name)
+ log(debugError, "NewSpinner() toolkit struct == nil. name=", a.Name)
return
}
newt = t.newSpinner(a)
diff --git a/toolkit/andlabs/structs.go b/toolkit/andlabs/structs.go
index 1fb9a79..9cc1b9d 100644
--- a/toolkit/andlabs/structs.go
+++ b/toolkit/andlabs/structs.go
@@ -6,14 +6,15 @@ import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
var andlabs map[int]*andlabsT
-var callback func(int)
+var callback func(int) bool
// stores the raw toolkit internals
type andlabsT struct {
wId int // widget ID
- Type toolkit.WidgetType
+ WidgetType toolkit.WidgetType
Name string
+ Text string
// Type toolkit.WidgetType
Width int
Height int
diff --git a/toolkit/andlabs/tab.go b/toolkit/andlabs/tab.go
index 0753338..a9a3e38 100644
--- a/toolkit/andlabs/tab.go
+++ b/toolkit/andlabs/tab.go
@@ -44,7 +44,7 @@ func (t *andlabsT) newTab(a *toolkit.Action) {
if (andlabs[a.WidgetId] == nil) {
log(logInfo, "newTab() MAPPED", a.WidgetId, a.ParentId)
andlabs[a.WidgetId] = newt
- newt.Type = a.Widget.Type
+ newt.WidgetType = a.WidgetType
} else {
log(debugError, "newTab() DO WHAT?", a.WidgetId, a.ParentId)
log(debugError, "THIS IS BAD")
diff --git a/toolkit/andlabs/textbox.go b/toolkit/andlabs/textbox.go
index ef39d33..6ea01e1 100644
--- a/toolkit/andlabs/textbox.go
+++ b/toolkit/andlabs/textbox.go
@@ -15,9 +15,8 @@ func (t *andlabsT) newTextbox(w *toolkit.Widget) *andlabsT {
newt.uiMultilineEntry = c
newt.uiControl = c
- newt.Name = w.Name
newt.tw = w
- newt.Type = toolkit.Textbox
+ newt.WidgetType = toolkit.Textbox
c.OnChanged(func(spin *ui.MultilineEntry) {
t.s = spin.Text()
@@ -30,14 +29,15 @@ func (t *andlabsT) newTextbox(w *toolkit.Widget) *andlabsT {
func newTextbox(a *toolkit.Action) {
w := a.Widget
- log(debugToolkit, "newCombobox()", w.Name)
+ log(debugToolkit, "newCombobox()", a.Name)
t := andlabs[a.ParentId]
if (t == nil) {
- log(debugToolkit, "newCombobox() toolkit struct == nil. name=", w.Name)
+ log(debugToolkit, "newCombobox() toolkit struct == nil. name=", a.Name)
listMap(debugToolkit)
return
}
newt := t.newTextbox(w)
+ newt.Name = a.Name
place(a, t, newt)
}
diff --git a/toolkit/andlabs/window.go b/toolkit/andlabs/window.go
index 2fee729..f00e1ee 100644
--- a/toolkit/andlabs/window.go
+++ b/toolkit/andlabs/window.go
@@ -16,22 +16,14 @@ func (t *andlabsT) ErrorWindow(msg1 string, msg2 string) {
}
func newWindow(a *toolkit.Action) {
- w := a.Widget
var newt *andlabsT
- // log(debugToolkit, "toolkit NewWindow", w.Name, w.Width, w.Height)
-
- if (w == nil) {
- log(debugToolkit, "wit/gui plugin error. widget == nil")
- return
- }
newt = new(andlabsT)
- newt.tw = w
- newt.Type = toolkit.Window
+ newt.WidgetType = toolkit.Window
newt.wId = a.WidgetId
// menubar bool is if the OS defined border on the window should be used
- win := ui.NewWindow(w.Name, a.Width, a.Height, menubar)
+ win := ui.NewWindow(a.Name, a.Width, a.Height, menubar)
win.SetBorderless(canvas)
win.SetMargined(margin)
win.OnClosing(func(*ui.Window) bool {
@@ -41,8 +33,7 @@ func newWindow(a *toolkit.Action) {
win.Show()
newt.uiWindow = win
newt.uiControl = win
- // newt.UiWindowBad = win // deprecate this as soon as possible
- newt.Name = w.Name
+ newt.Name = a.Name
andlabs[a.WidgetId] = newt
return
diff --git a/toolkit/democui/Makefile b/toolkit/democui/Makefile
deleted file mode 100644
index 96b8928..0000000
--- a/toolkit/democui/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-all: plugin
- ldd ../democui.so
-
-build:
- GO111MODULE="off" go build
-
-plugin:
- GO111MODULE="off" go build -buildmode=plugin -o ../democui.so
-
-objdump:
- objdump -t ../democui.so |less
-
-log:
- reset
- tail -f /tmp/witgui.* /tmp/guilogfile
diff --git a/toolkit/democui/click.go b/toolkit/democui/click.go
deleted file mode 100644
index adc611c..0000000
--- a/toolkit/democui/click.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package main
-
-import (
- "fmt"
- "errors"
- "strconv"
-
- "github.com/awesome-gocui/gocui"
- // "git.wit.org/wit/gui/toolkit"
-)
-
-func click(g *gocui.Gui, v *gocui.View) error {
- var l string
- var err error
-
- log(logNow, "click() START", v.Name())
- i, err := strconv.Atoi(v.Name())
- if (err != nil) {
- log(logNow, "click() Can't find widget. error =", err)
- } else {
- log(logNow, "click() Found widget id =", i)
- if (me.widgets[i] != nil) {
- w := me.widgets[i]
- log(logNow, "click() Found widget =", w)
- }
- }
-
- if _, err := g.SetCurrentView(v.Name()); err != nil {
- return err
- }
-
- _, cy := v.Cursor()
- if l, err = v.Line(cy); err != nil {
- l = ""
- }
-
- maxX, maxY := g.Size()
- if v, err := g.SetView("msg", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0); err == nil || errors.Is(err, gocui.ErrUnknownView) {
- v.Clear()
- v.SelBgColor = gocui.ColorCyan
- v.SelFgColor = gocui.ColorBlack
- fmt.Fprintln(v, l)
- }
-
- // this seems to delete the button(?)
- // g.SetViewOnBottom(v.Name())
- log(logNow, "click() END")
- return nil
-}
diff --git a/toolkit/democui/common.go b/toolkit/democui/common.go
deleted file mode 100644
index 799ac9c..0000000
--- a/toolkit/democui/common.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package main
-
-import (
- "github.com/awesome-gocui/gocui"
- "git.wit.org/wit/gui/toolkit"
-)
-
-func setupWidgetT(a *toolkit.Action) *cuiWidget {
- var w *cuiWidget
- w = new(cuiWidget)
-
- w.name = a.Name
- w.text = a.Text
-
- w.widgetType = a.WidgetType
- w.id = a.WidgetId
- if (w.id > me.highest) {
- me.highest = w.id
- }
- w.parentId = a.ParentId
- me.widgets[w.id] = w
-
- // w.showWidgetPlacement(logNow)
- return w
-}
-
-// ColorBlack ColorRed ColorGreen ColorYellow ColorBlue ColorMagenta ColorCyan ColorWhite
-// gocui.GetColor("#FFAA55") // Dark Purple
-func (w *cuiWidget) SetDefaultWidgetColor() {
- log(logInfo, "SetDefaultWidgetColor() on", w.widgetType, w.name)
- if (w.v == nil) {
- log(logError, "SetDefaultWidgetColor() failed on view == nil")
- return
- }
- w.SetDefaultHighlight()
- switch w.widgetType {
- case toolkit.Button:
- w.v.BgColor = gocui.ColorGreen
- w.v.FrameColor = gocui.ColorGreen
- case toolkit.Checkbox:
- w.v.BgColor = gocui.GetColor("#FFAA55") // Dark Purple
- w.v.FrameColor = gocui.GetColor("#FFEE11")
- case toolkit.Dropdown:
- w.v.BgColor = gocui.ColorCyan
- w.v.FrameColor = gocui.ColorGreen
- case toolkit.Textbox:
- w.v.BgColor = gocui.ColorYellow
- w.v.FrameColor = gocui.ColorGreen
- case toolkit.Slider:
- w.v.BgColor = gocui.GetColor("#FFAA55") // Dark Purple
- w.v.FrameColor = gocui.ColorRed
- case toolkit.Label:
- w.v.FrameColor = gocui.ColorRed
- default:
- w.v.BgColor = gocui.ColorYellow
- }
-}
-
-// SetColor("#FFAA55") // purple
-func (w *cuiWidget) SetColor(c string) {
- if (w.v == nil) {
- log(logError, "SetColor() failed on view == nil")
- return
- }
- w.v.SelBgColor = gocui.ColorCyan
- w.v.SelFgColor = gocui.ColorBlack
- switch c {
- case "Green":
- w.v.BgColor = gocui.ColorGreen
- case "Purple":
- w.v.BgColor = gocui.GetColor("#FFAA55")
- case "Yellow":
- w.v.BgColor = gocui.ColorYellow
- case "Blue":
- w.v.BgColor = gocui.ColorBlue
- case "Red":
- w.v.BgColor = gocui.ColorRed
- default:
- w.v.BgColor = gocui.GetColor(c)
- }
-}
-
-func (w *cuiWidget) SetDefaultHighlight() {
- if (w.v == nil) {
- log(logError, "SetColor() failed on view == nil")
- return
- }
- w.v.SelBgColor = gocui.ColorGreen
- w.v.SelFgColor = gocui.ColorBlack
-}
diff --git a/toolkit/democui/debug.go b/toolkit/democui/debug.go
deleted file mode 100644
index 28afa0d..0000000
--- a/toolkit/democui/debug.go
+++ /dev/null
@@ -1,111 +0,0 @@
-package main
-
-import (
- "fmt"
- "strconv"
-
- "git.wit.org/wit/gui/toolkit"
- "github.com/awesome-gocui/gocui"
-)
-
-// var debugError bool = true
-
-// This is important. This sets the defaults for the gui. Without this, there isn't correct padding, etc
-func setDefaultBehavior(s bool) {
- me.defaultBehavior = s
- if (me.defaultBehavior) {
- log(logInfo, "Setting this toolkit to use the default behavior.")
- log(logInfo, "This is the 'guessing' part as defined by the wit/gui 'Principles'. Refer to the docs.")
- me.stretchy = false
- me.padded = true
- me.menubar = true
- me.margin = true
- me.canvas = false
- me.bookshelf = true // 99% of the time, things make a vertical stack of objects
- } else {
- log(logInfo, "This toolkit is set to ignore the default behavior.")
- }
-}
-
-func actionDump(b bool, a *toolkit.Action) {
- if (a == nil) {
- log(b, "action = nil")
- return
- }
-
- log(b, "a.Name =", a.Name)
- log(b, "a.Text =", a.Text)
- log(b, "a.WidgetId =", a.WidgetId)
- log(b, "a.ParentId =", a.ParentId)
- log(b, "a.B =", a.B)
- log(b, "a.S =", a.S)
- widgetDump(b, a.Widget)
-}
-
-func widgetDump(b bool, w *toolkit.Widget) {
- if (w == nil) {
- log(b, "widget = nil")
- return
- }
-
- /*
- log(b, "widget.Name =", w.Name)
- log(b, "widget.Type =", w.Type)
- log(b, "widget.Custom =", w.Custom)
- log(b, "widget.B =", w.B)
- log(b, "widget.I =", w.I)
- log(b, "widget.Width =", w.Width)
- log(b, "widget.Height =", w.Height)
- log(b, "widget.X =", w.X)
- log(b, "widget.Y =", w.Y)
- */
-}
-
-func dumpWidgets(g *gocui.Gui, v *gocui.View) {
- for _, view := range g.Views() {
- i, _ := strconv.Atoi(view.Name())
- if (me.widgets[i] != nil) {
- continue
- }
- log(logNow, "dump() not a widget. view.Name =", view.Name())
- }
-
- for i := 0; i <= me.highest; i++ {
- w := me.widgets[i]
- if (w == nil) {
- continue
- }
- w.showWidgetPlacement(logNow, "")
-
- if (w.v == nil) {
- log(logError, "dump() ERROR w.v == nil")
- } else {
- if (strconv.Itoa(i) != w.v.Name()) {
- log(logError, "dump() ERROR unequal str.Itoa(i) =", strconv.Itoa(i))
- log(logError, "dump() ERROR unequal w.v.Name() =", w.v.Name())
- }
- }
- }
-}
-
-func (w *cuiWidget) showWidgetPlacement(b bool, s string) {
- log(b, "dump()", s,
- fmt.Sprintf("(wId,pId)=(%3d,%3d)", w.id, w.parentId),
- fmt.Sprintf("real()=(%3d,%3d,%3d,%3d)", w.realSize.w0, w.realSize.h0, w.realSize.w1, w.realSize.h1),
- "next()=(", w.nextX, ",", w.nextY, ")",
- "logical()=(", w.logicalSize.w0, ",", w.logicalSize.h0, ",", w.logicalSize.w1, ",", w.logicalSize.h1, ")",
- w.widgetType, ",", w.name, "text=", w.text)
-
- if (w.realWidth != (w.realSize.w1 - w.realSize.w0)) {
- log(b, "dump()", s,
- "badsize()=(", w.realWidth, ",", w.realHeight, ")",
- "badreal()=(", w.realSize.w0, ",", w.realSize.h0, ",", w.realSize.w1, ",", w.realSize.h1, ")",
- w.widgetType, ",", w.name)
- }
- if (w.realHeight != (w.realSize.h1 - w.realSize.h0)) {
- log(b, "dump()", s,
- "badsize()=(", w.realWidth, ",", w.realHeight, ")",
- "badreal()=(", w.realSize.w0, ",", w.realSize.h0, ",", w.realSize.w1, ",", w.realSize.h1, ")",
- w.widgetType, ",", w.name)
- }
-}
diff --git a/toolkit/democui/keybindings.go b/toolkit/democui/keybindings.go
deleted file mode 100644
index 977a375..0000000
--- a/toolkit/democui/keybindings.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2014 The gocui Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
- "github.com/awesome-gocui/gocui"
-)
-
-func defaultKeybindings(g *gocui.Gui) error {
- if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
- return err
- }
- for _, n := range []string{"but1", "but2", "help", "but3"} {
- if err := g.SetKeybinding(n, gocui.MouseLeft, gocui.ModNone, showMsg); err != nil {
- return err
- }
- }
- if err := g.SetKeybinding("", gocui.MouseRelease, gocui.ModNone, mouseUp); err != nil {
- return err
- }
- if err := g.SetKeybinding("", gocui.MouseLeft, gocui.ModNone, globalDown); err != nil {
- return err
- }
- if err := g.SetKeybinding("msg", gocui.MouseLeft, gocui.ModNone, msgDown); err != nil {
- return err
- }
- addDebugKeys(g)
- return nil
-}
-
-// dump out the widgets
-func addDebugKeys(g *gocui.Gui) {
- // dump all widget info to the log
- g.SetKeybinding("", 'd', gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- dumpWidgets(g, v)
- return nil
- })
-
- // hide all widgets
- g.SetKeybinding("", 'h', gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- hideWidgets()
- return nil
- })
-
- // show all widgets
- g.SetKeybinding("", 's', gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- showWidgets()
- return nil
- })
-
- // try to adjust all the widget positions
- g.SetKeybinding("", 'r', gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- adjustWidgets()
- return nil
- })
-}
diff --git a/toolkit/democui/log.go b/toolkit/democui/log.go
deleted file mode 100644
index 2d7e27e..0000000
--- a/toolkit/democui/log.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package main
-
-import (
- "os"
- witlog "git.wit.org/wit/gui/log"
-)
-
-// various debugging flags
-var logNow bool = true // useful for active development
-var logError bool = true
-var logWarn bool = false
-var logInfo bool = false
-var logVerbose bool = false
-
-func log(a ...any) {
- witlog.Where = "wit/democui"
- witlog.Log(a...)
-}
-
-func sleep(a ...any) {
- witlog.Sleep(a...)
-}
-
-func exit(a ...any) {
- witlog.Exit(a...)
-}
-
-func setOutput(f *os.File) {
- witlog.SetOutput(f)
-}
diff --git a/toolkit/democui/plugin.go b/toolkit/democui/plugin.go
deleted file mode 100644
index 86125d4..0000000
--- a/toolkit/democui/plugin.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package main
-
-import (
- // if you include more than just this import
- // then your plugin might be doing something un-ideal (just a guess from 2023/02/27)
- "git.wit.org/wit/gui/toolkit"
-)
-
-func Quit() {
- me.baseGui.Close()
-}
-
-func Action(a *toolkit.Action) {
- log(logNow, "Action()", a)
- w := setupWidgetT(a)
- place(w, a)
- log(logInfo, "Action() END")
-}
diff --git a/toolkit/democui/tab.go b/toolkit/democui/tab.go
deleted file mode 100644
index 745956c..0000000
--- a/toolkit/democui/tab.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package main
-
-// implements widgets 'Window' and 'Tab'
-
-import (
-// "fmt"
- "strconv"
-
-// "git.wit.org/wit/gui/toolkit"
-// "github.com/awesome-gocui/gocui"
-)
-
-func adjustWidgets() {
- for i := 0; i <= me.highest; i++ {
- w := me.widgets[i]
- if (w == nil) {
- continue
- }
- p := me.widgets[w.parentId]
- if (p != nil) {
- w.setParentLogical(p)
- }
- }
-}
-
-func hideWidgets() {
- for i := 0; i <= me.highest; i++ {
- w := me.widgets[i]
- if (w == nil) {
- continue
- }
- if (w.visable) {
- if (w.v != nil) {
- cuiName := strconv.Itoa(i)
- log(logNow, "about to delete", cuiName, w.name)
- me.baseGui.DeleteView(cuiName)
- }
- }
- }
-}
-
-func showWidgets() {
- for i := 0; i <= me.highest; i++ {
- w := me.widgets[i]
- if (w == nil) {
- continue
- }
- if (w.visable) {
- w.drawView()
- }
- }
-}
diff --git a/toolkit/democui/view.go b/toolkit/democui/view.go
deleted file mode 100644
index 5ff44ad..0000000
--- a/toolkit/democui/view.go
+++ /dev/null
@@ -1,349 +0,0 @@
-package main
-
-import (
- "fmt"
- "errors"
- "strconv"
-
- "github.com/awesome-gocui/gocui"
- "git.wit.org/wit/gui/toolkit"
-)
-
-var adjusted bool = false
-
-// expands the logical size of the parents
-func (w *cuiWidget) setParentLogical(p *cuiWidget) {
- if (w.visable) {
- // expand the parent logicalsize to include the widget realSize
- if (p.logicalSize.w0 > w.realSize.w0) {
- p.logicalSize.w0 = w.realSize.w0
- adjusted = true
- }
- if (p.logicalSize.h0 > w.realSize.h0) {
- p.logicalSize.h0 = w.realSize.h0
- adjusted = true
- }
- if (p.logicalSize.w1 < w.realSize.w1) {
- p.logicalSize.w1 = w.realSize.w1
- adjusted = true
- }
- if (p.logicalSize.h1 < w.realSize.h1) {
- p.logicalSize.h1 = w.realSize.h1
- adjusted = true
- }
- } else {
- // expand the parent logicalsize to include the widget logicalsize
- if (p.logicalSize.w0 > w.logicalSize.w0) {
- p.logicalSize.w0 = w.logicalSize.w0
- adjusted = true
- }
- if (p.logicalSize.h0 > w.logicalSize.h0) {
- p.logicalSize.h0 = w.logicalSize.h0
- adjusted = true
- }
- if (p.logicalSize.w1 < w.logicalSize.w1) {
- p.logicalSize.w1 = w.logicalSize.w1
- adjusted = true
- }
- if (p.logicalSize.h1 < w.logicalSize.h1) {
- p.logicalSize.h1 = w.logicalSize.h1
- adjusted = true
- }
- }
- if (w.visable) {
- // adjust the widget realSize to the top left corner of the logicalsize
- if (w.logicalSize.w0 > w.realSize.w0) {
- w.realSize.w0 = w.logicalSize.w0
- w.realSize.w1 = w.realSize.w0 + w.realWidth
- adjusted = true
- }
- if (w.logicalSize.h0 > w.realSize.h0) {
- w.realSize.h0 = w.logicalSize.h0
- w.realSize.h1 = w.realSize.h0 + w.realHeight
- adjusted = true
- }
- }
- w.showWidgetPlacement(logNow, "setParentLogical() widget")
- p.showWidgetPlacement(logNow, "setParentLogical() parent")
- if (w.id == 0) || (p.id == 0) {
- // stop resizing when you hit the root widget
- return
- }
- // pass the logical resizing up
- pP := me.widgets[p.parentId]
- if (pP != nil) {
- p.setParentLogical(pP)
- }
-}
-
-var fakeStartWidth int = 80
-var fakeStartHeight int = 0
-func (w *cuiWidget) setFake() {
- if (w.visable) {
- return
- }
- // setup fake labels for non-visable things off screen
- w.realWidth = me.defaultWidth
- w.realHeight = me.defaultHeight
- w.realSize.w0 = fakeStartWidth
- w.realSize.h0 = fakeStartHeight
- w.realSize.w1 = w.realSize.w0 + me.defaultWidth
- w.realSize.h1 = w.realSize.h0 + me.defaultHeight
- fakeStartHeight += 2
- w.showWidgetPlacement(logNow, "setFake()")
-}
-
-func drawView(w *cuiWidget) *gocui.View {
- var newName string = ""
- newName = strconv.Itoa(w.id)
- if (me.baseGui == nil) {
- log(logError, "drawView() me.baseGui == nil")
- return nil
- }
-
- a := w.realSize.w0
- b := w.realSize.h0
- c := w.realSize.w1
- d := w.realSize.h1
- v, err := me.baseGui.SetView(newName, a, b, c, d, 0)
- if err == nil {
- log(logError, "drawView() internal plugin error err = nil")
- return nil
- }
- if !errors.Is(err, gocui.ErrUnknownView) {
- log(logError, "drawView() internal plugin error error.IS()", err)
- return nil
- }
- w.v = v
-
- return v
-}
-
-func boxedPlace(w *cuiWidget) {
- t := len(w.name)
- if (w.id == 0) {
- w.realWidth = 0
- w.realHeight = 0
- return
- }
- p := me.widgets[w.parentId]
- if (p == nil) {
- log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil")
- return
- }
-
- switch p.widgetType {
- case toolkit.Box:
- w.realWidth = t + 3
- w.realHeight = me.defaultHeight
- w.realSize.w0 = p.nextX
- w.realSize.h0 = p.nextY
- w.realSize.w1 = p.nextX + w.realWidth
- w.realSize.h1 = p.nextY + w.realHeight
-
- w.logicalSize.w0 = p.nextX
- w.logicalSize.h0 = p.nextY
- w.logicalSize.w1 = p.nextX + w.realWidth
- w.logicalSize.h1 = p.nextY + w.realHeight
-
- w.nextX = p.nextX
- w.nextY = p.nextY
- if (w.horizontal) {
- log(logNow, "PARENT BOX IS HORIZONTAL")
- p.nextX += w.realWidth
- } else {
- log(logNow, "PARENT BOX IS VERTICAL")
- p.nextY += w.realHeight
- }
- case toolkit.Group:
- w.realWidth = t + 3
- w.realHeight = me.defaultHeight
-
- w.realSize.w0 = p.nextX
- w.realSize.h0 = p.nextY
- w.realSize.w1 = p.nextX + w.realWidth
- w.realSize.h1 = p.nextY + w.realHeight
-
- w.logicalSize.w0 = p.nextX
- w.logicalSize.h0 = p.nextY
- w.logicalSize.w1 = p.nextX + w.realWidth
- w.logicalSize.h1 = p.nextY + w.realHeight
-
- w.nextX = w.logicalSize.w0 + 3 // default group padding
- w.nextY = w.logicalSize.h1
-
- // increment parent
- p.nextY += w.realHeight
- default:
- w.realWidth = t + 3
- w.realHeight = me.defaultHeight
- w.realSize.w0 = p.nextX
- w.realSize.h0 = p.nextY
- w.realSize.w1 = w.realSize.w0 + w.realWidth
- w.realSize.h1 = w.realSize.h0 + w.realHeight
-
- // increment parent
- p.nextY += w.realHeight
- }
- p.showWidgetPlacement(logNow, "bP parent")
- w.showWidgetPlacement(logNow, "bP widget")
-}
-
-func findPlace(w *cuiWidget, a *toolkit.Action) {
- t := len(w.name)
- w.visable = true
- switch w.widgetType {
- case toolkit.Root:
- w.visable = false
- w.setFake()
- w.showWidgetPlacement(logNow, "Root:")
- case toolkit.Flag:
- w.visable = false
- w.setFake()
- w.showWidgetPlacement(logNow, "Flag:")
- case toolkit.Window:
- w.realWidth = t + 3
- w.realHeight = me.defaultHeight
-
- w.realSize.w0 = me.nextW
- w.realSize.h0 = 0
- w.realSize.w1 = w.realSize.w0 + w.realWidth
- w.realSize.h1 = w.realHeight
-
- w.logicalSize.w0 = me.nextW
- w.logicalSize.h0 = 0
- w.logicalSize.w1 = w.logicalSize.w0 + w.realWidth
- w.logicalSize.h1 = w.realHeight
-
- w.nextX = w.logicalSize.w0 + t // default group padding
- w.nextY = w.logicalSize.h1
-
- me.nextW += w.realWidth
- w.showWidgetPlacement(logNow, "window:")
- case toolkit.Tab:
- w.realWidth = t + 3
- w.realHeight = me.defaultHeight
-
- w.realSize.w0 = me.nextW
- w.realSize.h0 = 0
- w.realSize.w1 = w.realSize.w0 + w.realWidth
- w.realSize.h1 = w.realHeight
-
- w.logicalSize.w0 = me.nextW
- w.logicalSize.h0 = 0
- w.logicalSize.w1 = w.logicalSize.w0 + w.realWidth
- w.logicalSize.h1 = w.realHeight
-
- w.nextX = w.logicalSize.w0 + t // default group padding
- w.nextY = w.logicalSize.h1
- me.nextW += w.realWidth
- w.showWidgetPlacement(logNow, "tab:")
- case toolkit.Grid:
- p := me.widgets[w.parentId]
- w.horizontal = a.B
- w.visable = false
- w.setFake()
-
- if (p == nil) {
- log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil")
- return
- }
- w.logicalSize.w0 = p.nextX
- w.logicalSize.h0 = p.nextY
- w.logicalSize.w1 = p.nextX
- w.logicalSize.h1 = p.nextY
-
- w.nextX = p.nextX
- w.nextY = p.nextY
- w.showWidgetPlacement(logNow, "grid:")
- case toolkit.Box:
- p := me.widgets[w.parentId]
- w.horizontal = a.B
- w.visable = false
- w.setFake()
-
- if (p == nil) {
- log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil")
- return
- }
- w.logicalSize.w0 = p.nextX
- w.logicalSize.h0 = p.nextY
- w.logicalSize.w1 = p.nextX
- w.logicalSize.h1 = p.nextY
-
- w.nextX = p.nextX
- w.nextY = p.nextY
- w.showWidgetPlacement(logNow, "box:")
- case toolkit.Group:
- p := me.widgets[w.parentId]
- w.horizontal = a.B
- w.visable = false
- w.setFake()
-
- if (p == nil) {
- log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil")
- return
- }
- w.logicalSize.w0 = p.nextX
- w.logicalSize.h0 = p.nextY
- w.logicalSize.w1 = p.nextX
- w.logicalSize.h1 = p.nextY
-
- w.nextX = p.nextX
- w.nextY = p.nextY
- w.showWidgetPlacement(logNow, "group:")
- default:
- boxedPlace(w)
- }
-}
-
-func place(w *cuiWidget, a *toolkit.Action) {
- log(logInfo, "place() START")
- findPlace(w, a)
- v := drawView(w)
- if (v == nil) {
- log(logError, "place() drawView(w) returned nil")
- return
- }
- me.baseGui.SetKeybinding(v.Name(), gocui.MouseLeft, gocui.ModNone, click)
-
- v.Wrap = true
- fmt.Fprintln(v, " " + w.name)
-
- w.SetDefaultWidgetColor()
-
- log(logInfo, "place() END")
- return
-}
-
-func (w *cuiWidget) drawView() {
- var err error
- if (me.baseGui == nil) {
- log(logError, "drawView() me.baseGui == nil")
- return
- }
-
- a := w.realSize.w0
- b := w.realSize.h0
- c := w.realSize.w1
- d := w.realSize.h1
-
- var newName string = ""
- newName = strconv.Itoa(w.id)
- w.v, err = me.baseGui.SetView(newName, a, b, c, d, 0)
- if err == nil {
- log(logError, "drawView() internal plugin error err = nil")
- return
- }
- if !errors.Is(err, gocui.ErrUnknownView) {
- log(logError, "drawView() internal plugin error error.IS()", err)
- return
- }
-
- me.baseGui.SetKeybinding(w.v.Name(), gocui.MouseLeft, gocui.ModNone, click)
-
- w.v.Wrap = true
- fmt.Fprintln(w.v, " " + w.text)
-
- w.SetDefaultWidgetColor()
-}
diff --git a/toolkit/democui/, b/toolkit/gocui/,
index 762f8eb..762f8eb 100644
--- a/toolkit/democui/,
+++ b/toolkit/gocui/,
diff --git a/toolkit/gocui/Makefile b/toolkit/gocui/Makefile
index 597b2b2..35e4e96 100644
--- a/toolkit/gocui/Makefile
+++ b/toolkit/gocui/Makefile
@@ -9,3 +9,7 @@ plugin:
objdump:
objdump -t ../gocui.so |less
+
+log:
+ reset
+ tail -f /tmp/witgui.* /tmp/guilogfile
diff --git a/toolkit/gocui/button.go b/toolkit/gocui/button.go
deleted file mode 100644
index 355dc30..0000000
--- a/toolkit/gocui/button.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package main
-
-import (
- "errors"
- "fmt"
- "strings"
-
- "github.com/awesome-gocui/gocui"
- "git.wit.org/wit/gui/toolkit"
-)
-
-func newButton(parentW *toolkit.Widget, w *toolkit.Widget) {
- log(true, "AddButton()", w.Name)
- addButton(w.Name)
- stringWidget[w.Name] = w
- listMap()
-}
-
-func addButton(name string) *gocui.View {
- t := len(name)
- if (baseGui == nil) {
- panic("WTF")
- }
- v, err := baseGui.SetView(name, currentX, currentY, currentX+t+3, currentY+2, 0)
- if err == nil {
- log("wit/gui internal plugin error", err)
- return nil
- }
- if !errors.Is(err, gocui.ErrUnknownView) {
- log("wit/gui internal plugin error", err)
- return nil
- }
-
- v.Wrap = true
- fmt.Fprintln(v, " " + name)
- fmt.Fprintln(v, strings.Repeat("foo\n", 2))
-
- currentView, err := baseGui.SetCurrentView(name)
- if err != nil {
- log("wit/gui internal plugin error", err)
- return nil
- }
- log("wit/gui addbutton() current view name =", currentView.Name())
-
- views = append(views, name)
- curView = len(views) - 1
- idxView += 1
- currentY += 3
- if (groupSize < len(name)) {
- groupSize = len(name)
- }
- return currentView
-}
diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go
new file mode 100644
index 0000000..9dc1a42
--- /dev/null
+++ b/toolkit/gocui/click.go
@@ -0,0 +1,165 @@
+package main
+
+import (
+ "fmt"
+ "errors"
+ "strconv"
+ "strings"
+
+ "github.com/awesome-gocui/gocui"
+ "git.wit.org/wit/gui/toolkit"
+)
+
+func (w *cuiWidget) doWidgetClick() {
+ switch w.widgetType {
+ case toolkit.Root:
+ me.rootNode.redoTabs(true)
+ // me.rootNode.redoFake(true)
+ case toolkit.Flag:
+ me.rootNode.redoColor(true)
+ case toolkit.Window:
+ me.rootNode.redoTabs(true)
+ w.redoBox(true)
+ w.toggleTree()
+ me.rootNode.redoColor(true)
+ case toolkit.Tab:
+ me.rootNode.redoTabs(true)
+ w.redoBox(true)
+ w.toggleTree()
+ me.rootNode.redoColor(true)
+ case toolkit.Box:
+ w.showWidgetPlacement(logNow, "drawTree()")
+ if (w.horizontal) {
+ log("BOX IS HORIZONTAL", w.nextW, w.nextH, w.name)
+ } else {
+ log("BOX IS VERTICAL", w.nextW, w.nextH, w.name)
+ }
+ // w.redoBox(true)
+ default:
+ // w.textResize()
+ // something
+ }
+}
+
+var toggle bool = true
+func (w *cuiWidget) toggleTree() {
+ if (toggle) {
+ w.drawTree(toggle)
+ toggle = false
+ } else {
+ w.hideWidgets()
+ toggle = true
+ }
+}
+
+
+// display the widgets in the binary tree
+func (w *cuiWidget) drawTree(draw bool) {
+ if (w == nil) {
+ return
+ }
+ w.showWidgetPlacement(logNow, "drawTree()")
+ if (draw) {
+ w.textResize()
+ w.drawView()
+ } else {
+ me.baseGui.DeleteView(w.cuiName)
+ w.v = nil
+ }
+
+ for _, child := range w.children {
+ child.drawTree(draw)
+ }
+}
+
+func click(g *gocui.Gui, v *gocui.View) error {
+ var l string
+ var err error
+
+ log(logNow, "click() START", v.Name())
+ i, err := strconv.Atoi(v.Name())
+ if (err != nil) {
+ log(logNow, "click() Can't find widget. error =", err)
+ } else {
+ log(logNow, "click() ok v.Name() =", v.Name())
+ w := findWidget(i, me.rootNode)
+ if (w == nil) {
+ log(logError, "click() CANT FIND VIEW in binary tree. v.Name =", v.Name())
+ return nil
+ }
+ log(logNow, "click() Found widget =", w.id, w.name, ",", w.text)
+ w.doWidgetClick()
+ return nil
+ }
+
+ if _, err := g.SetCurrentView(v.Name()); err != nil {
+ return err
+ }
+
+ _, cy := v.Cursor()
+ if l, err = v.Line(cy); err != nil {
+ l = ""
+ }
+
+ maxX, maxY := g.Size()
+ if v, err := g.SetView("msg", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0); err == nil || errors.Is(err, gocui.ErrUnknownView) {
+ v.Clear()
+ v.SelBgColor = gocui.ColorCyan
+ v.SelFgColor = gocui.ColorBlack
+ fmt.Fprintln(v, l)
+ }
+
+ // this seems to delete the button(?)
+ // g.SetViewOnBottom(v.Name())
+ log(logNow, "click() END")
+ return nil
+}
+
+// display the widgets in the binary tree
+
+func ctrlDown(g *gocui.Gui, v *gocui.View) error {
+ var widgets []*cuiWidget
+ var f func (widget *cuiWidget)
+ w, h := g.MousePosition()
+
+ f = func(widget *cuiWidget) {
+ if ((widget.logicalSize.w0 < w) && (w < widget.logicalSize.w1)) {
+ widgets = append(widgets, widget)
+ }
+
+ for _, child := range widget.children {
+ f(child)
+ }
+ }
+ f(me.rootNode)
+ var t string
+ for i, widget := range widgets {
+ log(logNow, "ctrlDown() FOUND widget", i, widget.name)
+ t += widget.cuiName + " " + widget.name + "\n"
+ // widget.showWidgetPlacement(logNow, "drawTree()")
+ }
+ t = strings.TrimSpace(t)
+ if (me.ctrlDown == nil) {
+ setupCtrlDownWidget()
+ }
+ me.ctrlDown.text = t
+ me.ctrlDown.realSize.w0 = w
+ me.ctrlDown.realSize.h0 = h
+ me.ctrlDown.textResize()
+ me.ctrlDown.drawView()
+
+ /*
+ v, err := g.SetView("ctrlDown", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0)
+ if (err != nil) {
+ log(logError, "ctrlDown() g.SetView() error:", err)
+ return
+ }
+ v.Clear()
+ v.SelBgColor = gocui.ColorCyan
+ v.SelFgColor = gocui.ColorBlack
+ fmt.Fprintln(v, l)
+ */
+
+ log(logNow, "ctrlDown()", w, h)
+ return nil
+}
diff --git a/toolkit/gocui/color.go b/toolkit/gocui/color.go
new file mode 100644
index 0000000..efe44dd
--- /dev/null
+++ b/toolkit/gocui/color.go
@@ -0,0 +1,113 @@
+package main
+
+import (
+ "math/rand"
+ "github.com/awesome-gocui/gocui"
+ "git.wit.org/wit/gui/toolkit"
+)
+
+// ColorBlack ColorRed ColorGreen ColorYellow ColorBlue ColorMagenta ColorCyan ColorWhite
+// gocui.GetColor("#FFAA55") // Dark Purple
+func (w *cuiWidget) SetDefaultWidgetColor() {
+ log(logInfo, "SetDefaultWidgetColor() on", w.widgetType, w.name)
+ v, _ := me.baseGui.View(w.cuiName)
+ if (v == nil) {
+ log(logError, "SetDefaultWidgetColor() failed on view == nil")
+ return
+ }
+ // v.BgColor = gocui.GetColor("#FFAA55") // Dark Purple
+ // v.BgColor = gocui.GetColor("#88AA55") // heavy purple
+ // v.BgColor = gocui.GetColor("#111111") // crazy red
+ // v.BgColor = gocui.GetColor("#FF9911") // heavy red
+ // v.SelBgColor = gocui.GetColor("#FFEE11") // blood red
+
+ // v.BgColor = gocui.GetColor("#55AAFF") // super light grey
+ // v.BgColor = gocui.GetColor("#FFC0CB") // 'w3c pink' yellow
+ switch w.widgetType {
+ case toolkit.Root:
+ v.FrameColor = gocui.ColorRed
+ v.BgColor = gocui.GetColor("#B0E0E6") // w3c 'powerder blue'
+ case toolkit.Flag:
+ v.FrameColor = gocui.ColorRed
+ v.BgColor = gocui.GetColor("#B0E0E6") // w3c 'powerder blue'
+ case toolkit.Window:
+ v.FgColor = gocui.ColorCyan
+ v.SelBgColor = gocui.ColorBlue
+ v.FrameColor = gocui.ColorBlue
+ case toolkit.Tab:
+ v.SelBgColor = gocui.ColorBlue
+ v.FrameColor = gocui.ColorBlue
+ case toolkit.Button:
+ v.BgColor = gocui.ColorWhite
+ v.FrameColor = gocui.ColorGreen
+ v.SelBgColor = gocui.ColorBlack
+ v.SelFgColor = gocui.ColorGreen
+ case toolkit.Label:
+ v.BgColor = gocui.GetColor("#55AAFF") // super light grey
+ v.SelBgColor = gocui.GetColor("#55AAFF") // super light grey
+ case toolkit.Box:
+ v.FrameColor = gocui.ColorRed
+ // v.BgColor = gocui.GetColor("#FFC0CB") // 'w3c pink' yellow
+ v.BgColor = gocui.GetColor("#DDDDDD") // light purple
+ case toolkit.Grid:
+ // v.FgColor = gocui.ColorCyan
+ // v.SelBgColor = gocui.ColorBlue
+ // v.FrameColor = gocui.ColorBlue
+ case toolkit.Group:
+ v.BgColor = gocui.GetColor("#55AAFF") // super light grey
+ default:
+ }
+}
+
+// SetColor("#FFAA55") // purple
+func (w *cuiWidget) SetColor(c string) {
+ if (w.v == nil) {
+ log(logError, "SetColor() failed on view == nil")
+ return
+ }
+ w.v.SelBgColor = gocui.ColorCyan
+ w.v.SelFgColor = gocui.ColorBlack
+ switch c {
+ case "Green":
+ w.v.BgColor = gocui.ColorGreen
+ case "Purple":
+ w.v.BgColor = gocui.GetColor("#FFAA55")
+ case "Yellow":
+ w.v.BgColor = gocui.ColorYellow
+ case "Blue":
+ w.v.BgColor = gocui.ColorBlue
+ case "Red":
+ w.v.BgColor = gocui.ColorRed
+ default:
+ w.v.BgColor = gocui.GetColor(c)
+ }
+}
+
+func (w *cuiWidget) SetDefaultHighlight() {
+ if (w.v == nil) {
+ log(logError, "SetColor() failed on view == nil")
+ return
+ }
+// w.v.SelBgColor = gocui.ColorGreen
+// w.v.SelFgColor = gocui.ColorBlack
+}
+
+func randColor() gocui.Attribute {
+ colors := []string{"Green", "#FFAA55", "Yellow", "Blue", "Red", "Black", "White"}
+ i := rand.Intn(len(colors))
+ log("randColor() i =", i)
+ return gocui.GetColor(colors[i])
+}
+
+func (w *cuiWidget) redoColor(draw bool) {
+ if (w == nil) {
+ return
+ }
+
+ sleep(.05)
+ w.SetDefaultWidgetColor()
+
+ for _, child := range w.children {
+ child.redoColor(draw)
+ }
+}
diff --git a/toolkit/gocui/common.go b/toolkit/gocui/common.go
new file mode 100644
index 0000000..2fe82cb
--- /dev/null
+++ b/toolkit/gocui/common.go
@@ -0,0 +1,100 @@
+package main
+
+import (
+ "strconv"
+ "git.wit.org/wit/gui/toolkit"
+// "github.com/awesome-gocui/gocui"
+)
+
+func setupWidget(a *toolkit.Action) *cuiWidget {
+ var w *cuiWidget
+ w = new(cuiWidget)
+
+ w.name = a.Name
+ w.text = a.Text
+ w.b = a.B
+ w.i = a.I
+ w.s = a.S
+ w.x = a.X
+ w.y = a.Y
+ w.width = a.Width
+ w.height = a.Height
+
+ w.widgetType = a.WidgetType
+ w.id = a.WidgetId
+ // set the name used by gocui to the id
+ w.cuiName = strconv.Itoa(w.id)
+
+ w.parent = findWidget(a.ParentId, me.rootNode)
+ log(logInfo, "setupWidget() w.id =", w.id, "w.parent", w.parent, "ParentId =", a.ParentId)
+ if (w.id == 0) {
+ me.rootNode = w
+ // this is the rootNode
+ return w
+ }
+ if (w.parent == nil) {
+ log(logError, "setupWidget() ERROR: PARENT = NIL w.id =", w.id, "w.parent", w.parent, "ParentId =", a.ParentId)
+ // just use the rootNode (hopefully it's not nil)
+ w.parent = me.rootNode
+ // return w
+ }
+ if (w.parent == nil) {
+ log(logError, "setupWidget() ERROR: PARENT = NIL w.id =", w.id, "w.parent", w.parent, "ParentId =", a.ParentId)
+ me.rootNode = w
+ return w
+ }
+ // add this widget as a child for the parent
+ w.parent.Append(w)
+
+ if (a.WidgetType == toolkit.Box) {
+ if (a.B) {
+ w.horizontal = true
+ } else {
+ w.horizontal = false
+ }
+ }
+
+ // w.showWidgetPlacement(logNow)
+ return w
+}
+
+func setupCtrlDownWidget() {
+ var w *cuiWidget
+ w = new(cuiWidget)
+
+ w.name = "ctrlDown"
+
+ w.widgetType = toolkit.Flag
+ w.id = -1
+ me.ctrlDown = w
+ // me.rootNode.Append(w)
+}
+
+func (n *cuiWidget) Append(child *cuiWidget) {
+ n.children = append(n.children, child)
+ // child.parent = n
+}
+
+// find widget by number
+func findWidget(i int, w *cuiWidget) (*cuiWidget) {
+ if (w == nil) {
+ log(logVerbose, "findWidget() Trying to find i =", i, "currently checking against w.id = nil")
+ return nil
+ }
+ log(logVerbose, "findWidget() Trying to find i =", i, "currently checking against w.id =", w.id)
+
+ if (w.id == i) {
+ log(logInfo, "findWidget() FOUND w.id ==", i, w.widgetType, w.name)
+ return w
+ }
+
+ for _, child := range w.children {
+ newW := findWidget(i, child)
+ log(logVerbose, "findWidget() Trying to find i =", i, "currently checking against child.id =", child.id)
+ if (newW != nil) {
+ return newW
+ }
+ }
+ return nil
+}
+
diff --git a/toolkit/gocui/debug.go b/toolkit/gocui/debug.go
index b38fd83..3ecdfdd 100644
--- a/toolkit/gocui/debug.go
+++ b/toolkit/gocui/debug.go
@@ -1,109 +1,70 @@
package main
-import "git.wit.org/wit/gui/toolkit"
+import (
+ "fmt"
-var defaultBehavior bool = true
+ "git.wit.org/wit/gui/toolkit"
+// "github.com/awesome-gocui/gocui"
+)
-var bookshelf bool // do you want things arranged in the box like a bookshelf or a stack?
-var canvas bool // if set to true, the windows are a raw canvas
-var menubar bool // for windows
-var stretchy bool // expand things like buttons to the maximum size
-var padded bool // add space between things like buttons
-var margin bool // add space around the frames of windows
-
-var debugToolkit bool
-var debugChange bool
-var debugPlugin bool
-var debugFlags bool
-var debugError bool = true
-
-// This is important. This sets the defaults for the gui. Without this, there isn't correct padding, etc
-func setDefaultBehavior(s bool) {
- defaultBehavior = s
- if (defaultBehavior) {
- log(debugToolkit, "Setting this toolkit to use the default behavior.")
- log(debugToolkit, "This is the 'guessing' part as defined by the wit/gui 'Principles'. Refer to the docs.")
- stretchy = false
- padded = true
- menubar = true
- margin = true
- canvas = false
- bookshelf = true // 99% of the time, things make a vertical stack of objects
- } else {
- log(debugToolkit, "This toolkit is set to ignore the default behavior.")
+func actionDump(b bool, a *toolkit.Action) {
+ if (a == nil) {
+ log(b, "action = nil")
+ return
}
-}
-func ShowDebug () {
- log(true, "debugToolkit =", debugToolkit)
- log(true, "debugChange =", debugChange)
- log(true, "debugPlugin =", debugPlugin)
- log(true, "debugFlags =", debugFlags)
- log(true, "debugError =", debugError)
+ log(b, "a.Name =", a.Name)
+ log(b, "a.Text =", a.Text)
+ log(b, "a.WidgetId =", a.WidgetId)
+ log(b, "a.ParentId =", a.ParentId)
+ log(b, "a.B =", a.B)
+ log(b, "a.S =", a.S)
}
-/*
-func (t *gocuiT) Dump(b bool) {
- if ! b {
+func (w *cuiWidget) dumpTree(draw bool) {
+ log(logNow, "dumpTree() START", w)
+ if (w == nil) {
return
}
- log(b, "Name = ", t.Name, t.Width, t.Height)
- if (t.uiBox != nil) {
- log(b, "uiBox =", t.uiBox)
- }
- if (t.uiButton != nil) {
- log(b, "uiButton =", t.uiButton)
- }
- if (t.uiCombobox != nil) {
- log(b, "uiCombobox =", t.uiCombobox)
- }
- if (t.uiWindow != nil) {
- log(b, "uiWindow =", t.uiWindow)
- }
- if (t.uiTab != nil) {
- log(b, "uiTab =", t.uiTab)
- }
- if (t.uiGroup != nil) {
- log(b, "uiGroup =", t.uiGroup)
- }
- if (t.uiEntry != nil) {
- log(b, "uiEntry =", t.uiEntry)
- }
- if (t.uiMultilineEntry != nil) {
- log(b, "uiMultilineEntry =", t.uiMultilineEntry)
- }
- if (t.uiSlider != nil) {
- log(b, "uiSlider =", t.uiSlider)
- }
- if (t.uiCheckbox != nil) {
- log(b, "uiCheckbox =", t.uiCheckbox)
+ w.showWidgetPlacement(logNow, "Tree:")
+
+ for _, child := range w.children {
+ child.dumpTree(draw)
}
- widgetDump(b, t.tw)
}
-*/
-func widgetDump(b bool, w *toolkit.Widget) {
+func (w *cuiWidget) showWidgetPlacement(b bool, s string) {
if (w == nil) {
- log(b, "widget = nil")
+ log(logError, "WTF w == nil")
return
}
+ if (w.id == 0) {
+ log(logVerbose, "showWidgetPlacement() parent == nil ok. This is the rootNode", w.id, w.cuiName)
+ return
+ }
+ if (w.parent == nil) {
+ log(logError, "showWidgetPlacement() WTF parent == nil", w.id, w.cuiName)
+ log(logError, "showWidgetPlacement() WTF parent == nil", w.id, w.cuiName)
+ log(logError, "showWidgetPlacement() WTF parent == nil", w.id, w.cuiName)
+ return
+ }
+ log(b, "dump()", s,
+ fmt.Sprintf("(wId,pId)=(%3d,%3d)", w.id, w.parent.id),
+ fmt.Sprintf("real()=(%3d,%3d,%3d,%3d)", w.realSize.w0, w.realSize.h0, w.realSize.w1, w.realSize.h1),
+ "next()=(", w.nextW, ",", w.nextH, ")",
+ "logical()=(", w.logicalSize.w0, ",", w.logicalSize.h0, ",", w.logicalSize.w1, ",", w.logicalSize.h1, ")",
+ w.widgetType, ",", w.name, "text=", w.text)
- /*
- log(b, "widget.Name =", w.Name)
- // log(b, "widget.Action =", w.Action)
- log(b, "widget.Type =", w.Type)
- log(b, "widget.Custom =", w.Custom)
- log(b, "widget.B =", w.B)
- log(b, "widget.I =", w.I)
- log(b, "widget.Width =", w.Width)
- log(b, "widget.Height =", w.Height)
- log(b, "widget.X =", w.X)
- log(b, "widget.Y =", w.Y)
- */
-}
-
-/*
-func GetDebugToolkit () bool {
- return debugToolkit
+ if (w.realWidth != (w.realSize.w1 - w.realSize.w0)) {
+ log(b, "dump()", s,
+ "badsize()=(", w.realWidth, ",", w.realHeight, ")",
+ "badreal()=(", w.realSize.w0, ",", w.realSize.h0, ",", w.realSize.w1, ",", w.realSize.h1, ")",
+ w.widgetType, ",", w.name)
+ }
+ if (w.realHeight != (w.realSize.h1 - w.realSize.h0)) {
+ log(b, "dump()", s,
+ "badsize()=(", w.realWidth, ",", w.realHeight, ")",
+ "badreal()=(", w.realSize.w0, ",", w.realSize.h0, ",", w.realSize.w1, ",", w.realSize.h1, ")",
+ w.widgetType, ",", w.name)
+ }
}
-*/
diff --git a/toolkit/gocui/gocui.go b/toolkit/gocui/gocui.go
deleted file mode 100644
index 0a302bc..0000000
--- a/toolkit/gocui/gocui.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2014 The gocui Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
- "errors"
- "fmt"
- "os"
-
- "git.wit.org/wit/gui/toolkit"
-
- "github.com/awesome-gocui/gocui"
-)
-
-const delta = 1
-
-var (
- views = []string{}
- curView = -1
- idxView = 0
- currentX = 5
- currentY = 2
- groupSize = 0
- baseGui *gocui.Gui
- helpLabel *gocui.View
- err error
- ch chan(func ())
- outf *os.File
-)
-
-func Init() {
- baseGui, err = gocui.NewGui(gocui.OutputNormal, true)
- if err != nil {
- exit(err)
- }
-
- baseGui.Highlight = true
- baseGui.SelFgColor = gocui.ColorRed
- baseGui.SelFrameColor = gocui.ColorRed
-
- baseGui.Cursor = true
- baseGui.Mouse = true
-
- baseGui.SetManagerFunc(layout)
-
- if err := initKeybindings(baseGui); err != nil {
- exit(err)
- }
-
- viewWidget = make(map[*gocui.View]*toolkit.Widget)
- stringWidget = make(map[string]*toolkit.Widget)
-
- ch = make(chan func())
-
- outf, err = os.OpenFile("/tmp/witgui.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
- if err != nil {
- exit("error opening file: %v", err)
- }
- // hmm. where to put this?
- // defer outf.Close()
-
- setOutput(outf)
- log("This is a test log entry")
-}
-
-func Queue(f func()) {
- log("QUEUEEEEE")
- f()
-}
-
-func Main(f func()) {
- // close the STDOUT log file
- defer outf.Close()
- if (baseGui == nil) {
- panic("WTF Main()")
- }
- defer baseGui.Close()
- // log.Println("ADDDDDDDD BUTTTTTTTTTON")
- // addButton("test 3")
- f()
- if err := baseGui.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
- exit(err)
- }
- baseGui.Close()
- os.Exit(0)
-}
-
-func layout(g *gocui.Gui) error {
- var err error
- maxX, _ := g.Size()
-
- helpLabel, err = g.SetView("help", maxX-32, 0, maxX-1, 12, 0)
- if err != nil {
- if !errors.Is(err, gocui.ErrUnknownView) {
- return err
- }
- fmt.Fprintln(helpLabel, "KEYBINDINGS")
- fmt.Fprintln(helpLabel, "Enter: Click Button")
- fmt.Fprintln(helpLabel, "Tab/Space: Switch Buttons")
- fmt.Fprintln(helpLabel, "")
- fmt.Fprintln(helpLabel, "h: Help")
- fmt.Fprintln(helpLabel, "Backspace: Delete Button")
- fmt.Fprintln(helpLabel, "Arrow keys: Move Button")
- fmt.Fprintln(helpLabel, "t: Move Button to the top")
- fmt.Fprintln(helpLabel, "b: Move Button to the button")
- fmt.Fprintln(helpLabel, "STDOUT: /tmp/witgui.log")
- fmt.Fprintln(helpLabel, "Ctrl-C or Q: Exit")
- }
- return nil
-}
diff --git a/toolkit/gocui/group.go b/toolkit/gocui/group.go
deleted file mode 100644
index 2d8600c..0000000
--- a/toolkit/gocui/group.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package main
-
-import (
- "git.wit.org/wit/gui/toolkit"
-)
-
-func newGroup(parentW *toolkit.Widget, w *toolkit.Widget) {
- if (parentW == nil) {
- log(debugError, "plugin error. parent widget == nil")
- return
- }
- if (w == nil) {
- log(debugPlugin, "plugin error. widget == nil")
- return
- }
- if (w.Name == "") {
- w.Name = parentW.Name
- }
- if (w.Name == "") {
- w.Name = "nil newGroup"
- }
- log("AddGroup", w.Name)
- addGroup(w.Name)
- stringWidget[w.Name] = w
-}
-
-func addGroup(name string) {
- log("addGroup() START name =", name)
- log("addGroup() START groupSize =", groupSize, "currentY =", currentY, "currentX =", currentX)
-
- currentY = 2
- currentX += groupSize + 5
- groupSize = 0
-
- log("addGroup() START, RESET Y = 3, RESET X = ", currentX)
-}
diff --git a/toolkit/democui/help.go b/toolkit/gocui/help.go
index f012fef..8796ad6 100644
--- a/toolkit/democui/help.go
+++ b/toolkit/gocui/help.go
@@ -19,7 +19,7 @@ func helplayout(g *gocui.Gui) error {
var err error
maxX, _ := g.Size()
- help, err := g.SetView("help", maxX-32, 0, maxX-1, 12, 0)
+ help, err := g.SetView("help", maxX-32, 0, maxX-1, 17, 0)
if err != nil {
if !errors.Is(err, gocui.ErrUnknownView) {
return err
@@ -35,6 +35,9 @@ func helplayout(g *gocui.Gui) error {
fmt.Fprintln(help, "Arrow keys: Move Button")
fmt.Fprintln(help, "t: Move Button to the top")
fmt.Fprintln(help, "b: Move Button to the button")
+ fmt.Fprintln(help, "h: hide buttons")
+ fmt.Fprintln(help, "s: show buttons")
+ fmt.Fprintln(help, "p: panic()")
fmt.Fprintln(help, "STDOUT: /tmp/witgui.log")
fmt.Fprintln(help, "Ctrl-C or Q: Exit")
if _, err := g.SetCurrentView("help"); err != nil {
diff --git a/toolkit/gocui/keybindings.go b/toolkit/gocui/keybindings.go
index 43dbf47..18d3097 100644
--- a/toolkit/gocui/keybindings.go
+++ b/toolkit/gocui/keybindings.go
@@ -6,130 +6,66 @@ package main
import (
"github.com/awesome-gocui/gocui"
- "git.wit.org/wit/gui/toolkit"
)
-func initKeybindings(g *gocui.Gui) error {
- log("got to initKeybindings")
- if err := g.SetKeybinding("", 'q', gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return gocui.ErrQuit
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", 'Q', gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return gocui.ErrQuit
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return gocui.ErrQuit
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", gocui.KeySpace, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return newView(g)
- }); err != nil {
+func defaultKeybindings(g *gocui.Gui) error {
+ if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
return err
}
- if err := g.SetKeybinding("", gocui.KeyBackspace, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return delView(g)
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", gocui.KeyBackspace2, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return delView(g)
- }); err != nil {
- return err
+ for _, n := range []string{"but1", "but2", "help", "but3"} {
+ if err := g.SetKeybinding(n, gocui.MouseLeft, gocui.ModNone, showMsg); err != nil {
+ return err
+ }
}
- if err := g.SetKeybinding("", gocui.KeyTab, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- log("tab", v.Name())
- return nextView(g, true)
- }); err != nil {
+ if err := g.SetKeybinding("", gocui.MouseRelease, gocui.ModNone, mouseUp); err != nil {
return err
}
- if err := g.SetKeybinding("", gocui.KeyArrowLeft, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return moveView(g, v, -delta, 0)
- }); err != nil {
+ if err := g.SetKeybinding("", gocui.MouseLeft, gocui.ModNone, globalDown); err != nil {
return err
}
- if err := g.SetKeybinding("", gocui.KeyArrowRight, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- return moveView(g, v, delta, 0)
- }); err != nil {
+ if err := g.SetKeybinding("", gocui.MouseLeft, gocui.ModMouseCtrl, ctrlDown); err != nil {
return err
}
- if err := g.SetKeybinding("", gocui.KeyArrowDown, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- log("down", v.Name())
- return moveView(g, v, 0, delta)
- }); err != nil {
+ /*
+ if err := g.SetKeybinding("", gocui.MouseLeft, gocui.ModNone, globalDown); err != nil {
return err
}
- if err := g.SetKeybinding("", gocui.KeyArrowUp, gocui.ModNone,
- func(g *gocui.Gui, v *gocui.View) error {
- log("up", v.Name())
- return moveView(g, v, 0, -delta)
- }); err != nil {
+ */
+ if err := g.SetKeybinding("msg", gocui.MouseLeft, gocui.ModNone, msgDown); err != nil {
return err
}
- if err := g.SetKeybinding("", gocui.KeyEnter, gocui.ModNone,
+ addDebugKeys(g)
+ return nil
+}
+
+// dump out the widgets
+func addDebugKeys(g *gocui.Gui) {
+ // dump all widget info to the log
+ g.SetKeybinding("", 'd', gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
- log("enter", v.Name())
- var w *toolkit.Widget
- w = stringWidget[v.Name()]
- if (w == nil) {
- log("COULD NOT FIND WIDGET", v.Name())
- } else {
- log("FOUND WIDGET!", w)
- if (w.Custom != nil) {
- w.Custom()
- return nil
- }
- // if (w.Event != nil) {
- // w.Event(w)
- // return nil
- // }
- }
+ log(logNow, "gocui.SetKeyBinding() dumpTree() START")
+ me.rootNode.dumpTree(true)
return nil
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", 't', gocui.ModNone,
+ })
+
+ // hide all widgets
+ g.SetKeybinding("", 'h', gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
- _, err := g.SetViewOnTop(views[curView])
- return err
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", 'b', gocui.ModNone,
+ me.rootNode.hideWidgets()
+ return nil
+ })
+
+ // show all widgets
+ g.SetKeybinding("", 's', gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
- _, err := g.SetViewOnBottom(views[curView])
- return err
- }); err != nil {
- return err
- }
- if err := g.SetKeybinding("", 'h', gocui.ModNone,
+ me.rootNode.showWidgets()
+ return nil
+ })
+
+ // panic
+ g.SetKeybinding("", 'p', gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
- log("help", v.Name())
- tmp, _ := g.SetViewOnTop("help")
- log("help 2", tmp.Name())
-// g.SetView("help", 2, 2, 30, 15, 0);
- g.SetCurrentView("help")
-// moveView(g, tmp, 0, -delta)
- if err := g.DeleteView("help"); err != nil {
- exit("gocui SetKeybinding()", err)
- }
+ panic("forced panic in gocui")
return nil
- }); err != nil {
- return err
- }
- return nil
+ })
}
diff --git a/toolkit/gocui/log.go b/toolkit/gocui/log.go
index 527d057..222332d 100644
--- a/toolkit/gocui/log.go
+++ b/toolkit/gocui/log.go
@@ -5,7 +5,15 @@ import (
witlog "git.wit.org/wit/gui/log"
)
+// various debugging flags
+var logNow bool = true // useful for active development
+var logError bool = true
+var logWarn bool = false
+var logInfo bool = false
+var logVerbose bool = false
+
func log(a ...any) {
+ witlog.Where = "wit/gocui"
witlog.Log(a...)
}
diff --git a/toolkit/gocui/logical.go b/toolkit/gocui/logical.go
new file mode 100644
index 0000000..2c6081b
--- /dev/null
+++ b/toolkit/gocui/logical.go
@@ -0,0 +1,72 @@
+package main
+
+import (
+ // "git.wit.org/wit/gui/toolkit"
+)
+
+var adjusted bool = false
+
+// expands the logical size of the parents
+func (w *cuiWidget) setParentLogical(p *cuiWidget) {
+ if (w.visable) {
+ // expand the parent logicalsize to include the widget realSize
+ if (p.logicalSize.w0 > w.realSize.w0) {
+ p.logicalSize.w0 = w.realSize.w0
+ adjusted = true
+ }
+ if (p.logicalSize.h0 > w.realSize.h0) {
+ p.logicalSize.h0 = w.realSize.h0
+ adjusted = true
+ }
+ if (p.logicalSize.w1 < w.realSize.w1) {
+ p.logicalSize.w1 = w.realSize.w1
+ adjusted = true
+ }
+ if (p.logicalSize.h1 < w.realSize.h1) {
+ p.logicalSize.h1 = w.realSize.h1
+ adjusted = true
+ }
+ } else {
+ // expand the parent logicalsize to include the widget logicalsize
+ if (p.logicalSize.w0 > w.logicalSize.w0) {
+ p.logicalSize.w0 = w.logicalSize.w0
+ adjusted = true
+ }
+ if (p.logicalSize.h0 > w.logicalSize.h0) {
+ p.logicalSize.h0 = w.logicalSize.h0
+ adjusted = true
+ }
+ if (p.logicalSize.w1 < w.logicalSize.w1) {
+ p.logicalSize.w1 = w.logicalSize.w1
+ adjusted = true
+ }
+ if (p.logicalSize.h1 < w.logicalSize.h1) {
+ p.logicalSize.h1 = w.logicalSize.h1
+ adjusted = true
+ }
+ }
+ if (w.visable) {
+ // adjust the widget realSize to the top left corner of the logicalsize
+ if (w.logicalSize.w0 > w.realSize.w0) {
+ w.realSize.w0 = w.logicalSize.w0
+ w.realSize.w1 = w.realSize.w0 + w.realWidth
+ adjusted = true
+ }
+ if (w.logicalSize.h0 > w.realSize.h0) {
+ w.realSize.h0 = w.logicalSize.h0
+ w.realSize.h1 = w.realSize.h0 + w.realHeight
+ adjusted = true
+ }
+ }
+ w.showWidgetPlacement(logNow, "setParentLogical() widget")
+ p.showWidgetPlacement(logNow, "setParentLogical() parent")
+ if (w.id == 0) || (p.id == 0) {
+ // stop resizing when you hit the root widget
+ return
+ }
+ // pass the logical resizing up
+ pP := w.parent
+ if (pP != nil) {
+ p.setParentLogical(pP)
+ }
+}
diff --git a/toolkit/democui/main.go b/toolkit/gocui/main.go
index 19b326d..11df910 100644
--- a/toolkit/democui/main.go
+++ b/toolkit/gocui/main.go
@@ -8,18 +8,15 @@ import (
"os"
)
-/*
-func OnExit(f func(string)) {
- Custom = f
-}
-*/
-
func Init() {
- log(logInfo, "Init() of democui")
- me.widgets = make(map[int]*cuiWidget)
+ log(logInfo, "Init() of awesome-gocui")
me.defaultWidth = 10
me.defaultHeight = 2
me.defaultBehavior = true
+
+ me.horizontalPadding = 20
+ me.groupPadding = 2
+ me.buttonPadding = 2
}
func Exit() {
@@ -27,18 +24,6 @@ func Exit() {
me.baseGui.Close()
}
-/*
-func mouseClick(name string) {
- // output screws up the console. Need to fix this by redirecting all console output to a file from log.Println()
- // log.Println("g.Close()")
- // g.Close()
-
- log("Found andlabs Running custom function for the mouse click")
- Custom(name)
- // panic("got andlabs")
-}
-*/
-
func Main(f func()) {
log("start Init()")
@@ -53,15 +38,3 @@ func Main(f func()) {
MouseMain()
}
-
-/*
-func StartConsoleMouse() {
- defer g.Close()
- log("start Main()")
-
- if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
- exit(err)
- }
- log("exit Main()")
-}
-*/
diff --git a/toolkit/democui/mouse.go b/toolkit/gocui/mouse.go
index fc74d27..196e080 100644
--- a/toolkit/democui/mouse.go
+++ b/toolkit/gocui/mouse.go
@@ -45,6 +45,7 @@ func layout(g *gocui.Gui) error {
}
v.Frame = false
}
+ /*
if v, err := g.SetView("but1", 2, 2, 22, 7, 0); err != nil {
if !errors.Is(err, gocui.ErrUnknownView) {
return err
@@ -67,6 +68,7 @@ func layout(g *gocui.Gui) error {
v.SelFgColor = gocui.ColorBlack
fmt.Fprintln(v, "Button 2 - line 1")
}
+ */
helplayout(g)
updateHighlightedView(g)
return nil
diff --git a/toolkit/gocui/place.go b/toolkit/gocui/place.go
new file mode 100644
index 0000000..905ebed
--- /dev/null
+++ b/toolkit/gocui/place.go
@@ -0,0 +1,221 @@
+package main
+
+import (
+// "github.com/awesome-gocui/gocui"
+ "git.wit.org/wit/gui/toolkit"
+)
+
+var fakeStartWidth int = 80
+var fakeStartHeight int = 0
+func (w *cuiWidget) setFake() {
+ if (w.visable) {
+ return
+ }
+ t := len(w.name)
+ // setup fake labels for non-visable things off screen
+ w.realWidth = t + 2
+ w.realHeight = me.defaultHeight
+ w.realSize.w0 = fakeStartWidth
+ w.realSize.h0 = fakeStartHeight
+ w.realSize.w1 = w.realSize.w0 + w.realWidth
+ w.realSize.h1 = w.realSize.h0 + w.realHeight
+ fakeStartHeight += 3
+ if (fakeStartHeight > 24) {
+ fakeStartHeight = 0
+ fakeStartWidth += 20
+ }
+ w.showWidgetPlacement(logNow, "setFake()")
+}
+
+func findPlace(w *cuiWidget) {
+ w.visable = true
+ switch w.widgetType {
+ case toolkit.Root:
+ w.visable = false
+ w.setFake()
+ case toolkit.Flag:
+ w.visable = false
+ w.setFake()
+ case toolkit.Grid:
+ w.visable = false
+ w.setFake()
+ case toolkit.Box:
+ w.visable = false
+ w.setFake()
+ default:
+ w.redoBox(true)
+ }
+}
+
+func (w *cuiWidget) redoBox(draw bool) {
+ if (w == nil) {
+ return
+ }
+ if (me.rootNode == nil) {
+ return
+ }
+ p := w.parent
+ if (p == nil) {
+ log(logInfo, "redoBox()", w.id, "parent == nil")
+ return
+ }
+
+ t := len(w.text)
+ w.visable = true
+ switch w.widgetType {
+ case toolkit.Window:
+ for _, child := range w.children {
+ child.redoBox(draw)
+ }
+ case toolkit.Tab:
+ for _, child := range w.children {
+ child.redoBox(draw)
+ }
+ case toolkit.Grid:
+ // hmm
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW
+ w.logicalSize.h1 = p.nextH
+
+ w.nextW = p.nextW
+ w.nextH = p.nextH
+
+ var wCount, hCount int
+ var b bool = true
+ for _, child := range w.children {
+ child.redoBox(draw)
+ if (b) {
+ wCount += 1
+ b = false
+ } else {
+ wCount = 0
+ w.nextH += 1
+ b = true
+ }
+ w.nextW = p.nextW + wCount * 20
+ w.nextH = p.nextH + hCount * 4
+ log(logInfo, "redoBox(GRID) (w,h count)", wCount, hCount, "(X,Y)", w.x, w.y, w.name)
+ }
+ w.showWidgetPlacement(logNow, "grid:")
+ case toolkit.Box:
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW
+ w.logicalSize.h1 = p.nextH
+
+ w.nextW = p.nextW
+ w.nextH = p.nextH
+ for _, child := range w.children {
+ child.redoBox(draw)
+ if (w.horizontal) {
+ log("BOX IS HORIZONTAL", p.nextW, p.nextW, p.name)
+ log("BOX IS HORIZONTAL", w.nextW, w.nextH, w.name)
+ log("BOX IS HORIZONTAL")
+ // expand based on the child width
+ w.nextW = child.nextW + me.horizontalPadding
+ // reset height to parent
+ w.nextH = p.nextH
+ } else {
+ log("BOX IS VERTICAL", p.nextW, p.nextW, p.name)
+ log("BOX IS VERTICAL", w.nextW, w.nextH, w.name)
+ log("BOX IS VERTICAL")
+ // go straight down
+ w.nextW = p.nextW
+ // expand based on the child height
+ w.nextH = child.nextH
+ }
+ }
+ w.showWidgetPlacement(logNow, "box:")
+ case toolkit.Group:
+ w.realWidth = t + me.buttonPadding
+ w.realHeight = me.defaultHeight
+
+ w.realSize.w0 = p.nextW
+ w.realSize.h0 = p.nextH
+ w.realSize.w1 = w.realSize.w0 + w.realWidth
+ w.realSize.h1 = w.realHeight
+
+ w.logicalSize.w0 = w.realSize.w0
+ w.logicalSize.h0 = w.realSize.h0
+ w.logicalSize.w1 = w.realSize.w1
+ w.logicalSize.h1 = w.realSize.h1
+
+ w.nextW = p.nextW + me.groupPadding
+ w.nextH = p.nextH + me.buttonPadding
+ for _, child := range w.children {
+ child.redoBox(draw)
+ // reset nextW to straight down
+ w.nextW = p.nextW + 4
+ w.nextH = child.nextH
+ }
+ // expand the height of the parent now that the group is done
+ // p.nextW = w.nextW
+ // p.nextH = w.nextH
+ w.showWidgetPlacement(logNow, "group:")
+ default:
+ w.realWidth = t + 3
+ w.realHeight = me.defaultHeight
+ w.realSize.w0 = p.nextW
+ w.realSize.h0 = p.nextH
+ w.realSize.w1 = p.nextW + w.realWidth
+ w.realSize.h1 = p.nextH + w.realHeight
+
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW + w.realWidth
+ w.logicalSize.h1 = p.nextH + w.realHeight
+
+ w.nextW = w.realSize.w1
+ w.nextH = w.realSize.h1
+ }
+}
+
+func (w *cuiWidget) boxedPlace() {
+ t := len(w.name)
+ if (w.id == 0) {
+ w.realWidth = 0
+ w.realHeight = 0
+ return
+ }
+ p := w.parent
+ if (p == nil) {
+ log(logError, "boxedPlace() parentId widget == nil")
+ return
+ }
+
+ w.realWidth = t + 3
+ w.realHeight = me.defaultHeight
+ w.realSize.w0 = p.nextW
+ w.realSize.h0 = p.nextH
+ w.realSize.w1 = p.nextW + w.realWidth
+ w.realSize.h1 = p.nextH + w.realHeight
+
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW + w.realWidth
+ w.logicalSize.h1 = p.nextH + w.realHeight
+
+ w.nextW = w.realSize.w1
+ w.nextH = w.realSize.h1
+
+ w.showWidgetPlacement(logNow, "bP widget")
+}
+
+func (w *cuiWidget) updateLogicalSizes() {
+ for _, child := range w.children {
+ child.updateLogicalSizes()
+ if (w.logicalSize.w0 > child.logicalSize.w0) {
+ w.logicalSize.w0 = child.logicalSize.w0
+ }
+ if (w.logicalSize.w1 < child.logicalSize.w1) {
+ w.logicalSize.w1 = child.logicalSize.w1
+ }
+ if (w.logicalSize.h0 > child.logicalSize.h0) {
+ w.logicalSize.h0 = child.logicalSize.h0
+ }
+ if (w.logicalSize.h1 < child.logicalSize.h1) {
+ w.logicalSize.h1 = child.logicalSize.h1
+ }
+ }
+}
diff --git a/toolkit/gocui/plugin.go b/toolkit/gocui/plugin.go
index f0f45d3..7c4eee5 100644
--- a/toolkit/gocui/plugin.go
+++ b/toolkit/gocui/plugin.go
@@ -4,114 +4,77 @@ import (
// if you include more than just this import
// then your plugin might be doing something un-ideal (just a guess from 2023/02/27)
"git.wit.org/wit/gui/toolkit"
-
- "github.com/awesome-gocui/gocui"
)
-// This is a map between the widgets in wit/gui and the internal structures of gocui
-var viewWidget map[*gocui.View]*toolkit.Widget
-var stringWidget map[string]*toolkit.Widget
-
func Quit() {
- baseGui.Close()
+ me.baseGui.Close()
}
-// This lists out the know mappings
-func listMap() {
- for v, w := range viewWidget {
- log("view =", v.Name, "widget name =", w.Name)
- }
- for s, w := range stringWidget {
- log("string =", s, "widget =", w)
+func Action(a *toolkit.Action) {
+ log(logInfo, "Action() START", a.WidgetId, a.ActionType, a.WidgetType, a.Name)
+ w := findWidget(a.WidgetId, me.rootNode)
+ switch a.ActionType {
+ case toolkit.Add:
+ w = setupWidget(a)
+ findPlace(w)
+ w.drawView()
+ case toolkit.Show:
+ if (a.B) {
+ w.drawView()
+ } else {
+ w.hideWidgets()
+ }
+ case toolkit.Set:
+ w.Set(a.A)
+ case toolkit.SetText:
+ w.SetText(a.S)
+ case toolkit.AddText:
+ w.AddText(a.S)
+ case toolkit.Move:
+ log(logNow, "attempt to move() =", a.ActionType, a.WidgetType, a.Name)
+ default:
+ log(logError, "Action() Unknown =", a.ActionType, a.WidgetType, a.Name)
}
+ log(logInfo, "Action() END")
}
-
-//
-// This should be called ?
-// Pass() ?
-// This handles all interaction between the wit/gui package (what golang knows about)
-// and this plugin that talks to the OS and does scary and crazy things to make
-// a GUI on whatever OS or whatever GUI toolkit you might have (GTK, QT, WASM, libcurses)
-//
-// Once you are here, you should be in a protected goroutine created by the golang wit/gui package
-//
-// TODO: make sure you can't escape this goroutine
-//
-func Send(p *toolkit.Widget, c *toolkit.Widget) {
- if (p == nil) {
- log(debugPlugin, "Send() parent = nil")
- } else {
- log(debugPlugin, "Send() parent =", p.Name, ",", p.Type)
+func (w *cuiWidget) AddText(text string) {
+ if (w == nil) {
+ log(logNow, "widget is nil")
+ return
+ }
+ w.vals = append(w.vals, text)
+ for i, s := range w.vals {
+ log(logNow, "AddText()", w.name, i, s)
}
- log(debugPlugin, "Send() child =", c.Name, ",", c.Type)
+ w.SetText(text)
+}
- /*
- if (c.Action == "SetMargin") {
- log(debugError, "need to implement SetMargin here")
- setMargin(c, c.B)
+func (w *cuiWidget) SetText(text string) {
+ if (w == nil) {
+ log(logNow, "widget is nil")
return
}
- */
+ w.text = text
+ w.s = text
+ w.textResize()
+ me.baseGui.DeleteView(w.cuiName)
+ w.drawView()
+}
- switch c.Type {
- /*
- case toolkit.Window:
- // doWindow(c)
- case toolkit.Tab:
- // doTab(p, c)
- */
- case toolkit.Group:
- newGroup(p, c)
- case toolkit.Button:
- newButton(p, c)
- /*
- case toolkit.Checkbox:
- // doCheckbox(p, c)
- case toolkit.Label:
- // doLabel(p, c)
- case toolkit.Textbox:
- // doTextbox(p, c)
- case toolkit.Slider:
- // doSlider(p, c)
- case toolkit.Spinner:
- // doSpinner(p, c)
- case toolkit.Dropdown:
- // doDropdown(p, c)
- case toolkit.Combobox:
- // doCombobox(p, c)
- case toolkit.Grid:
- // doGrid(p, c)
- */
- /*
- case toolkit.Flag:
- // log(debugFlags, "plugin Send() flag parent =", p.Name, p.Type)
- // log(debugFlags, "plugin Send() flag child =", c.Name, c.Type)
- // log(debugFlags, "plugin Send() flag child.Action =", c.Action)
- // log(debugFlags, "plugin Send() flag child.S =", c.S)
- // log(debugFlags, "plugin Send() flag child.B =", c.B)
- // log(debugFlags, "plugin Send() what to flag?")
- // should set the checkbox to this value
- switch c.S {
- case "Toolkit":
- debugToolkit = c.B
- case "Change":
- debugChange = c.B
- case "Plugin":
- debugPlugin = c.B
- case "Flags":
- debugFlags = c.B
- case "Error":
- debugError = c.B
- case "Show":
- ShowDebug()
- default:
- log(debugError, "Can't set unknown flag", c.S)
- }
- */
+func (w *cuiWidget) Set(val any) {
+ log(logInfo, "Set() value =", val)
+ var a toolkit.Action
+ a.ActionType = toolkit.Set
+
+ switch v := val.(type) {
+ case bool:
+ w.b = val.(bool)
+ case string:
+ w.SetText(val.(string))
+ case int:
+ w.i = val.(int)
default:
- log(debugError, "plugin Send() unknown parent =", p.Name, p.Type)
- log(debugError, "plugin Send() unknown child =", c.Name, c.Type)
- log(debugError, "plugin Send() Don't know how to do", c.Type, "yet")
+ log(logError, "Set() unknown type =", v, "a =", a)
}
}
diff --git a/toolkit/democui/structs.go b/toolkit/gocui/structs.go
index 37a8f28..a3f0207 100644
--- a/toolkit/democui/structs.go
+++ b/toolkit/gocui/structs.go
@@ -21,9 +21,10 @@ import (
var me config
type config struct {
- highest int // highest widgetId
baseGui *gocui.Gui // the main gocui handle
- widgets map[int]*cuiWidget
+ rootNode *cuiWidget // the base of the binary tree. it should have id == 0
+ ctrlDown *cuiWidget // shown if you click the mouse when the ctrl key is pressed
+
callback func(int)
helpLabel *gocui.View
@@ -38,6 +39,10 @@ type config struct {
stretchy bool // expand things like buttons to the maximum size
padded bool // add space between things like buttons
margin bool // add space around the frames of windows
+
+ horizontalPadding int
+ groupPadding int
+ buttonPadding int
}
/*
@@ -73,11 +78,14 @@ type realSizeT struct {
type cuiWidget struct {
id int // widget ID
- parentId int
+ // parentId int
widgetType toolkit.WidgetType
name string // a descriptive name of the widget
text string // the current text being displayed
+ cuiName string // what gocui uses to reference the widget
+
+ vals []string // dropdown menu options
visable bool // widget types like 'box' are 'false'
realWidth int // the real width
@@ -85,8 +93,21 @@ type cuiWidget struct {
realSize rectType // the display size of this widget
logicalSize rectType // the logical size. Includes all the child widgets
- nextX int
- nextY int
+ nextW int
+ nextH int
+
+ // things from toolkit/action
+ b bool
+ i int
+ s string
+ x int
+ y int
+ width int
+ height int
+
+ //deprecate
+// nextX int
+// nextY int
// horizontal=true means layout widgets like books on a bookshelf
// horizontal=false means layout widgets like books in a stack
@@ -94,18 +115,12 @@ type cuiWidget struct {
tainted bool
v *gocui.View
- baseGui *gocui.Gui // use gogui.Manager ? as 'workspaces?'
// writeMutex protects locks the write process
writeMutex sync.Mutex
- // deprecate
- // logicalWidth int `default:8`
- // logicalHeight int `default:2`
- // rect rectType
- // current rectType // the logical size. Includes all the child widgets
- // width int
- // height int
+ parent *cuiWidget
+ children []*cuiWidget
}
// from the gocui devs:
diff --git a/toolkit/gocui/tab.go b/toolkit/gocui/tab.go
new file mode 100644
index 0000000..42e5127
--- /dev/null
+++ b/toolkit/gocui/tab.go
@@ -0,0 +1,88 @@
+package main
+
+// implements widgets 'Window' and 'Tab'
+
+import (
+ "git.wit.org/wit/gui/toolkit"
+// "github.com/awesome-gocui/gocui"
+)
+
+func (w *cuiWidget) hideWidgets() {
+ switch w.widgetType {
+ case toolkit.Root:
+ case toolkit.Flag:
+ case toolkit.Window:
+ case toolkit.Tab:
+ case toolkit.Box:
+ case toolkit.Grid:
+ default:
+ if (w.v != nil) {
+ me.baseGui.DeleteView(w.cuiName)
+ w.v = nil
+ }
+ }
+ for _, child := range w.children {
+ child.hideWidgets()
+ }
+}
+
+func (w *cuiWidget) showWidgets() {
+ w.drawView()
+ for _, child := range w.children {
+ child.showWidgets()
+ }
+}
+
+func (w *cuiWidget) redoTabs(draw bool) {
+ log(logNow, "redoTabs() START", w.name)
+ if (w == nil) {
+ return
+ }
+ if (w.widgetType == toolkit.Root) {
+ w.logicalSize.w0 = 0
+ w.logicalSize.h0 = 0
+ w.logicalSize.w1 = 0
+ w.logicalSize.h1 = 0
+
+ w.nextW = 2
+ w.nextH = 2
+ }
+
+ log(logNow, "redoTabs() about to check for window and tab ", w.name)
+ w.text = w.name
+ t := len(w.text)
+ if ((w.widgetType == toolkit.Window) || (w.widgetType == toolkit.Tab)) {
+ log(logNow, "redoTabs() in Window and Tab", w.name)
+ w.realWidth = t + 2
+ w.realHeight = me.defaultHeight
+
+ w.realSize.w0 = me.rootNode.logicalSize.w1
+ w.realSize.h0 = 0
+ w.realSize.w1 = w.realSize.w0 + w.realWidth
+ w.realSize.h1 = w.realHeight
+
+ w.logicalSize.w0 = 0
+ w.logicalSize.h0 = 0
+ w.logicalSize.w1 = 0
+ w.logicalSize.h1 = w.realHeight
+
+ // spaces right 1 space to next tab widget
+ // spaces down 1 line to the next widget
+ w.nextW = 2
+ w.nextH = w.realHeight + 1
+
+ me.rootNode.logicalSize.w1 = w.realSize.w1 + 1
+ me.rootNode.logicalSize.h1 = 0
+
+ me.baseGui.DeleteView(w.cuiName)
+ w.v = nil
+ w.drawView()
+ w.showWidgetPlacement(logNow, "redoTabs()")
+ }
+
+ log(logNow, "redoTabs() about to for loop children", w.name)
+ for _, child := range w.children {
+ log(logNow, "redoTabs() got to child", child.name)
+ child.redoTabs(draw)
+ }
+}
diff --git a/toolkit/gocui/view.go b/toolkit/gocui/view.go
new file mode 100644
index 0000000..d1d4b51
--- /dev/null
+++ b/toolkit/gocui/view.go
@@ -0,0 +1,86 @@
+package main
+
+import (
+ "fmt"
+ "errors"
+ "strconv"
+ "bufio"
+ "strings"
+
+ "github.com/awesome-gocui/gocui"
+// "git.wit.org/wit/gui/toolkit"
+)
+
+func splitLines(s string) []string {
+ var lines []string
+ sc := bufio.NewScanner(strings.NewReader(s))
+ for sc.Scan() {
+ lines = append(lines, sc.Text())
+ }
+ return lines
+}
+
+func (w *cuiWidget) textResize() {
+ var width, height int
+
+ for i, s := range splitLines(w.text) {
+ log(logNow, "textResize() len =", len(s), i, s)
+ if (width < len(s)) {
+ width = len(s)
+ }
+ height = i
+ }
+ w.realWidth = width + 3
+ w.realHeight = me.defaultHeight + height
+ w.realSize.w1 = w.realSize.w0 + w.realWidth
+ w.realSize.h1 = w.realSize.h0 + w.realHeight
+ w.showWidgetPlacement(logNow, "textResize()")
+}
+
+func (w *cuiWidget) drawView() {
+ var err error
+ if (w.cuiName == "") {
+ log(logError, "drawView() w.cuiName was not set for widget", w)
+ w.cuiName = strconv.Itoa(w.id)
+ }
+
+ if (w.v != nil) {
+ log(logInfo, "drawView() w.v already defined for widget", w)
+ v, _ := me.baseGui.View(w.cuiName)
+ if (v == nil) {
+ log(logError, "drawView() ERROR view does not really exist", w)
+ w.v = nil
+ } else {
+ return
+ }
+ }
+
+ v, _ := me.baseGui.View(w.cuiName)
+ if (v != nil) {
+ log(logError, "drawView() already defined for name", w.cuiName)
+ w.v = v
+ return
+ }
+
+ a := w.realSize.w0
+ b := w.realSize.h0
+ c := w.realSize.w1
+ d := w.realSize.h1
+
+ w.v, err = me.baseGui.SetView(w.cuiName, a, b, c, d, 0)
+ if err == nil {
+ log(logError, "drawView() internal plugin error err = nil")
+ return
+ }
+ if !errors.Is(err, gocui.ErrUnknownView) {
+ log(logError, "drawView() internal plugin error error.IS()", err)
+ return
+ }
+
+ me.baseGui.SetKeybinding(w.v.Name(), gocui.MouseLeft, gocui.ModNone, click)
+
+ w.v.Wrap = true
+ fmt.Fprintln(w.v, " " + w.text)
+
+ // w.SetDefaultWidgetColor()
+}
diff --git a/toolkit/gocui/views.go b/toolkit/gocui/views.go
deleted file mode 100644
index 8b17acf..0000000
--- a/toolkit/gocui/views.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2014 The gocui Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
- "errors"
- "fmt"
- "strings"
-
- "github.com/awesome-gocui/gocui"
- // "git.wit.org/wit/gui/toolkit"
-)
-
-func newView(g *gocui.Gui) error {
- maxX, maxY := g.Size()
- name := fmt.Sprintf("v%v", idxView)
- v, err := g.SetView(name, maxX/2-5, maxY/2-5, maxX/2+5, maxY/2+5, 0)
- if err == nil {
- return err
- }
- if !errors.Is(err, gocui.ErrUnknownView) {
- return err
- }
-
- v.Wrap = true
- fmt.Fprintln(v, strings.Repeat(name+" ", 30))
-
- if _, err := g.SetCurrentView(name); err != nil {
- return err
- }
-
- views = append(views, name)
- curView = len(views) - 1
- idxView += 1
- return nil
-}
-
-func delView(g *gocui.Gui) error {
- if len(views) <= 1 {
- return nil
- }
-
- if err := g.DeleteView(views[curView]); err != nil {
- return err
- }
- views = append(views[:curView], views[curView+1:]...)
-
- return nextView(g, false)
-}
-
-func nextView(g *gocui.Gui, disableCurrent bool) error {
- next := curView + 1
- if next > len(views)-1 {
- next = 0
- }
-
- if _, err := g.SetCurrentView(views[next]); err != nil {
- return err
- }
-
- curView = next
- return nil
-}
-
-func moveView(g *gocui.Gui, v *gocui.View, dx, dy int) error {
- name := v.Name()
- x0, y0, x1, y1, err := g.ViewPosition(name)
- if err != nil {
- return err
- }
- log(x0, y0, x1, y1)
- if _, err := g.SetView(name, x0+dx, y0+dy, x1+dx, y1+dy, 0); err != nil {
- return err
- }
- x0, y0, x1, y1, err = g.ViewPosition(name)
- log(x0, y0, x1, y1)
- return nil
-}
diff --git a/toolkit/gocui/window.go b/toolkit/gocui/window.go
deleted file mode 100644
index 67948d6..0000000
--- a/toolkit/gocui/window.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package main
-
-import (
- "git.wit.org/wit/gui/toolkit"
-)
-
-func NewWindow(w *toolkit.Widget) {
- if (w == nil) {
- log("wit/gui plugin error. widget == nil")
- return
- }
- if (w.Name == "") {
- w.Name = "nil newWindow"
- }
- log("gui.gocui.AddWindow", w.Name)
-}
diff --git a/toolkit/widget.go b/toolkit/widget.go
index 0a1dda3..01215ed 100644
--- a/toolkit/widget.go
+++ b/toolkit/widget.go
@@ -19,7 +19,7 @@ type ActionType int
// "Interaction" as per wikipedia [[User interface]]
// Could a protobuf be used here? (Can functions be passed?)
type Widget struct {
- Name string
+ // Name string
Type WidgetType
// This function is how you interact with the toolkit
@@ -27,7 +27,6 @@ type Widget struct {
// Hopefully this will be the barrier between the goroutines
// TODO: move this interaction to channels
Custom func()
- Callback func()
// re-adding an id to test channels
Id int
@@ -55,7 +54,7 @@ type Action struct {
// this should be the widget
// if the action is New, Hide, Enable, etc
Widget *Widget
- Callback func(int)
+ Callback func(int) bool
// This is how the values are passed back and forth
// values from things like checkboxes & dropdown's
@@ -66,6 +65,8 @@ type Action struct {
// (still probably not, almost certainly not. not possible. layer violation?)
S string // not safe to have 'S'
+ A any
+
// This GUI is intended for simple things
// We are not laying out PDF's here
// This is used for things like a slider(0,100)
diff --git a/window.go b/window.go
index 8ca2475..e829b41 100644
--- a/window.go
+++ b/window.go
@@ -42,6 +42,8 @@ func NewWindow() *Node {
a.ActionType = toolkit.Add
a.Width = Config.Width
a.Height = Config.Height
+ a.Name = Config.Title
+ a.Text = Config.Title
newaction(&a, newNode, Config.rootNode)
return newNode