summaryrefslogtreecommitdiff
path: root/toolkit/democui
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/democui')
-rw-r--r--toolkit/democui/,191
-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/help.go46
-rw-r--r--toolkit/democui/keybindings.go62
-rw-r--r--toolkit/democui/log.go30
-rw-r--r--toolkit/democui/main.go67
-rw-r--r--toolkit/democui/mouse.go169
-rw-r--r--toolkit/democui/plugin.go18
-rw-r--r--toolkit/democui/structs.go127
-rw-r--r--toolkit/democui/tab.go52
-rw-r--r--toolkit/democui/view.go349
14 files changed, 0 insertions, 1376 deletions
diff --git a/toolkit/democui/, b/toolkit/democui/,
deleted file mode 100644
index 762f8eb..0000000
--- a/toolkit/democui/,
+++ /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/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/help.go b/toolkit/democui/help.go
deleted file mode 100644
index f012fef..0000000
--- a/toolkit/democui/help.go
+++ /dev/null
@@ -1,46 +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"
-
- "github.com/awesome-gocui/gocui"
-)
-
-func addHelp() {
- me.baseGui.SetManagerFunc(helplayout)
-}
-
-func helplayout(g *gocui.Gui) error {
- var err error
- maxX, _ := g.Size()
-
- help, err := g.SetView("help", maxX-32, 0, maxX-1, 12, 0)
- if err != nil {
- if !errors.Is(err, gocui.ErrUnknownView) {
- return err
- }
- help.SelBgColor = gocui.ColorGreen
- help.SelFgColor = gocui.ColorBlack
- fmt.Fprintln(help, "KEYBINDINGS")
- fmt.Fprintln(help, "Enter: Click Button")
- fmt.Fprintln(help, "Tab/Space: Switch Buttons")
- fmt.Fprintln(help, "")
- fmt.Fprintln(help, "h: Help")
- fmt.Fprintln(help, "Backspace: Delete Button")
- 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, "STDOUT: /tmp/witgui.log")
- fmt.Fprintln(help, "Ctrl-C or Q: Exit")
- if _, err := g.SetCurrentView("help"); err != nil {
- return err
- }
- }
- me.helpLabel = help
- return nil
-}
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/main.go b/toolkit/democui/main.go
deleted file mode 100644
index 19b326d..0000000
--- a/toolkit/democui/main.go
+++ /dev/null
@@ -1,67 +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 (
- "os"
-)
-
-/*
-func OnExit(f func(string)) {
- Custom = f
-}
-*/
-
-func Init() {
- log(logInfo, "Init() of democui")
- me.widgets = make(map[int]*cuiWidget)
- me.defaultWidth = 10
- me.defaultHeight = 2
- me.defaultBehavior = true
-}
-
-func Exit() {
- // TODO: exit correctly
- 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()")
-
- 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)
- }
- defer outf.Close()
-
- setOutput(outf)
- log("This is a test log entry")
-
- 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/democui/mouse.go
deleted file mode 100644
index fc74d27..0000000
--- a/toolkit/democui/mouse.go
+++ /dev/null
@@ -1,169 +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"
-
- "github.com/awesome-gocui/gocui"
-)
-
-func MouseMain() {
- g, err := gocui.NewGui(gocui.OutputNormal, true)
- if err != nil {
- panic(err)
- }
- defer g.Close()
-
- me.baseGui = g
-
- g.Cursor = true
- g.Mouse = true
-
- g.SetManagerFunc(layout)
-
- if err := defaultKeybindings(g); err != nil {
- panic(err)
- }
-
- if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) {
- panic(err)
- }
-}
-
-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")
- }
- helplayout(g)
- updateHighlightedView(g)
- 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/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/structs.go b/toolkit/democui/structs.go
deleted file mode 100644
index 37a8f28..0000000
--- a/toolkit/democui/structs.go
+++ /dev/null
@@ -1,127 +0,0 @@
-// LICENSE: same as the go language itself
-// Copyright 2023 WIT.COM
-
-// all structures and variables are local (aka lowercase)
-// since the plugin should be isolated to access only
-// by functions() to insure everything here is run
-// inside a dedicated goroutine
-
-package main
-
-import (
- "fmt"
- "sync"
- "github.com/awesome-gocui/gocui"
- "git.wit.org/wit/gui/toolkit"
-)
-
-// const delta = 1
-
-// It's probably a terrible idea to call this 'me'
-var me config
-
-type config struct {
- highest int // highest widgetId
- baseGui *gocui.Gui // the main gocui handle
- widgets map[int]*cuiWidget
- callback func(int)
- helpLabel *gocui.View
-
- defaultBehavior bool
- defaultWidth int
- defaultHeight int
- nextW int // where the next window or tab flag should go
-
- bookshelf bool // do you want things arranged in the box like a bookshelf or a stack?
- canvas bool // if set to true, the windows are a raw canvas
- menubar bool // for windows
- 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
-}
-
-/*
-// 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
-*/
-
-var (
-// g *gocui.Gui
-// Custom func(string)
-
- initialMouseX, initialMouseY, xOffset, yOffset int
- globalMouseDown, msgMouseDown, movingMsg bool
-
-// err error
-)
-
-// the gocui way
-// the logical size of the widget
-// corner starts at in the upper left corner
-type rectType struct {
- // this is the gocui way
- w0, h0, w1, h1 int // left top right bottom
-}
-
-/*
-type realSizeT struct {
- width, height int
-}
-*/
-
-
-type cuiWidget struct {
- id int // widget ID
- parentId int
- widgetType toolkit.WidgetType
-
- name string // a descriptive name of the widget
- text string // the current text being displayed
-
- visable 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
- logicalSize rectType // the logical size. Includes all the child widgets
-
- nextX int
- nextY int
-
- // horizontal=true means layout widgets like books on a bookshelf
- // horizontal=false means layout widgets like books in a stack
- horizontal bool `default:false`
-
- 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
-}
-
-// from the gocui devs:
-// Write appends a byte slice into the view's internal buffer. Because
-// View implements the io.Writer interface, it can be passed as parameter
-// of functions like fmt.Fprintf, fmt.Fprintln, io.Copy, etc. Clear must
-// be called to clear the view's buffer.
-
-func (w *cuiWidget) Write(p []byte) (n int, err error) {
- w.tainted = true
- w.writeMutex.Lock()
- defer w.writeMutex.Unlock()
- // v.makeWriteable(v.wx, v.wy)
- // v.writeRunes(bytes.Runes(p))
- fmt.Fprintln(w.v, p)
- log(logNow, "widget.Write()")
-
- return len(p), nil
-}
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()
-}