diff --git a/main.go b/main.go index eb9bdb4..5e4d1b4 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,11 @@ package gui -import "log" +import ( + "log" -import "github.com/andlabs/ui" -import _ "github.com/andlabs/ui/winmanifest" + "github.com/andlabs/ui" + _ "github.com/andlabs/ui/winmanifest" +) func Main(f func()) { log.Println("Starting gui.Main() (using gtk via andlabs/ui)") @@ -13,7 +15,7 @@ func Main(f func()) { // Other goroutines must use this // // You can not acess / process the GUI thread directly from -// other goroutines. This is due to the nature of how +// other goroutines. This is due to the nature of how // Linux, MacOS and Windows work (they all work differently. suprise. surprise.) // For example: gui.Queue(addNewTabForColorSelection()) func Queue(f func()) { @@ -21,16 +23,15 @@ func Queue(f func()) { ui.QueueMain(f) } -// gui.Main( -// gui.MainExample() -// ) -func MainExample() { - name := "jcarr" - log.Println("gui.initUI() inside ui.Main()") +// gui.Main(gui.MainExample()) +func ExampleWindow() { + log.Println("START gui.ExampleWindow()") - box := InitWindow(nil, "StartNewWindow" + name, 0) + title := "Test Window" + box := InitWindow(nil, title, 0) window := box.Window - log.Println("StartNewWindow() box =", box) + log.Println("box =", box) + log.Println("window =", window) window.UiWindow.Show() } diff --git a/window.go b/window.go index a6c5b4f..1dfe05a 100644 --- a/window.go +++ b/window.go @@ -1,18 +1,22 @@ package gui -import "log" -import "time" -import "strconv" -// import "regexp" +import ( + "log" + "strconv" + "time" -import "github.com/andlabs/ui" -import _ "github.com/andlabs/ui/winmanifest" + "github.com/andlabs/ui" + + // import "regexp" + + _ "github.com/andlabs/ui/winmanifest" +) func initUI(name string, callback func(*GuiBox) *GuiBox) { ui.Main(func() { log.Println("gui.initUI() inside ui.Main()") - box := InitWindow(nil, "StartNewWindow" + name, 0) + box := InitWindow(nil, "StartNewWindow"+name, 0) box = callback(box) window := box.Window log.Println("StartNewWindow() box =", box) @@ -24,7 +28,7 @@ func initUI(name string, callback func(*GuiBox) *GuiBox) { func StartNewWindow(bg bool, name string, axis int, callback func(*GuiBox) *GuiBox) { log.Println("StartNewWindow() ui.Main() Create a new window") - if (bg) { + if bg { go initUI(name, callback) time.Sleep(500 * time.Millisecond) // this might make it more stable on windows? } else { @@ -49,7 +53,7 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox { log.Println("InitGuiWindow() START") var box *GuiBox - if (gw == nil) { + if gw == nil { box = mapWindow(nil, name, Config.Height, Config.Width) } else { box = mapWindow(gw.UiWindow, name, Config.Height, Config.Width) @@ -59,7 +63,7 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox { newGuiWindow := box.Window // This is the first window. One must create it here - if (gw == nil) { + if gw == nil { log.Println("initWindow() ADDING ui.NewWindow()") newGuiWindow.UiWindow = ui.NewWindow(name, int(newGuiWindow.Height), int(newGuiWindow.Width), true) newGuiWindow.UiWindow.SetBorderless(false) @@ -68,7 +72,7 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox { newGuiWindow.UiWindow.OnClosing(func(*ui.Window) bool { log.Println("initTabWindow() OnClosing() THIS WINDOW IS CLOSING newGuiWindow=", newGuiWindow) // newGuiWindow.UiWindow.Destroy() - if (Config.Exit == nil) { + if Config.Exit == nil { ui.Quit() } else { // allow a custom exit function @@ -83,23 +87,23 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox { tmp := 0 newGuiWindow.TabNumber = &tmp } else { - newGuiWindow.UiWindow = gw.UiWindow - newGuiWindow.UiTab = gw.UiTab + newGuiWindow.UiWindow = gw.UiWindow + newGuiWindow.UiTab = gw.UiTab } - newGuiWindow.BoxMap = make(map[string]*GuiBox) - newGuiWindow.EntryMap = make(map[string]*GuiEntry) + newGuiWindow.BoxMap = make(map[string]*GuiBox) + newGuiWindow.EntryMap = make(map[string]*GuiEntry) // Data.Windows = append(Data.Windows, &newGuiWindow) - if (newGuiWindow.UiTab == nil) { - tabnum := 0 - newGuiWindow.TabNumber = &tabnum + if newGuiWindow.UiTab == nil { + tabnum := 0 + newGuiWindow.TabNumber = &tabnum } else { - tabnum := newGuiWindow.UiTab.NumPages() - newGuiWindow.TabNumber = &tabnum + tabnum := newGuiWindow.UiTab.NumPages() + newGuiWindow.TabNumber = &tabnum } - Data.WindowMap[newGuiWindow.Name] = newGuiWindow + Data.WindowMap[newGuiWindow.Name] = newGuiWindow log.Println("InitGuiWindow() END *GuiWindow =", newGuiWindow) return box @@ -108,14 +112,14 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox { func DeleteWindow(name string) { log.Println("gui.DeleteWindow() START name =", name) window := Data.WindowMap[name] - if (window == nil) { + if window == nil { log.Println("gui.DeleteWindow() NO WINDOW WITH name =", name) return } log.Println("gui.DumpBoxes() MAP: ", name) log.Println("gui.DumpBoxes()\tWindow.name =", window.Name) - if (window.TabNumber == nil) { + if window.TabNumber == nil { log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil") } tab := *window.TabNumber @@ -127,11 +131,11 @@ func DeleteWindow(name string) { // renumber tabs here for name, window := range Data.WindowMap { log.Println("gui.DumpBoxes() MAP: ", name) - if (window.TabNumber == nil) { + if window.TabNumber == nil { log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil") } else { log.Println("gui.DumpBoxes() \tWindows.TabNumber =", *window.TabNumber) - if (tab < *window.TabNumber) { + if tab < *window.TabNumber { log.Println("gui.DumpBoxes() \tSubtracting 1 from TabNumber") *window.TabNumber -= 1 log.Println("gui.DumpBoxes() \tWindows.TabNumber is now =", *window.TabNumber) @@ -170,8 +174,8 @@ func CreateBlankWindow(title string, x int, y int) *GuiBox { } func initBlankWindow() ui.Control { - hbox := ui.NewHorizontalBox() - hbox.SetPadded(true) + hbox := ui.NewHorizontalBox() + hbox.SetPadded(true) return hbox } @@ -180,27 +184,27 @@ var master = 0 func mapWindow(window *ui.Window, title string, x int, y int) *GuiBox { log.Println("gui.WindowMap START title =", title) - if (Data.WindowMap[title] != nil) { + if Data.WindowMap[title] != nil { log.Println("Data.WindowMap[title] already exists title =", title) master = master + 1 title = title + " jcarr " + strconv.Itoa(master) } - if (Data.WindowMap[title] != nil) { + if Data.WindowMap[title] != nil { log.Println("Data.WindowMap[title] already exists title =", title) panic("Data.WindowMap[newGuiWindow.Name] already exists") return nil } log.Println("gui.WindowMap START title =", title) var newGuiWindow GuiWindow - newGuiWindow.Width = x - newGuiWindow.Height = y - newGuiWindow.Name = title - newGuiWindow.UiWindow = window + newGuiWindow.Width = x + newGuiWindow.Height = y + newGuiWindow.Name = title + newGuiWindow.UiWindow = window - newGuiWindow.BoxMap = make(map[string]*GuiBox) - newGuiWindow.EntryMap = make(map[string]*GuiEntry) + newGuiWindow.BoxMap = make(map[string]*GuiBox) + newGuiWindow.EntryMap = make(map[string]*GuiEntry) - Data.WindowMap[newGuiWindow.Name] = &newGuiWindow + Data.WindowMap[newGuiWindow.Name] = &newGuiWindow var box GuiBox box.Window = &newGuiWindow @@ -208,3 +212,25 @@ func mapWindow(window *ui.Window, title string, x int, y int) *GuiBox { return &box } + +func NewWindow(title string, x int, y int) { + box := mapWindow(nil, title, x, y) + log.Println("gui.NewWindow() title = box.Name =", box.Name) + + window := ui.NewWindow(box.Name, x, y, false) + window.SetBorderless(false) + window.OnClosing(func(*ui.Window) bool { + log.Println("createWindow().OnClosing()", box.Name) + return true + }) + ui.OnShouldQuit(func() bool { + log.Println("createWindow().Destroy()", box.Name) + window.Destroy() + return true + }) + + window.SetMargined(true) + window.Show() + + box.Window.UiWindow = window +}