cloud-control-panel/example-multiple-windows/main.go

124 lines
2.7 KiB
Go

package main
// import "os"
import "log"
import "fmt"
import "time"
import "github.com/davecgh/go-spew/spew"
import "git.wit.com/wit/gui"
import pb "git.wit.com/wit/witProtobuf"
import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
var first *gui.GuiWindow
// This sometimes crashes on the most recent window
// under linux. but it doesn't always crash
func main() {
var c *pb.Config
c = pb.MakeDefaultConfig()
gui.Data.Config = c
i := 1
c.Width = int32(400 + 50 * i)
c.Height = int32(400 + 50 * i)
c.Hostname = fmt.Sprintf("splash %d", i)
first = StartNewWindow(c, true, "SPLASH")
i += 1
c.Width = int32(400 + 50 * i)
c.Hostname = fmt.Sprintf("splash %d", i)
StartNewWindow(c, true, "BLAH")
i += 1
c.Width = int32(400 + 50 * i)
c.Hostname = fmt.Sprintf("splash %d", i)
StartNewWindow(c, false, "BLAH")
for {
i += 1
c.Width = int32(400 + 50 * i)
c.Hostname = fmt.Sprintf("splash %d", i)
StartNewWindow(c, false, "SPLASH")
i += 1
c.Width = int32(400 + 50 * i)
c.Hostname = fmt.Sprintf("splash %d", i)
StartNewWindow(c, false, "BLAH")
}
}
func StartNewWindow(c *pb.Config, bg bool, action string) *gui.GuiWindow {
log.Println("InitNewWindow() Create a new window")
var newGuiWindow *gui.GuiWindow
newGuiWindow = new(gui.GuiWindow)
// newGuiWindow.Config = c
/*
ui.OnShouldQuit(func() bool {
// mouseClick(&newBM)
ui.Quit()
return true
})
*/
time.Sleep(1000 * time.Millisecond)
if (bg) {
log.Println("ShowWindow() IN NEW GOROUTINE")
go ui.Main(func() {
InitWindow(newGuiWindow)
})
time.Sleep(2000 * time.Millisecond)
} else {
log.Println("ShowWindow() WAITING for ui.Main()")
ui.Main(func() {
InitWindow(newGuiWindow)
})
}
return newGuiWindow
}
func InitWindow(gw *gui.GuiWindow) {
log.Println("InitWindow() NEW WINDOW gw =", gw)
c := gui.Data.Config
gw.UiWindow = ui.NewWindow("", int(c.Width), int(c.Height), true)
// gw.UiWindow.SetBorderless(false)
blah := gw
gw.UiWindow.OnClosing(func(*ui.Window) bool {
log.Println("InitWindow() OnClosing() blah")
log.Println("InitWindow() OnClosing() blah")
log.Println("InitWindow() OnClosing() blah")
log.Println("InitWindow() OnClosing() blah")
spew.Dump(blah)
spew.Dump(gw)
log.Println("InitWindow() OnClosing() THIS WINDOW IS CLOSING gw=", gw)
spew.Dump(gw)
spew.Dump(gw.UiWindow)
// mouseClick(&newBM)
if (gw.UiWindow != nil) {
gw.UiWindow.Hide()
}
time.Sleep(1000 * time.Millisecond)
spew.Dump(gw)
// gw.UiWindow.Destroy()
ui.Quit()
time.Sleep(1000 * time.Millisecond)
return true
})
// gw.UiWindow.SetChild(gw.T)
// gw.UiWindow.SetMargined(true)
log.Println("InitWindow() Show() gw.Action =", gw.Action)
gw.UiWindow.Show()
}