Compare commits

..

No commits in common. "master" and "v0.19.2" have entirely different histories.

10 changed files with 88 additions and 187 deletions

14
.gitignore vendored
View File

@ -1,9 +1,5 @@
*.swp *
go.mod !.gitignore
go.sum !Makefile
!*.go
/files/* !LICENSE
/*.deb
/resources/*
gadgetwindow

View File

@ -1,45 +1,44 @@
VERSION = $(shell git describe --tags)
BUILDTIME = $(shell date +%Y.%m.%d)
all: build all: build
reset
./gadgetwindow ./gadgetwindow
build:
GO111MODULE=off go build \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
verbose:
GO111MODULE=off go build -v -x \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
install:
GO111MODULE=off go install \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
clean:
-rm -f gadgetwindow
-rm resources/*.so
touch resources/blank.so
# embed the toolkit plugins in the binary
embed:
-rm resources/*.so
touch resources/blank.so
cp -a ~/go/src/go.wit.com/toolkits/*.so resources/
nocui: build nocui: build
reset reset
./gadgetwindow --gui nocui ./gadgetwindow --gui nocui
gocui: build gocui: build
reset reset
echo "redirecting STDOUT & STDERR to /tmp/gadgetwindow.out" # ./gadgetwindow --gui gocui >/tmp/gadgetwindow.stderr 2>&1
./gadgetwindow --gui gocui ./gadgetwindow --gui gocui --tmp-log
log:
tail -f /tmp/guilogfile /tmp/witgui.*
test-tmp-log: build
./gadgetwindow --gui andlabs --tmp-log
debugger: build debugger: build
reset reset
./gadgetwindow --debugger ./gadgetwindow --debugger
build:
ifeq ($(GO111MODULE),)
echo no. you must use GO111MODULE here
false
else
-rm -f gadgetwindow
go build -v -x
endif
stderr: build
echo "writing to /tmp/gadgetwindow.stderr"
./gadgetwindow >/tmp/gadgetwindow.stderr 2>&1
push:
git add --all
git commit -a
git push
goimports: goimports:
goimports -w *.go goimports -w *.go
@ -48,3 +47,4 @@ redomod:
goimports -w *.go goimports -w *.go
GO111MODULE= go mod init GO111MODULE= go mod init
GO111MODULE= go mod tidy GO111MODULE= go mod tidy

View File

@ -1,6 +0,0 @@
# gadgetwindow
This simple 'gui' demo also embedds the plugins into the binary
## Install go-glone
go build go.wit.com/apps/gadgetwindow@latest

36
args.go Normal file
View File

@ -0,0 +1,36 @@
package main
/*
this parses the command line arguements
this enables command line options from other packages like 'gui' and 'log'
*/
import (
"go.wit.com/dev/alexflint/arg"
"go.wit.com/lib/debugger"
"go.wit.com/log"
)
// GadgetDisplay string `arg:"env:DISPLAY"`
// GadgetTmpLog bool `arg:"--tmp-log" help:"automatically send STDOUT to /tmp"`
// GadgetVerboseDNS bool `arg:"--verbose" help:"debug your dns settings"`
var args struct {
TmpLog bool `arg:"--tmp-log" help:"automatically send STDOUT to /tmp"`
}
var NOW *log.LogFlag
func init() {
arg.MustParse(&args)
full := "go.wit.com/control-panels/dns"
short := "cpdns"
NOW = log.NewFlag("NOW", true, full, short, "temp debugging stuff")
if debugger.ArgDebug() {
log.Log(NOW, "INIT() gui debug == true")
} else {
log.Log(NOW, "INIT() gui debug == false")
}
}

38
argv.go
View File

@ -1,38 +0,0 @@
package main
import (
"os"
"github.com/alexflint/go-arg"
)
/*
this parses the command line arguements
this enables command line options from other packages like 'gui' and 'log'
*/
var argv args
type args struct {
Demo string `arg:"positional" help:"this is just a demo"`
}
func (a args) Description() string {
return `
This basicwindow example demonstrates multiple windows
`
}
func init() {
pp := arg.MustParse(&argv)
// for very new users or users unfamilar with the command line, this may help them
if argv.Demo == "version" || argv.Demo == "help" || argv.Demo == "?" {
pp.WriteHelp(os.Stdout)
os.Exit(0)
}
}
func (args) Version() string {
return "basicwindow " + VERSION
}

View File

