diff options
| author | Jeff Carr <[email protected]> | 2022-10-08 23:22:47 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2022-10-08 23:22:47 -0500 |
| commit | 086986b6b8f55d15d18595bcbf3f76c023365b61 (patch) | |
| tree | 9f1dc4da5b2d125f7a017418d4d9912e16b71039 /window.go | |
| parent | f92a50e2e665a18e2201f1d6714025dcc39301cc (diff) | |
| parent | 45644ef9bc333f5def62d1c7f474dc96274e63fa (diff) | |
Merge branch 'master' into jcarr
Diffstat (limited to 'window.go')
| -rw-r--r-- | window.go | 206 |
1 files changed, 146 insertions, 60 deletions
@@ -1,82 +1,168 @@ package gui -import "log" -import "time" -// import "regexp" +import ( + "log" +// "fmt" + "strconv" -import "github.com/andlabs/ui" -import _ "github.com/andlabs/ui/winmanifest" + "github.com/andlabs/ui" + _ "github.com/andlabs/ui/winmanifest" +) -func InitGuiWindow(action string, gw *GuiWindow) *GuiWindow { - log.Println("InitGuiWindow() START") - var newGuiWindow GuiWindow - newGuiWindow.Width = Config.Width - newGuiWindow.Height = Config.Height - newGuiWindow.MakeWindow = gw.MakeWindow - newGuiWindow.UiWindow = gw.UiWindow - newGuiWindow.UiTab = gw.UiTab - newGuiWindow.BoxMap = make(map[string]*GuiBox) - newGuiWindow.EntryMap = make(map[string]*GuiEntry) - newGuiWindow.EntryMap["test"] = nil - Data.Windows = append(Data.Windows, &newGuiWindow) - - if (Data.buttonMap == nil) { - GuiInit() +func findUiWindow() *ui.Window { + for _, node := range Data.NodeMap { + if (node.uiWindow != nil) { + return node.uiWindow + } } - log.Println("InitGuiWindow() END *GuiWindow =", &newGuiWindow) - return &newGuiWindow + return nil +} + +func MessageWindow(msg1 string, msg2 string) (*Node) { + uiW := findUiWindow() + ui.MsgBox(uiW, msg1, msg2) + // TODO: make new node + return nil } +func ErrorWindow(msg1 string, msg2 string) (*Node) { + uiW := findUiWindow() + ui.MsgBoxError(uiW, msg1, msg2) + return nil +} + +func initNode(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 -func StartNewWindow(bg bool, action string, callback func(*GuiWindow) *GuiBox) { - log.Println("StartNewWindow() Create a new window") - var junk GuiWindow - junk.MakeWindow = callback -// junk.Action = action - window := InitGuiWindow(action, &junk) - if (bg) { - log.Println("StartNewWindow() START NEW GOROUTINE for ui.Main()") - go ui.Main(func() { - log.Println("gui.StartNewWindow() inside ui.Main()") - go InitTabWindow(window) - }) - 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()") - InitTabWindow(window) - }) + if (Data.NodeMap[title] != nil) { + log.Println("ERROR: Duplicate window name =", title) + // TODO: just change the 'title' to something unique + return Data.NodeMap[title] } + Data.NodeMap[title] = &node + Data.NodeArray = append(Data.NodeArray, &node) + Data.NodeSlice = append(Data.NodeSlice, &node) + return &node + // parent.Append(&node) + //node.parent = parent + return &node } -func InitTabWindow(gw *GuiWindow) { - log.Println("InitTabWindow() START. THIS WINDOW IS NOT YET SHOWN") +func (parent *Node) makeNode(title string, x int, y int) *Node { + var node Node + node.Name = title + node.Width = x + node.Height = y - gw.UiWindow = ui.NewWindow("InitTabWindow()", int(gw.Width), int(gw.Height), true) - gw.UiWindow.SetBorderless(false) + id := Config.prefix + strconv.Itoa(Config.counter) + Config.counter += 1 + node.id = id - gw.UiWindow.OnClosing(func(*ui.Window) bool { - log.Println("InitTabWindow() OnClosing() THIS WINDOW IS CLOSING gw=", gw) - ui.Quit() + parent.Append(&node) + node.parent = parent + return &node +} + +func (n *Node) AddNode(title string) *Node { + var node Node + node.Name = title + node.Width = n.Width + node.Height = n.Height + + id := Config.prefix + strconv.Itoa(Config.counter) + Config.counter += 1 + node.id = id + + n.Append(&node) + node.parent = n + return &node +} + +func (n *Node) uiNewWindow(title string, x int, y int) { + w := ui.NewWindow(title, x, y, Config.Menu) + w.SetBorderless(false) + f := Config.Exit + w.OnClosing(func(*ui.Window) bool { + log.Println("RUNNING the ui.Window().OnClosing() function") + if (f != nil) { + f(n) + } else { + n.Dump() + log.Println("gui.uiWindow().OnClosing() NOT SURE WHAT TO DO HERE") + // TODO: always do this here? // by default delete the node? + name := n.Name + delete(Data.NodeMap, name) + } return true }) + w.SetMargined(true) + w.Show() + n.uiWindow = w + // w.node = &node + return +} - gw.UiTab = ui.NewTab() - gw.UiWindow.SetChild(gw.UiTab) - gw.UiWindow.SetMargined(true) +/* +func mapWindow(parent *Node, window *ui.Window, title string, x int, y int) *Node { + log.Println("gui.WindowMap START title =", title) + node := makeNode(parent, title, x, y) + node.uiWindow = window - box := gw.MakeWindow(gw) - log.Println("InitTabWindow() END box =", box) - log.Println("InitTabWindow() END gw =", gw) - gw.UiWindow.Show() + return node } +*/ -func MessageWindow(gw *GuiWindow, msg1 string, msg2 string) { - ui.MsgBox(gw.UiWindow, msg1, msg2) -} +// 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). +// +// There is probably some way to pass arguements here that I'm can't think of right now +// +func NewWindow() *Node { + title := Config.Title + w := Config.Width + h := Config.Height + + if (Data.NodeMap[title] != nil) { + log.Println("Duplicate window name =", title) + Data.NodeMap[title].Dump() + Data.NodeMap[title].ListChildren(false) + uiW := Data.NodeMap[title].uiWindow + if (uiW != nil) { + uiW.Show() + } + log.Println("PROBABLY BAD ERROR: check here to see if window is really alive") + return Data.NodeMap[title] + } -func ErrorWindow(gw *GuiWindow, msg1 string, msg2 string) { - ui.MsgBoxError(gw.UiWindow, msg1, msg2) + var n *Node + n = initNode(title, w, h) + n.uiNewWindow(title, w, h) + window := n.uiWindow + + f := Config.Exit + ui.OnShouldQuit(func() bool { + log.Println("createWindow().Destroy() on node.Name =", n.Name) + if (f != nil) { + f(n) + } + return true + }) + + n.uiWindow = window + if(n.uiWindow == nil) { + log.Println("ERROR: node.uiWindow == nil. This should never happen") + } + return n } |
