2021-10-31 14:21:36 -05:00
|
|
|
/*
|
2022-10-21 11:40:08 -05:00
|
|
|
|
2022-11-13 08:53:03 -06:00
|
|
|
Package gui implements a abstraction layer for Go visual elements.
|
2021-10-31 14:21:36 -05:00
|
|
|
|
2022-10-19 13:23:22 -05:00
|
|
|
Definitions:
|
|
|
|
|
2022-11-13 08:53:03 -06:00
|
|
|
* Toolkit: the underlying GUI library (MacOS gui, Windows gui, gtk, qt, etc)
|
|
|
|
* Node: A binary tree of all the underlying widgets
|
2022-10-19 13:23:22 -05:00
|
|
|
|
|
|
|
Principles:
|
|
|
|
|
|
|
|
* Make code using this package simple to use
|
|
|
|
* Hide complexity internally here
|
|
|
|
* Isolate the GUI toolkit
|
2022-11-13 08:53:03 -06:00
|
|
|
* 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.
|
2021-10-31 14:21:36 -05:00
|
|
|
|
|
|
|
Quick Start
|
|
|
|
|
2022-10-11 11:25:46 -05:00
|
|
|
// This creates a simple hello world window
|
2021-10-31 14:21:36 -05:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2022-10-21 11:40:08 -05:00
|
|
|
"log"
|
2021-10-31 14:21:36 -05:00
|
|
|
"git.wit.org/wit/gui"
|
|
|
|
)
|
|
|
|
|
2022-10-21 11:40:08 -05:00
|
|
|
var window *gui.Node // This is the beginning of the binary tree of widgets
|
|
|
|
|
|
|
|
// go will sit here until the window exits
|
2021-10-31 14:21:36 -05:00
|
|
|
func main() {
|
2022-11-13 08:53:03 -06:00
|
|
|
gui.Init()
|
2022-10-19 13:23:22 -05:00
|
|
|
gui.Main(helloworld)
|
2021-10-31 14:21:36 -05:00
|
|
|
}
|
|
|
|
|
2022-10-21 11:40:08 -05:00
|
|
|
// This initializes the first window and 2 tabs
|
2022-10-19 13:23:22 -05:00
|
|
|
func helloworld() {
|
2022-10-11 11:25:46 -05:00
|
|
|
gui.Config.Title = "Hello World golang wit/gui Window"
|
2021-10-31 14:21:36 -05:00
|
|
|
gui.Config.Width = 640
|
|
|
|
gui.Config.Height = 480
|
2022-10-21 11:40:08 -05:00
|
|
|
|
|
|
|
window := gui.NewWindow()
|
|
|
|
addTab(window, "A Simple Tab Demo")
|
|
|
|
addTab(window, "A Second Tab")
|
2021-10-31 14:21:36 -05:00
|
|
|
}
|
|
|
|
|
2022-10-21 11:40:08 -05:00
|
|
|
func addTab(w *gui.Node, title string) {
|
|
|
|
tab := w.NewTab(title)
|
2021-10-31 14:21:36 -05:00
|
|
|
|
2022-10-21 11:40:08 -05:00
|
|
|
group := tab.NewGroup("foo bar")
|
|
|
|
group.NewButton("hello", func() {
|
|
|
|
log.Println("world")
|
|
|
|
})
|
2021-10-31 14:21:36 -05:00
|
|
|
}
|
|
|
|
|
2022-10-21 11:40:08 -05:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2022-11-13 08:53:03 -06:00
|
|
|
* andlabs - https://github.com/andlabs/ui
|
|
|
|
* gocui - https://github.com/awesome-gocui/gocui
|
2022-10-11 11:25:46 -05:00
|
|
|
|
2022-11-13 08:53:03 -06:00
|
|
|
The next step is to allow this to work against go-gtk and go-qt.
|
2022-10-16 08:07:13 -05:00
|
|
|
|
2022-11-13 08:53:03 -06:00
|
|
|
TODO: Add Fyne, WASM, native macos & windows, android and
|
2022-10-16 08:07:13 -05:00
|
|
|
hopefully also things like libSDL, faiface/pixel, slint
|
2021-10-31 14:21:36 -05:00
|
|
|
|
2022-10-19 13:23:22 -05:00
|
|
|
Bugs
|
|
|
|
|
|
|
|
"The author's idea of friendly may differ to that of many other people."
|
|
|
|
|
2022-11-13 08:53:03 -06:00
|
|
|
-- quote from the minimalistic window manager 'evilwm'
|
2022-10-19 13:23:22 -05:00
|
|
|
|
2022-10-21 13:29:15 -05:00
|
|
|
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
|
2022-11-13 08:53:03 -06:00
|
|
|
[Federated git pull]: https://github.com/forgefed/forgefed
|
2022-10-21 13:29:15 -05:00
|
|
|
|
|
|
|
* [Wikipedia Graphical widget]
|
|
|
|
* [Github mirror]
|
2022-11-13 08:53:03 -06:00
|
|
|
* [Federated git pull]
|
2022-10-21 13:29:15 -05:00
|
|
|
|
2022-10-19 13:23:22 -05:00
|
|
|
|
2021-10-31 14:21:36 -05:00
|
|
|
*/
|
|
|
|
package gui
|