diff options
| author | Jeff Carr <[email protected]> | 2023-12-31 07:40:53 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2023-12-31 07:40:53 -0600 |
| commit | 92441e8c635aa3e1d1f148e4780c0c323f4b0f95 (patch) | |
| tree | 7170a290962840af2486316c224462d52ddc3e0c | |
| parent | 50f41a3ec5441396666e1108183ac02363c4bd18 (diff) | |
continue move to remove tabs
Signed-off-by: Jeff Carr <[email protected]>
| -rw-r--r-- | common.go | 37 | ||||
| -rw-r--r-- | debugFlags.go | 4 | ||||
| -rw-r--r-- | debugGochan.go | 13 | ||||
| -rw-r--r-- | debugGolang.go | 13 | ||||
| -rw-r--r-- | debugWidget.go | 2 | ||||
| -rw-r--r-- | debugWindow.go | 26 | ||||
| -rw-r--r-- | gadgets/basicDropdown.go | 79 | ||||
| -rw-r--r-- | label.go | 2 | ||||
| -rw-r--r-- | structs.go | 3 |
9 files changed, 132 insertions, 47 deletions
@@ -5,6 +5,7 @@ package gui import ( "regexp" "go.wit.com/gui/toolkit" + newlog "go.wit.com/log" ) // functions for handling text related GUI elements @@ -34,7 +35,7 @@ func (n *Node) Disable() *Node { } func (n *Node) Add(str string) { - log(debugGui, "gui.Add() value =", str) + newlog.Log(debugGui, "gui.Add() value =", str) n.S = str @@ -43,7 +44,7 @@ func (n *Node) Add(str string) { } func (n *Node) AddText(str string) { - log(debugChange, "AddText() value =", str) + newlog.Log(debugChange, "AddText() value =", str) n.Text = str n.S = str @@ -53,7 +54,7 @@ func (n *Node) AddText(str string) { } func (n *Node) SetText(text string) *Node { - log(debugChange, "SetText() value =", text) + newlog.Log(debugChange, "SetText() value =", text) n.Text = text n.S = text @@ -66,11 +67,11 @@ func (n *Node) SetText(text string) *Node { func (n *Node) SetNext(w int, h int) { n.NextW = w n.NextH = h - log(debugNow, "SetNext() w,h =", n.NextW, n.NextH) + newlog.Log(debugNow, "SetNext() w,h =", n.NextW, n.NextH) } func (n *Node) Set(val any) { - log(debugChange, "Set() value =", val) + newlog.Log(debugChange, "Set() value =", val) switch v := val.(type) { case bool: @@ -81,7 +82,7 @@ func (n *Node) Set(val any) { case int: n.I = val.(int) default: - log(debugError, "Set() unknown type =", v) + newlog.Log(debugError, "Set() unknown type =", v) } a := newAction(n, toolkit.Set) @@ -98,7 +99,13 @@ func (n *Node) AppendText(str string) { } func (n *Node) GetText() string { - return n.S + if (n.S != n.Text) { + newlog.Warn("GetText() is screwed up. TODO: fix this dumb crap") + } + if (n.S != "") { + return n.S + } + return n.Text } /* @@ -107,7 +114,7 @@ isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString for _, username := range []string{"userone", "user2", "user-three"} { if !isAlpha(username) { - log(debugGui, "%q is not valid\n", username) + newlog.Log(debugGui, "%q is not valid\n", username) } } @@ -127,11 +134,11 @@ func normalizeInt(s string) string { // reg, err := regexp.Compile("[^a-zA-Z0-9]+") reg, err := regexp.Compile("[^0-9]+") if err != nil { - log(debugGui, "normalizeInt() regexp.Compile() ERROR =", err) + newlog.Log(debugGui, "normalizeInt() regexp.Compile() ERROR =", err) return s } clean := reg.ReplaceAllString(s, "") - log(debugGui, "normalizeInt() s =", clean) + newlog.Log(debugGui, "normalizeInt() s =", clean) return clean } @@ -139,9 +146,9 @@ func commonCallback(n *Node) { // TODO: make all of this common code to all the widgets // This might be common everywhere finally (2023/03/01) if (n.Custom == nil) { - log(debugChange, "Not Running n.Custom(n) == nil") + newlog.Log(debugChange, "Not Running n.Custom(n) == nil") } else { - log(debugChange, "Running n.Custom(n)") + newlog.Log(debugChange, "Running n.Custom(n)") n.Custom() } } @@ -183,7 +190,7 @@ func (n *Node) Expand() *Node { // myFunnyWindow = myGui.NewWindow("Hello").Standard().SetText("Hola") func (n *Node) Window(title string) *Node { - log(debugError, "Window()", n) + newlog.Log(debugError, "Window()", n) return n.NewWindow(title) } @@ -191,12 +198,12 @@ func (n *Node) Window(title string) *Node { // should be the default way /* func (n *Node) Standard() *Node { - log(debugInfo, "Standard() not implemented yet") + newlog.Log(debugInfo, "Standard() not implemented yet") return n } func (n *Node) SetMargin() *Node { - log(debugError, "DoMargin() not implemented yet") + newlog.Log(debugError, "DoMargin() not implemented yet") return n } */ diff --git a/debugFlags.go b/debugFlags.go index db1586a..df5f7b2 100644 --- a/debugFlags.go +++ b/debugFlags.go @@ -41,7 +41,7 @@ func (p *Node) NewLogFlag(name string) *LogSettings { // Let's you toggle on and off the various types of debugging output // These checkboxes should be in the same order as the are printed -func (n *Node) DebugFlags(makeWindow bool) { +func (n *Node) DebugFlags() { var w, g *Node logGadgets := make(map[string]*LogSettings) @@ -49,7 +49,7 @@ func (n *Node) DebugFlags(makeWindow bool) { // Either: // make a new window // make a new tab in the existing window - if (makeWindow) { + if (n.UseTabs()) { w = me.rootNode.NewWindow("Debug Flags") w.Custom = w.StandardClose w = w.NewBox("hBox", true) diff --git a/debugGochan.go b/debugGochan.go index 5ac07a8..acbe624 100644 --- a/debugGochan.go +++ b/debugGochan.go @@ -11,18 +11,11 @@ import ( var debugWG *sync.WaitGroup var debugNumberChan chan int -func (n *Node) DebugGoChannels(makeWindow bool) { +func (n *Node) DebugGoChannels() { var w, g *Node - // Either: - // make a new window - // make a new tab in the existing window - if (makeWindow) { - w = me.rootNode.NewWindow("Debug GO Channels") - w.Custom = w.StandardClose - } else { - w = n.NewTab("Chan") - } + w = n.NewWindow("Debug GO Channels") + w.Custom = w.StandardClose g = w.NewGroup("Channel stuff") diff --git a/debugGolang.go b/debugGolang.go index ac0b929..fb1fb07 100644 --- a/debugGolang.go +++ b/debugGolang.go @@ -9,18 +9,11 @@ import ( "runtime/pprof" ) -func (n *Node) DebugGolangWindow(makeWindow bool) { +func (n *Node) DebugGolangWindow() { var w, g, og, outputTextbox *Node - // Either: - // make a new window - // make a new tab in the existing window - if (makeWindow) { - w = me.rootNode.NewWindow("GO") - w.Custom = w.StandardClose - } else { - w = n.NewTab("GOLANG") - } + w = n.NewWindow("GO") + w.Custom = w.StandardClose g = w.NewGroup("Language Internals") diff --git a/debugWidget.go b/debugWidget.go index d290e59..f20861c 100644 --- a/debugWidget.go +++ b/debugWidget.go @@ -59,7 +59,7 @@ func DebugWidgetWindow(w *Node) { // Either: // make a new window // make a new tab in the existing window - if (makeTabs) { + if (me.rootNode.UseTabs()) { bugWidget = me.rootNode.NewWindow("Widgets") bugWidget.Custom = bugWidget.StandardClose } else { diff --git a/debugWindow.go b/debugWindow.go index 2538fe5..f17b130 100644 --- a/debugWindow.go +++ b/debugWindow.go @@ -8,8 +8,6 @@ import ( // main debugging window var bugWin *Node -// if there should be new windows or just tabs -var makeTabs bool = true var mapWindows map[string]*Node var checkd, checkdn, checkdt, checkdtk, lb1, lb2 *Node @@ -21,12 +19,22 @@ var myButton *Node func DebugWindow() { bugWin = me.rootNode.NewWindow("go.wit.com/gui debug window").DebugTab("Debug Tab") bugWin.Custom = bugWin.StandardClose - // bugWin.DebugTab("Debug Tab") if newlog.ArgDebug() { - bugWin.DebugFlags(true) + newlog.SetTmp() + bugWin.DebugFlags() } } +// should the debugging windows be new windows or tabs +// var makeTabs bool = true +func (n *Node) UseTabs() bool { + return me.makeTabs +} + +func (n *Node) SetTabs(b bool) { + me.makeTabs = b +} + func (n *Node) DebugTab(title string) *Node { var newN, gog, g1 *Node // var logSettings *gadgets.LogSettings @@ -40,23 +48,23 @@ func (n *Node) DebugTab(title string) *Node { // generally useful debugging cb := gog.NewCheckbox("Seperate windows") cb.Custom = func() { - makeTabs = cb.B log(debugGui, "Custom() n.widget =", cb.Name, cb.B) + n.SetTabs(cb.B) } - makeTabs = false cb.Set(false) + n.SetTabs(false) gog.NewButton("logging", func () { - bugWin.DebugFlags(makeTabs) + bugWin.DebugFlags() }) gog.NewButton("Debug Widgets", func () { DebugWidgetWindow(newN) }) gog.NewButton("GO Language Internals", func () { - bugWin.DebugGolangWindow(makeTabs) + bugWin.DebugGolangWindow() }) gog.NewButton("GO Channels debug", func () { - bugWin.DebugGoChannels(makeTabs) + bugWin.DebugGoChannels() }) gog.NewLabel("Force Quit:") diff --git a/gadgets/basicDropdown.go b/gadgets/basicDropdown.go new file mode 100644 index 0000000..d64aed7 --- /dev/null +++ b/gadgets/basicDropdown.go @@ -0,0 +1,79 @@ +/* + A Labeled Dropdown widget: + + ----------------------------- + | | | + | Food: | <dropdown> | + | | | + ----------------------------- + + This being a 'Basic Dropdown', the dropdown names must be unique +*/ +package gadgets + +import ( + "go.wit.com/log" + "go.wit.com/gui" +) + +type BasicDropdown struct { + ready bool + name string + + parent *gui.Node // parent widget + l *gui.Node // label widget + d *gui.Node // dropdown widget + + value string + label string + + Custom func() +} + +func (d *BasicDropdown) Get() string { + if ! d.Ready() {return ""} + return d.d.GetText() +} + +// Returns true if the status is valid +func (d *BasicDropdown) Ready() bool { + if d == nil {return false} + return d.ready +} + +func (d *BasicDropdown) Add(value string) { + if ! d.Ready() {return} + log.Println("BasicDropdown.Set() =", value) + d.d.AddDropdownName(value) + return +} + +func (d *BasicDropdown) Set(value string) bool { + if ! d.Ready() {return false} + log.Println("BasicDropdown.Set() =", value) + d.l.SetText(value) + d.value = value + return true +} + +func NewBasicDropdown(p *gui.Node, name string) *BasicDropdown { + d := BasicDropdown { + parent: p, + name: name, + ready: false, + } + + // various timeout settings + d.l = p.NewLabel(name) + d.d = p.NewDropdown("") + d.d.Custom = func() { + d.value = d.Get() + log.Println("BasicDropdown.Custom() user changed value to =", d.value) + if d.Custom != nil { + d.Custom() + } + } + + d.ready = true + return &d +} @@ -7,6 +7,8 @@ import ( func (parent *Node) NewLabel(text string) *Node { newNode := parent.newNode(text, toolkit.Label) a := newAction(newNode, toolkit.Add) + a.Text = text + a.S = text sendAction(a) return newNode } @@ -29,6 +29,9 @@ type guiConfig struct { // This is the master node. The Binary Tree starts here rootNode *Node + // if the user prefers new windows or 'windows within windows' tabs + makeTabs bool + // A node off of rootNode for passing debugging flags flag *Node |
