summaryrefslogtreecommitdiff
path: root/toolkit/gocui
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/gocui')
-rw-r--r--toolkit/gocui/Makefile3
-rw-r--r--toolkit/gocui/button.go37
-rw-r--r--toolkit/gocui/gocui.go (renamed from toolkit/gocui/main.go)61
-rw-r--r--toolkit/gocui/greeter.go79
-rw-r--r--toolkit/gocui/group.go38
-rw-r--r--toolkit/gocui/keybindings.go24
-rw-r--r--toolkit/gocui/newJ.go46
-rw-r--r--toolkit/gocui/plugin.go28
-rw-r--r--toolkit/gocui/views.go1
-rw-r--r--toolkit/gocui/widget.go26
-rw-r--r--toolkit/gocui/window.go18
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)
+}