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
|
# ignore compiled plugins
|
||||||
*.so
|
*.so
|
||||||
|
|
||||||
cmds/buttonplugin/buttonplugin
|
examples/buttonplugin/buttonplugin
|
||||||
cmds/console-ui-helloworld/console-ui-helloworld
|
examples/console-ui-helloworld/console-ui-helloworld
|
||||||
cmds/debug/debug
|
examples/debug/debug
|
||||||
cmds/helloworld/helloworld
|
examples/helloworld/helloworld
|
||||||
cmds/textbox/textbox
|
examples/textbox/textbox
|
||||||
cmds/cloudflare/cloudflare
|
examples/cloudflare/cloudflare
|
||||||
cmds/*/helloconsole
|
examples/*/helloconsole
|
||||||
|
|
||||||
# temporary files when building debian packages
|
# temporary files when building debian packages
|
||||||
/*.deb
|
/*.deb
|
||||||
/files
|
/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
|
all: README.md
|
||||||
reset
|
# reset
|
||||||
@echo
|
@echo
|
||||||
@echo "make examples # will run all the Example demos and commands"
|
@echo "make examples # will run all the Example demos and commands"
|
||||||
@echo "make update # full git update of all the dependencies"
|
@echo "make update # full git update of all the dependencies"
|
||||||
@echo
|
@echo
|
||||||
|
@echo This Requires working IPv6
|
||||||
|
@echo
|
||||||
|
@sleep 1
|
||||||
|
ifeq (,$(wildcard go.mod))
|
||||||
|
go mod init gui
|
||||||
|
go mod tidy
|
||||||
|
endif
|
||||||
make clean
|
make clean
|
||||||
make plugins
|
make plugins
|
||||||
make cmds-buttonplugin
|
make examples-buttons
|
||||||
|
|
||||||
build-dep:
|
build-dep:
|
||||||
apt install -f libgtk-3-dev
|
apt install -f libgtk-3-dev
|
||||||
|
@ -25,30 +32,30 @@ deb:
|
||||||
|
|
||||||
examples: \
|
examples: \
|
||||||
all \
|
all \
|
||||||
cmds-helloworld \
|
examples-helloworld \
|
||||||
cmds-buttonplugin \
|
examples-buttons \
|
||||||
cmds-console-ui-helloworld \
|
examples-console-ui-helloworld \
|
||||||
cmds-textbox \
|
examples-textbox \
|
||||||
cmds-debug
|
examples-debug
|
||||||
|
|
||||||
cmds-buttonplugin:
|
examples-buttons:
|
||||||
make -C cmds/buttonplugin
|
make -C examples/buttons
|
||||||
|
|
||||||
cmds-console-ui-helloworld:
|
examples-console-ui-helloworld:
|
||||||
make -C cmds/console-ui-helloworld
|
make -C examples/console-ui-helloworld
|
||||||
|
|
||||||
# this is the most basic one. This syntax should always work
|
# this is the most basic one. This syntax should always work
|
||||||
cmds-helloworld:
|
examples-helloworld:
|
||||||
make -C cmds/helloworld
|
make -C examples/helloworld
|
||||||
|
|
||||||
cmds-debug:
|
examples-debug:
|
||||||
-make -C cmds/debug
|
-make -C examples/debug
|
||||||
|
|
||||||
cmds-textbox:
|
examples-textbox:
|
||||||
make -C cmds/textbox
|
make -C examples/textbox
|
||||||
|
|
||||||
cmds-helloconsole:
|
examples-helloconsole:
|
||||||
make -C cmds/plugin-consoleonly
|
make -C examples/plugin-consoleonly
|
||||||
|
|
||||||
# sync repo to the github backup
|
# sync repo to the github backup
|
||||||
# git remote add github git@github.com:witorg/gui.git
|
# git remote add github git@github.com:witorg/gui.git
|
||||||
|
@ -65,10 +72,10 @@ github:
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
GO111MODULE="off" godoc -v
|
godoc -v
|
||||||
|
|
||||||
goget:
|
goget:
|
||||||
GO111MODULE="off" go get -v -t -u
|
go get -v -t -u
|
||||||
make -C toolkit/gocui goget
|
make -C toolkit/gocui goget
|
||||||
make -C toolkit/andlabs goget
|
make -C toolkit/andlabs goget
|
||||||
|
|
||||||
|
@ -83,11 +90,11 @@ clean:
|
||||||
plugins: plugins-gocui plugins-andlabs
|
plugins: plugins-gocui plugins-andlabs
|
||||||
|
|
||||||
plugins-gocui:
|
plugins-gocui:
|
||||||
GO111MODULE="off" go build -C toolkit/gocui -v -buildmode=plugin -o ../gocui.so
|
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/nocui -v -buildmode=plugin -o ../nocui.so
|
||||||
|
|
||||||
plugins-andlabs:
|
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:
|
||||||
objdump -t toolkit/andlabs.so |less
|
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:
|
Definitions:
|
||||||
|
|
||||||
|
```go
|
||||||
* Toolkit: the underlying GUI library (MacOS gui, Windows gui, gtk, qt, etc)
|
* Toolkit: the underlying GUI library (MacOS gui, Windows gui, gtk, qt, etc)
|
||||||
* Node: A binary tree of all the underlying widgets
|
* Node: A binary tree of all the underlying widgets
|
||||||
|
```
|
||||||
|
|
||||||
Principles:
|
Principles:
|
||||||
|
|
||||||
|
```go
|
||||||
* Make code using this package simple to use
|
* Make code using this package simple to use
|
||||||
* Hide complexity internally here
|
* Hide complexity internally here
|
||||||
* Isolate the GUI toolkit
|
* Isolate the GUI toolkit
|
||||||
* Widget names should try to match [Wikipedia Graphical widget]
|
* Widget names should try to match [Wikipedia Graphical widget]
|
||||||
* When in doubt, search upward in the binary tree
|
* When in doubt, search upward in the binary tree
|
||||||
* It's ok to guess. Try to do something sensible.
|
* 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
|
```go
|
||||||
// This creates a simple hello world window
|
// This creates a simple hello world window
|
||||||
|
@ -56,22 +70,12 @@ func addTab(w *gui.Node, title string) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Debian Build
|
External Toolkits
|
||||||
|
|
||||||
This worked on debian sid on 2022/10/20
|
|
||||||
I didn't record the dependances needed
|
|
||||||
|
|
||||||
```go
|
```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)
|
* andlabs - [https://github.com/andlabs/ui](https://github.com/andlabs/ui)
|
||||||
* gocui - [https://github.com/awesome-gocui/gocui](https://github.com/awesome-gocui/gocui)
|
* 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.
|
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
|
Useful links and other
|
||||||
external things which might be useful
|
external things which might be useful
|
||||||
|
|
||||||
* [Wikipedia Graphical widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
[Wikipedia Graphical widget]: [https://en.wikipedia.org/wiki/Graphical_widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
||||||
* [GO Style Guide](https://google.github.io/styleguide/go/index) Code this way
|
[Github mirror]: [https://github.com/witorg/gui](https://github.com/witorg/gui)
|
||||||
* [MS Windows Application Library Kit](https://github.com/lxn/walk)
|
[Federated git pull]: [https://github.com/forgefed/forgefed](https://github.com/forgefed/forgefed)
|
||||||
* [Federated git pull](https://github.com/forgefed/forgefed) Hopefully this will work for me with gitea
|
[GO Style Guide]: [https://google.github.io/styleguide/go/index](https://google.github.io/styleguide/go/index)
|
||||||
* [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
|
```go
|
||||||
|
* [Wikipedia Graphical widget]
|
||||||
|
* [Github mirror]
|
||||||
|
* [Federated git pull]
|
||||||
|
* [GO Style Guide]
|
||||||
|
```
|
||||||
|
|
||||||
## Functions
|
## 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)`
|
### func [SetDebug](/debug.go#L28)
|
||||||
|
|
||||||
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(s bool)`
|
`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 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
|
The window is destroyed and the application exits
|
||||||
|
TODO: properly exit the plugin since Quit() doesn't do it
|
||||||
### func [StandardExit](/main.go#L90)
|
|
||||||
|
|
||||||
`func StandardExit(n *Node)`
|
|
||||||
|
|
||||||
The window is destroyed but the application does not quit
|
|
||||||
|
|
||||||
### func [Watchdog](/watchdog.go#L16)
|
### func [Watchdog](/watchdog.go#L16)
|
||||||
|
|
||||||
|
@ -165,43 +150,39 @@ The window is destroyed but the application does not quit
|
||||||
|
|
||||||
This program sits here.
|
This program sits here.
|
||||||
If you exit here, the whole thing will os.Exit()
|
If you exit here, the whole thing will os.Exit()
|
||||||
|
TODO: use Ticker
|
||||||
|
|
||||||
This goroutine can be used like a watchdog timer
|
This goroutine can be used like a watchdog timer
|
||||||
|
|
||||||
## Types
|
## 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
|
#### Variables
|
||||||
|
|
||||||
```golang
|
```golang
|
||||||
var Config GuiConfig
|
var GuiArg GuiArgs
|
||||||
```
|
```
|
||||||
|
|
||||||
### type [GuiOptions](/structs.go#L56)
|
### type [Node](/structs.go#L59)
|
||||||
|
|
||||||
`type GuiOptions struct { ... }`
|
|
||||||
|
|
||||||
This struct can be used with go-arg
|
|
||||||
|
|
||||||
### type [Node](/structs.go#L87)
|
|
||||||
|
|
||||||
`type Node struct { ... }`
|
`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)
|
There should only be one of these per application
|
||||||
|
This is due to restrictions by being cross platform
|
||||||
This routine can not have any arguements due to the nature of how
|
some toolkit's on some operating systems don't support more than one
|
||||||
it can be passed via the 'andlabs/ui' queue which, because it is
|
Keep things simple. Do the default expected thing whenever possible
|
||||||
cross platform, must pass UI changes into the OS threads (that is
|
|
||||||
my guess).
|
|
||||||
|
|
||||||
### type [Symbol](/plugin.go#L17)
|
### type [Symbol](/plugin.go#L17)
|
||||||
|
|
||||||
|
@ -209,6 +190,8 @@ my guess).
|
||||||
|
|
||||||
## Sub Packages
|
## Sub Packages
|
||||||
|
|
||||||
|
* [log](./log)
|
||||||
|
|
||||||
* [toolkit](./toolkit)
|
* [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
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Node) DoMargin() *Node {
|
func (n *Node) SetMargin() *Node {
|
||||||
log(debugError, "DoMargin() not implemented yet")
|
log(debugError, "DoMargin() not implemented yet")
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
2
debug.go
2
debug.go
|
@ -134,7 +134,7 @@ func (n *Node) dumpWidget(b bool) string {
|
||||||
}
|
}
|
||||||
info = n.WidgetType.String()
|
info = n.WidgetType.String()
|
||||||
|
|
||||||
d = strconv.Itoa(n.id) + " " + info
|
d = strconv.Itoa(n.id) + " " + info + " " + n.Name
|
||||||
|
|
||||||
var tabs string
|
var tabs string
|
||||||
for i := 0; i < listChildrenDepth; i++ {
|
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
|
* When in doubt, search upward in the binary tree
|
||||||
* It's ok to guess. Try to do something sensible.
|
* 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
|
// This creates a simple hello world window
|
||||||
package main
|
package main
|
||||||
|
@ -54,18 +63,7 @@ Quick Start
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
External Toolkits
|
||||||
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
|
|
||||||
|
|
||||||
* andlabs - https://github.com/andlabs/ui
|
* andlabs - https://github.com/andlabs/ui
|
||||||
* gocui - https://github.com/awesome-gocui/gocui
|
* gocui - https://github.com/awesome-gocui/gocui
|
||||||
|
@ -86,16 +84,12 @@ References
|
||||||
Useful links and other
|
Useful links and other
|
||||||
external things which might be useful
|
external things which might be useful
|
||||||
|
|
||||||
[Wikipedia Graphical widget]: https://en.wikipedia.org/wiki/Graphical_widget
|
* [Wikipedia Graphical widget](https://en.wikipedia.org/wiki/Graphical_widget)
|
||||||
[Github mirror]: https://github.com/witorg/gui
|
* [GO Style Guide](https://google.github.io/styleguide/go/index) Code this way
|
||||||
[Federated git pull]: https://github.com/forgefed/forgefed
|
* [MS Windows Application Library Kit](https://github.com/lxn/walk)
|
||||||
[GO Style Guide]: https://google.github.io/styleguide/go/index
|
* [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.
|
||||||
* [Wikipedia Graphical widget]
|
* [WIT GO projects](https://go.wit.org/) Attempt to model go.uber.org
|
||||||
* [Github mirror]
|
|
||||||
* [Federated git pull]
|
|
||||||
* [GO Style Guide]
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
package gui
|
package gui
|
||||||
|
|
|
@ -7,12 +7,12 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
run: build
|
run: build
|
||||||
./buttonplugin --gui gocui >/tmp/witgui.log.stderr 2>&1
|
./buttons --gui andlabs
|
||||||
|
|
||||||
build-release:
|
build-release:
|
||||||
go get -v -u -x .
|
go get -v -u -x .
|
||||||
go build
|
go build
|
||||||
./buttonplugin
|
./buttons
|
||||||
|
|
||||||
build:
|
build:
|
||||||
GO111MODULE="off" go get -v -x .
|
GO111MODULE="off" go get -v -x .
|
|
@ -31,22 +31,46 @@ type DNSRecords struct {
|
||||||
func loadDNS(hostname string) {
|
func loadDNS(hostname string) {
|
||||||
log.Println("adding DNS record")
|
log.Println("adding DNS record")
|
||||||
|
|
||||||
// more2.NewButton(name, func () {
|
|
||||||
// log.Println(name, "ip =", ip)
|
|
||||||
// })
|
|
||||||
|
|
||||||
newt := mainWindow.NewTab(hostname)
|
newt := mainWindow.NewTab(hostname)
|
||||||
newg := newt.NewGroup("more")
|
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()
|
records := getRecords()
|
||||||
for _, record := range records.Result {
|
for _, record := range records.Result {
|
||||||
more2.NewLabel(record.Type)
|
grid.NewLabel(record.Type)
|
||||||
more2.NewLabel(record.Name)
|
textbox := grid.NewTextbox(record.Name)
|
||||||
|
textbox.SetText(record.Name)
|
||||||
if (record.Proxied) {
|
if (record.Proxied) {
|
||||||
more2.NewLabel("Proxied")
|
grid.NewLabel("Proxied")
|
||||||
} else {
|
} else {
|
||||||
more2.NewLabel("DNS")
|
grid.NewLabel("DNS")
|
||||||
}
|
}
|
||||||
var ttl, short string
|
var ttl, short string
|
||||||
if (record.TTL == 1) {
|
if (record.TTL == 1) {
|
||||||
|
@ -54,62 +78,55 @@ func loadDNS(hostname string) {
|
||||||
} else {
|
} else {
|
||||||
ttl = strconv.Itoa(record.TTL)
|
ttl = strconv.Itoa(record.TTL)
|
||||||
}
|
}
|
||||||
more2.NewLabel(ttl)
|
grid.NewLabel(ttl)
|
||||||
// short = fmt.Sprintf("%80s", record.Content)
|
// short = fmt.Sprintf("%80s", record.Content)
|
||||||
short = record.Content
|
short = record.Content
|
||||||
if len(short) > 40 {
|
if len(short) > 40 {
|
||||||
short = short[:40] // Slice the first 20 characters
|
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("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)
|
fmt.Printf("\tproxied: %b, %b, string TTL: %i\n", record.Proxied, record.Proxiable, ttl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func getRecords() *DNSRecords {
|
func getRecords() *DNSRecords {
|
||||||
var url string = os.Getenv("CLOUDFLARE_URL")
|
var url string = os.Getenv("CLOUDFLARE_URL")
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var authKey string = os.Getenv("CLOUDFLARE_AUTHKEY")
|
var authKey string = os.Getenv("CLOUDFLARE_AUTHKEY")
|
||||||
var email string = os.Getenv("CLOUDFLARE_EMAIL")
|
var email string = os.Getenv("CLOUDFLARE_EMAIL")
|
||||||
|
|
||||||
// Set headers
|
// Set headers
|
||||||
req.Header.Set("X-Auth-Key", authKey)
|
req.Header.Set("X-Auth-Key", authKey)
|
||||||
req.Header.Set("X-Auth-Email", email)
|
req.Header.Set("X-Auth-Email", email)
|
||||||
|
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var records DNSRecords
|
var records DNSRecords
|
||||||
if err := json.Unmarshal(body, &records); err != nil {
|
if err := json.Unmarshal(body, &records); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return nil
|
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)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
return &records
|
return &records
|
||||||
}
|
}
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strconv"
|
|
||||||
"git.wit.org/wit/gui"
|
"git.wit.org/wit/gui"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -42,10 +41,7 @@ func buttonWindow() {
|
||||||
more = g1.NewGroup("more")
|
more = g1.NewGroup("more")
|
||||||
showCloudflareCredentials(more)
|
showCloudflareCredentials(more)
|
||||||
|
|
||||||
g1.NewButton("hello", func () {
|
// more2 = g1.NewGrid("gridnuts", gridW, gridH)
|
||||||
log.Println("world")
|
|
||||||
})
|
|
||||||
more2 = g1.NewGrid("gridnuts", gridW, gridH)
|
|
||||||
|
|
||||||
var domain string = os.Getenv("CLOUDFLARE_DOMAIN")
|
var domain string = os.Getenv("CLOUDFLARE_DOMAIN")
|
||||||
if (domain == "") {
|
if (domain == "") {
|
||||||
|
@ -66,40 +62,6 @@ func buttonWindow() {
|
||||||
myGui.LoadToolkit("andlabs")
|
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 () {
|
g.NewButton("gui.DebugWindow()", func () {
|
||||||
gui.DebugWindow()
|
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 (
|
require (
|
||||||
|
git.wit.org/wit/gui v0.8.6
|
||||||
github.com/alexflint/go-arg v1.4.3
|
github.com/alexflint/go-arg v1.4.3
|
||||||
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e
|
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e
|
||||||
github.com/awesome-gocui/gocui v1.1.0
|
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 (
|
require (
|
||||||
github.com/alexflint/go-scalar v1.2.0 // indirect
|
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/encoding v1.0.0 // indirect
|
||||||
github.com/gdamore/tcell/v2 v2.6.0 // indirect
|
github.com/gdamore/tcell/v2 v2.6.0 // indirect
|
||||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||||
github.com/rivo/uniseg v0.4.4 // 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/sys v0.5.0 // indirect
|
||||||
golang.org/x/term v0.5.0 // indirect
|
golang.org/x/term v0.5.0 // indirect
|
||||||
golang.org/x/text v0.7.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 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo=
|
||||||
github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA=
|
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=
|
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.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||||
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
||||||
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
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/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.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/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
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-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/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/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-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
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/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.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.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.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 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
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=
|
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
|
return p
|
||||||
}
|
}
|
||||||
} else {
|
} 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
|
// attempt to write out the file from the internal resource
|
||||||
filename = "toolkit/" + name + ".so"
|
filename = "toolkit/" + name + ".so"
|
||||||
p := initToolkit(name, filename)
|
p := initToolkit(name, filename)
|
||||||
|
@ -167,12 +168,20 @@ func searchPaths(name string) *aplug {
|
||||||
// load module
|
// load module
|
||||||
// 1. open the shared object file to load the symbols
|
// 1. open the shared object file to load the symbols
|
||||||
func initToolkit(name string, filename string) *aplug {
|
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)
|
plug, err := plugin.Open(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log(debugGui, "plugin FAILED =", filename, err)
|
log(debugError, "plugin FAILED =", filename, err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
log(debugGui, "initToolkit() loading plugin =", filename)
|
log(debugPlugin, "initToolkit() loading plugin =", filename)
|
||||||
|
|
||||||
var newPlug *aplug
|
var newPlug *aplug
|
||||||
newPlug = new(aplug)
|
newPlug = new(aplug)
|
||||||
|
|
Loading…
Reference in New Issue