@ -2,9 +2,6 @@
package main package main
import ( import (
"math/rand"
"time"
"go.wit.com/gui" "go.wit.com/gui"
"go.wit.com/lib/gadgets" "go.wit.com/lib/gadgets"
"go.wit.com/log" "go.wit.com/log"
@ -28,8 +25,7 @@ func newChoices(parent *gui.Node) *choices {
var c *choices var c *choices
c = new(choices) c = new(choices)
c.group = parent.NewGroup("choices") c.group = parent.NewGroup("choices")
c.grid = c.group.NewGrid("gridiron", 8, 1) c.grid = c.group.NewGrid("gridiron", 2, 1)
c.grid.NewButton("hello", func() { c.grid.NewButton("hello", func() {
log.Info("world") log.Info("world")
}) })
@ -37,7 +33,6 @@ func newChoices(parent *gui.Node) *choices {
basicWindow.Toggle() basicWindow.Toggle()
}) })
c.grid.NewLabel("a label") c.grid.NewLabel("a label")
c.grid.NextRow()
c.computers = c.grid.NewDropdown().SetProgName("COMPUTERS") c.computers = c.grid.NewDropdown().SetProgName("COMPUTERS")
c.computers.AddText("Atari 500") c.computers.AddText("Atari 500")
@ -47,77 +42,27 @@ func newChoices(parent *gui.Node) *choices {
c.computers.Custom = func() { c.computers.Custom = func() {
log.Info("You changed the computer to:", c.computers.String()) log.Info("You changed the computer to:", c.computers.String())
} }
c.grid.NewButton("modify dropdown state", func() {
c.computers.AddText("Irix")
c.computers.AddText("Macintosh Plus")
c.computers.SetText("Irix")
rand.Seed(time.Now().UnixNano())
// Generate a random number between 0 and 25
randomNum := rand.Intn(8) // 26 because Intn is [0, n)
// Convert to a corresponding uppercase letter
randomLetter := rune('A' + randomNum)
c.computers.AddText("WIT " + string(randomLetter))
c.showState()
})
c.grid.NewButton("toggle", func() {
if c.computers.Hidden() {
c.computers.Show()
} else {
c.computers.Hide()
}
})
c.grid.NewButton("dropdown state", func() {
c.showState()
})
c.grid.NextRow()
c.colors = c.grid.NewCombobox().SetProgName("COLORS") c.colors = c.grid.NewCombobox().SetProgName("COLORS")
c.colors.AddText("Cyan") c.colors.AddText("Cyan")
c.colors.AddText("Magenta") c.colors.AddText("Magenta")
c.colors.AddText("Yellow") c.colors.AddText("Yellow")
c.colors.SetText("orange") c.colors.SetText("orange")
c.grid.NewButton("modify combobox state", func() {
c.colors.AddText("Red")
rand.Seed(time.Now().UnixNano())
// Generate a random number between 0 and 25
randomNum := rand.Intn(26) // 26 because Intn is [0, n)
// Convert to a corresponding uppercase letter
randomLetter := rune('A' + randomNum)
c.colors.AddText("Yellow " + string(randomLetter))
c.colors.SetText("blue")
log.Info("color value =", c.colors.String())
})
c.grid.NewButton("toggle", func() {
if c.colors.Hidden() {
c.colors.Show()
} else {
c.colors.Hide()
}
})
c.grid.NewButton("show state", func() {
c.showState()
})
c.grid.NextRow()
c.checkers = c.grid.NewCheckbox("Checkers").SetProgName("CHECKERS") c.checkers = c.grid.NewCheckbox("Checkers").SetProgName("CHECKERS")
c.checkers.Custom = func() { c.checkers.Custom = func() {
log.Info("Checkers is", c.checkers.Bool()) log.Info("Checkers is", c.checkers.Bool())
} }
c.grid.NextRow()
c.socks = gadgets.NewOneLiner(c.grid, "two for one") c.socks = gadgets.NewOneLiner(c.grid, "two for one")
c.socks.SetValue("socks") c.socks.SetValue("socks")
c.grid.NextRow()
c.animal = gadgets.NewBasicCombobox(c.grid, "animals") c.animal = gadgets.NewBasicCombobox(c.grid, "animals")
c.animal.AddText("otter") c.animal.AddText("otter")
c.animal.AddText("honey badger") c.animal.AddText("honey badger")
c.animal.AddText("polar bear") c.animal.AddText("polar bear")
c.grid.NextRow()
c.place = gadgets.NewBasicEntry(c.grid, "favorite place") c.place = gadgets.NewBasicEntry(c.grid, "common favorite place")
c.place.Custom = func() { c.place.Custom = func() {
log.Info("now set to:", c.place.String()) log.Info("now set to:", c.place.String())
if c.place == section1.place { if c.place == section1.place {
@ -128,7 +73,6 @@ func newChoices(parent *gui.Node) *choices {
} }
} }
c.place.SetText("coffee shop") c.place.SetText("coffee shop")
c.grid.NextRow()
c.grid.NewButton("enable animals", func() { c.grid.NewButton("enable animals", func() {
c.animal.Enable() c.animal.Enable()
@ -136,9 +80,6 @@ func newChoices(parent *gui.Node) *choices {
c.grid.NewButton("disable animals", func() { c.grid.NewButton("disable animals", func() {
c.animal.Disable() c.animal.Disable()
}) })
c.grid.NewButton("set trust", func() {
c.place.SetText("trust")
})
return c return c
} }
@ -147,14 +88,3 @@ func (c *choices) SetSocks(s string) *choices {
c.socks.SetValue(s) c.socks.SetValue(s)
return c return c
} }
func (c *choices) showState() {
log.Info("computers value =", c.computers.String())
for i, s := range c.computers.Strings() {
log.Println("computers has:", i, s)
}
log.Info("color value =", c.colors.String())
for i, s := range c.colors.Strings() {
log.Println("has option", i, s)
}
}

View File

@ -1,20 +0,0 @@
package main
/*
enables GUI options and the debugger in your application
*/
import (
"go.wit.com/lib/debugger"
"go.wit.com/log"
)
func init() {
if debugger.ArgDebug() {
log.Info("cmd line --debugger == true")
go func() {
log.Sleep(2)
debugger.DebugWindow()
}()
}
}

27
main.go
View File

@ -1,8 +1,7 @@
// This creates a simple hello world window
package main package main
import ( import (
"embed"
"go.wit.com/gui" "go.wit.com/gui"
"go.wit.com/lib/debugger" "go.wit.com/lib/debugger"
"go.wit.com/lib/gadgets" "go.wit.com/lib/gadgets"
@ -10,15 +9,9 @@ import (
"go.wit.com/log" "go.wit.com/log"
) )
// sent via -ldflags
var VERSION string
// This is the beginning of the binary tree of widgets // This is the beginning of the binary tree of widgets
var myGui *gui.Node var myGui *gui.Node
//go:embed resources/*
var resources embed.FS
// this is the primary window. If you close it, the program will exit // this is the primary window. If you close it, the program will exit
var mainWindow *gui.Node var mainWindow *gui.Node
@ -34,13 +27,27 @@ func main() {
log.SetAll(true) log.SetAll(true)
log.ShowFlags() log.ShowFlags()
} }
if args.TmpLog {
// send all log() output to a file in /tmp
log.SetTmp()
}
myGui = gui.New() myGui = gui.New()
myGui.InitEmbed(resources) // myGui.LoadToolkit("andlabs")
// myGui.LoadToolkit("nocui")
myGui.Default() myGui.Default()
helloworld() helloworld()
basicWindow = makebasicWindow() basicWindow = makebasicWindow()
// run the debugger if triggered from the commandline
if debugger.ArgDebug() {
go func() {
log.Sleep(2)
debugger.DebugWindow()
}()
}
// go will sit here until the window exits // go will sit here until the window exits
gui.Watchdog() gui.Watchdog()
} }
@ -50,8 +57,6 @@ func helloworld() {
mainWindow = myGui.NewWindow("hello world").SetProgName("BASEWIN1") mainWindow = myGui.NewWindow("hello world").SetProgName("BASEWIN1")
box := mainWindow.NewBox("hbox", true) box := mainWindow.NewBox("hbox", true)
// box := mainWindow.Box().Vertical()
// box := mainWindow.Box().Horizontal()
section1 = newChoices(box) section1 = newChoices(box)
group := box.NewGroup("interact") group := box.NewGroup("interact")

View File

View File

@ -23,9 +23,7 @@ func makebasicWindow() *gadgets.BasicWindow {
box1 := basicWindow.Box() box1 := basicWindow.Box()
section2 = newChoices(box1) section2 = newChoices(box1)
// vbox := box1.NewBox("vbox", false) vbox := box1.NewBox("vbox", false)
// vbox := box1.Box().Vertical()
vbox := box1.Box().Horizontal()
group1 := vbox.NewGroup("controls").Horizontal() // Vertical() group1 := vbox.NewGroup("controls").Horizontal() // Vertical()
group1.NewButton("hide apple", func() { group1.NewButton("hide apple", func() {
apple.Hide() apple.Hide()