diff options
Diffstat (limited to 'toolkit/gocui')
| -rw-r--r-- | toolkit/gocui/Makefile | 3 | ||||
| -rw-r--r-- | toolkit/gocui/button.go | 37 | ||||
| -rw-r--r-- | toolkit/gocui/gocui.go (renamed from toolkit/gocui/main.go) | 61 | ||||
| -rw-r--r-- | toolkit/gocui/greeter.go | 79 | ||||
| -rw-r--r-- | toolkit/gocui/group.go | 38 | ||||
| -rw-r--r-- | toolkit/gocui/keybindings.go | 24 | ||||
| -rw-r--r-- | toolkit/gocui/newJ.go | 46 | ||||
| -rw-r--r-- | toolkit/gocui/plugin.go | 28 | ||||
| -rw-r--r-- | toolkit/gocui/views.go | 1 | ||||
| -rw-r--r-- | toolkit/gocui/widget.go | 26 | ||||
| -rw-r--r-- | toolkit/gocui/window.go | 18 |
11 files changed, 157 insertions, 204 deletions
diff --git a/toolkit/gocui/Makefile b/toolkit/gocui/Makefile index 27f23ed..597b2b2 100644 --- a/toolkit/gocui/Makefile +++ b/toolkit/gocui/Makefile @@ -6,3 +6,6 @@ build: plugin: GO111MODULE="off" go build -buildmode=plugin -o ../gocui.so + +objdump: + objdump -t ../gocui.so |less diff --git a/toolkit/gocui/button.go b/toolkit/gocui/button.go index 8fb6e05..5b41c48 100644 --- a/toolkit/gocui/button.go +++ b/toolkit/gocui/button.go @@ -7,42 +7,49 @@ import ( "strings" "github.com/awesome-gocui/gocui" + "git.wit.org/wit/gui/toolkit" ) -func (w *Widget) AddButton() { -// func (g greeting) AddButton() { +func NewButton(parentW *toolkit.Widget, w *toolkit.Widget) { log.Println("gui.gocui.AddButton()", w.Name) - addButton2(w.Name, w.Event) + addButton(w.Name) + // viewWidget[v] = w + stringWidget[w.Name] = w + listMap() } -func addButton2(name string, e func(*Widget) *Widget) { - addButton(name) -} - -func addButton(name string) error { +func addButton(name string) *gocui.View { t := len(name) + if (baseGui == nil) { + panic("WTF") + } v, err := baseGui.SetView(name, currentX, currentY, currentX+t+3, currentY+2, 0) if err == nil { - return err + log.Println("wit/gui internal plugin error", err) + return nil } if !errors.Is(err, gocui.ErrUnknownView) { - return err + log.Println("wit/gui internal plugin error", err) + return nil } v.Wrap = true fmt.Fprintln(v, " " + name) fmt.Fprintln(v, strings.Repeat("foo\n", 2)) - if _, err := baseGui.SetCurrentView(name); err != nil { - return err + currentView, err := baseGui.SetCurrentView(name) + if err != nil { + log.Println("wit/gui internal plugin error", err) + return nil } + log.Println("wit/gui addbutton() current view name =", currentView.Name()) views = append(views, name) curView = len(views) - 1 idxView += 1 currentY += 3 - if (groupSize < len(views)) { - groupSize = len(views) + if (groupSize < len(name)) { + groupSize = len(name) } - return nil + return currentView } diff --git a/toolkit/gocui/main.go b/toolkit/gocui/gocui.go index 314f5be..d614387 100644 --- a/toolkit/gocui/main.go +++ b/toolkit/gocui/gocui.go @@ -8,6 +8,9 @@ import ( "errors" "fmt" "log" + "os" + + "git.wit.org/wit/gui/toolkit" "github.com/awesome-gocui/gocui" ) @@ -22,61 +25,57 @@ var ( currentY = 2 groupSize = 0 baseGui *gocui.Gui + helpLabel *gocui.View + err error + ch chan(func ()) ) -var helpLabel *gocui.View - func Init() { - // setup log to write to a file -// logInit() - - g, err := gocui.NewGui(gocui.OutputNormal, true) - baseGui = g + baseGui, err = gocui.NewGui(gocui.OutputNormal, true) if err != nil { log.Panicln(err) } - defer g.Close() - g.Highlight = true - g.SelFgColor = gocui.ColorRed - g.SelFrameColor = gocui.ColorRed + baseGui.Highlight = true + baseGui.SelFgColor = gocui.ColorRed + baseGui.SelFrameColor = gocui.ColorRed - g.SetManagerFunc(layout) + baseGui.SetManagerFunc(layout) - if err := initKeybindings(g); err != nil { + if err := initKeybindings(baseGui); err != nil { log.Panicln(err) } - if err := newView(g); err != nil { - log.Panicln(err) - } - - addButton("hello") - addButton("world") - addButton("foo") - addGroup("blank") - addButton("bar") - addButton("bar none") - addButton("bar going") + viewWidget = make(map[*gocui.View]*toolkit.Widget) + stringWidget = make(map[string]*toolkit.Widget) - addGroup("te") - addButton("world 2") - addButton("foo 2") + ch = make(chan func()) +} - if err := baseGui.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) { - log.Panicln(err) - } +func Queue(f func()) { + log.Println("QUEUEEEEE") + f() } -func ToolkitMain() { +func Main(f func()) { + if (baseGui == nil) { + panic("WTF Main()") + } + defer baseGui.Close() + // log.Println("ADDDDDDDD BUTTTTTTTTTON") + // addButton("test 3") + f() if err := baseGui.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) { log.Panicln(err) } + baseGui.Close() + os.Exit(0) } func layout(g *gocui.Gui) error { var err error maxX, _ := g.Size() + helpLabel, err = g.SetView("help", maxX-32, 0, maxX-1, 11, 0) if err != nil { if !errors.Is(err, gocui.ErrUnknownView) { diff --git a/toolkit/gocui/greeter.go b/toolkit/gocui/greeter.go deleted file mode 100644 index e3094e5..0000000 --- a/toolkit/gocui/greeter.go +++ /dev/null @@ -1,79 +0,0 @@ -package main - -import ( - "log" - - // "errors" - // "fmt" - // "strings" - // "github.com/awesome-gocui/gocui" -) - -type greeting string - -// stores the raw toolkit internals -type toolkit struct { - id string - Name string - - OnChanged func(toolkit) -} - -// this is exported -var Greeter greeting -var Toolkit toolkit - -// func main() { -func (g greeting) Greet() { - log.Println("Hello Universe") - Init() - // ToolkitMain() -} - -func (g greeting) JcarrButton() { - log.Println("Hello GreetButton meet Universe") - addButton("Greet foo") - addButton("Greet foo 2") -} - -func addGroup(name string) { - log.Println("addGroup()", name) - currentY = 2 - currentX += groupSize + 6 -} - -func (g greeting) AddButton(name string) { -// func (g greeting) AddButton() { - log.Println("gui.gocui.AddButton()", name) - addButton(name) -} - -/* -func addButton(name string) error { - t := len(name) - v, err := baseGui.SetView(name, currentX, currentY, currentX+t+3, currentY+2, 0) - if err == nil { - return err - } - if !errors.Is(err, gocui.ErrUnknownView) { - return err - } - - v.Wrap = true - fmt.Fprintln(v, " " + name) - fmt.Fprintln(v, strings.Repeat("foo\n", 2)) - - if _, err := baseGui.SetCurrentView(name); err != nil { - return err - } - - views = append(views, name) - curView = len(views) - 1 - idxView += 1 - currentY += 3 - if (groupSize < len(views)) { - groupSize = len(views) - } - return nil -} -*/ diff --git a/toolkit/gocui/group.go b/toolkit/gocui/group.go new file mode 100644 index 0000000..7cea346 --- /dev/null +++ b/toolkit/gocui/group.go @@ -0,0 +1,38 @@ +package main + +import ( + "log" + + "git.wit.org/wit/gui/toolkit" +) + +func NewGroup(parentW *toolkit.Widget, w *toolkit.Widget) { + if (parentW == nil) { + log.Println("wit/gui plugin error. parent widget == nil") + return + } + if (w == nil) { + log.Println("wit/gui plugin error. widget == nil") + return + } + if (w.Name == "") { + w.Name = parentW.Name + } + if (w.Name == "") { + w.Name = "nil newGroup" + } + log.Println("gui.gocui.AddGroup", w.Name) + addGroup(w.Name) + stringWidget[w.Name] = w +} + +func addGroup(name string) { + log.Println("addGroup() START name =", name) + log.Println("addGroup() START groupSize =", groupSize, "currentY =", currentY, "currentX =", currentX) + + currentY = 2 + currentX += groupSize + 5 + groupSize = 0 + + log.Println("addGroup() START, RESET Y = 3, RESET X = ", currentX) +} diff --git a/toolkit/gocui/keybindings.go b/toolkit/gocui/keybindings.go index fdac1ff..69def39 100644 --- a/toolkit/gocui/keybindings.go +++ b/toolkit/gocui/keybindings.go @@ -11,6 +11,7 @@ import ( // "strings" "github.com/awesome-gocui/gocui" + "git.wit.org/wit/gui/toolkit" ) func initKeybindings(g *gocui.Gui) error { @@ -87,6 +88,21 @@ func initKeybindings(g *gocui.Gui) error { if err := g.SetKeybinding("", gocui.KeyEnter, gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error { log.Println("enter", v.Name()) + var w *toolkit.Widget + w = stringWidget[v.Name()] + if (w == nil) { + log.Println("COULD NOT FIND WIDGET", v.Name()) + } else { + log.Println("FOUND WIDGET!", w) + if (w.Custom != nil) { + w.Custom() + return nil + } + if (w.Event != nil) { + w.Event(w) + return nil + } + } return nil }); err != nil { return err @@ -105,17 +121,11 @@ func initKeybindings(g *gocui.Gui) error { }); err != nil { return err } - if err := g.SetKeybinding("", 'j', gocui.ModNone, - func(g *gocui.Gui, v *gocui.View) error { - return newJ(g) - }); err != nil { - return err - } if err := g.SetKeybinding("", 'h', gocui.ModNone, func(g *gocui.Gui, v *gocui.View) error { log.Println("help", v.Name()) tmp, _ := g.SetViewOnTop("help") - log.Println("help 2", tmp.Name(), "blah") + log.Println("help 2", tmp.Name()) // g.SetView("help", 2, 2, 30, 15, 0); g.SetCurrentView("help") // moveView(g, tmp, 0, -delta) diff --git a/toolkit/gocui/newJ.go b/toolkit/gocui/newJ.go deleted file mode 100644 index 3e04cd3..0000000 --- a/toolkit/gocui/newJ.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" - "log" - "strings" - - "github.com/awesome-gocui/gocui" -) - -var topX int = 2 -var bottomX int = 20 -var topY int = 2 -var bottomY int = 7 - -func newJ(g *gocui.Gui) error { - // maxX, maxY := g.Size() - name := fmt.Sprintf("jcarr %v foo ", idxView) - v, err := g.SetView(name, topX, topY, bottomX, bottomY, 0) - if err == nil { - return err - } - if !errors.Is(err, gocui.ErrUnknownView) { - return err - } - - v.Wrap = true - fmt.Fprintln(v, name) - fmt.Fprintln(v, strings.Repeat("foo\n", 2)) - // fmt.Fprintln(v, strings.Repeat(name+" ", 30)) - log.Println("newJ added a new view", v.Name()) - - if _, err := g.SetCurrentView(name); err != nil { - return err - } - - views = append(views, name) - curView = len(views) - 1 - idxView += 1 - return nil -} diff --git a/toolkit/gocui/plugin.go b/toolkit/gocui/plugin.go new file mode 100644 index 0000000..5be26f3 --- /dev/null +++ b/toolkit/gocui/plugin.go @@ -0,0 +1,28 @@ +package main + +import ( + "log" + + "git.wit.org/wit/gui/toolkit" + + "github.com/awesome-gocui/gocui" +) + +// 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 + +func Quit() { + baseGui.Close() +} + +// This lists out the know mappings +func listMap() { + for v, w := range viewWidget { + log.Println("view =", v.Name, "widget name =", w.Name) + } + for s, w := range stringWidget { + log.Println("string =", s, "widget =", w) + } +} + diff --git a/toolkit/gocui/views.go b/toolkit/gocui/views.go index 6c9c65d..defe2b2 100644 --- a/toolkit/gocui/views.go +++ b/toolkit/gocui/views.go @@ -11,6 +11,7 @@ import ( "strings" "github.com/awesome-gocui/gocui" + // "git.wit.org/wit/gui/toolkit" ) func newView(g *gocui.Gui) error { diff --git a/toolkit/gocui/widget.go b/toolkit/gocui/widget.go deleted file mode 100644 index 758ac38..0000000 --- a/toolkit/gocui/widget.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -// passes information between the toolkit library (plugin) - -// All Toolkit interactions should be done via a channel or Queue() - -// This is the only thing that is passed between the toolkit plugin - -// what names should be used? This is not part of [[Graphical Widget]] -// Event() seems like a good name. -// Could a protobuf be used here? (Can functions be passed?) -type Widget struct { - i int - s string - - Name string - Width int - Height int - - Event func(*Widget) *Widget - - // Probably deprecate these - OnChanged func(*Widget) - Custom func(*Widget) - OnExit func(*Widget) -} diff --git a/toolkit/gocui/window.go b/toolkit/gocui/window.go new file mode 100644 index 0000000..b2d241d --- /dev/null +++ b/toolkit/gocui/window.go @@ -0,0 +1,18 @@ +package main + +import ( + "log" + + "git.wit.org/wit/gui/toolkit" +) + +func NewWindow(w *toolkit.Widget) { + if (w == nil) { + log.Println("wit/gui plugin error. widget == nil") + return + } + if (w.Name == "") { + w.Name = "nil newWindow" + } + log.Println("gui.gocui.AddWindow", w.Name) +} |
