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:
Jeff Carr 2023-12-03 16:08:39 -06:00
parent fe6a8dd969
commit eab47f738d
35 changed files with 240 additions and 730 deletions

18
.gitignore vendored
View File

@ -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

View File

@ -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

View File

@ -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
View File

@ -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)
---

View File

@ -1,6 +0,0 @@
run: build
./debug
build:
# go build
GO111MODULE="off" go build

View File

@ -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")
})
}

View File

@ -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)
}

View File

@ -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")
})
}

View File

@ -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 .

View File

@ -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)
}
}

View File

@ -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")
})
}

View File

@ -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 .

View File

@ -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)
}

View File

@ -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
}

View File

@ -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
View File

@ -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

View File

@ -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 .

View File

@ -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
}

View File

@ -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()
})

View File

@ -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
View File

@ -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
View File

@ -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=

View File

@ -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)