diff --git a/eventChannel.go b/eventChannel.go index d7b5d78..993c714 100644 --- a/eventChannel.go +++ b/eventChannel.go @@ -72,28 +72,16 @@ func ReadReceivedData(data *pb.Event, mh *gui.TableData, box *gui.GuiBox) { // create entries for the mouse clicks within tables var newGuiButton gui.GuiButton - newGuiButton.Action = "SHOW VM WAS HERE" newGuiButton.Custom = showVmMouseClick - newGuiButton.VM = vm // set the button to this VM - // newGuiButton.GW = box if (box.Window == nil) { - newGuiButton.Action = "SHOW VM WAS HERE NIL" panic("ReadReceivedData() box == nil") } - newGuiButton.Account = data.Account newGuiButton.Box = mh.Box + newGuiButton.Values = makeGuiButtonValues(box, data.Account, vm, "JWC", "SHOW VM 33", showVmMouseClick) gui.Data.AllButtons = append(gui.Data.AllButtons, &newGuiButton) mh.Rows[row].HumanData[6].Button = &newGuiButton -// mh.Rows[row].HumanData[6].VM = vm -// mh.Rows[row].VM = vm - - log.Println("\tvm=", vm) - log.Println("\tvm.Name=", vm.Name) - log.Println("\tRows[row]=", mh.Rows[row]) - log.Println("\tRows[row]=", row) - log.Println("\tRows[row].Name=", mh.Rows[row].Name) - log.Println(vm) + log.Println("\tvm.Name=", vm.Name, mh.Rows[row].Name) row += 1 } } diff --git a/gui-accountPage.go b/gui-accountPage.go index 0152d48..dbdc934 100644 --- a/gui-accountPage.go +++ b/gui-accountPage.go @@ -30,13 +30,13 @@ func makeCloudInfoBox(gw *gui.GuiWindow) { gui.NewLabel(box, config.Accounts[key].Email) name := "Login " + config.Accounts[key].Nick - gui.CreateButton(box, config.Accounts[key], nil, name, "LOGIN", login) + makeButton(box, config.Accounts[key], nil, name, "LOGIN", login) name = "Show " + config.Accounts[key].Nick - gui.CreateButton(box, config.Accounts[key], nil, name, "SHOW", nil) + makeButton(box, config.Accounts[key], nil, name, "SHOW", nil) } - gui.CreateButton(box, nil, nil, "Add Account", "ADD TAB", addSubdomainButton) - gui.CreateButton(box, nil, nil, "Quit", "QUIT", nil) + makeButton(box, nil, nil, "Add Account", "ADD TAB", addSubdomainButton) + makeButton(box, nil, nil, "Quit", "QUIT", nil) log.Println("makeCloudInfoBox() END") } diff --git a/gui-buttonClicks.go b/gui-buttonClicks.go index fb68f47..0e39012 100644 --- a/gui-buttonClicks.go +++ b/gui-buttonClicks.go @@ -24,19 +24,30 @@ func mainMouseClick(b *gui.GuiButton) { log.Println("THIS IS PROBABLY A BUG IN git.wit.com/gui") onExit(fmt.Errorf("mainMouseClick() got b = nil")) } - log.Println("mainMouseClick() BACK IN CONTROL PANEL CODE b.Action =", b.Action) + log.Println("mainMouseClick() BACK IN CONTROL PANEL CODE") var gw *gui.GuiWindow gw = b.Box.Window if (gw == nil) { - log.Println("THIS BUTTON IS BROKEN gw = nil") + log.Println("\tTHIS BUTTON IS BROKEN gw = nil") panic("something") } - if (b.Action == "QUIT") { + 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) + + if (values.Action == "QUIT") { onExit(nil) - } else if (b.Action == "CREATE") { + } else if (values.Action == "CREATE") { log.Println("\tTRY TO ADD A NEW VIRTUAL MACHINE") log.Println("\tTRIGGER CREATE VM") gui.Data.State = "CREATE" @@ -56,25 +67,25 @@ func mainMouseClick(b *gui.GuiButton) { log.Println("defaultEntryChange() FOUND. Entry assigned to Button", b) } } - event.Account = b.Account + event.Account = values.Account log.Println("\tTRIGGERING CREATE event=", event) log.Println("\tTRIGGERING CREATE event.Account=", event.Account) websocketSendProtobuf(event) - } else if (b.Action == "CONFIG") { + } else if (values.Action == "CONFIG") { newConfig := loadDefaultConfig() config.Accounts = newConfig.Accounts gui.Data.State = "done" - } else if (b.Action == "DEBUG") { + } else if (values.Action == "DEBUG") { log.Println("\tdebug.PrintStack() (SHOULD BE JUST THIS goroutine)") debug.PrintStack() - } else if (b.Action == "DEBUG FULL") { + } 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 (b.Action == "SHOW VM") { + } else if (values.Action == "SHOW VM") { if (gui.Data.Debug) { log.Println("\tATTEMPTING TO SHOW VM TAB gw = ", gw) createVmBox(gw, b.VM) @@ -83,12 +94,12 @@ func mainMouseClick(b *gui.GuiButton) { createVmBox(gw, b.VM) } */ - } else if (b.Action == "SHOW") { + } else if (values.Action == "SHOW") { log.Println("\tTRIGGER DISPLAY ACCOUNT") gui.Data.State = "SEND WEBSOCKET" event := pb.MakeGetEvent() - event.Account = b.Account + event.Account = values.Account websocketSendProtobuf(event) count := 0 @@ -107,8 +118,8 @@ func mainMouseClick(b *gui.GuiButton) { log.Println("\tSHOW VMS count =", count) // TODO: make sure login worked & the account really has zero VMs // if (count != 0) { - name := "Virtual Machines (" + b.Account.Nick + ")" - mh := addVmsTab(gw, name, count, b.Account) + name := "Virtual Machines (" + values.Account.Nick + ")" + mh := addVmsTab(gw, name, count, values.Account) ReadReceivedData(currentMessage, mh, b.Box) // } currentMessage = nil @@ -126,17 +137,25 @@ func mainMouseClick(b *gui.GuiButton) { } } log.Println("mainMouseClick() BACK IN CONTROL PANEL CODE") - log.Println("mainMouseClick() FAILED TO FIND b.Action =", b.Action) + log.Println("mainMouseClick() FAILED TO FIND values.Action =", values.Action) log.Println("mainMouseClick() END") } -func makeButton(box *gui.GuiBox, a *pb.Account, vm *pb.Event_VM, - name string, action string, custom func(*gui.GuiButton)) *gui.GuiButton { +// 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.NewCreateButton(box, custom, name, val) } diff --git a/gui-vmPage.go b/gui-vmPage.go index d01c4f2..25262fd 100644 --- a/gui-vmPage.go +++ b/gui-vmPage.go @@ -75,7 +75,7 @@ func addVmsTab(gw *gui.GuiWindow, name string, count int, a *pb.Account) *gui.Ta human += 1 mh := gui.AddTableTab(gw, name, count, parts) - gui.CreateButton(mh.Box, a, nil, "Add Virtual Machine", "JUNK", createAddVmBox) + makeButton(mh.Box, a, nil, "Add Virtual Machine", "JUNK", createAddVmBox) return mh } @@ -83,7 +83,8 @@ func createAddVmBox(b *gui.GuiButton) { log.Println("createAddVmBox() START") gw := b.Box.Window log.Println("createAddVmBox() gw =", gw) - name := "(" + b.Account.Nick + ")" + values, _ := b.Values.(*myButtonInfo) + name := "(" + values.Account.Nick + ")" // gw.BoxMap["ADD VM" + name] = box @@ -100,13 +101,14 @@ func createAddVmBox(b *gui.GuiButton) { gui.HorizontalBreak(box) - gui.CreateButton(box, b.Account, nil, "Add Virtual Machine", "CREATE", nil) - gui.CreateButton(box, b.Account, nil, "Cancel", "CLOSE", nil) + makeButton(box, values.Account, nil, "Add Virtual Machine", "CREATE", nil) + makeButton(box, values.Account, nil, "Cancel", "CLOSE", nil) } func showVmMouseClick(b *gui.GuiButton) { log.Println("showVmMouseClick() START b.Box.Window =", b.Box.Window) - createVmBox(b.Box.Window, b.VM) + values, _ := b.Values.(*myButtonInfo) + createVmBox(b.Box.Window, values.VM) log.Println("showVmMouseClick() END") } @@ -129,13 +131,13 @@ func createVmBox(gw *gui.GuiWindow, vm *pb.Event_VM) { gui.HorizontalBreak(box) - gui.CreateButton(box, nil, vm, "Power On", "POWERON", nil) - gui.CreateButton(box, nil, vm, "Power Off", "POWEROFF", nil) - gui.CreateButton(box, nil, vm, "Destroy", "DESTROY", nil) - gui.CreateButton(box, nil, vm, "ping", "PING", runPingClick) - gui.CreateButton(box, nil, vm, "Console", "XTERM", runTestExecClick) - gui.CreateButton(box, nil, vm, "Save", "SAVE", nil) - gui.CreateButton(box, nil, vm, "Done", "DONE", nil) + makeButton(box, nil, vm, "Power On", "POWERON", nil) + makeButton(box, nil, vm, "Power Off", "POWEROFF", nil) + makeButton(box, nil, vm, "Destroy", "DESTROY", nil) + makeButton(box, nil, vm, "ping", "PING", runPingClick) + makeButton(box, nil, vm, "Console", "XTERM", runTestExecClick) + makeButton(box, nil, vm, "Save", "SAVE", nil) + makeButton(box, nil, vm, "Done", "DONE", nil) } func runTestHide(b *gui.GuiButton) { @@ -151,10 +153,11 @@ func runTestHide(b *gui.GuiButton) { func runPingClick(b *gui.GuiButton) { log.Println("runPingClick START") - log.Println("runTestExecClick b.VM", b.VM) + values, _ := b.Values.(*myButtonInfo) + log.Println("runTestExecClick values.VM", values.VM) hostname := "localhost" - if (b.VM != nil) { - hostname = b.VM.Hostname + if (values.VM != nil) { + hostname = values.VM.Hostname } spew.Dump(b) var tmp []string diff --git a/login.go b/login.go index 1b28b30..fd9a433 100644 --- a/login.go +++ b/login.go @@ -19,10 +19,13 @@ func login(b *gui.GuiButton) { // note: this may never be possible because of cross platform // andlabs/ui requirements. windows and macos seem to freak out // when you try to trigger the UI in seperate threads + + values, _ := b.Values.(*myButtonInfo) event := pb.MakeLoginEvent() - event.Account = b.Account + event.Account = values.Account websocketSendProtobuf(event) + count := 0 for { log.Println("\tSleep() in buttonClick() gui.Data.State =", gui.Data.State) @@ -36,15 +39,15 @@ func login(b *gui.GuiButton) { } else { log.Println("LOGIN currentMessage =", currentMessage) if (currentMessage.Type == pb.Event_OK) { - msg := "On account " + b.Account.Nick + "\n" + msg := "On account " + values.Account.Nick + "\n" log.Println("\tLOGIN WAS OK!", msg) - log.Println("\tLOGIN WAS OK! old button.Account was =", b.Account) + log.Println("\tLOGIN WAS OK! old button.Account was =", values.Account) log.Println("\tLOGIN WAS OK! currentMessage.Account =", currentMessage.Account) - if (b.Account.Id == currentMessage.Account.Id) { - if (b.Account.Token != currentMessage.Account.Token) { + if (values.Account.Id == currentMessage.Account.Id) { + if (values.Account.Token != currentMessage.Account.Token) { log.Println("\tLOGIN SENT NEW TOKEN") - b.Account.Token = currentMessage.Account.Token - log.Println("\tLOGIN WAS OK! old button.Account is now =", b.Account) + values.Account.Token = currentMessage.Account.Token + log.Println("\tLOGIN WAS OK! old button.Account is now =", values.Account) } } log.Println("\tLOGIN WAS OK!") @@ -53,11 +56,11 @@ func login(b *gui.GuiButton) { log.Println("\tLOGIN FAILED") log.Println("\tLOGIN FAILED") log.Println("\tLOGIN FAILED") - msg := "On account " + b.Account.Nick + "\n" + msg := "On account " + values.Account.Nick + "\n" msg += "pb.Comment = " + currentMessage.Comment + "\n" msg += "pb.Id = " + fmt.Sprintf("%d", currentMessage.Id) + "\n" - msg += "pb.Email = " + b.Account.Email + "\n" - msg += "pb.Username = " + b.Account.Username + "\n" + msg += "pb.Email = " + values.Account.Email + "\n" + msg += "pb.Username = " + values.Account.Username + "\n" gui.ErrorWindow(b.Box.Window, "Login Failed", msg) } currentMessage = nil diff --git a/main.go b/main.go index c130d69..410e3b7 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,7 @@ type myButtonInfo struct { Custom func (*gui.GuiButton) ADD func (*gui.GuiButton) Name string + Action string }