summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-02-05 12:06:17 -0600
committerJeff Carr <[email protected]>2024-02-05 12:06:17 -0600
commit1e98d2607b0eafb698dc63e7b97d55ecaf416cb5 (patch)
tree001ec93a75bd26668f7312e45b3f21903181ec8f
parentfea47363e00f9c02497108484500ad40a88f466c (diff)
use the new tree functions
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--action.go79
-rw-r--r--add.go49
-rw-r--r--addText.go16
-rw-r--r--box.go32
-rw-r--r--main.go49
-rw-r--r--setText.go20
6 files changed, 190 insertions, 55 deletions
diff --git a/action.go b/action.go
index 5799d37..8cb749e 100644
--- a/action.go
+++ b/action.go
@@ -1,8 +1,7 @@
package main
import (
- "errors"
-
+ "go.wit.com/dev/andlabs/ui"
"go.wit.com/log"
"go.wit.com/toolkits/tree"
"go.wit.com/widget"
@@ -169,6 +168,7 @@ func widgetDelete(n *tree.Node) {
}
}
+/*
func processAction(a *widget.Action) {
log.Log(ANDLABS, "processAction() START a.ActionType =", a.ActionType, "a.Value", a.Value)
@@ -278,3 +278,78 @@ func processAction(a *widget.Action) {
}
log.Log(INFO, "processAction() END =", a.ActionType, a.WidgetType)
}
+*/
+
+func SetTitle(n *tree.Node, s string) {
+ SetText(n, s)
+}
+
+func SetLabel(n *tree.Node, s string) {
+ SetText(n, s)
+}
+
+func SetText(n *tree.Node, s string) {
+ if n == nil {
+ log.Warn("Tree Error: Add() sent n == nil")
+ return
+ }
+ if n.TK == nil {
+ log.Warn("Tree sent an action on a widget we didn't seem to have.")
+ return
+ }
+ setText(n, s)
+ log.Info("SetText() (new)", n.WidgetType, n.String(), s)
+}
+
+func AddText(n *tree.Node, s string) {
+ if n == nil {
+ log.Warn("Tree Error: Add() sent n == nil")
+ return
+ }
+ if n.TK == nil {
+ log.Warn("Tree sent an action on a widget we didn't seem to have.")
+ return
+ }
+ log.Info("AddText()", n.WidgetType, n.String())
+ // w := n.TK.(*guiWidget)
+ // w.AddText(s)
+ addText(n, s)
+}
+
+func newAction(n *tree.Node, atype widget.ActionType) {
+ log.Log(INFO, "newaction() START", atype)
+ if n == nil {
+ log.Warn("Tree Error: Add() sent n == nil")
+ return
+ }
+ if n.TK == nil {
+ log.Warn("Tree sent an action on a widget we didn't seem to have.")
+ // do this init here again? Probably something
+ // went wrong and we should reset the our while gocui.View tree
+ n.TK = initWidget(n)
+ }
+ // w := n.TK.(*guiWidget)
+ switch atype {
+ case widget.Show:
+ log.Log(NOW, "Show() HERE. a.Hidden() was =", n.Hidden())
+ show(n, true)
+ case widget.Hide:
+ log.Log(NOW, "Hide() HERE. a.State.Hidden was =", n.Hidden())
+ hide(n)
+ case widget.Move:
+ log.Log(NOW, "attempt to move() =", atype, n.WidgetType, n.ProgName())
+ case widget.ToolkitClose:
+ log.Log(NOW, "attempting to Quit andlabs.ui")
+ // standardClose()
+ ui.Quit()
+ case widget.Enable:
+ enable(n, true)
+ case widget.Disable:
+ enable(n, false)
+ case widget.Delete:
+ widgetDelete(n)
+ default:
+ log.Log(ERROR, "newaction() UNHANDLED Action Type =", atype, "WidgetType =", n.WidgetType, "Name =", n.ProgName())
+ }
+ log.Log(INFO, "newaction() END", atype, n.String())
+}
diff --git a/add.go b/add.go
index 641d16c..fd373a7 100644
--- a/add.go
+++ b/add.go
@@ -6,16 +6,7 @@ import (
"go.wit.com/widget"
)
-func add(a *widget.Action) *tree.Node {
- log.Log(ANDLABS, "add()", a.WidgetId, a.WidgetType, a.State.ProgName)
- if a.WidgetType == widget.Root {
- if me.treeRoot == nil {
- me.treeRoot = me.myTree.AddNode(a)
- }
- return me.treeRoot
- }
- n := me.myTree.AddNode(a)
-
+func add(n *tree.Node) {
p := n.Parent
switch n.WidgetType {
case widget.Window:
@@ -32,27 +23,53 @@ func add(a *widget.Action) *tree.Node {
newButton(p, n)
case widget.Checkbox:
newCheckbox(p, n)
- setChecked(n, a.State.Checked)
+ setChecked(n, n.State.Checked)
case widget.Spinner:
newSpinner(p, n)
case widget.Slider:
newSlider(p, n)
case widget.Dropdown:
newDropdown(p, n)
- setText(n, a)
+ setText(n, widget.GetString(n.State.Value))
case widget.Combobox:
newCombobox(p, n)
- setText(n, a)
+ setText(n, widget.GetString(n.State.Value))
case widget.Textbox:
newTextbox(p, n)
- setText(n, a)
+ setText(n, widget.GetString(n.State.Value))
/*
case widget.Image:
newImage(p, n)
*/
default:
- log.Log(ERROR, "add() error TODO: ", n.WidgetType, n.State.ProgName)
+ log.Log(ERROR, "add() error TODO: ", n.WidgetType, n.ProgName())
}
+}
- return n
+func newAdd(n *tree.Node) {
+ if n == nil {
+ log.Warn("Tree Error: Add() sent n == nil")
+ return
+ }
+ if n.WidgetType == widget.Root {
+ me.treeRoot = n
+ return
+ }
+ add(n)
+ if n.TK == nil {
+ log.Warn("Tree sent an action on a widget we didn't seem to have.")
+ // do this init here again? Probably something
+ // went wrong and we should reset the our while gocui.View tree
+ n.TK = initWidget(n)
+ }
+ // show(n, !a.State.Hidden)
+ if n.Hidden() {
+ hide(n)
+ } else {
+ if n.State.Enable {
+ // nothing to do
+ } else {
+ enable(n, false)
+ }
+ }
}
diff --git a/addText.go b/addText.go
index ed837ea..c6bcdbb 100644
--- a/addText.go
+++ b/addText.go
@@ -9,20 +9,20 @@ import (
func compareStrings(n *tree.Node, ss []string) {
}
-func addText(n *tree.Node, a *widget.Action) {
+func addText(n *tree.Node, s string) {
var tk *guiWidget
tk = n.TK.(*guiWidget)
- log.Log(ANDLABS, "addText() START with a.Value =", a.Value)
+ log.Log(ANDLABS, "addText() START with s =", s)
if tk == nil {
log.Log(ERROR, "addText error. tk == nil", n.State.ProgName, n.WidgetId)
return
}
- log.Log(ANDLABS, "addText() Attempt on", n.WidgetType, "with", a.Value)
+ log.Log(ANDLABS, "addText() Attempt on", n.WidgetType, "with", s)
switch n.WidgetType {
case widget.Dropdown:
- for i, s := range a.State.Strings {
- log.Log(ANDLABS, "a.State.Strings =", i, s)
+ for i, s := range n.State.Strings {
+ log.Log(ANDLABS, "n.State.Strings =", i, s)
_, ok := n.Strings[s]
// If the key exists
if ok {
@@ -35,9 +35,9 @@ func addText(n *tree.Node, a *widget.Action) {
}
}
case widget.Combobox:
- addComboboxName(n, widget.GetString(a.Value))
+ addComboboxName(n, s)
default:
- log.Log(ERROR, "plugin Send() Don't know how to addText on", n.WidgetType, "yet", a.ActionType)
+ log.Log(ERROR, "addText() doesn't work on", n.WidgetType)
}
- log.Log(ANDLABS, "addText() END with a.Value =", a.Value)
+ log.Log(ANDLABS, "addText() END with =", s)
}
diff --git a/box.go b/box.go
index bb9a8b5..673fca8 100644
--- a/box.go
+++ b/box.go
@@ -31,24 +31,24 @@ func newBox(n *tree.Node) {
}
/*
- rawBox -- hack to arbitrarily add a box in andlabs to work
- around the problem that a "group" can not have one entry in it
- TODO: fix this so that a box is "added on demand" that is,
- if "go.wit.com/gui" sends you a 2nd thing to add to a group,
- automatically add a box then. The problem with this, is the macos, windows and linux gtk
- will panic on a move when an chind object is disasociated from the group
- I haven't had time to try to debug this, so, instead, it's just probably better to always
- add a box here. There doesn't seem to be any real issue with forcing a box to be inserted
- into the toolkits that is "outside" the binary tree of widgets. This only means, that on
- a destroy of the tree, this box must be checked
+rawBox -- hack to arbitrarily add a box in andlabs to work
+around the problem that a "group" can not have one entry in it
+TODO: fix this so that a box is "added on demand" that is,
+if "go.wit.com/gui" sends you a 2nd thing to add to a group,
+automatically add a box then. The problem with this, is the macos, windows and linux gtk
+will panic on a move when an chind object is disasociated from the group
+I haven't had time to try to debug this, so, instead, it's just probably better to always
+add a box here. There doesn't seem to be any real issue with forcing a box to be inserted
+into the toolkits that is "outside" the binary tree of widgets. This only means, that on
+a destroy of the tree, this box must be checked
- even that is a probably not senario however since clicking on the close box in the toolkit
- has the operating system destroy everything in the window. it may or may not be possible
- to control that behavior. at this time, it's "undetermined" and the best course of action
- is to detect the window is destroyed and then remove all the toolkit information
- from all the nodes in the binary tree
+even that is a probably not senario however since clicking on the close box in the toolkit
+has the operating system destroy everything in the window. it may or may not be possible
+to control that behavior. at this time, it's "undetermined" and the best course of action
+is to detect the window is destroyed and then remove all the toolkit information
+from all the nodes in the binary tree
- TODO: handle user killing/closing a window using the OS
+TODO: handle user killing/closing a window using the OS
*/
func rawBox(n *tree.Node) *ui.Box {
var box *ui.Box
diff --git a/main.go b/main.go
index ae3c6d4..27e61cc 100644
--- a/main.go
+++ b/main.go
@@ -17,8 +17,44 @@ var uiMainUndef bool = true
var uiMain sync.Once
var muAction sync.Mutex
+func queueAction(n *tree.Node, atype widget.ActionType) {
+ ui.QueueMain(func() {
+ newAction(n, atype)
+ })
+}
+
+func queueAdd(n *tree.Node) {
+ ui.QueueMain(func() {
+ newAdd(n)
+ })
+}
+
+func queueSetTitle(n *tree.Node, s string) {
+ ui.QueueMain(func() {
+ SetText(n, s)
+ })
+}
+
+func queueSetLabel(n *tree.Node, s string) {
+ ui.QueueMain(func() {
+ SetText(n, s)
+ })
+}
+
+func queueSetText(n *tree.Node, s string) {
+ ui.QueueMain(func() {
+ SetText(n, s)
+ })
+}
+
+func queueAddText(n *tree.Node, s string) {
+ ui.QueueMain(func() {
+ AddText(n, s)
+ })
+}
+
+/*
func queueMain(currentA widget.Action) {
- /*
// this never happends
defer func() {
if r := recover(); r != nil {
@@ -29,7 +65,6 @@ func queueMain(currentA widget.Action) {
me.myTree.SendToolkitPanic()
}
}()
- */
// andlabs puts this inside the gofunction over there
// probably this should be changed around here
// and only andlabs stuff should be sent there?
@@ -41,6 +76,7 @@ func queueMain(currentA widget.Action) {
processAction(&currentA)
})
}
+*/
func guiMain() {
defer func() {
@@ -79,7 +115,14 @@ func init() {
me.myTree = tree.New()
me.myTree.PluginName = "andlabs"
- me.myTree.ActionFromChannel = queueMain
+ // me.myTree.ActionFromChannel = queueMain
+
+ me.myTree.NodeAction = queueAction
+ me.myTree.Add = queueAdd
+ me.myTree.SetTitle = queueSetTitle
+ me.myTree.SetLabel = queueSetLabel
+ me.myTree.SetText = queueSetText
+ me.myTree.AddText = queueAddText
// TODO: this is messed up. run ui.Main() from the first add? Initialize it with an empty thing first?
// fake out the OS toolkit by making a fake window. This is probably needed for macos & windows
diff --git a/setText.go b/setText.go
index 9279915..0ff87c1 100644
--- a/setText.go
+++ b/setText.go
@@ -6,8 +6,8 @@ import (
"go.wit.com/widget"
)
-func setText(n *tree.Node, a *widget.Action) {
- name := widget.GetString(a.Value)
+func setText(n *tree.Node, name string) {
+ // name := widget.GetString(a.Value)
var tk *guiWidget
tk = n.TK.(*guiWidget)
@@ -21,12 +21,12 @@ func setText(n *tree.Node, a *widget.Action) {
switch n.WidgetType {
case widget.Window:
log.Log(CHANGE, "setText() Attempt to set the title to", name)
- tk.uiWindow.SetTitle(a.State.Label)
+ tk.uiWindow.SetTitle(name)
case widget.Tab:
case widget.Group:
- tk.uiGroup.SetTitle(a.State.Label)
+ tk.uiGroup.SetTitle(name)
case widget.Checkbox:
- tk.uiCheckbox.SetText(a.State.Label)
+ tk.uiCheckbox.SetText(name)
case widget.Textbox:
if tk.uiEntry != nil {
tk.uiEntry.SetText(name)
@@ -35,13 +35,13 @@ func setText(n *tree.Node, a *widget.Action) {
tk.uiMultilineEntry.SetText(name)
}
case widget.Label:
- tk.uiLabel.SetText(a.State.Label)
+ tk.uiLabel.SetText(name)
case widget.Button:
- tk.uiButton.SetText(a.State.Label)
+ tk.uiButton.SetText(name)
case widget.Slider:
- log.Log(ERROR, "setText() on slider unknown", a.ActionType, "on checkbox", n.GetProgName())
+ log.Log(ERROR, "setText() on slider unknown", n.GetProgName())
case widget.Spinner:
- log.Log(ERROR, "setText() on spinner unknown", a.ActionType, "on checkbox", n.GetProgName())
+ log.Log(ERROR, "setText() on spinner unknown", n.GetProgName())
case widget.Dropdown:
var orig int
var i int = -1
@@ -69,7 +69,7 @@ func setText(n *tree.Node, a *widget.Action) {
case widget.Combobox:
tk.uiEditableCombobox.SetText(name)
default:
- log.Log(ERROR, "plugin Send() Don't know how to setText on", n.WidgetType, "yet", a.ActionType)
+ log.Log(ERROR, "plugin Send() Don't know how to setText on", n.WidgetType, "yet")
}
log.Log(CHANGE, "setText() END with name =")
}