clean and rename examples
fix syntax try new goreadme remove autogenerated go readme.md Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
fe6a8dd969
commit
eab47f738d
|
@ -3,14 +3,18 @@
|
|||
# ignore compiled plugins
|
||||
*.so
|
||||
|
||||
cmds/buttonplugin/buttonplugin
|
||||
cmds/console-ui-helloworld/console-ui-helloworld
|
||||
cmds/debug/debug
|
||||
cmds/helloworld/helloworld
|
||||
cmds/textbox/textbox
|
||||
cmds/cloudflare/cloudflare
|
||||
cmds/*/helloconsole
|
||||
examples/buttonplugin/buttonplugin
|
||||
examples/console-ui-helloworld/console-ui-helloworld
|
||||
examples/debug/debug
|
||||
examples/helloworld/helloworld
|
||||
examples/textbox/textbox
|
||||
examples/cloudflare/cloudflare
|
||||
examples/*/helloconsole
|
||||
|
||||
# temporary files when building debian packages
|
||||
/*.deb
|
||||
/files
|
||||
/
|
||||
|
||||
# ignore the generated readme
|
||||
/README-goreadme.md
|
||||
|
|
57
Makefile
57
Makefile
|
@ -1,14 +1,21 @@
|
|||
.PHONY: README.md log
|
||||
.PHONY: README.md log examples
|
||||
|
||||
all: README.md
|
||||
reset
|
||||
# reset
|
||||
@echo
|
||||
@echo "make examples # will run all the Example demos and commands"
|
||||
@echo "make update # full git update of all the dependencies"
|
||||
@echo
|
||||
@echo This Requires working IPv6
|
||||
@echo
|
||||
@sleep 1
|
||||
ifeq (,$(wildcard go.mod))
|
||||
go mod init gui
|
||||
go mod tidy
|
||||
endif
|
||||
make clean
|
||||
make plugins
|
||||
make cmds-buttonplugin
|
||||
make examples-buttons
|
||||
|
||||
build-dep:
|
||||
apt install -f libgtk-3-dev
|
||||
|
@ -25,30 +32,30 @@ deb:
|
|||
|
||||
examples: \
|
||||
all \
|
||||
cmds-helloworld \
|
||||
cmds-buttonplugin \
|
||||
cmds-console-ui-helloworld \
|
||||
cmds-textbox \
|
||||
cmds-debug
|
||||
examples-helloworld \
|
||||
examples-buttons \
|
||||
examples-console-ui-helloworld \
|
||||
examples-textbox \
|
||||
examples-debug
|
||||
|
||||
cmds-buttonplugin:
|
||||
make -C cmds/buttonplugin
|
||||
examples-buttons:
|
||||
make -C examples/buttons
|
||||
|
||||
cmds-console-ui-helloworld:
|
||||
make -C cmds/console-ui-helloworld
|
||||
examples-console-ui-helloworld:
|
||||
make -C examples/console-ui-helloworld
|
||||
|
||||
# this is the most basic one. This syntax should always work
|
||||
cmds-helloworld:
|
||||
make -C cmds/helloworld
|
||||
examples-helloworld:
|
||||
make -C examples/helloworld
|
||||
|
||||
cmds-debug:
|
||||
-make -C cmds/debug
|
||||
examples-debug:
|
||||
-make -C examples/debug
|
||||
|
||||
cmds-textbox:
|
||||
make -C cmds/textbox
|
||||
examples-textbox:
|
||||
make -C examples/textbox
|
||||
|
||||
cmds-helloconsole:
|
||||
make -C cmds/plugin-consoleonly
|
||||
examples-helloconsole:
|
||||
make -C examples/plugin-consoleonly
|
||||
|
||||
# sync repo to the github backup
|
||||
# git remote add github git@github.com:witorg/gui.git
|
||||
|
@ -65,10 +72,10 @@ github:
|
|||
@echo
|
||||
|
||||
doc:
|
||||
GO111MODULE="off" godoc -v
|
||||
godoc -v
|
||||
|
||||
goget:
|
||||
GO111MODULE="off" go get -v -t -u
|
||||
go get -v -t -u
|
||||
make -C toolkit/gocui goget
|
||||
make -C toolkit/andlabs goget
|
||||
|
||||
|
@ -83,11 +90,11 @@ clean:
|
|||
plugins: plugins-gocui plugins-andlabs
|
||||
|
||||
plugins-gocui:
|
||||
GO111MODULE="off" go build -C toolkit/gocui -v -buildmode=plugin -o ../gocui.so
|
||||
GO111MODULE="off" go build -C toolkit/nocui -v -buildmode=plugin -o ../nocui.so
|
||||
go build -C toolkit/gocui -v -buildmode=plugin -o ../gocui.so
|
||||
go build -C toolkit/nocui -v -buildmode=plugin -o ../nocui.so
|
||||
|
||||
plugins-andlabs:
|
||||
GO111MODULE="off" go build -C toolkit/andlabs -v -buildmode=plugin -o ../andlabs.so
|
||||
go build -C toolkit/andlabs -v -buildmode=plugin -o ../andlabs.so
|
||||
|
||||
objdump:
|
||||
objdump -t toolkit/andlabs.so |less
|
||||
|
|
|
@ -1,200 +0,0 @@
|
|||
# gui
|
||||
|
||||
Package gui implements a abstraction layer for Go visual elements.
|
||||
|
||||
Definitions:
|
||||
|
||||
```go
|
||||
* Toolkit: the underlying GUI library (MacOS gui, Windows gui, gtk, qt, etc)
|
||||
* Node: A binary tree of all the underlying widgets
|
||||
```
|
||||
|
||||
Principles:
|
||||
|
||||
```go
|
||||
* Make code using this package simple to use
|
||||
* Hide complexity internally here
|
||||
* Isolate the GUI toolkit
|
||||
* Widget names should try to match [Wikipedia Graphical widget]
|
||||
* When in doubt, search upward in the binary tree
|
||||
* It's ok to guess. Try to do something sensible.
|
||||
```
|
||||
|
||||
Quick Start
|
||||
|
||||
```go
|
||||
// This creates a simple hello world window
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
var window *gui.Node // This is the beginning of the binary tree of widgets
|
||||
|
||||
// go will sit here until the window exits
|
||||
func main() {
|
||||
gui.Init()
|
||||
gui.Main(helloworld)
|
||||
}
|
||||
|
||||
// This initializes the first window and 2 tabs
|
||||
func helloworld() {
|
||||
gui.Config.Title = "Hello World golang wit/gui Window"
|
||||
gui.Config.Width = 640
|
||||
gui.Config.Height = 480
|
||||
|
||||
window := gui.NewWindow()
|
||||
addTab(window, "A Simple Tab Demo")
|
||||
addTab(window, "A Second Tab")
|
||||
}
|
||||
|
||||
func addTab(w *gui.Node, title string) {
|
||||
tab := w.NewTab(title)
|
||||
|
||||
group := tab.NewGroup("foo bar")
|
||||
group.NewButton("hello", func() {
|
||||
log.Println("world")
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
## Debian Build
|
||||
|
||||
This worked on debian sid on 2022/10/20
|
||||
I didn't record the dependances needed
|
||||
|
||||
```go
|
||||
GO111MODULE="off" go get -v -t -u git.wit.org/wit/gui
|
||||
cd ~/go/src/git.wit.org/wit/gui/cmds/helloworld/
|
||||
GO111MODULE="off" go build -v -x
|
||||
[./helloworld](./helloworld)
|
||||
```
|
||||
|
||||
Toolkits
|
||||
|
||||
```go
|
||||
* andlabs - [https://github.com/andlabs/ui](https://github.com/andlabs/ui)
|
||||
* gocui - [https://github.com/awesome-gocui/gocui](https://github.com/awesome-gocui/gocui)
|
||||
```
|
||||
|
||||
The next step is to allow this to work against go-gtk and go-qt.
|
||||
|
||||
TODO: Add Fyne, WASM, native macos & windows, android and
|
||||
hopefully also things like libSDL, faiface/pixel, slint
|
||||
|
||||
## Bugs
|
||||
|
||||
"The author's idea of friendly may differ to that of many other people."
|
||||
|
||||
-- quote from the minimalistic window manager 'evilwm'
|
||||
|
||||
## References
|
||||
|
||||
Useful links and other
|
||||
external things which might be useful
|
||||
|
||||
[Wikipedia Graphical widget]: [https://en.wikipedia.org/wiki/Graphical_widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
||||
[Github mirror]: [https://github.com/witorg/gui](https://github.com/witorg/gui)
|
||||
[Federated git pull]: [https://github.com/forgefed/forgefed](https://github.com/forgefed/forgefed)
|
||||
[GO Style Guide]: [https://google.github.io/styleguide/go/index](https://google.github.io/styleguide/go/index)
|
||||
|
||||
```go
|
||||
* [Wikipedia Graphical widget]
|
||||
* [Github mirror]
|
||||
* [Federated git pull]
|
||||
* [GO Style Guide]
|
||||
```
|
||||
|
||||
## Functions
|
||||
|
||||
### func [DebugWidgetWindow](/debugWidget.go#L52)
|
||||
|
||||
`func DebugWidgetWindow(w *Node)`
|
||||
|
||||
### func [DebugWindow](/debugWindow.go#L21)
|
||||
|
||||
`func DebugWindow()`
|
||||
|
||||
Creates a window helpful for debugging this package
|
||||
|
||||
### func [ExampleCatcher](/chan.go#L37)
|
||||
|
||||
`func ExampleCatcher(f func())`
|
||||
|
||||
### func [Indent](/debug.go#L124)
|
||||
|
||||
`func Indent(b bool, a ...interface{})`
|
||||
|
||||
### func [SetDebug](/debug.go#L28)
|
||||
|
||||
`func SetDebug(s bool)`
|
||||
|
||||
### func [SetFlag](/debug.go#L50)
|
||||
|
||||
`func SetFlag(s string, b bool)`
|
||||
|
||||
### func [ShowDebugValues](/debug.go#L82)
|
||||
|
||||
`func ShowDebugValues()`
|
||||
|
||||
### func [StandardExit](/main.go#L153)
|
||||
|
||||
`func StandardExit()`
|
||||
|
||||
The window is destroyed and the application exits
|
||||
TODO: properly exit the plugin since Quit() doesn't do it
|
||||
|
||||
### func [Watchdog](/watchdog.go#L16)
|
||||
|
||||
`func Watchdog()`
|
||||
|
||||
This program sits here.
|
||||
If you exit here, the whole thing will os.Exit()
|
||||
TODO: use Ticker
|
||||
|
||||
This goroutine can be used like a watchdog timer
|
||||
|
||||
## Types
|
||||
|
||||
### type [GuiArgs](/structs.go#L29)
|
||||
|
||||
`type GuiArgs struct { ... }`
|
||||
|
||||
This struct can be used with the go-arg package
|
||||
|
||||
#### Variables
|
||||
|
||||
```golang
|
||||
var GuiArg GuiArgs
|
||||
```
|
||||
|
||||
### type [Node](/structs.go#L59)
|
||||
|
||||
`type Node struct { ... }`
|
||||
|
||||
The Node is a binary tree. This is how all GUI elements are stored
|
||||
simply the name and the size of whatever GUI element exists
|
||||
|
||||
#### func [New](/main.go#L120)
|
||||
|
||||
`func New() *Node`
|
||||
|
||||
There should only be one of these per application
|
||||
This is due to restrictions by being cross platform
|
||||
some toolkit's on some operating systems don't support more than one
|
||||
Keep things simple. Do the default expected thing whenever possible
|
||||
|
||||
### type [Symbol](/plugin.go#L17)
|
||||
|
||||
`type Symbol any`
|
||||
|
||||
## Sub Packages
|
||||
|
||||
* [log](./log)
|
||||
|
||||
* [toolkit](./toolkit)
|
||||
|
||||
---
|
||||
Readme created from Go doc with [goreadme](https://github.com/posener/goreadme)
|
141
README.md
141
README.md
|
@ -4,19 +4,33 @@ Package gui implements a abstraction layer for Go visual elements.
|
|||
|
||||
Definitions:
|
||||
|
||||
```go
|
||||
* Toolkit: the underlying GUI library (MacOS gui, Windows gui, gtk, qt, etc)
|
||||
* Node: A binary tree of all the underlying widgets
|
||||
```
|
||||
|
||||
Principles:
|
||||
|
||||
```go
|
||||
* Make code using this package simple to use
|
||||
* Hide complexity internally here
|
||||
* Isolate the GUI toolkit
|
||||
* Widget names should try to match [Wikipedia Graphical widget]
|
||||
* When in doubt, search upward in the binary tree
|
||||
* It's ok to guess. Try to do something sensible.
|
||||
```
|
||||
|
||||
Quick Start
|
||||
## Debian Build
|
||||
|
||||
This worked on debian sid (mate-desktop) on 2023/12/03
|
||||
I didn't record the dependances needed (gtk-dev)
|
||||
|
||||
```go
|
||||
export GO111MODULE="off"
|
||||
make
|
||||
```
|
||||
|
||||
Hello World Example
|
||||
|
||||
```go
|
||||
// This creates a simple hello world window
|
||||
|
@ -56,22 +70,12 @@ func addTab(w *gui.Node, title string) {
|
|||
}
|
||||
```
|
||||
|
||||
## Debian Build
|
||||
|
||||
This worked on debian sid on 2022/10/20
|
||||
I didn't record the dependances needed
|
||||
External Toolkits
|
||||
|
||||
```go
|
||||
GO111MODULE="off" go get -v -t -u git.wit.org/wit/gui
|
||||
cd ~/go/src/git.wit.org/wit/gui/cmds/helloworld/
|
||||
GO111MODULE="off" go build -v -x
|
||||
[./helloworld](./helloworld)
|
||||
```
|
||||
|
||||
Toolkits
|
||||
|
||||
* andlabs - [https://github.com/andlabs/ui](https://github.com/andlabs/ui)
|
||||
* gocui - [https://github.com/awesome-gocui/gocui](https://github.com/awesome-gocui/gocui)
|
||||
```
|
||||
|
||||
The next step is to allow this to work against go-gtk and go-qt.
|
||||
|
||||
|
@ -89,75 +93,56 @@ hopefully also things like libSDL, faiface/pixel, slint
|
|||
Useful links and other
|
||||
external things which might be useful
|
||||
|
||||
* [Wikipedia Graphical widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
||||
* [GO Style Guide](https://google.github.io/styleguide/go/index) Code this way
|
||||
* [MS Windows Application Library Kit](https://github.com/lxn/walk)
|
||||
* [Federated git pull](https://github.com/forgefed/forgefed) Hopefully this will work for me with gitea
|
||||
* [Github mirror](https://github.com/wit-go/gui) This repo on mirror. Hopefully I won't have to use this.
|
||||
* [WIT GO projects](https://go.wit.org/) Attempt to model go.uber.org
|
||||
[Wikipedia Graphical widget]: [https://en.wikipedia.org/wiki/Graphical_widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
||||
[Github mirror]: [https://github.com/witorg/gui](https://github.com/witorg/gui)
|
||||
[Federated git pull]: [https://github.com/forgefed/forgefed](https://github.com/forgefed/forgefed)
|
||||
[GO Style Guide]: [https://google.github.io/styleguide/go/index](https://google.github.io/styleguide/go/index)
|
||||
|
||||
```go
|
||||
* [Wikipedia Graphical widget]
|
||||
* [Github mirror]
|
||||
* [Federated git pull]
|
||||
* [GO Style Guide]
|
||||
```
|
||||
|
||||
## Functions
|
||||
|
||||
### func [GetDebug](/structs.go#L25)
|
||||
### func [DebugWidgetWindow](/debugWidget.go#L52)
|
||||
|
||||
`func GetDebug() bool`
|
||||
`func DebugWidgetWindow(w *Node)`
|
||||
|
||||
### func [GetDebugToolkit](/structs.go#L37)
|
||||
### func [DebugWindow](/debugWindow.go#L21)
|
||||
|
||||
`func GetDebugToolkit() bool`
|
||||
`func DebugWindow()`
|
||||
|
||||
### func [IndentPrintln](/structs.go#L188)
|
||||
Creates a window helpful for debugging this package
|
||||
|
||||
`func IndentPrintln(a ...interface{})`
|
||||
### func [ExampleCatcher](/chan.go#L37)
|
||||
|
||||
### func [Init](/main.go#L41)
|
||||
`func ExampleCatcher(f func())`
|
||||
|
||||
`func Init()`
|
||||
### func [Indent](/debug.go#L124)
|
||||
|
||||
### func [LoadToolkit](/plugin.go#L37)
|
||||
`func Indent(b bool, a ...interface{})`
|
||||
|
||||
`func LoadToolkit(name string)`
|
||||
|
||||
loads and initializes a toolkit (andlabs/ui, gocui, etc)
|
||||
|
||||
### func [Main](/main.go#L56)
|
||||
|
||||
`func Main(f func())`
|
||||
|
||||
### func [Queue](/main.go#L77)
|
||||
|
||||
`func Queue(f func())`
|
||||
|
||||
Other goroutines must use this to access the GUI
|
||||
|
||||
You can not acess / process the GUI thread directly from
|
||||
other goroutines. This is due to the nature of how
|
||||
Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
|
||||
For example: gui.Queue(NewWindow())
|
||||
|
||||
### func [SetDebug](/structs.go#L29)
|
||||
### func [SetDebug](/debug.go#L28)
|
||||
|
||||
`func SetDebug(s bool)`
|
||||
|
||||
### func [SetDebugToolkit](/structs.go#L41)
|
||||
### func [SetFlag](/debug.go#L50)
|
||||
|
||||
`func SetDebugToolkit(s bool)`
|
||||
`func SetFlag(s string, b bool)`
|
||||
|
||||
### func [ShowDebugValues](/structs.go#L45)
|
||||
### func [ShowDebugValues](/debug.go#L82)
|
||||
|
||||
`func ShowDebugValues()`
|
||||
|
||||
### func [StandardClose](/main.go#L83)
|
||||
### func [StandardExit](/main.go#L153)
|
||||
|
||||
`func StandardClose(n *Node)`
|
||||
`func StandardExit()`
|
||||
|
||||
The window is destroyed but the application does not quit
|
||||
|
||||
### func [StandardExit](/main.go#L90)
|
||||
|
||||
`func StandardExit(n *Node)`
|
||||
|
||||
The window is destroyed but the application does not quit
|
||||
The window is destroyed and the application exits
|
||||
TODO: properly exit the plugin since Quit() doesn't do it
|
||||
|
||||
### func [Watchdog](/watchdog.go#L16)
|
||||
|
||||
|
@ -165,43 +150,39 @@ The window is destroyed but the application does not quit
|
|||
|
||||
This program sits here.
|
||||
If you exit here, the whole thing will os.Exit()
|
||||
TODO: use Ticker
|
||||
|
||||
This goroutine can be used like a watchdog timer
|
||||
|
||||
## Types
|
||||
|
||||
### type [GuiConfig](/structs.go#L68)
|
||||
### type [GuiArgs](/structs.go#L29)
|
||||
|
||||
`type GuiConfig struct { ... }`
|
||||
`type GuiArgs struct { ... }`
|
||||
|
||||
This struct can be used with the go-arg package
|
||||
|
||||
#### Variables
|
||||
|
||||
```golang
|
||||
var Config GuiConfig
|
||||
var GuiArg GuiArgs
|
||||
```
|
||||
|
||||
### type [GuiOptions](/structs.go#L56)
|
||||
|
||||
`type GuiOptions struct { ... }`
|
||||
|
||||
This struct can be used with go-arg
|
||||
|
||||
### type [Node](/structs.go#L87)
|
||||
### type [Node](/structs.go#L59)
|
||||
|
||||
`type Node struct { ... }`
|
||||
|
||||
The Node is simply the name and the size of whatever GUI element exists
|
||||
The Node is a binary tree. This is how all GUI elements are stored
|
||||
simply the name and the size of whatever GUI element exists
|
||||
|
||||
#### func [NewWindow](/window.go#L15)
|
||||
#### func [New](/main.go#L120)
|
||||
|
||||
`func NewWindow() *Node`
|
||||
`func New() *Node`
|
||||
|
||||
This routine creates a blank window with a Title and size (W x H)
|
||||
|
||||
This routine can not have any arguements due to the nature of how
|
||||
it can be passed via the 'andlabs/ui' queue which, because it is
|
||||
cross platform, must pass UI changes into the OS threads (that is
|
||||
my guess).
|
||||
There should only be one of these per application
|
||||
This is due to restrictions by being cross platform
|
||||
some toolkit's on some operating systems don't support more than one
|
||||
Keep things simple. Do the default expected thing whenever possible
|
||||
|
||||
### type [Symbol](/plugin.go#L17)
|
||||
|
||||
|
@ -209,6 +190,8 @@ my guess).
|
|||
|
||||
## Sub Packages
|
||||
|
||||
* [log](./log)
|
||||
|
||||
* [toolkit](./toolkit)
|
||||
|
||||
---
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
run: build
|
||||
./debug
|
||||
|
||||
build:
|
||||
# go build
|
||||
GO111MODULE="off" go build
|
|
@ -1,20 +0,0 @@
|
|||
// A simple helloworld window
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
// This creates a window
|
||||
func helloworld() {
|
||||
var w *gui.Node
|
||||
gui.Config.Title = "helloworld golang wit/gui window"
|
||||
gui.Config.Width = 400
|
||||
gui.Config.Height = 100
|
||||
|
||||
w = gui.NewWindow()
|
||||
w.NewButton("hello", func () {
|
||||
log.Println("world")
|
||||
})
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
// This initializes the first window
|
||||
//
|
||||
// BUG: THIS PROGRAM DOESN'T EXIT PROPERLY (NOT REALLY A BUG)
|
||||
//
|
||||
// Then starts a goroutine to demonstrate how to
|
||||
// inject things into the GUI
|
||||
func main() {
|
||||
log.Println("Starting my Control Panel")
|
||||
|
||||
// gui.Init()
|
||||
// go gui.Main(helloworld)
|
||||
go gui.Main(gui.DebugWindow)
|
||||
// go gui.DemoToolkitWindow()
|
||||
|
||||
watchGUI()
|
||||
}
|
||||
|
||||
// This demonstrates how to properly interact with the GUI
|
||||
// You can not involke the GUI from external goroutines in most cases.
|
||||
func watchGUI() {
|
||||
var i = 1
|
||||
for {
|
||||
log.Println("Waiting", i, "seconds")
|
||||
i += 1
|
||||
time.Sleep(1 * time.Second)
|
||||
if i == 2 {
|
||||
log.Println("Opening a Debug Window via the gui.Queue()")
|
||||
gui.Config.Width = 800
|
||||
gui.Config.Height = 300
|
||||
gui.Config.Exit = myExit
|
||||
// gui.DebugWindow()
|
||||
time.Sleep(1 * time.Second)
|
||||
// gui.DebugTab()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: myExit isn't getting used anymore
|
||||
func myExit(n *gui.Node) {
|
||||
log.Println()
|
||||
log.Println("Entered myExit() on node.Name =", n.Name)
|
||||
log.Println()
|
||||
os.Exit(0)
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
// This is a simple example
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// gui.Init()
|
||||
gui.Main(helloworld)
|
||||
}
|
||||
|
||||
// This creates a window
|
||||
func helloworld() {
|
||||
var w *gui.Node
|
||||
gui.Config.Title = "helloworld golang wit/gui window"
|
||||
gui.Config.Width = 640
|
||||
gui.Config.Height = 480
|
||||
|
||||
w = gui.NewWindow()
|
||||
w.NewButton("hello", func () {
|
||||
log.Println("world")
|
||||
})
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
run: build
|
||||
./helloconsole
|
||||
|
||||
build-release:
|
||||
go get -v -u -x .
|
||||
go install -v -o helloconsole
|
||||
helloconsole
|
||||
|
||||
build:
|
||||
GO111MODULE="off" go get -v -x .
|
||||
GO111MODULE="off" go build -v -o helloconsole
|
||||
|
||||
update:
|
||||
GO111MODULE="off" go get -v -u -x .
|
|
@ -1,31 +0,0 @@
|
|||
// This creates a simple hello world window
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
arg "github.com/alexflint/go-arg"
|
||||
)
|
||||
|
||||
type LogOptions struct {
|
||||
LogFile string
|
||||
Verbose bool
|
||||
User string `arg:"env:USER"`
|
||||
}
|
||||
|
||||
var args struct {
|
||||
LogOptions
|
||||
gui.GuiArgs
|
||||
}
|
||||
|
||||
func init() {
|
||||
arg.MustParse(&args)
|
||||
log.Println("Toolkit = ", args.Toolkit)
|
||||
|
||||
if (args.GuiDebug) {
|
||||
gui.DebugWindow()
|
||||
}
|
||||
if (args.GuiVerbose) {
|
||||
gui.SetDebug(true)
|
||||
}
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
// This is a simple example
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
func main() {
|
||||
gui.InitPlugins([]string{"gocui"})
|
||||
gui.Main(helloworld)
|
||||
}
|
||||
|
||||
// This creates a window
|
||||
func helloworld() {
|
||||
var w *gui.Node
|
||||
gui.Config.Title = "helloworld golang wit/gui window"
|
||||
gui.Config.Width = 640
|
||||
gui.Config.Height = 480
|
||||
|
||||
w = gui.NewWindow()
|
||||
w.NewButton("hello", func () {
|
||||
log.Println("world")
|
||||
})
|
||||
w.NewButton("Flags", func () {
|
||||
log.Println("the debugging flags window")
|
||||
w.DebugFlags(false)
|
||||
})
|
||||
w.NewButton("Widgets", func () {
|
||||
w.DebugWidgets(false)
|
||||
log.Println("debug the widgets window")
|
||||
})
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
run: build
|
||||
# GOTRACEBACK=all ./textbox --gui-debug
|
||||
GOTRACEBACK=all ./textbox --gui-debug >/tmp/witgui.log.stderr 2>&1
|
||||
|
||||
build-release:
|
||||
go get -v -u -x .
|
||||
go build
|
||||
|
||||
build:
|
||||
GO111MODULE="off" go get -v -x .
|
||||
GO111MODULE="off" GOTRACEBACK=all go build
|
||||
|
||||
update:
|
||||
GO111MODULE="off" go get -v -u -x .
|
|
@ -1,96 +0,0 @@
|
|||
// This creates a simple hello world window
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
arg "github.com/alexflint/go-arg"
|
||||
)
|
||||
|
||||
type LogOptions struct {
|
||||
LogFile string
|
||||
Verbose bool
|
||||
User string `arg:"env:USER"`
|
||||
}
|
||||
|
||||
var args struct {
|
||||
LogOptions
|
||||
gui.GuiArgs
|
||||
}
|
||||
|
||||
func main() {
|
||||
// this implements ./cmd --gui-debug --gui-toolkit, etc
|
||||
arg.MustParse(&args)
|
||||
log.Println("Toolkit = ", args.Toolkit)
|
||||
|
||||
// gui.SetDebug(true)
|
||||
// gui.InitPlugins([]string{"gocui"})
|
||||
gui.Main(initGUI)
|
||||
}
|
||||
|
||||
// This initializes the first window
|
||||
func initGUI() {
|
||||
var w *gui.Node
|
||||
gui.Config.Title = "Hello World"
|
||||
gui.Config.Width = 642
|
||||
gui.Config.Height = 481
|
||||
gui.Config.Exit = myDefaultExit
|
||||
|
||||
w = gui.NewWindow()
|
||||
w.Custom = func () {
|
||||
log.Println("myDefaultExit(w)")
|
||||
myDefaultExit(w)
|
||||
}
|
||||
addDemoTab(w, "A Simple Tab Demo")
|
||||
addDemoTab(w, "A Second Tab")
|
||||
|
||||
if (args.GuiDebug) {
|
||||
gui.DebugWindow()
|
||||
}
|
||||
if (args.GuiVerbose) {
|
||||
gui.SetDebug(true)
|
||||
}
|
||||
}
|
||||
|
||||
func addDemoTab(window *gui.Node, title string) {
|
||||
var newNode, g *gui.Node
|
||||
|
||||
newNode = window.NewTab(title)
|
||||
log.Println("addDemoTab() newNode START")
|
||||
// newNode.Dump(true)
|
||||
|
||||
g = newNode.NewGroup("group 1")
|
||||
|
||||
g1 := g.NewGrid("grid 1", 2, 2)
|
||||
g1.NewLabel("less")
|
||||
dd := g1.NewDropdown("more")
|
||||
dd.AddDropdownName("more 1")
|
||||
dd.AddDropdownName("more 2")
|
||||
dd.AddDropdownName("more 3")
|
||||
|
||||
// g.SetNext(3,1)
|
||||
// g1.NewLabel("label (3,1)")
|
||||
// g.SetNext(3,2)
|
||||
// g1.NewLabel("label (3,2)")
|
||||
|
||||
g2 := newNode.NewGroup("group 2")
|
||||
tb := g2.NewTextbox("tb")
|
||||
log.Println("tb =", tb.GetText())
|
||||
tb.Custom = func() {
|
||||
s := tb.GetText()
|
||||
log.Println("text =", s)
|
||||
}
|
||||
|
||||
dd.Custom = func() {
|
||||
s := dd.GetText()
|
||||
log.Println("hello world " + args.User + "\n" + s + "\n")
|
||||
tb.SetText("hello world " + args.User + "\n" + s + "\n")
|
||||
}
|
||||
}
|
||||
|
||||
func myDefaultExit(n *gui.Node) {
|
||||
log.Println("You can Do exit() things here")
|
||||
os.Exit(0)
|
||||
}
|
||||
|
|
@ -187,7 +187,7 @@ func (n *Node) Standard() *Node {
|
|||
return n
|
||||
}
|
||||
|
||||
func (n *Node) DoMargin() *Node {
|
||||
func (n *Node) SetMargin() *Node {
|
||||
log(debugError, "DoMargin() not implemented yet")
|
||||
return n
|
||||
}
|
||||
|
|
2
debug.go
2
debug.go
|
@ -134,7 +134,7 @@ func (n *Node) dumpWidget(b bool) string {
|
|||
}
|
||||
info = n.WidgetType.String()
|
||||
|
||||
d = strconv.Itoa(n.id) + " " + info
|
||||
d = strconv.Itoa(n.id) + " " + info + " " + n.Name
|
||||
|
||||
var tabs string
|
||||
for i := 0; i < listChildrenDepth; i++ {
|
||||
|
|
40
doc.go
40
doc.go
|
@ -16,7 +16,16 @@ Principles:
|
|||
* When in doubt, search upward in the binary tree
|
||||
* It's ok to guess. Try to do something sensible.
|
||||
|
||||
Quick Start
|
||||
Debian Build
|
||||
|
||||
This worked on debian sid (mate-desktop) on 2023/12/03
|
||||
I didn't record the dependances needed (gtk-dev)
|
||||
|
||||
export GO111MODULE="off"
|
||||
make
|
||||
|
||||
|
||||
Hello World Example
|
||||
|
||||
// This creates a simple hello world window
|
||||
package main
|
||||
|
@ -54,18 +63,7 @@ Quick Start
|
|||
})
|
||||
}
|
||||
|
||||
|
||||
Debian Build
|
||||
|
||||
This worked on debian sid on 2022/10/20
|
||||
I didn't record the dependances needed
|
||||
|
||||
GO111MODULE="off" go get -v -t -u git.wit.org/wit/gui
|
||||
cd ~/go/src/git.wit.org/wit/gui/cmds/helloworld/
|
||||
GO111MODULE="off" go build -v -x
|
||||
./helloworld
|
||||
|
||||
Toolkits
|
||||
External Toolkits
|
||||
|
||||
* andlabs - https://github.com/andlabs/ui
|
||||
* gocui - https://github.com/awesome-gocui/gocui
|
||||
|
@ -86,16 +84,12 @@ References
|
|||
Useful links and other
|
||||
external things which might be useful
|
||||
|
||||
[Wikipedia Graphical widget]: https://en.wikipedia.org/wiki/Graphical_widget
|
||||
[Github mirror]: https://github.com/witorg/gui
|
||||
[Federated git pull]: https://github.com/forgefed/forgefed
|
||||
[GO Style Guide]: https://google.github.io/styleguide/go/index
|
||||
|
||||
* [Wikipedia Graphical widget]
|
||||
* [Github mirror]
|
||||
* [Federated git pull]
|
||||
* [GO Style Guide]
|
||||
|
||||
* [Wikipedia Graphical widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
||||
* [GO Style Guide](https://google.github.io/styleguide/go/index) Code this way
|
||||
* [MS Windows Application Library Kit](https://github.com/lxn/walk)
|
||||
* [Federated git pull](https://github.com/forgefed/forgefed) Hopefully this will work for me with gitea
|
||||
* [Github mirror](https://github.com/wit-go/gui) This repo on mirror. Hopefully I won't have to use this.
|
||||
* [WIT GO projects](https://go.wit.org/) Attempt to model go.uber.org
|
||||
|
||||
*/
|
||||
package gui
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
#
|
||||
|
||||
run: build
|
||||
./buttonplugin --gui gocui >/tmp/witgui.log.stderr 2>&1
|
||||
./buttons --gui andlabs
|
||||
|
||||
build-release:
|
||||
go get -v -u -x .
|
||||
go build
|
||||
./buttonplugin
|
||||
./buttons
|
||||
|
||||
build:
|
||||
GO111MODULE="off" go get -v -x .
|
|
@ -31,22 +31,46 @@ type DNSRecords struct {
|
|||
func loadDNS(hostname string) {
|
||||
log.Println("adding DNS record")
|
||||
|
||||
// more2.NewButton(name, func () {
|
||||
// log.Println(name, "ip =", ip)
|
||||
// })
|
||||
|
||||
newt := mainWindow.NewTab(hostname)
|
||||
newg := newt.NewGroup("more")
|
||||
more2 := newg.NewGrid("gridnuts", 5, gridH)
|
||||
grid := newg.NewGrid("gridnuts", 5, gridH)
|
||||
|
||||
// grid.NewButton("Type", func () {
|
||||
// log.Println("sort by Type")
|
||||
// })
|
||||
typedrop := grid.NewDropdown("type")
|
||||
typedrop.AddText("A")
|
||||
typedrop.AddText("AAAA")
|
||||
typedrop.AddText("CNAME")
|
||||
typedrop.Custom = func () {
|
||||
log.Println("custom dropdown() a =", typedrop.Name, typedrop.S)
|
||||
}
|
||||
grid.NewButton("Name", func () {
|
||||
log.Println("sort by Name")
|
||||
})
|
||||
grid.NewButton("Protection", func () {
|
||||
log.Println("sort proxied")
|
||||
})
|
||||
grid.NewButton("TTL", func () {
|
||||
log.Println("sort by TTL")
|
||||
})
|
||||
grid.NewButton("Value", func () {
|
||||
log.Println("sort by Value")
|
||||
})
|
||||
|
||||
newt.NewButton("Save", func () {
|
||||
log.Println("save stuff to cloudflare")
|
||||
})
|
||||
|
||||
records := getRecords()
|
||||
for _, record := range records.Result {
|
||||
more2.NewLabel(record.Type)
|
||||
more2.NewLabel(record.Name)
|
||||
grid.NewLabel(record.Type)
|
||||
textbox := grid.NewTextbox(record.Name)
|
||||
textbox.SetText(record.Name)
|
||||
if (record.Proxied) {
|
||||
more2.NewLabel("Proxied")
|
||||
grid.NewLabel("Proxied")
|
||||
} else {
|
||||
more2.NewLabel("DNS")
|
||||
grid.NewLabel("DNS")
|
||||
}
|
||||
var ttl, short string
|
||||
if (record.TTL == 1) {
|
||||
|
@ -54,62 +78,55 @@ func loadDNS(hostname string) {
|
|||
} else {
|
||||
ttl = strconv.Itoa(record.TTL)
|
||||
}
|
||||
more2.NewLabel(ttl)
|
||||
grid.NewLabel(ttl)
|
||||
// short = fmt.Sprintf("%80s", record.Content)
|
||||
short = record.Content
|
||||
if len(short) > 40 {
|
||||
short = short[:40] // Slice the first 20 characters
|
||||
}
|
||||
more2.NewLabel(short)
|
||||
|
||||
namebox := grid.NewTextbox(short)
|
||||
namebox.SetText(short)
|
||||
|
||||
fmt.Printf("ID: %s, Type: %s, Name: %s, short Content: %s\n", record.ID, record.Type, record.Name, short)
|
||||
fmt.Printf("\tproxied: %b, %b, string TTL: %i\n", record.Proxied, record.Proxiable, ttl)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func getRecords() *DNSRecords {
|
||||
var url string = os.Getenv("CLOUDFLARE_URL")
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
var authKey string = os.Getenv("CLOUDFLARE_AUTHKEY")
|
||||
var email string = os.Getenv("CLOUDFLARE_EMAIL")
|
||||
|
||||
// Set headers
|
||||
req.Header.Set("X-Auth-Key", authKey)
|
||||
req.Header.Set("X-Auth-Email", email)
|
||||
// Set headers
|
||||
req.Header.Set("X-Auth-Key", authKey)
|
||||
req.Header.Set("X-Auth-Email", email)
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
var records DNSRecords
|
||||
if err := json.Unmarshal(body, &records); err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Process the records as needed
|
||||
/*
|
||||
for _, record := range records.Result {
|
||||
fmt.Printf("ID: %s, Type: %s, Name: %s, Content: %s\n", record.ID, record.Type, record.Name, record.Content)
|
||||
fmt.Printf("\tproxied: %b, %b, TTL: %i\n", record.Proxied, record.Proxiable, record.TTL)
|
||||
}
|
||||
*/
|
||||
var records DNSRecords
|
||||
if err := json.Unmarshal(body, &records); err != nil {
|
||||
fmt.Println(err)
|
||||
return nil
|
||||
}
|
||||
|
||||
return &records
|
||||
}
|
|
@ -5,7 +5,6 @@ import (
|
|||
"os"
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
|
@ -42,10 +41,7 @@ func buttonWindow() {
|
|||
more = g1.NewGroup("more")
|
||||
showCloudflareCredentials(more)
|
||||
|
||||
g1.NewButton("hello", func () {
|
||||
log.Println("world")
|
||||
})
|
||||
more2 = g1.NewGrid("gridnuts", gridW, gridH)
|
||||
// more2 = g1.NewGrid("gridnuts", gridW, gridH)
|
||||
|
||||
var domain string = os.Getenv("CLOUDFLARE_DOMAIN")
|
||||
if (domain == "") {
|
||||
|
@ -66,40 +62,6 @@ func buttonWindow() {
|
|||
myGui.LoadToolkit("andlabs")
|
||||
})
|
||||
|
||||
g.NewButton("NewButton(more)", func () {
|
||||
name := "foobar " + strconv.Itoa(buttonCounter)
|
||||
log.Println("NewButton(more) Adding button", name)
|
||||
buttonCounter += 1
|
||||
more.NewButton(name, func () {
|
||||
log.Println("Got all the way to main() name =", name)
|
||||
})
|
||||
})
|
||||
|
||||
g.NewButton("NewButton(more2)", func () {
|
||||
name := "foobar " + strconv.Itoa(buttonCounter)
|
||||
log.Println("NewButton(more2) Adding button", name)
|
||||
buttonCounter += 1
|
||||
more2.NewButton(name, func () {
|
||||
log.Println("Got all the way to main() name =", name)
|
||||
})
|
||||
})
|
||||
|
||||
g.NewButton("NewButton(more2 d)", func () {
|
||||
name := "d" + strconv.Itoa(buttonCounter)
|
||||
log.Println("NewButton(more2 d) Adding button", name)
|
||||
buttonCounter += 1
|
||||
more2.NewButton(name, func () {
|
||||
log.Println("Got all the way to main() name =", name)
|
||||
})
|
||||
})
|
||||
|
||||
g.NewButton("NewGroup()", func () {
|
||||
name := "neat " + strconv.Itoa(buttonCounter)
|
||||
log.Println("NewGroup() Adding button", name)
|
||||
buttonCounter += 1
|
||||
more.NewGroup(name)
|
||||
})
|
||||
|
||||
g.NewButton("gui.DebugWindow()", func () {
|
||||
gui.DebugWindow()
|
||||
})
|
|
@ -0,0 +1,23 @@
|
|||
// This is a simple example
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"git.wit.org/wit/gui"
|
||||
)
|
||||
|
||||
func main() {
|
||||
helloworld()
|
||||
// This is just a optional goroutine to watch that things are alive
|
||||
gui.Watchdog()
|
||||
}
|
||||
|
||||
// This creates a window
|
||||
func helloworld() {
|
||||
myGui := gui.New().Default()
|
||||
myWindow := myGui.NewWindow("helloworld golang wit/gui window")
|
||||
|
||||
myWindow.NewButton("hello", func () {
|
||||
log.Println("world")
|
||||
})
|
||||
}
|
11
go.mod
11
go.mod
|
@ -1,22 +1,25 @@
|
|||
module git.wit.org/wit/gui
|
||||
module gui
|
||||
|
||||
go 1.18
|
||||
go 1.21.1
|
||||
|
||||
require (
|
||||
git.wit.org/wit/gui v0.8.6
|
||||
github.com/alexflint/go-arg v1.4.3
|
||||
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e
|
||||
github.com/awesome-gocui/gocui v1.1.0
|
||||
github.com/davecgh/go-spew v1.1.1
|
||||
golang.org/x/image v0.0.0-20221017200508-ffcb3fe7d1bf
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/alexflint/go-scalar v1.2.0 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/gdamore/encoding v1.0.0 // indirect
|
||||
github.com/gdamore/tcell/v2 v2.6.0 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||
github.com/rivo/uniseg v0.4.4 // indirect
|
||||
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||
go.uber.org/atomic v1.7.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
golang.org/x/sys v0.5.0 // indirect
|
||||
golang.org/x/term v0.5.0 // indirect
|
||||
golang.org/x/text v0.7.0 // indirect
|
||||
|
|
17
go.sum
17
go.sum
|
@ -1,3 +1,5 @@
|
|||
git.wit.org/wit/gui v0.8.6 h1:n4V1eSm2LPmObGniX8kTQPT07xxumV5rPuDlXVGz/n8=
|
||||
git.wit.org/wit/gui v0.8.6/go.mod h1:Bzt8Nzznjmo4AjBZtMg+wJEFNdpGvP6amxacVLgVCWg=
|
||||
github.com/alexflint/go-arg v1.4.3 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo=
|
||||
github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA=
|
||||
github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
|
||||
|
@ -27,18 +29,19 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
|
|||
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
||||
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
|
||||
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
|
||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
||||
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
|
||||
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
|
||||
golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 h1:Lj6HJGCSn5AjxRAH2+r35Mir4icalbqku+CLUtjnvXY=
|
||||
golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY=
|
||||
golang.org/x/image v0.0.0-20221017200508-ffcb3fe7d1bf h1:nq7IoIHc0jQHd2/cn0Oedp7Z9gH80pVTiDd9bF7u+O4=
|
||||
golang.org/x/image v0.0.0-20221017200508-ffcb3fe7d1bf/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
|
@ -59,9 +62,7 @@ golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
|||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
|
15
plugin.go
15
plugin.go
|
@ -129,9 +129,10 @@ func searchPaths(name string) *aplug {
|
|||
return p
|
||||
}
|
||||
} else {
|
||||
log(logError, filename, "was not embedded. Error:", err)
|
||||
log(logError, filename, "was not embedded in the binary. Error:", err)
|
||||
}
|
||||
|
||||
log(logError, "fuck off")
|
||||
// attempt to write out the file from the internal resource
|
||||
filename = "toolkit/" + name + ".so"
|
||||
p := initToolkit(name, filename)
|
||||
|
@ -167,12 +168,20 @@ func searchPaths(name string) *aplug {
|
|||
// load module
|
||||
// 1. open the shared object file to load the symbols
|
||||
func initToolkit(name string, filename string) *aplug {
|
||||
if _, err := os.Stat(filename); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
log(true, "missing plugin", name, "as filename", filename)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
log(true, "Found plugin", name, "as filename", filename)
|
||||
|
||||
plug, err := plugin.Open(filename)
|
||||
if err != nil {
|
||||
log(debugGui, "plugin FAILED =", filename, err)
|
||||
log(debugError, "plugin FAILED =", filename, err)
|
||||
return nil
|
||||
}
|
||||
log(debugGui, "initToolkit() loading plugin =", filename)
|
||||
log(debugPlugin, "initToolkit() loading plugin =", filename)
|
||||
|
||||
var newPlug *aplug
|
||||
newPlug = new(aplug)
|
||||
|
|
Loading…
Reference in New Issue