2019-06-03 20:53:14 -05:00
|
|
|
package gui
|
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
import (
|
|
|
|
"log"
|
2021-10-24 09:01:51 -05:00
|
|
|
"fmt"
|
2021-10-06 10:43:58 -05:00
|
|
|
"strconv"
|
|
|
|
"time"
|
2019-06-03 20:53:14 -05:00
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
"github.com/andlabs/ui"
|
|
|
|
|
|
|
|
// import "regexp"
|
|
|
|
|
|
|
|
_ "github.com/andlabs/ui/winmanifest"
|
|
|
|
)
|
2019-06-03 20:53:14 -05:00
|
|
|
|
2021-10-05 09:29:55 -05:00
|
|
|
func initUI(name string, callback func(*GuiBox) *GuiBox) {
|
|
|
|
ui.Main(func() {
|
|
|
|
log.Println("gui.initUI() inside ui.Main()")
|
2019-06-13 17:30:54 -05:00
|
|
|
|
2021-10-08 07:36:53 -05:00
|
|
|
node := InitWindow(nil, nil, "StartNewWindow"+name, 0)
|
|
|
|
box := node.box
|
2021-10-05 09:29:55 -05:00
|
|
|
box = callback(box)
|
|
|
|
window := box.Window
|
2021-10-09 07:13:58 -05:00
|
|
|
node.window = window
|
2021-10-05 09:29:55 -05:00
|
|
|
log.Println("StartNewWindow() box =", box)
|
2019-06-13 17:57:43 -05:00
|
|
|
|
2021-10-05 09:29:55 -05:00
|
|
|
window.UiWindow.Show()
|
|
|
|
})
|
|
|
|
}
|
2019-06-13 17:57:43 -05:00
|
|
|
|
2021-10-05 09:29:55 -05:00
|
|
|
func StartNewWindow(bg bool, name string, axis int, callback func(*GuiBox) *GuiBox) {
|
|
|
|
log.Println("StartNewWindow() ui.Main() Create a new window")
|
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
if bg {
|
2021-10-05 09:29:55 -05:00
|
|
|
go initUI(name, callback)
|
2019-06-17 12:28:40 -05:00
|
|
|
time.Sleep(500 * time.Millisecond) // this might make it more stable on windows?
|
2019-06-03 20:53:14 -05:00
|
|
|
} else {
|
2021-10-05 09:29:55 -05:00
|
|
|
initUI(name, callback)
|
2019-06-03 20:53:14 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
//
|
2021-10-08 07:36:53 -05:00
|
|
|
func InitWindow(parent *Node, gw *GuiWindow, name string, axis int) *Node {
|
2021-10-07 21:04:16 -05:00
|
|
|
log.Println("gui.InitWindow() START")
|
2021-10-05 10:23:27 -05:00
|
|
|
|
|
|
|
var box *GuiBox
|
2021-10-08 07:36:53 -05:00
|
|
|
var node *Node
|
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
if gw == nil {
|
2021-10-08 07:36:53 -05:00
|
|
|
node = mapWindow(parent, nil, name, Config.Width, Config.Height)
|
|
|
|
box = node.box
|
2021-10-05 10:23:27 -05:00
|
|
|
} else {
|
2021-10-08 07:36:53 -05:00
|
|
|
node = mapWindow(parent, gw.UiWindow, name, Config.Width, Config.Height)
|
|
|
|
box = node.box
|
2019-06-13 14:08:47 -05:00
|
|
|
}
|
|
|
|
|
2021-10-05 10:23:27 -05:00
|
|
|
// box.Window = &newGuiWindow
|
|
|
|
newGuiWindow := box.Window
|
2019-06-13 15:09:08 -05:00
|
|
|
|
2019-06-13 16:17:05 -05:00
|
|
|
// This is the first window. One must create it here
|
2021-10-06 10:43:58 -05:00
|
|
|
if gw == nil {
|
2021-10-07 21:04:16 -05:00
|
|
|
log.Println("gui.initWindow() ADDING ui.NewWindow()")
|
2021-10-09 05:31:59 -05:00
|
|
|
node.uiNewWindow(name, Config.Width, Config.Height)
|
2021-10-08 07:36:53 -05:00
|
|
|
box.node = node
|
|
|
|
if (node.box == nil) {
|
|
|
|
node.box = box
|
2021-10-07 12:04:48 -05:00
|
|
|
}
|
2021-10-08 07:36:53 -05:00
|
|
|
w := node.uiWindow
|
2021-10-07 02:23:04 -05:00
|
|
|
newGuiWindow.UiWindow = w
|
2019-06-13 16:17:05 -05:00
|
|
|
|
2021-10-25 06:42:33 -05:00
|
|
|
f := Config.Exit
|
2021-10-07 02:23:04 -05:00
|
|
|
w.OnClosing(func(*ui.Window) bool {
|
2021-10-25 06:42:33 -05:00
|
|
|
if (Config.Debug) {
|
|
|
|
log.Println("gui.InitWindow() OnClosing()")
|
|
|
|
}
|
2019-06-17 10:09:28 -05:00
|
|
|
// newGuiWindow.UiWindow.Destroy()
|
2021-10-25 06:42:33 -05:00
|
|
|
if f == nil {
|
2019-06-17 10:09:28 -05:00
|
|
|
ui.Quit()
|
|
|
|
} else {
|
2021-10-25 06:42:33 -05:00
|
|
|
// use a custom exit function
|
|
|
|
f(node)
|
2019-06-17 10:09:28 -05:00
|
|
|
}
|
2019-06-13 16:17:05 -05:00
|
|
|
return true
|
|
|
|
})
|
|
|
|
|
|
|
|
newGuiWindow.UiTab = ui.NewTab()
|
|
|
|
newGuiWindow.UiWindow.SetChild(newGuiWindow.UiTab)
|
|
|
|
newGuiWindow.UiWindow.SetMargined(true)
|
|
|
|
tmp := 0
|
|
|
|
newGuiWindow.TabNumber = &tmp
|
2021-10-08 10:22:38 -05:00
|
|
|
node.uiTab = newGuiWindow.UiTab
|
2019-06-13 16:17:05 -05:00
|
|
|
} else {
|
2021-10-06 10:43:58 -05:00
|
|
|
newGuiWindow.UiWindow = gw.UiWindow
|
|
|
|
newGuiWindow.UiTab = gw.UiTab
|
2021-10-08 10:22:38 -05:00
|
|
|
node.uiTab = newGuiWindow.UiTab
|
2019-06-13 16:17:05 -05:00
|
|
|
}
|
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
|
|
|
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
2019-06-14 17:41:30 -05:00
|
|
|
// Data.Windows = append(Data.Windows, &newGuiWindow)
|
2019-06-13 15:09:08 -05:00
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
if newGuiWindow.UiTab == nil {
|
|
|
|
tabnum := 0
|
|
|
|
newGuiWindow.TabNumber = &tabnum
|
2019-06-13 15:09:08 -05:00
|
|
|
} else {
|
2021-10-06 10:43:58 -05:00
|
|
|
tabnum := newGuiWindow.UiTab.NumPages()
|
|
|
|
newGuiWindow.TabNumber = &tabnum
|
2021-10-08 10:22:38 -05:00
|
|
|
if (node.uiTab == nil) {
|
|
|
|
node.uiTab = newGuiWindow.UiTab
|
|
|
|
}
|
2019-06-13 15:09:08 -05:00
|
|
|
}
|
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
Data.WindowMap[newGuiWindow.Name] = newGuiWindow
|
2019-06-13 15:09:08 -05:00
|
|
|
|
2021-10-07 12:04:48 -05:00
|
|
|
if (box.node == nil) {
|
|
|
|
fn := FindNode("full initTab")
|
|
|
|
log.Println("InitWindow() fn =", fn)
|
|
|
|
log.Println("InitWindow() mapping node <=> box")
|
|
|
|
box.node = fn
|
|
|
|
if (fn.box == nil) {
|
|
|
|
log.Println("InitWindow() mapping node <=> box")
|
|
|
|
fn.box = box
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (box.node == nil) {
|
2021-10-09 02:37:14 -05:00
|
|
|
Data.ListChildren(true)
|
2021-10-07 12:04:48 -05:00
|
|
|
log.Println("InitWindow() box has a FUCKING nil node")
|
|
|
|
fn := FindNode("full initTab")
|
|
|
|
log.Println("InitWindow() fn =", fn)
|
2021-10-08 07:36:53 -05:00
|
|
|
panic(-1)
|
2021-10-07 12:04:48 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if (newGuiWindow.node == nil) {
|
2021-10-09 02:37:14 -05:00
|
|
|
Data.ListChildren(true)
|
2021-10-07 12:04:48 -05:00
|
|
|
log.Println("InitWindow() newGuiWindow has a FUCKING nil node")
|
2021-10-08 07:36:53 -05:00
|
|
|
// panic(-1)
|
2021-10-07 12:04:48 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("InitWindow() END *GuiWindow =", newGuiWindow)
|
2021-10-08 07:36:53 -05:00
|
|
|
if (box.node == nil) {
|
|
|
|
box.Dump()
|
|
|
|
panic(-1)
|
|
|
|
}
|
|
|
|
box.Dump()
|
|
|
|
box.node.Dump()
|
|
|
|
if (box.node != node) {
|
|
|
|
log.Println("InitWindow() box.node != node. Hmmm....")
|
|
|
|
log.Println("InitWindow() box.node != node. Hmmm....")
|
|
|
|
log.Println("InitWindow() box.node != node. Hmmm....")
|
|
|
|
panic(-1)
|
|
|
|
}
|
|
|
|
if (node.box != box) {
|
|
|
|
log.Println("InitWindow() node.box != box. Hmmm....")
|
|
|
|
log.Println("InitWindow() node.box != box. Hmmm....")
|
|
|
|
log.Println("InitWindow() node.box != box. Hmmm....")
|
|
|
|
panic(-1)
|
|
|
|
}
|
2021-10-08 10:22:38 -05:00
|
|
|
if (node.uiTab == nil) {
|
|
|
|
// DebugNodeChildren()
|
|
|
|
// panic("node.uiTab = nil")
|
|
|
|
}
|
2021-10-08 07:36:53 -05:00
|
|
|
return node
|
2019-06-13 14:08:47 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func DeleteWindow(name string) {
|
|
|
|
log.Println("gui.DeleteWindow() START name =", name)
|
|
|
|
window := Data.WindowMap[name]
|
2021-10-06 10:43:58 -05:00
|
|
|
if window == nil {
|
2019-06-13 14:08:47 -05:00
|
|
|
log.Println("gui.DeleteWindow() NO WINDOW WITH name =", name)
|
|
|
|
return
|
|
|
|
}
|
2019-06-13 15:09:08 -05:00
|
|
|
|
|
|
|
log.Println("gui.DumpBoxes() MAP: ", name)
|
|
|
|
log.Println("gui.DumpBoxes()\tWindow.name =", window.Name)
|
2021-10-06 10:43:58 -05:00
|
|
|
if window.TabNumber == nil {
|
2019-06-13 15:09:08 -05:00
|
|
|
log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil")
|
2019-06-13 17:57:43 -05:00
|
|
|
}
|
|
|
|
tab := *window.TabNumber
|
|
|
|
log.Println("gui.DumpBoxes() \tWindows.TabNumber =", tab)
|
|
|
|
log.Println("gui.DumpBoxes() \tSHOULD DELETE TAB", tab, "HERE")
|
|
|
|
window.UiTab.Delete(tab)
|
|
|
|
delete(Data.WindowMap, name)
|
|
|
|
|
|
|
|
// renumber tabs here
|
|
|
|
for name, window := range Data.WindowMap {
|
|
|
|
log.Println("gui.DumpBoxes() MAP: ", name)
|
2021-10-06 10:43:58 -05:00
|
|
|
if window.TabNumber == nil {
|
2019-06-13 17:57:43 -05:00
|
|
|
log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil")
|
|
|
|
} else {
|
|
|
|
log.Println("gui.DumpBoxes() \tWindows.TabNumber =", *window.TabNumber)
|
2021-10-06 10:43:58 -05:00
|
|
|
if tab < *window.TabNumber {
|
2019-06-13 17:57:43 -05:00
|
|
|
log.Println("gui.DumpBoxes() \tSubtracting 1 from TabNumber")
|
|
|
|
*window.TabNumber -= 1
|
|
|
|
log.Println("gui.DumpBoxes() \tWindows.TabNumber is now =", *window.TabNumber)
|
|
|
|
}
|
|
|
|
}
|
2019-06-13 15:09:08 -05:00
|
|
|
}
|
2019-06-13 14:08:47 -05:00
|
|
|
}
|
2021-10-04 14:39:38 -05:00
|
|
|
|
2021-10-07 06:19:35 -05:00
|
|
|
func CreateWindow(title string, tabname string, x int, y int, custom func() ui.Control) *Node {
|
|
|
|
n := CreateBlankWindow(title, x, y)
|
|
|
|
if (n.box == nil) {
|
|
|
|
log.Println("SERIOUS ERROR n.box == nil in CreateWindow()")
|
|
|
|
log.Println("SERIOUS ERROR n.box == nil in CreateWindow()")
|
|
|
|
log.Println("SERIOUS ERROR n.box == nil in CreateWindow()")
|
|
|
|
log.Println("SERIOUS ERROR n.box == nil in CreateWindow()")
|
|
|
|
}
|
2021-10-09 10:46:57 -05:00
|
|
|
n.AddTab(title, custom())
|
2021-10-09 01:51:15 -05:00
|
|
|
// TODO: run custom() here // Oct 9
|
2021-10-07 06:19:35 -05:00
|
|
|
return n
|
2021-10-05 09:29:55 -05:00
|
|
|
}
|
|
|
|
|
2021-10-09 06:38:32 -05:00
|
|
|
func (n *Node) Add(e Element) *Node {
|
|
|
|
newNode := n.addNode("testingAdd")
|
|
|
|
if(e == Tab) {
|
|
|
|
log.Println("gui.Add() SHOULD ADD element =", e.String())
|
|
|
|
}
|
|
|
|
return newNode
|
|
|
|
}
|
|
|
|
|
2021-10-08 07:36:53 -05:00
|
|
|
//
|
|
|
|
// Create a new node
|
|
|
|
// if parent == nil, that means it is a new window and needs to be put
|
|
|
|
// in the window map (aka Data.NodeMap)
|
|
|
|
//
|
2021-10-09 06:38:32 -05:00
|
|
|
func (parent *Node) addNode(title string) *Node {
|
|
|
|
var node Node
|
|
|
|
node.Name = title
|
|
|
|
node.Width = parent.Width
|
|
|
|
node.Height = parent.Height
|
|
|
|
node.parent = parent
|
|
|
|
|
|
|
|
id := Config.prefix + strconv.Itoa(Config.counter)
|
|
|
|
Config.counter += 1
|
|
|
|
node.id = id
|
|
|
|
|
|
|
|
parent.Append(&node)
|
|
|
|
return &node
|
|
|
|
}
|
|
|
|
|
2021-10-08 07:36:53 -05:00
|
|
|
func makeNode(parent *Node, title string, x int, y int) *Node {
|
2021-10-07 02:23:04 -05:00
|
|
|
var node Node
|
|
|
|
node.Name = title
|
|
|
|
node.Width = x
|
|
|
|
node.Height = y
|
2021-10-08 07:36:53 -05:00
|
|
|
|
2021-10-09 06:38:32 -05:00
|
|
|
id := Config.prefix + strconv.Itoa(Config.counter)
|
2021-10-08 07:36:53 -05:00
|
|
|
Config.counter += 1
|
|
|
|
node.id = id
|
|
|
|
|
2021-10-24 09:01:51 -05:00
|
|
|
// panic("gui.makeNode() START")
|
2021-10-08 07:36:53 -05:00
|
|
|
if (parent == nil) {
|
|
|
|
if (Data.NodeMap[title] != nil) {
|
|
|
|
log.Println("Duplicate uiNewWindow() name =", title)
|
|
|
|
// TODO: just change the 'title' to something unique
|
2021-10-24 09:01:51 -05:00
|
|
|
panic(fmt.Sprintf("Duplicate uiNewWindow() name = %s\n", title))
|
2021-10-08 07:36:53 -05:00
|
|
|
return nil
|
|
|
|
}
|
2021-10-24 09:01:51 -05:00
|
|
|
// panic("gui.makeNode() before NodeMap()")
|
2021-10-08 07:36:53 -05:00
|
|
|
Data.NodeMap[title] = &node
|
2021-10-24 09:01:51 -05:00
|
|
|
Data.NodeArray = append(Data.NodeArray, &node)
|
|
|
|
Data.NodeSlice = append(Data.NodeSlice, &node)
|
|
|
|
// panic("gui.makeNode() after NodeMap()")
|
2021-10-08 07:36:53 -05:00
|
|
|
return &node
|
|
|
|
} else {
|
2021-10-24 09:01:51 -05:00
|
|
|
panic("gui.makeNode() before Append()")
|
2021-10-08 07:36:53 -05:00
|
|
|
parent.Append(&node)
|
2021-10-24 09:01:51 -05:00
|
|
|
panic("gui.makeNode() after Append()")
|
2021-10-08 07:36:53 -05:00
|
|
|
}
|
|
|
|
node.parent = parent
|
|
|
|
return &node
|
|
|
|
}
|
|
|
|
|
2021-10-09 07:13:58 -05:00
|
|
|
func (parent *Node) makeNode(title string, x int, y int) *Node {
|
|
|
|
var node Node
|
|
|
|
node.Name = title
|
|
|
|
node.Width = x
|
|
|
|
node.Height = y
|
|
|
|
|
|
|
|
id := Config.prefix + strconv.Itoa(Config.counter)
|
|
|
|
Config.counter += 1
|
|
|
|
node.id = id
|
|
|
|
|
|
|
|
parent.Append(&node)
|
|
|
|
node.parent = parent
|
|
|
|
return &node
|
|
|
|
}
|
|
|
|
|
2021-10-09 05:31:59 -05:00
|
|
|
func (n *Node) uiNewWindow(title string, x int, y int) {
|
2021-10-07 02:23:04 -05:00
|
|
|
w := ui.NewWindow(title, x, y, false)
|
|
|
|
w.SetBorderless(false)
|
2021-10-25 06:42:33 -05:00
|
|
|
f := Config.Exit
|
2021-10-07 02:23:04 -05:00
|
|
|
w.OnClosing(func(*ui.Window) bool {
|
2021-10-25 06:42:33 -05:00
|
|
|
if (Config.Debug) {
|
|
|
|
log.Println("ui.Window().OnClosing()")
|
|
|
|
}
|
|
|
|
if (f != nil) {
|
|
|
|
f(n)
|
|
|
|
}
|
2021-10-07 02:23:04 -05:00
|
|
|
return true
|
|
|
|
})
|
|
|
|
w.SetMargined(true)
|
|
|
|
w.Show()
|
2021-10-09 05:31:59 -05:00
|
|
|
n.uiWindow = w
|
2021-10-07 05:52:22 -05:00
|
|
|
// w.node = &node
|
2021-10-09 05:31:59 -05:00
|
|
|
return
|
2021-10-07 02:23:04 -05:00
|
|
|
}
|
|
|
|
|
2021-10-07 06:19:35 -05:00
|
|
|
func CreateBlankWindow(title string, x int, y int) *Node {
|
2021-10-09 05:31:59 -05:00
|
|
|
node := mapWindow(nil, nil, title, x, y)
|
|
|
|
box := node.box
|
2021-10-06 05:14:24 -05:00
|
|
|
log.Println("gui.CreateBlankWindow() title = box.Name =", box.Name)
|
2021-10-06 01:52:27 -05:00
|
|
|
|
2021-10-09 05:31:59 -05:00
|
|
|
node.uiNewWindow(box.Name, x, y)
|
|
|
|
window := node.uiWindow
|
2021-10-07 02:23:04 -05:00
|
|
|
|
2021-10-04 14:39:38 -05:00
|
|
|
ui.OnShouldQuit(func() bool {
|
2021-10-06 01:52:27 -05:00
|
|
|
log.Println("createWindow().Destroy()", box.Name)
|
2021-10-04 14:39:38 -05:00
|
|
|
window.Destroy()
|
|
|
|
return true
|
|
|
|
})
|
|
|
|
|
2021-10-06 01:52:27 -05:00
|
|
|
box.Window.UiWindow = window
|
2021-10-09 05:31:59 -05:00
|
|
|
return node
|
2021-10-04 14:39:38 -05:00
|
|
|
}
|
2021-10-04 20:18:51 -05:00
|
|
|
|
2021-10-09 10:46:57 -05:00
|
|
|
func (n *Node) initBlankWindow() ui.Control {
|
2021-10-06 10:43:58 -05:00
|
|
|
hbox := ui.NewHorizontalBox()
|
|
|
|
hbox.SetPadded(true)
|
2021-10-04 20:18:51 -05:00
|
|
|
|
2021-10-05 09:29:55 -05:00
|
|
|
return hbox
|
|
|
|
}
|
2021-10-04 20:18:51 -05:00
|
|
|
|
2021-10-24 09:01:51 -05:00
|
|
|
func makeBlankNode(title string) *Node {
|
|
|
|
log.Println("gui.makeBlankNode() title =", title)
|
|
|
|
if Data.NodeMap[title] != nil {
|
|
|
|
log.Println("gui.makeBlankNode() already exists title =", title)
|
|
|
|
title = title + Config.prefix + strconv.Itoa(Config.counter)
|
|
|
|
Config.counter += 1
|
|
|
|
}
|
|
|
|
if Data.NodeMap[title] != nil {
|
|
|
|
panic("gui.makeBlankNode() already exists")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
node := makeNode(nil, title, x, y)
|
|
|
|
return node
|
|
|
|
}
|
2021-10-05 10:23:27 -05:00
|
|
|
|
2021-10-08 07:36:53 -05:00
|
|
|
func mapWindow(parent *Node, window *ui.Window, title string, x int, y int) *Node {
|
2021-10-06 05:14:24 -05:00
|
|
|
log.Println("gui.WindowMap START title =", title)
|
2021-10-06 10:43:58 -05:00
|
|
|
if Data.WindowMap[title] != nil {
|
2021-10-05 10:23:27 -05:00
|
|
|
log.Println("Data.WindowMap[title] already exists title =", title)
|
2021-10-24 09:01:51 -05:00
|
|
|
title = title + Config.prefix + strconv.Itoa(Config.counter)
|
|
|
|
Config.counter += 1
|
2021-10-05 10:23:27 -05:00
|
|
|
}
|
2021-10-06 10:43:58 -05:00
|
|
|
if Data.WindowMap[title] != nil {
|
2021-10-05 10:23:27 -05:00
|
|
|
log.Println("Data.WindowMap[title] already exists title =", title)
|
|
|
|
panic("Data.WindowMap[newGuiWindow.Name] already exists")
|
|
|
|
return nil
|
|
|
|
}
|
2021-10-07 02:23:04 -05:00
|
|
|
|
2021-10-06 05:14:24 -05:00
|
|
|
log.Println("gui.WindowMap START title =", title)
|
2021-10-04 20:18:51 -05:00
|
|
|
var newGuiWindow GuiWindow
|
2021-10-06 10:43:58 -05:00
|
|
|
newGuiWindow.Width = x
|
|
|
|
newGuiWindow.Height = y
|
|
|
|
newGuiWindow.Name = title
|
|
|
|
newGuiWindow.UiWindow = window
|
2021-10-04 20:18:51 -05:00
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
|
|
|
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
2021-10-04 23:38:45 -05:00
|
|
|
|
2021-10-06 10:43:58 -05:00
|
|
|
Data.WindowMap[newGuiWindow.Name] = &newGuiWindow
|
2021-10-04 23:38:45 -05:00
|
|
|
|
2021-10-04 20:18:51 -05:00
|
|
|
var box GuiBox
|
|
|
|
box.Window = &newGuiWindow
|
2021-10-06 05:14:24 -05:00
|
|
|
box.Name = title
|
2021-10-04 20:18:51 -05:00
|
|
|
|
2021-10-08 07:36:53 -05:00
|
|
|
node := makeNode(parent, title, x, y)
|
|
|
|
node.box = &box
|
2021-10-08 10:22:38 -05:00
|
|
|
node.uiWindow = window
|
2021-10-08 07:36:53 -05:00
|
|
|
box.node = node
|
|
|
|
|
2021-10-06 13:23:00 -05:00
|
|
|
newGuiWindow.BoxMap["jcarrInitTest"] = &box
|
|
|
|
|
2021-10-08 07:36:53 -05:00
|
|
|
return node
|
2021-10-04 20:18:51 -05:00
|
|
|
}
|
2021-10-06 10:43:58 -05:00
|
|
|
|
2021-10-25 06:42:33 -05:00
|
|
|
// This routine creates a blank window with a Title and size (W x H)
|
|
|
|
//
|
|
|
|
// This routine can not have any arguements due to the nature of how
|
|
|
|
// it can be passed via the 'andlabs/ui' queue which, because it is
|
|
|
|
// cross platform, must pass UI changes into the OS threads (that is
|
|
|
|
// my guess).
|
|
|
|
func NewWindow() *Node {
|
|
|
|
title := Config.Title
|
|
|
|
w := Config.Width
|
|
|
|
h := Config.Height
|
|
|
|
|
2021-10-09 05:31:59 -05:00
|
|
|
var node *Node
|
2021-10-25 06:42:33 -05:00
|
|
|
node = mapWindow(nil, nil, title, w, h)
|
2021-10-09 05:31:59 -05:00
|
|
|
box := node.box
|
2021-10-06 10:43:58 -05:00
|
|
|
log.Println("gui.NewWindow() title = box.Name =", box.Name)
|
|
|
|
|
2021-10-25 06:42:33 -05:00
|
|
|
node.uiNewWindow(box.Name, w, h)
|
2021-10-09 05:31:59 -05:00
|
|
|
window := node.uiWindow
|
2021-10-07 02:23:04 -05:00
|
|
|
|
2021-10-25 06:42:33 -05:00
|
|
|
f := Config.Exit
|
2021-10-06 10:43:58 -05:00
|
|
|
ui.OnShouldQuit(func() bool {
|
2021-10-25 06:42:33 -05:00
|
|
|
log.Println("createWindow().Destroy() on node.Name =", node.Name)
|
|
|
|
if (f != nil) {
|
|
|
|
f(node)
|
|
|
|
}
|
2021-10-06 10:43:58 -05:00
|
|
|
return true
|
|
|
|
})
|
|
|
|
|
|
|
|
box.Window.UiWindow = window
|
2021-10-09 05:31:59 -05:00
|
|
|
return node
|
2021-10-06 10:43:58 -05:00
|
|
|
}
|