summaryrefslogtreecommitdiff
path: root/structs.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-02-25 14:05:25 -0600
committerJeff Carr <[email protected]>2023-02-25 14:05:25 -0600
commitf3bb68396afa7452ecf1c8d4744c825a9d81057c (patch)
tree00b55a17cee7a8e2f795c479a84a844779993c1c /structs.go
parent355e5ec968427c2b07b78fec12224f31a65df740 (diff)
The debugging window is finally useful
the gui enabled debugging works --gui-debug works from the command line The debug window can now select things debugging now includes widget types all the debug flags work finally working debugging flags via gui checkboxes add debian packaging rules use log() in the toolkit use a standard log() to simplify debugging flags add reference to 'GO Style Guide' use the same LICENSE from the GO developers. TODO: make this threadsafe TODO: fix plugin stuff Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'structs.go')
-rw-r--r--structs.go181
1 files changed, 21 insertions, 160 deletions
diff --git a/structs.go b/structs.go
index 2b37ee0..271bc0b 100644
--- a/structs.go
+++ b/structs.go
@@ -1,8 +1,6 @@
package gui
import (
- "log"
- "reflect"
"git.wit.org/wit/gui/toolkit"
)
@@ -10,56 +8,23 @@ import (
// All GUI Data Structures and functions that are external
// within the toolkit/ abstraction layer
//
-// More than one Window is not supported in a cross platform
-// sense & may never be. On many toolkits you have to have 'tabs'
-// Native Windows and MacOS toolkits work with tabs
+// More than one Window does not exist in every GUI situtaion and
+// can never be. On many toolkits you have to have 'tabs', like
+// Native Windows and MacOS toolkits
//
-// If that is the case, this code should abstract the concept of
-// windows and make everything 'tabs'
+// If that is the case, this code abstracts the concept of
+// windows and makes each window a 'tabs' in a single window.
+//
+// Reminder from Goals: This is for simple GUI's.
+// For example, a "Mouse Control Panel" not the GIMP or blender.
//
var Config GuiConfig
-func GetDebug () bool {
- return Config.Debug.Debug
-}
-
-func SetDebug (s bool) {
- Config.Debug.Debug = s
- // also set these
- Config.Debug.Dump = s
- Config.Debug.Node = s
-}
-
-func GetDebugToolkit () bool {
- return Config.Debug.Toolkit
-}
-
-func SetDebugToolkit (s bool) {
- Config.Debug.Toolkit = s
-}
-
-func ShowDebugValues() {
- log.Println("\t wit/gui Debug =", Config.Debug.Debug)
- log.Println("\t wit/gui DebugDump =", Config.Debug.Dump)
- log.Println("\t wit/gui DebugNode =", Config.Debug.Node)
- log.Println("\t wit/gui DebugTabs =", Config.Debug.Tabs)
- log.Println("\t wit/gui DebugPlugin =", Config.Debug.Plugin)
- log.Println("\t wit/gui DebugChange =", Config.Debug.Change)
- log.Println("\t wit/gui DebugToolkit =", Config.Debug.Toolkit)
-}
-
-// This struct can be used with go-arg
-type GuiDebug struct {
- // These are global debugging settings
- // TODO: move to a standard logging system
- Debug bool
- Dump bool
- Node bool
- Tabs bool
- Plugin bool
- Change bool `help:"debug mouse clicks and keyboard input"`
- Toolkit bool `help:"debug toolkit"`
+// This struct can be used with the go-arg package
+type GuiArgs struct {
+ Toolkit []string `arg:"--toolkit" help:"The order to attempt loading plugins [gocui,andlabs,gtk,qt]"`
+ GuiDebug bool `arg:"--gui-debug" help:"debug the GUI"`
}
type GuiConfig struct {
@@ -72,33 +37,32 @@ type GuiConfig struct {
Height int
Exit func(*Node)
- Debug GuiDebug
-
// hacks
depth int
counter int // used to make unique ID's
prefix string
}
-// The Node is simply the name and the size of whatever GUI element exists
+// The Node is a binary tree. This is how all GUI elements are stored
+// simply the name and the size of whatever GUI element exists
type Node struct {
id int
+ Widget toolkit.Widget
+
// deprecate these and use toolkit.Widget
Name string
Width int
Height int
- Widget toolkit.Widget
-
// this function is run when there are mouse or keyboard events
OnChanged func(*Node)
parent *Node
- // TODO: make children a double linked list since some toolkits require order (?)
children []*Node
- // things that may not really be needed (?)
+ // is keeping
+ // deprecate these things if they don't really need to exist
custom func()
checked bool
text string
@@ -112,115 +76,12 @@ func (n *Node) Window() *Node {
return n.parent
}
-func (n *Node) Dump() {
- if ! Config.Debug.Dump {
- return
- }
- IndentPrintln("NODE DUMP START")
- IndentPrintln("id = ", n.id)
- IndentPrintln("Name = ", n.Name)
- IndentPrintln("Width = ", n.Width)
- IndentPrintln("Height = ", n.Height)
-
- if (n.parent == nil) {
- IndentPrintln("parent = nil")
- } else {
- IndentPrintln("parent.id =", n.parent.id)
- }
- if (n.children != nil) {
- IndentPrintln("children = ", n.children)
- }
- if (n.custom != nil) {
- IndentPrintln("custom = ", n.custom)
- }
- IndentPrintln("checked = ", n.checked)
- if (n.OnChanged != nil) {
- IndentPrintln("OnChanged = ", n.OnChanged)
- }
- IndentPrintln("text = ", reflect.ValueOf(n.text).Kind(), n.text)
- IndentPrintln("NODE DUMP END")
-}
-
func (n *Node) Append(child *Node) {
n.children = append(n.children, child)
- if (Config.Debug.Debug) {
- log.Println("child node:")
+ if (debugGui) {
+ log(debugNode, "child node:")
child.Dump()
- log.Println("parent node:")
+ log(debugNode, "parent node:")
n.Dump()
}
- // time.Sleep(3 * time.Second)
-}
-
-var listChildrenParent *Node
-var listChildrenDepth int = 0
-var defaultPadding = " "
-
-func IndentPrintln(a ...interface{}) {
- indentPrintln(listChildrenDepth, defaultPadding, a)
-}
-
-func indentPrintln(depth int, format string, a ...interface{}) {
- var tabs string
- for i := 0; i < depth; i++ {
- tabs = tabs + format
- }
-
- // newFormat := tabs + strconv.Itoa(depth) + " " + format
- newFormat := tabs + format
- log.Println(newFormat, a)
-}
-
-func (n *Node) ListChildren(dump bool) {
- indentPrintln(listChildrenDepth, defaultPadding, n.id, n.Width, n.Height, n.Name)
-
- if (dump == true) {
- n.Dump()
- }
- if len(n.children) == 0 {
- if (n.parent == nil) {
- } else {
- if (Config.Debug.Node) {
- log.Println("\t\t\tparent =",n.parent.id)
- }
- if (listChildrenParent != nil) {
- if (Config.Debug.Node) {
- log.Println("\t\t\tlistChildrenParent =",listChildrenParent.id)
- }
- if (listChildrenParent.id != n.parent.id) {
- log.Fatalln("parent.child does not match child.parent")
- }
- }
- }
- if (Config.Debug.Node) {
- log.Println("\t\t", n.id, "has no children")
- }
- return
- }
- for _, child := range n.children {
- // log.Println("\t\t", child.id, child.Width, child.Height, child.Name)
- if (child.parent != nil) {
- if (Config.Debug.Node) {
- log.Println("\t\t\tparent =",child.parent.id)
- }
- } else {
- log.Println("\t\t\tno parent")
- panic("no parent")
- }
- if (dump == true) {
- child.Dump()
- }
- if (Config.Debug.Node) {
- if (child.children == nil) {
- log.Println("\t\t", child.id, "has no children")
- } else {
- log.Println("\t\t\tHas children:", child.children)
- }
- }
- listChildrenParent = n
- listChildrenDepth += 1
- child.ListChildren(dump)
- listChildrenDepth -= 1
- }
- return
}