From eca967bf612da11b10bea965e475816ad6a7fa41 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 3 Apr 2023 11:52:54 -0500 Subject: [PATCH] gocui: more color cleanups Signed-off-by: Jeff Carr --- toolkit/gocui/, | 191 ----------------------------------- toolkit/gocui/click.go | 10 +- toolkit/gocui/color.go | 16 +-- toolkit/gocui/common.go | 7 ++ toolkit/gocui/debug.go | 1 - toolkit/gocui/keybindings.go | 9 ++ toolkit/gocui/place.go | 19 ++-- toolkit/gocui/plugin.go | 2 +- toolkit/gocui/structs.go | 3 +- toolkit/gocui/tab.go | 25 ++++- toolkit/gocui/view.go | 4 +- 11 files changed, 65 insertions(+), 222 deletions(-) delete mode 100644 toolkit/gocui/, diff --git a/toolkit/gocui/, b/toolkit/gocui/, deleted file mode 100644 index 762f8eb..0000000 --- a/toolkit/gocui/, +++ /dev/null @@ -1,191 +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" - "log" - - "github.com/awesome-gocui/gocui" -) - -func main() { - g, err := gocui.NewGui(gocui.OutputNormal, true) - if err != nil { - log.Panicln(err) - } - defer g.Close() - - g.Cursor = false - g.Mouse = true - - g.SetManagerFunc(layout) - - if err := keybindings(g); err != nil { - log.Panicln(err) - } - - if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) { - log.Panicln(err) - } -} - -var initialMouseX, initialMouseY, xOffset, yOffset int -var globalMouseDown, msgMouseDown, movingMsg bool - -func layout(g *gocui.Gui) error { - maxX, maxY := g.Size() - if _, err := g.View("msg"); msgMouseDown && err == nil { - moveMsg(g) - } - if v, err := g.SetView("global", -1, -1, maxX, maxY, 0); err != nil { - if !errors.Is(err, gocui.ErrUnknownView) { - return err - } - v.Frame = false - } - if v, err := g.SetView("but1", 2, 2, 22, 7, 0); err != nil { - if !errors.Is(err, gocui.ErrUnknownView) { - return err - } - v.SelBgColor = gocui.ColorGreen - v.SelFgColor = gocui.ColorBlack - fmt.Fprintln(v, "Button 1 - line 1") - fmt.Fprintln(v, "Button 1 - line 2") - fmt.Fprintln(v, "Button 1 - line 3") - fmt.Fprintln(v, "Button 1 - line 4") - if _, err := g.SetCurrentView("but1"); err != nil { - return err - } - } - if v, err := g.SetView("but2", 24, 2, 44, 4, 0); err != nil { - if !errors.Is(err, gocui.ErrUnknownView) { - return err - } - v.SelBgColor = gocui.ColorGreen - v.SelFgColor = gocui.ColorBlack - fmt.Fprintln(v, "Button 2 - line 1") - } - updateHighlightedView(g) - return nil -} - -func keybindings(g *gocui.Gui) error { - if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { - return err - } - for _, n := range []string{"but1", "but2"} { - 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 - } - return nil -} - -func quit(g *gocui.Gui, v *gocui.View) error { - return gocui.ErrQuit -} - -func showMsg(g *gocui.Gui, v *gocui.View) error { - var l string - var err error - - 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) - } - return nil -} - -func updateHighlightedView(g *gocui.Gui) { - mx, my := g.MousePosition() - for _, view := range g.Views() { - view.Highlight = false - } - if v, err := g.ViewByPosition(mx, my); err == nil { - v.Highlight = true - } -} - -func moveMsg(g *gocui.Gui) { - mx, my := g.MousePosition() - if !movingMsg && (mx != initialMouseX || my != initialMouseY) { - movingMsg = true - } - g.SetView("msg", mx-xOffset, my-yOffset, mx-xOffset+20, my-yOffset+2, 0) -} - -func msgDown(g *gocui.Gui, v *gocui.View) error { - initialMouseX, initialMouseY = g.MousePosition() - if vx, vy, _, _, err := g.ViewPosition("msg"); err == nil { - xOffset = initialMouseX - vx - yOffset = initialMouseY - vy - msgMouseDown = true - } - return nil -} - -func globalDown(g *gocui.Gui, v *gocui.View) error { - mx, my := g.MousePosition() - if vx0, vy0, vx1, vy1, err := g.ViewPosition("msg"); err == nil { - if mx >= vx0 && mx <= vx1 && my >= vy0 && my <= vy1 { - return msgDown(g, v) - } - } - globalMouseDown = true - maxX, _ := g.Size() - msg := fmt.Sprintf("Mouse down at: %d,%d", mx, my) - x := mx - len(msg)/2 - if x < 0 { - x = 0 - } else if x+len(msg)+1 > maxX-1 { - x = maxX - 1 - len(msg) - 1 - } - if v, err := g.SetView("globalDown", x, my-1, x+len(msg)+1, my+1, 0); err != nil { - if !errors.Is(err, gocui.ErrUnknownView) { - return err - } - v.WriteString(msg) - } - return nil -} - -func mouseUp(g *gocui.Gui, v *gocui.View) error { - if msgMouseDown { - msgMouseDown = false - if movingMsg { - movingMsg = false - return nil - } else { - g.DeleteView("msg") - } - } else if globalMouseDown { - globalMouseDown = false - g.DeleteView("globalDown") - } - return nil -} diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go index 9dc1a42..bcc6b85 100644 --- a/toolkit/gocui/click.go +++ b/toolkit/gocui/click.go @@ -18,15 +18,14 @@ func (w *cuiWidget) doWidgetClick() { 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) + + // w.toggleTree() + // me.rootNode.redoColor(true) case toolkit.Box: w.showWidgetPlacement(logNow, "drawTree()") if (w.horizontal) { @@ -63,8 +62,7 @@ func (w *cuiWidget) drawTree(draw bool) { w.textResize() w.drawView() } else { - me.baseGui.DeleteView(w.cuiName) - w.v = nil + w.deleteView() } for _, child := range w.children { diff --git a/toolkit/gocui/color.go b/toolkit/gocui/color.go index efe44dd..c1216f0 100644 --- a/toolkit/gocui/color.go +++ b/toolkit/gocui/color.go @@ -8,13 +8,14 @@ import ( // 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) +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") + log(logError, "setDefaultWidgetColor() failed on view == nil") return } + sleep(.05) // v.BgColor = gocui.GetColor("#FFAA55") // Dark Purple // v.BgColor = gocui.GetColor("#88AA55") // heavy purple // v.BgColor = gocui.GetColor("#111111") // crazy red @@ -83,13 +84,13 @@ func (w *cuiWidget) SetColor(c string) { } } -func (w *cuiWidget) SetDefaultHighlight() { +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 + w.v.SelBgColor = gocui.ColorGreen + w.v.SelFgColor = gocui.ColorBlack } func randColor() gocui.Attribute { @@ -105,7 +106,8 @@ func (w *cuiWidget) redoColor(draw bool) { } sleep(.05) - w.SetDefaultWidgetColor() + w.setDefaultHighlight() + // w.setDefaultWidgetColor() for _, child := range w.children { child.redoColor(draw) diff --git a/toolkit/gocui/common.go b/toolkit/gocui/common.go index 2fe82cb..08f8e3c 100644 --- a/toolkit/gocui/common.go +++ b/toolkit/gocui/common.go @@ -70,6 +70,13 @@ func setupCtrlDownWidget() { // me.rootNode.Append(w) } +func (w *cuiWidget) deleteView() { + if (w.v != nil) { + me.baseGui.DeleteView(w.cuiName) + } + w.v = nil +} + func (n *cuiWidget) Append(child *cuiWidget) { n.children = append(n.children, child) // child.parent = n diff --git a/toolkit/gocui/debug.go b/toolkit/gocui/debug.go index 3ecdfdd..d6ba494 100644 --- a/toolkit/gocui/debug.go +++ b/toolkit/gocui/debug.go @@ -22,7 +22,6 @@ func actionDump(b bool, a *toolkit.Action) { } func (w *cuiWidget) dumpTree(draw bool) { - log(logNow, "dumpTree() START", w) if (w == nil) { return } diff --git a/toolkit/gocui/keybindings.go b/toolkit/gocui/keybindings.go index 18d3097..c449906 100644 --- a/toolkit/gocui/keybindings.go +++ b/toolkit/gocui/keybindings.go @@ -38,6 +38,8 @@ func defaultKeybindings(g *gocui.Gui) error { return nil } +var showDebug bool = true + // dump out the widgets func addDebugKeys(g *gocui.Gui) { // dump all widget info to the log @@ -45,6 +47,13 @@ func addDebugKeys(g *gocui.Gui) { func(g *gocui.Gui, v *gocui.View) error { log(logNow, "gocui.SetKeyBinding() dumpTree() START") me.rootNode.dumpTree(true) + if (showDebug) { + me.rootNode.showFake() + showDebug = false + } else { + me.rootNode.hideFake() + showDebug = true + } return nil }) diff --git a/toolkit/gocui/place.go b/toolkit/gocui/place.go index 905ebed..9445e40 100644 --- a/toolkit/gocui/place.go +++ b/toolkit/gocui/place.go @@ -5,10 +5,10 @@ import ( "git.wit.org/wit/gui/toolkit" ) -var fakeStartWidth int = 80 -var fakeStartHeight int = 0 +var fakeStartWidth int = 10 +var fakeStartHeight int = 3 func (w *cuiWidget) setFake() { - if (w.visable) { + if (w.isFake == false) { return } t := len(w.name) @@ -21,29 +21,30 @@ func (w *cuiWidget) setFake() { w.realSize.h1 = w.realSize.h0 + w.realHeight fakeStartHeight += 3 if (fakeStartHeight > 24) { - fakeStartHeight = 0 + fakeStartHeight = 3 fakeStartWidth += 20 } w.showWidgetPlacement(logNow, "setFake()") } func findPlace(w *cuiWidget) { + w.isFake = false w.visable = true switch w.widgetType { case toolkit.Root: - w.visable = false + w.isFake = true w.setFake() case toolkit.Flag: - w.visable = false + w.isFake = true w.setFake() case toolkit.Grid: - w.visable = false + w.isFake = true w.setFake() case toolkit.Box: - w.visable = false + w.isFake = true w.setFake() default: - w.redoBox(true) + // w.redoBox(true) } } diff --git a/toolkit/gocui/plugin.go b/toolkit/gocui/plugin.go index 7c4eee5..01579ab 100644 --- a/toolkit/gocui/plugin.go +++ b/toolkit/gocui/plugin.go @@ -58,7 +58,7 @@ func (w *cuiWidget) SetText(text string) { w.text = text w.s = text w.textResize() - me.baseGui.DeleteView(w.cuiName) + w.deleteView() w.drawView() } diff --git a/toolkit/gocui/structs.go b/toolkit/gocui/structs.go index a3f0207..2b91de4 100644 --- a/toolkit/gocui/structs.go +++ b/toolkit/gocui/structs.go @@ -87,7 +87,8 @@ type cuiWidget struct { vals []string // dropdown menu options - visable bool // widget types like 'box' are 'false' + visable bool // track if it's currently supposed to be shown + isFake bool // widget types like 'box' are 'false' realWidth int // the real width realHeight int // the real height realSize rectType // the display size of this widget diff --git a/toolkit/gocui/tab.go b/toolkit/gocui/tab.go index 42e5127..0a0656e 100644 --- a/toolkit/gocui/tab.go +++ b/toolkit/gocui/tab.go @@ -16,16 +16,31 @@ func (w *cuiWidget) hideWidgets() { case toolkit.Box: case toolkit.Grid: default: - if (w.v != nil) { - me.baseGui.DeleteView(w.cuiName) - w.v = nil - } + w.deleteView() } for _, child := range w.children { child.hideWidgets() } } +func (w *cuiWidget) hideFake() { + if (w.isFake) { + w.deleteView() + } + for _, child := range w.children { + child.hideFake() + } +} + +func (w *cuiWidget) showFake() { + if (w.isFake) { + w.drawView() + } + for _, child := range w.children { + child.showFake() + } +} + func (w *cuiWidget) showWidgets() { w.drawView() for _, child := range w.children { @@ -74,7 +89,7 @@ func (w *cuiWidget) redoTabs(draw bool) { me.rootNode.logicalSize.w1 = w.realSize.w1 + 1 me.rootNode.logicalSize.h1 = 0 - me.baseGui.DeleteView(w.cuiName) + w.deleteView() w.v = nil w.drawView() w.showWidgetPlacement(logNow, "redoTabs()") diff --git a/toolkit/gocui/view.go b/toolkit/gocui/view.go index d1d4b51..4b73bb0 100644 --- a/toolkit/gocui/view.go +++ b/toolkit/gocui/view.go @@ -69,10 +69,12 @@ func (w *cuiWidget) drawView() { w.v, err = me.baseGui.SetView(w.cuiName, a, b, c, d, 0) if err == nil { + w.showWidgetPlacement(logError, "drawView()") log(logError, "drawView() internal plugin error err = nil") return } if !errors.Is(err, gocui.ErrUnknownView) { + w.showWidgetPlacement(logError, "drawView()") log(logError, "drawView() internal plugin error error.IS()", err) return } @@ -82,5 +84,5 @@ func (w *cuiWidget) drawView() { w.v.Wrap = true fmt.Fprintln(w.v, " " + w.text) - // w.SetDefaultWidgetColor() + w.setDefaultWidgetColor() }