summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md193
1 files changed, 61 insertions, 132 deletions
diff --git a/README.md b/README.md
index dfe7857..239a334 100644
--- a/README.md
+++ b/README.md
@@ -2,35 +2,7 @@
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.
-```
-
-## 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
+## Hello World Example
```go
// This creates a simple hello world window
@@ -38,150 +10,107 @@ package main
import (
"log"
- "go.wit.com/wit/gui/gui"
+ "go.wit.com/gui"
)
var myGui *gui.Node // This is your gui object
-// go will sit here until the window exits
func main() {
- myGui = gui.Init()
+ myGui = gui.New().Default()
+
+ helloworld()
+
+ // go will sit here until the window exits
+ // intermittently, it will show toolkit statistics
+ gui.Watchdog()
}
// This initializes the first window and 2 tabs
func helloworld() {
window := myGui.NewWindow()
- group := window.NewGroup("foo bar")
+ group := window.NewGroup("a group of widgets")
group.NewButton("hello", func() {
log.Println("world")
})
}
```
-External Toolkits
+## Build
+
+This will build the simple hello world example above.
```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)
+go install go.wit.com/apps/helloworld@latest
```
-The next step is to allow this to work against go-gtk and go-qt.
+A more extensive list of applications can be found on [go.wit.com](https://go.wit.com).
-TODO: Add Fyne, WASM, native macos & windows, android and
-hopefully also things like libSDL, faiface/pixel, slint
+### Build Toolkit Plugins
-## 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/wit-go/gui](https://github.com/wit-go/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)
+This is an example of how to build the console based
+toolkit plugin built against the gocui package.
```go
-* [Wikipedia Graphical widget]
-* [Github mirror]
-* [Federated git pull]
-* [GO Style Guide]
+GO111MODULE=off go get go.wit.com/toolkits/gocui
+cd ~/go/src/go.wit.com/toolkits/gocui
+go build -v -buildmode=plugin -o ~/go/lib/toolkits/gocui.so
```
-## Functions
-
-### func [DebugWidgetWindow](/debugWidget.go#L52)
-
-`func DebugWidgetWindow(w *Node)`
-
-### func [DebugWindow](/debugWindow.go#L21)
+## Toolkits
-`func DebugWindow()`
+The toolkits are compiled as plugins and communicate only over a channel
+to your application. This way, the toolkits are isolated and you don't
+have to care about what the user uses to display things when you write
+your application. Also, that allows the control panels to run in both
+a traditional GUI like GTK or in the console like ncurses.
-Creates a window helpful for debugging this package
+There are two working toolkits. One is written to the andlabs package
+which provides a native linux, macos and windows. The second one is
+terminal window based using gocui. (There is a 3rd one using STDIN/STDOUT
+as a template to create new toolkit plugins.) Also, GO doesn't support
+plugins on Windows so the native Windows GUI awaits someone to fix that.
-### func [ExampleCatcher](/chan.go#L37)
+* andlabs - [github](https://github.com/andlabs/ui)
+* gocui - [github](https://github.com/awesome-gocui/gocui)
-`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)
+The next step is to allow this to work against go-gtk and go-qt.
-`type GuiArgs struct { ... }`
+Others potential plugins: Fyne, WASM, native macos & windows, android and
+hopefully also things like libSDL, faiface/pixel, slint
-This struct can be used with the go-arg package
+## General Thoughts
-#### Variables
+Definitions:
-```golang
-var GuiArg GuiArgs
+```go
+* Toolkit: the underlying GUI library (MacOS gui, Windows gui, gtk, qt, etc)
+* Node: A binary tree of all the underlying widgets
```
-### 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`
+Principles:
-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
+```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.
+```
-### type [Symbol](/plugin.go#L17)
+## Bugs
-`type Symbol any`
+"The author's idea of friendly may differ to that of many other people."
-## Sub Packages
+-- quote from the minimalistic window manager 'evilwm'
-* [log](./log)
+## References
-* [toolkit](./toolkit)
+Useful links and other
+external things which might be useful
----
-Readme created from Go doc with [goreadme](https://github.com/posener/goreadme)
+* [A History of the GUI](https://arstechnica.com/features/2005/05/gui/)
+* [Wikipedia Graphical widget](https://en.wikipedia.org/wiki/Graphical_widget)
+* [Federated git pull](https://github.com/forgefed/forgefed)
+* [GO Style Guide](https://google.github.io/styleguide/go/index)