diff --git a/gui-buttonClicks.go b/gui-buttonClicks.go index d80befe..e9bf064 100644 --- a/gui-buttonClicks.go +++ b/gui-buttonClicks.go @@ -3,8 +3,8 @@ package main import "log" import "fmt" import "time" -import "runtime" -import "runtime/debug" +// import "runtime" +// import "runtime/debug" import "git.wit.com/wit/gui" import pb "git.wit.com/wit/witProtobuf" @@ -16,6 +16,25 @@ import pb "git.wit.com/wit/witProtobuf" // Most mouse clicks are now moved to custom functions // +// stores the fields we want to map into our private structure 'values' +func makeGuiButtonValues(box *gui.GuiBox, a *pb.Account, vm *pb.Event_VM, + name string, action string, custom func(*gui.GuiButton)) *myButtonInfo { + val := &myButtonInfo{} + val.Account = a + val.Accounts = config.Accounts + val.VM = vm + val.Custom = custom + val.Name = "jcarr" + val.Action = action + return val +} + +func makeButton(box *gui.GuiBox, a *pb.Account, vm *pb.Event_VM, + name string, action string, custom func(*gui.GuiButton)) *gui.GuiButton { + val := makeGuiButtonValues(box, a, vm, name, action, custom) + return gui.CreateButton(box, custom, name, val) +} + func mainMouseClick(b *gui.GuiButton) { defer r() // a golang trick to try to not crash on certain errors @@ -49,115 +68,109 @@ func mainMouseClick(b *gui.GuiButton) { onExit(nil) } else if (values.Action == "CREATE") { log.Println("\tTRY TO ADD A NEW VIRTUAL MACHINE") -/* - log.Println("\tTRIGGER CREATE VM") - State = "CREATE" - event := pb.MakeAddVmEvent() - for key, entry := range gui.Data.AllEntries { - log.Println("\tdefaultEntryChange() Data.AllEntries =", key, entry) - log.Println("\tdefaultEntryChange() Data.AllEntries[key].Name =", entry.Name) - if (entry.Name == "Hostname") { - event.Vms[0].Hostname = entry.UiEntry.Text() - } - if (entry.Name == "Memory") { - event.Vms[0].Memory = pint64(entry.UiEntry.Text()) - } - log.Println("\tdefaultEntryChange() Data.AllEntries[key].E =", entry.UiEntry.Text()) - log.Println("\tdefaultEntryChange() Data.AllEntries[key].B =", entry.B) - if entry.B == b { - log.Println("defaultEntryChange() FOUND. Entry assigned to Button", b) - } - } - event.Account = values.Account - log.Println("\tTRIGGERING CREATE event=", event) - log.Println("\tTRIGGERING CREATE event.Account=", event.Account) - websocketSendProtobuf(event) -*/ - } else if (values.Action == "CONFIG") { - newConfig := loadDefaultConfig() - config.Accounts = newConfig.Accounts - State = "done" - } else if (values.Action == "DEBUG") { - log.Println("\tdebug.PrintStack() (SHOULD BE JUST THIS goroutine)") - debug.PrintStack() - } else if (values.Action == "DEBUG FULL") { - log.Println("\tATTEMPT FULL STACK DUMP") - buf := make([]byte, 1<<16) - runtime.Stack(buf, true) - log.Printf("%s", buf) - log.Println("\tFINISHED FULL STACK DUMP") - /* - } else if (values.Action == "SHOW VM") { - if (gui.Data.Debug) { - log.Println("\tATTEMPTING TO SHOW VM TAB gw = ", gw) - createVmBox(gw, b.VM) - } else { - log.Println("\tATTEMPTING TO SHOW VM TAB gw = ", gw) - createVmBox(gw, b.VM) - } - */ + createVmClick(b) } else if (values.Action == "SHOW") { - log.Println("\tTRIGGER DISPLAY ACCOUNT") - State = "SEND WEBSOCKET" - - event := pb.MakeGetEvent() - event.Account = values.Account - websocketSendProtobuf(event) - - count := 0 - for { - log.Println("\tSleep() in buttonClick() State =", State) - time.Sleep(200 * time.Millisecond) - if (State == "NEW PROTOBUF") { - if (currentMessage == nil) { - gui.ErrorWindow(gw, - "There was a socket error", - "More detailed information can be shown here.") - State = "done" - } else { - count := countVMS(currentMessage) - log.Println("\tSHOW VMS currentMessage =", currentMessage) - log.Println("\tSHOW VMS count =", count) - // TODO: make sure login worked & the account really has zero VMs - // if (count != 0) { - name := "Virtual Machines (" + values.Account.Nick + ")" - mh := addVmsTab(gw, name, count, values.Account) - ReadReceivedData(currentMessage, mh, b.Box) - // } - currentMessage = nil - State = "done" - } - return - } - count += 1 - if (count > 10) { - log.Println("\tERROR: waited too long for a resposne") - currentMessage = nil - State = "done" - return - } - } + showAccountClick(b) } log.Println("mainMouseClick() BACK IN CONTROL PANEL CODE") log.Println("mainMouseClick() FAILED TO FIND values.Action =", values.Action) log.Println("mainMouseClick() END") } -// stores the fields we want to map into our private structure 'values' -func makeGuiButtonValues(box *gui.GuiBox, a *pb.Account, vm *pb.Event_VM, - name string, action string, custom func(*gui.GuiButton)) *myButtonInfo { - val := &myButtonInfo{} - val.Account = a - val.Accounts = config.Accounts - val.VM = vm - val.Custom = custom - val.Name = "jcarr" - val.Action = action - return val +func showAccountClick(b *gui.GuiButton) { + log.Println("\tTRIGGER DISPLAY ACCOUNT") + State = "SEND WEBSOCKET" + + var values *myButtonInfo + + if tmp, ok := b.Values.(*myButtonInfo); ! ok { + log.Println("\tmainMouseClick() values.Accounts error =", ok) + log.Println("\tmainMouseClick() values.Accounts tmp =", tmp) + } else { + values = tmp + } + log.Println("\tmainMouseClick() values.Accounts =", values.Accounts) + log.Println("\tmainMouseClick() values.Name = ", values.Name) + + var gw *gui.GuiWindow + gw = b.Box.Window + + event := pb.MakeGetEvent() + event.Account = values.Account + websocketSendProtobuf(event) + + count := 0 + for { + log.Println("\tSleep() in buttonClick() State =", State) + time.Sleep(200 * time.Millisecond) + if (State == "NEW PROTOBUF") { + if (currentMessage == nil) { + gui.ErrorWindow(gw, + "There was a socket error", + "More detailed information can be shown here.") + State = "done" + } else { + count := countVMS(currentMessage) + log.Println("\tSHOW VMS currentMessage =", currentMessage) + log.Println("\tSHOW VMS count =", count) + // TODO: make sure login worked & the account really has zero VMs + // if (count != 0) { + name := "Virtual Machines (" + values.Account.Nick + ")" + mh := addVmsTab(gw, name, count, values.Account) + ReadReceivedData(currentMessage, mh, b.Box) + // } + currentMessage = nil + State = "done" + } + return + } + count += 1 + if (count > 10) { + log.Println("\tERROR: waited too long for a resposne") + currentMessage = nil + State = "done" + return + } + } } -func makeButton(box *gui.GuiBox, a *pb.Account, vm *pb.Event_VM, - name string, action string, custom func(*gui.GuiButton)) *gui.GuiButton { - val := makeGuiButtonValues(box, a, vm, name, action, custom) - return gui.CreateButton(box, custom, name, val) +func createVmClick(b *gui.GuiButton) { + log.Println("createVmClick()") + + var values *myButtonInfo + + if tmp, ok := b.Values.(*myButtonInfo); ! ok { + log.Println("\tmainMouseClick() values.Accounts error =", ok) + log.Println("\tmainMouseClick() values.Accounts tmp =", tmp) + } else { + values = tmp + } + log.Println("\tmainMouseClick() values.Accounts =", values.Accounts) + log.Println("\tmainMouseClick() values.Name = ", values.Name) + +// var gw *gui.GuiWindow +// gw = b.Box.Window + + log.Println("\tTRIGGER CREATE VM") + State = "CREATE" + event := pb.MakeAddVmEvent() + for key, entry := range gui.Data.AllEntries { + log.Println("\tdefaultEntryChange() Data.AllEntries =", key, entry) + log.Println("\tdefaultEntryChange() Data.AllEntries[key].Name =", entry.Name) + if (entry.Name == "Hostname") { + event.Vms[0].Hostname = entry.UiEntry.Text() + } + if (entry.Name == "Memory") { + event.Vms[0].Memory = pint64(entry.UiEntry.Text()) + } + log.Println("\tdefaultEntryChange() Data.AllEntries[key].E =", entry.UiEntry.Text()) + log.Println("\tdefaultEntryChange() Data.AllEntries[key].B =", entry.B) + if entry.B == b { + log.Println("defaultEntryChange() FOUND. Entry assigned to Button", b) + } + } + event.Account = values.Account + log.Println("\tTRIGGERING CREATE event=", event) + log.Println("\tTRIGGERING CREATE event.Account=", event.Account) + websocketSendProtobuf(event) } diff --git a/colors.go b/gui-colors.go similarity index 100% rename from colors.go rename to gui-colors.go