2019-06-03 20:53:14 -05:00
|
|
|
package gui
|
|
|
|
|
|
|
|
import "log"
|
|
|
|
import "time"
|
2019-06-03 20:56:11 -05:00
|
|
|
// import "regexp"
|
2019-06-03 20:53:14 -05:00
|
|
|
|
|
|
|
import "github.com/andlabs/ui"
|
|
|
|
import _ "github.com/andlabs/ui/winmanifest"
|
|
|
|
|
2019-06-04 02:56:58 -05:00
|
|
|
func InitGuiWindow(gw *GuiWindow) *GuiWindow {
|
2019-06-03 20:53:14 -05:00
|
|
|
log.Println("InitGuiWindow() START")
|
|
|
|
var newGuiWindow GuiWindow
|
|
|
|
newGuiWindow.Width = Config.Width
|
|
|
|
newGuiWindow.Height = Config.Height
|
2019-06-04 02:56:58 -05:00
|
|
|
|
|
|
|
newGuiWindow.Axis = gw.Axis
|
2019-06-03 20:53:14 -05:00
|
|
|
newGuiWindow.MakeWindow = gw.MakeWindow
|
|
|
|
newGuiWindow.UiWindow = gw.UiWindow
|
|
|
|
newGuiWindow.UiTab = gw.UiTab
|
2019-06-04 02:56:58 -05:00
|
|
|
newGuiWindow.Name = gw.Name
|
|
|
|
|
2019-06-03 20:53:14 -05:00
|
|
|
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
|
|
|
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
|
|
|
newGuiWindow.EntryMap["test"] = nil
|
|
|
|
Data.Windows = append(Data.Windows, &newGuiWindow)
|
|
|
|
|
2019-06-13 14:08:47 -05:00
|
|
|
if (gw.UiTab == nil) {
|
|
|
|
tabnum := 0
|
|
|
|
newGuiWindow.TabNumber = &tabnum
|
|
|
|
} else {
|
|
|
|
tabnum := gw.UiTab.NumPages()
|
|
|
|
newGuiWindow.TabNumber = &tabnum
|
2019-06-04 01:17:13 -05:00
|
|
|
}
|
2019-06-13 14:08:47 -05:00
|
|
|
|
2019-06-04 02:56:58 -05:00
|
|
|
Data.WindowMap[newGuiWindow.Name] = &newGuiWindow
|
2019-06-04 01:17:13 -05:00
|
|
|
|
2019-06-03 20:53:14 -05:00
|
|
|
if (Data.buttonMap == nil) {
|
|
|
|
GuiInit()
|
|
|
|
}
|
|
|
|
log.Println("InitGuiWindow() END *GuiWindow =", &newGuiWindow)
|
|
|
|
return &newGuiWindow
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-06-04 02:56:58 -05:00
|
|
|
func StartNewWindow(bg bool, name string, axis int, callback func(*GuiWindow) *GuiBox) {
|
2019-06-03 20:53:14 -05:00
|
|
|
log.Println("StartNewWindow() Create a new window")
|
|
|
|
var junk GuiWindow
|
|
|
|
junk.MakeWindow = callback
|
2019-06-04 02:56:58 -05:00
|
|
|
junk.Name = name
|
|
|
|
junk.Axis = axis
|
|
|
|
window := InitGuiWindow(&junk)
|
2019-06-03 20:53:14 -05:00
|
|
|
if (bg) {
|
|
|
|
log.Println("StartNewWindow() START NEW GOROUTINE for ui.Main()")
|
|
|
|
go ui.Main(func() {
|
|
|
|
log.Println("gui.StartNewWindow() inside ui.Main()")
|
2019-06-13 14:08:47 -05:00
|
|
|
go initTabWindow(window)
|
2019-06-03 20:53:14 -05:00
|
|
|
})
|
|
|
|
time.Sleep(2000 * time.Millisecond) // this might make it more stable on windows?
|
|
|
|
} else {
|
|
|
|
log.Println("StartNewWindow() WAITING for ui.Main()")
|
|
|
|
ui.Main(func() {
|
|
|
|
log.Println("gui.StartNewWindow() inside ui.Main()")
|
2019-06-13 14:08:47 -05:00
|
|
|
initTabWindow(window)
|
2019-06-03 20:53:14 -05:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-13 14:08:47 -05:00
|
|
|
// This creates the raw andlabs/ui Window
|
|
|
|
func initTabWindow(gw *GuiWindow) {
|
|
|
|
log.Println("initTabWindow() START. THIS WINDOW IS NOT YET SHOWN")
|
|
|
|
log.Println("initTabWindow() START. name =", gw.Name)
|
2019-06-03 20:53:14 -05:00
|
|
|
|
2019-06-04 02:56:58 -05:00
|
|
|
gw.UiWindow = ui.NewWindow(gw.Name, int(gw.Width), int(gw.Height), true)
|
2019-06-03 20:53:14 -05:00
|
|
|
gw.UiWindow.SetBorderless(false)
|
|
|
|
|
|
|
|
gw.UiWindow.OnClosing(func(*ui.Window) bool {
|
2019-06-13 14:08:47 -05:00
|
|
|
log.Println("initTabWindow() OnClosing() THIS WINDOW IS CLOSING gw=", gw)
|
2019-06-03 20:53:14 -05:00
|
|
|
ui.Quit()
|
|
|
|
return true
|
|
|
|
})
|
|
|
|
|
|
|
|
gw.UiTab = ui.NewTab()
|
|
|
|
gw.UiWindow.SetChild(gw.UiTab)
|
|
|
|
gw.UiWindow.SetMargined(true)
|
2019-06-13 14:08:47 -05:00
|
|
|
tmp := 0
|
|
|
|
gw.TabNumber = &tmp
|
|
|
|
|
|
|
|
DumpBoxes()
|
|
|
|
// for {}
|
2019-06-03 20:53:14 -05:00
|
|
|
|
|
|
|
box := gw.MakeWindow(gw)
|
2019-06-13 14:08:47 -05:00
|
|
|
log.Println("initTabWindow() END box =", box)
|
|
|
|
log.Println("initTabWindow() END gw =", gw)
|
2019-06-03 20:53:14 -05:00
|
|
|
gw.UiWindow.Show()
|
|
|
|
}
|
|
|
|
|
|
|
|
func MessageWindow(gw *GuiWindow, msg1 string, msg2 string) {
|
|
|
|
ui.MsgBox(gw.UiWindow, msg1, msg2)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ErrorWindow(gw *GuiWindow, msg1 string, msg2 string) {
|
|
|
|
ui.MsgBoxError(gw.UiWindow, msg1, msg2)
|
|
|
|
}
|
2019-06-13 14:08:47 -05:00
|
|
|
|
|
|
|
//
|
|
|
|
// This creates a new 'window' (which is just a tab in the window)
|
|
|
|
// This is this way because on Linux you can have more than one
|
|
|
|
// actual window but that does not appear to work on the MacOS or Windows
|
|
|
|
//
|
|
|
|
func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox {
|
|
|
|
window := Data.WindowMap[name]
|
|
|
|
if (window != nil) {
|
|
|
|
box := window.BoxMap["MAINBOX"]
|
|
|
|
log.Println("gui.InitWindow() tab already exists name =", name)
|
|
|
|
ErrorWindow(box.Window, "Create Window Error", "Window " + name + " already exists")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// if there is not an account, then go to 'make account'
|
|
|
|
gw.Name = name
|
|
|
|
var junk GuiWindow
|
|
|
|
// junk.MakeWindow = callback
|
|
|
|
junk.Name = name
|
|
|
|
junk.Axis = axis
|
|
|
|
junk.UiWindow = gw.UiWindow
|
|
|
|
junk.UiTab = gw.UiTab
|
|
|
|
newWindow := InitGuiWindow(gw)
|
|
|
|
|
|
|
|
var box *GuiBox
|
|
|
|
if (axis == Xaxis) {
|
|
|
|
box = HardBox(newWindow, Xaxis, name)
|
|
|
|
} else {
|
|
|
|
box = HardBox(newWindow, Yaxis, name)
|
|
|
|
}
|
|
|
|
return box
|
|
|
|
}
|
|
|
|
|
|
|
|
func DeleteWindow(name string) {
|
|
|
|
log.Println("gui.DeleteWindow() START name =", name)
|
|
|
|
window := Data.WindowMap[name]
|
|
|
|
if (window == nil) {
|
|
|
|
log.Println("gui.DeleteWindow() NO WINDOW WITH name =", name)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|