From 8ad635c307b693d3d89575357b9b536bd290a812 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 13 Jun 2019 12:08:47 -0700 Subject: [PATCH] finally vm list working again Signed-off-by: Jeff Carr --- debug.go | 65 ++++++++++++++++++------------------------------ gui.go | 6 ++--- structs.go | 2 +- table.go | 32 +++++++++++++----------- window.go | 73 ++++++++++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 109 insertions(+), 69 deletions(-) diff --git a/debug.go b/debug.go index 5c25248..5319354 100644 --- a/debug.go +++ b/debug.go @@ -3,7 +3,7 @@ package gui import "log" import "time" import "fmt" -import "reflect" +// import "reflect" // import "github.com/andlabs/ui" // import _ "github.com/andlabs/ui/winmanifest" @@ -32,13 +32,27 @@ func WatchGUI() { func DumpBoxes() { for name, window := range Data.WindowMap { - log.Println("gui.DumpBoxes()", name) + log.Println("gui.DumpBoxes() MAP: ", name) log.Println("gui.DumpBoxes()\tWindow.name =", window.Name) - log.Println("gui.DumpBoxes()\tWindow.UiWindow type =", reflect.TypeOf(window.UiWindow)) - log.Println("gui.DumpBoxes()\tWindow.UiWindow =", window.UiWindow) + // log.Println("gui.DumpBoxes()\tWindow.UiWindow type =", reflect.TypeOf(window.UiWindow)) + // log.Println("gui.DumpBoxes()\tWindow.UiWindow =", window.UiWindow) + if (window.TabNumber == nil) { + log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil") + } else { + log.Println("gui.DumpBoxes() \tWindows.TabNumber =", *window.TabNumber) + } + for name, abox := range window.BoxMap { + log.Printf("gui.DumpBoxes() \tBOX mapname=%-12s abox.Name=%-12s", name, abox.Name) + if (name == "MAINBOX") { + if (Config.Debug) { + scs := spew.ConfigState{MaxDepth: 1} + scs.Dump(abox.UiBox) + } + } + } if (window.UiTab != nil) { - log.Println("gui.DumpBoxes()\tWindow.UiTab type =", reflect.TypeOf(window.UiTab)) - log.Println("gui.DumpBoxes()\tWindow.UiTab =", window.UiTab) + // log.Println("gui.DumpBoxes()\tWindow.UiTab type =", reflect.TypeOf(window.UiTab)) + // log.Println("gui.DumpBoxes()\tWindow.UiTab =", window.UiTab) pages := window.UiTab.NumPages() log.Println("gui.DumpBoxes()\tWindow.UiTab.NumPages() =", pages) // for i := 0; i < pages; i++ { @@ -54,29 +68,10 @@ func DumpBoxes() { } } for i, window := range Data.Windows { - log.Println("gui.DumpBoxes() Data.Windows", i, "Name =", window.Name, "TabNumber =", window.TabNumber) - for name, abox := range window.BoxMap { - log.Printf("gui.DumpBoxes() \tBOX mapname=%-12s abox.Name=%-12s", name, abox.Name) - if (name == "MAINBOX") { - if (Config.Debug) { - scs := spew.ConfigState{MaxDepth: 1} - scs.Dump(abox.UiBox) - } - } - - /* - if (name == "DEBUG") { - log.Println("\t\twatchGUI() BOX abox =", reflect.TypeOf(abox)) - win := abox.Window - log.Println("\t\twatchGUI() BOX win =", reflect.TypeOf(win)) - area := win.Area - log.Println("\t\twatchGUI() BOX area =", reflect.TypeOf(area), area.UiArea) - // spew.Dump(area.UiArea) - // area.UiArea.Show() - // time.Sleep(2000 * time.Millisecond) - // os.Exit(0) - } - */ + if (window.TabNumber == nil) { + log.Println("gui.DumpBoxes() Data.Windows", i, "Name =", window.Name, "TabNumber = nil") + } else { + log.Println("gui.DumpBoxes() Data.Windows", i, "Name =", window.Name, "TabNumber =", *window.TabNumber) } } } @@ -95,16 +90,4 @@ func addTableTab() { log.Println("Sleep for 2 seconds, then try to add new tabs") time.Sleep(1 * 1000 * 1000 * 1000) - // AddTableTab(Data.Window1.T, 1, "test seven", 7, parts, nil) } - -/* -func runTestHide(b *GuiButton) { - log.Println("runTestHide START") - Data.Window1.Box1.Hide() - Data.Window1.Box2.Hide() - // time.Sleep(2000 * time.Millisecond) - Data.State = "HIDE" - log.Println("runTestHide END") -} -*/ diff --git a/gui.go b/gui.go index 0923f0f..3bdd32e 100644 --- a/gui.go +++ b/gui.go @@ -12,12 +12,12 @@ const Yaxis = 1 // box that is vertical func init() { log.Println("gui.init() has been run") + + Data.buttonMap = make(map[*ui.Button]*GuiButton) + Data.WindowMap = make(map[string]*GuiWindow) } func GuiInit() { - Data.buttonMap = make(map[*ui.Button]*GuiButton) - Data.WindowMap = make(map[string]*GuiWindow) - ui.OnShouldQuit(func() bool { ui.Quit() return true diff --git a/structs.go b/structs.go index d4f41f2..3455dc4 100644 --- a/structs.go +++ b/structs.go @@ -64,7 +64,7 @@ type GuiWindow struct { Width int Height int Axis int // does it add items to the X or Y axis - TabNumber int // the andlabs/ui tab index + TabNumber *int // the andlabs/ui tab index // the callback function to make the window contents MakeWindow func(*GuiWindow) *GuiBox diff --git a/table.go b/table.go index b4e73c1..c18ecaa 100644 --- a/table.go +++ b/table.go @@ -98,6 +98,10 @@ func InitColumns(mh *TableData, parts []TableColumnData) { } func AddTableTab(gw *GuiWindow, name string, rowcount int, parts []TableColumnData) *TableData { + // gw.Name = name + // gw = InitGuiWindow(gw) + box := InitWindow(gw, name, Yaxis) + mh := new(TableData) mh.RowCount = rowcount @@ -134,25 +138,25 @@ func AddTableTab(gw *GuiWindow, name string, rowcount int, parts []TableColumnDa } } - var gb *GuiBox - gb = new(GuiBox) +// var gb *GuiBox +// gb = new(GuiBox) - vbox := ui.NewVerticalBox() - vbox.SetPadded(true) - gb.UiBox = vbox - gb.Window = gw - gw.BoxMap[name] = gb - mh.Box = gb +// vbox := ui.NewVerticalBox() +// vbox.SetPadded(true) +// gb.UiBox = vbox +// gb.Window = gw + gw.BoxMap[name] = box + mh.Box = box - vbox.Append(table, true) - gw.UiTab.Append(name, vbox) + box.UiBox.Append(table, true) + // gw.UiTab.Append(name, vbox) - vbox.Append(ui.NewVerticalSeparator(), false) +// vbox.Append(ui.NewVerticalSeparator(), false) - hbox := ui.NewHorizontalBox() - hbox.SetPadded(true) +// hbox := ui.NewHorizontalBox() +// hbox.SetPadded(true) - vbox.Append(hbox, false) +// vbox.Append(hbox, false) return mh } diff --git a/window.go b/window.go index d8ff786..5d2553d 100644 --- a/window.go +++ b/window.go @@ -24,10 +24,14 @@ func InitGuiWindow(gw *GuiWindow) *GuiWindow { newGuiWindow.EntryMap["test"] = nil Data.Windows = append(Data.Windows, &newGuiWindow) - if (Data.WindowMap == nil) { - log.Println("gui.InitGuiWindow() making the Data.WindowMap here") - Data.WindowMap = make(map[string]*GuiWindow) + if (gw.UiTab == nil) { + tabnum := 0 + newGuiWindow.TabNumber = &tabnum + } else { + tabnum := gw.UiTab.NumPages() + newGuiWindow.TabNumber = &tabnum } + Data.WindowMap[newGuiWindow.Name] = &newGuiWindow if (Data.buttonMap == nil) { @@ -49,26 +53,28 @@ func StartNewWindow(bg bool, name string, axis int, callback func(*GuiWindow) *G log.Println("StartNewWindow() START NEW GOROUTINE for ui.Main()") go ui.Main(func() { log.Println("gui.StartNewWindow() inside ui.Main()") - go InitTabWindow(window) + 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) + initTabWindow(window) }) } } -func InitTabWindow(gw *GuiWindow) { - log.Println("InitTabWindow() START. THIS WINDOW IS NOT YET SHOWN") +// 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) gw.UiWindow = ui.NewWindow(gw.Name, int(gw.Width), int(gw.Height), true) gw.UiWindow.SetBorderless(false) gw.UiWindow.OnClosing(func(*ui.Window) bool { - log.Println("InitTabWindow() OnClosing() THIS WINDOW IS CLOSING gw=", gw) + log.Println("initTabWindow() OnClosing() THIS WINDOW IS CLOSING gw=", gw) ui.Quit() return true }) @@ -76,10 +82,15 @@ func InitTabWindow(gw *GuiWindow) { gw.UiTab = ui.NewTab() gw.UiWindow.SetChild(gw.UiTab) gw.UiWindow.SetMargined(true) + tmp := 0 + gw.TabNumber = &tmp + + DumpBoxes() + // for {} box := gw.MakeWindow(gw) - log.Println("InitTabWindow() END box =", box) - log.Println("InitTabWindow() END gw =", gw) + log.Println("initTabWindow() END box =", box) + log.Println("initTabWindow() END gw =", gw) gw.UiWindow.Show() } @@ -90,3 +101,45 @@ func MessageWindow(gw *GuiWindow, msg1 string, msg2 string) { func ErrorWindow(gw *GuiWindow, msg1 string, msg2 string) { ui.MsgBoxError(gw.UiWindow, msg1, msg2) } + +// +// 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 + } +}