From 6112b54b1e4853ed6f37483eba619a68fab9f2d9 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Wed, 29 May 2019 07:24:40 -0700 Subject: [PATCH] start to refactor the splash area code Signed-off-by: Jeff Carr --- area.go | 56 ++++++++-------------- mainCloudBox.go | 116 ++------------------------------------------ splash.go | 30 ++++++++++-- structs.go | 11 +++-- vmBox.go | 125 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 180 insertions(+), 158 deletions(-) create mode 100644 vmBox.go diff --git a/area.go b/area.go index 2d4ae59..013cd6c 100644 --- a/area.go +++ b/area.go @@ -7,63 +7,45 @@ import _ "github.com/andlabs/ui/winmanifest" import "github.com/davecgh/go-spew/spew" -func makeSplashArea() *ui.Area { +func makeSplashArea() *AreaHandler { // make this button just to get the default font (but don't display the button) // There should be another way to do this (?) Data.fontButton = CreateFontButton("SplashFont", "DONE") - makeAttributedString() + myAH.Attrstr = makeAttributedString() Data.splashArea = ui.NewArea(myAH) + Data.MyArea = Data.splashArea + myAH.Area = Data.splashArea // create a 'fake' button entry for the mouse clicks var newmap ButtonMap newmap.Action = "AREA" + newmap.AH = &myAH newmap.A = Data.splashArea - myAH.button = &newmap + myAH.Button = &newmap Data.AllButtons = append(Data.AllButtons, newmap) if (Data.Debug) { spew.Dump(Data.splashArea) log.Println("DEBUGGING", Data.Debug) } else { - log.Println("NOT DEBUGGING AREA mhAH.button =", myAH.button) + log.Println("NOT DEBUGGING AREA mhAH.Button =", myAH.Button) } - return Data.splashArea + return &myAH } -func appendWithAttributes(what string, attrs ...ui.Attribute) { - start := len(Data.attrstr.String()) +func appendWithAttributes(newText *ui.AttributedString, what string, attrs ...ui.Attribute) { + start := len(newText.String()) end := start + len(what) - Data.attrstr.AppendUnattributed(what) + newText.AppendUnattributed(what) for _, a := range attrs { - Data.attrstr.SetAttribute(a, start, end) + newText.SetAttribute(a, start, end) } } -func makeAttributedString() { - Data.attrstr = ui.NewAttributedString("") - - appendWithAttributes("Welcome to the Cloud Control Panel\n", ui.TextSize(16), ui.TextColor{0.0, 0.0, 0.8, .8}) // "RGBT" - - appendWithAttributes("(alpha)\n\n", ui.TextSize(10)) - - appendWithAttributes("This control panel was designed to be an interface to your 'private' cloud. ", ui.TextWeightBold) - appendWithAttributes("The concept of a private cloud means that you can use a providers system, or, seemlessly, use your own hardware in your own datacenter. ", ui.TextWeightBold) - - Data.attrstr.AppendUnattributed("\n") - Data.attrstr.AppendUnattributed("\n") - appendWithAttributes("This control panel requires:\n") - Data.attrstr.AppendUnattributed("\n") - appendWithAttributes("IPv6\n") - appendWithAttributes("Your hostname in DNS\n") - Data.attrstr.AppendUnattributed("\n\n\n\n\n") - - appendWithAttributes("\n", ui.TextSize(10)) -} - -func (ah areaHandler) Draw(a *ui.Area, p *ui.AreaDrawParams) { +func (ah AreaHandler) Draw(a *ui.Area, p *ui.AreaDrawParams) { tl := ui.DrawNewTextLayout(&ui.DrawTextLayoutParams{ - String: Data.attrstr, + String: myAH.Attrstr, DefaultFont: Data.fontButton.Font(), Width: p.AreaWidth, Align: ui.DrawTextAlign(1), @@ -72,7 +54,7 @@ func (ah areaHandler) Draw(a *ui.Area, p *ui.AreaDrawParams) { defer tl.Free() } -func (ah areaHandler) MouseEvent(a *ui.Area, me *ui.AreaMouseEvent) { +func (ah AreaHandler) MouseEvent(a *ui.Area, me *ui.AreaMouseEvent) { if (Data.Debug) { log.Println("GOT MouseEvent()") spew.Dump(me) @@ -84,19 +66,19 @@ func (ah areaHandler) MouseEvent(a *ui.Area, me *ui.AreaMouseEvent) { log.Println("GOT MOUSE UP") log.Println("GOT MOUSE UP") log.Println("GOT MOUSE UP") - mouseClick(myAH.button) + mouseClick(myAH.Button) } } -func (ah areaHandler) MouseCrossed(a *ui.Area, left bool) { +func (ah AreaHandler) MouseCrossed(a *ui.Area, left bool) { log.Println("GOT MouseCrossed()") } -func (ah areaHandler) DragBroken(a *ui.Area) { +func (ah AreaHandler) DragBroken(a *ui.Area) { log.Println("GOT DragBroken()") } -func (ah areaHandler) KeyEvent(a *ui.Area, ke *ui.AreaKeyEvent) (handled bool) { +func (ah AreaHandler) KeyEvent(a *ui.Area, ke *ui.AreaKeyEvent) (handled bool) { log.Println("GOT KeyEvent()") if (ke.Key == 10) { log.Println("GOT ENTER") diff --git a/mainCloudBox.go b/mainCloudBox.go index b1e171a..2c0c46b 100644 --- a/mainCloudBox.go +++ b/mainCloudBox.go @@ -2,16 +2,14 @@ package gui import "log" import "time" -import "fmt" import "regexp" -// import "os" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" import pb "git.wit.com/wit/witProtobuf" -import "github.com/davecgh/go-spew/spew" +// import "github.com/davecgh/go-spew/spew" func makeCloudInfoBox() *ui.Box { hbox := ui.NewHorizontalBox() @@ -243,41 +241,11 @@ func makeCloudWindow() { Data.State = "splash" } -func GoShowVM() { - ui.Main(ShowVM) -} - -func ShowVM() { - name := Data.CurrentVM.Name - log.Println("ShowVM() START Data.CurrentVM=", Data.CurrentVM) - VMwin := ui.NewWindow("VM " + name, 500, 300, false) - - // create a 'fake' button entry for the mouse clicks - var newButtonMap ButtonMap - newButtonMap.Action = "WINDOW CLOSE" - newButtonMap.W = VMwin - Data.AllButtons = append(Data.AllButtons, newButtonMap) - - VMwin.OnClosing(func(*ui.Window) bool { - mouseClick(&newButtonMap) - return true - }) - ui.OnShouldQuit(func() bool { - mouseClick(&newButtonMap) - return true - }) - - VMtab := ui.NewTab() - VMwin.SetChild(VMtab) - VMwin.SetMargined(true) - - CreateVmBox(VMtab, Data.CurrentVM) - VMwin.Show() -} - +/* func AddVmConfigureTab(name string, pbVM *pb.Event_VM) { CreateVmBox(Data.cloudTab, Data.CurrentVM) } +*/ // makeEntryBox(box, "hostname:", "blah.foo.org") { func makeEntryVbox(hbox *ui.Box, a string, startValue string, edit bool, action string) *EntryMap { @@ -390,81 +358,3 @@ func AddBoxToTab(name string, tab *ui.Tab, box *ui.Box) { tab.Append(name, box) tab.SetMargined(0, true) } - -func CreateVmBox(tab *ui.Tab, vm *pb.Event_VM) { - log.Println("CreateVmBox() START") - log.Println("CreateVmBox() vm.Name", vm.Name) - spew.Dump(vm) - if (Data.Debug) { - spew.Dump(vm) - } - vbox := ui.NewVerticalBox() - vbox.SetPadded(true) - - hboxAccount := ui.NewHorizontalBox() - hboxAccount.SetPadded(true) - vbox.Append(hboxAccount, false) - - // Add hostname entry box - makeEntryVbox(hboxAccount, "hostname:", vm.Hostname, true, "Hostname") - makeEntryVbox(hboxAccount, "IPv6:", vm.IPv6, true, "IPv6") - makeEntryVbox(hboxAccount, "RAM:", fmt.Sprintf("%d",vm.Memory), true, "Memory") - makeEntryVbox(hboxAccount, "CPU:", fmt.Sprintf("%d",vm.Cpus), true, "Cpus") - makeEntryVbox(hboxAccount, "Disk (GB):",fmt.Sprintf("%d",vm.Disk), true, "Disk") - makeEntryVbox(hboxAccount, "OS Image:", vm.BaseImage, true, "BaseImage") - - vbox.Append(ui.NewHorizontalSeparator(), false) - - hboxButtons := ui.NewHorizontalBox() - hboxButtons.SetPadded(true) - vbox.Append(hboxButtons, false) - - hboxButtons.Append(CreateButton(nil, vm, "Power On", "POWERON", nil), false) - hboxButtons.Append(CreateButton(nil, vm, "Power Off", "POWEROFF", nil), false) - hboxButtons.Append(CreateButton(nil, vm, "Destroy", "DESTROY", nil), false) - hboxButtons.Append(CreateButton(nil, vm, "ping", "PING", runPingClick), false) - hboxButtons.Append(CreateButton(nil, vm, "Console", "XTERM", runTestExecClick), false) - hboxButtons.Append(CreateButton(nil, vm, "Save", "SAVE", nil), false) - hboxButtons.Append(CreateButton(nil, vm, "Done", "DONE", nil), false) - - AddBoxToTab(Data.CurrentVM.Name, tab, vbox) -} - -func createAddVmBox(tab *ui.Tab, name string, b *ButtonMap) { - log.Println("createAddVmBox() START") - vbox := ui.NewVerticalBox() - vbox.SetPadded(true) - - hbox := ui.NewHorizontalBox() - hbox.SetPadded(true) - vbox.Append(hbox, false) - - // Add hostname entry box - hostname := makeEntryHbox(vbox, "Hostname:", "testhost", true, "Hostname") - memory := makeEntryHbox(vbox, "Memory:", "512", true, "Memory") - disk := makeEntryHbox(vbox, "Disk:", "20", true, "Disk") - - log.Println("createAddVmBox() hostname, memory, disk =", hostname, memory, disk) - - vbox.Append(ui.NewHorizontalSeparator(), false) - - hboxButtons := ui.NewHorizontalBox() - hboxButtons.SetPadded(true) - vbox.Append(hboxButtons, false) - - var newb ButtonMap - newb.Action = "CREATE" - newb.VM = b.VM - newb.Account = b.Account - newb.T = tab - hostname.B = &newb - memory.B = &newb - disk.B = &newb - hboxButtons.Append(AddButton(&newb, "Add Virtual Machine"), false) - - // hboxButtons.Append(CreateButton(nil, nil, "Add Virtual Machine","CREATE",nil), false) - hboxButtons.Append(CreateButton(nil, nil, "Cancel", "CLOSE", nil), false) - - name += " (" + b.Account.Nick + ")" - AddBoxToTab(name, tab, vbox) -} diff --git a/splash.go b/splash.go index 1d51901..194e556 100644 --- a/splash.go +++ b/splash.go @@ -14,10 +14,11 @@ func ShowSplashBox() *ui.Box { newbox := ui.NewVerticalBox() newbox.SetPadded(true) - makeAttributedString() - Data.MyArea = makeSplashArea() + newText := makeAttributedString() + myAH.Attrstr = newText + newAH := makeSplashArea() - newbox.Append(Data.MyArea, true) + newbox.Append(newAH.Area, true) if runtime.GOOS == "linux" { newbox.Append(ui.NewLabel("OS: Linux"), false) @@ -50,3 +51,26 @@ func ShowSplashBox() *ui.Box { return newbox } + +func makeAttributedString() *ui.AttributedString { + newText := ui.NewAttributedString("") + + appendWithAttributes(newText, "Welcome to the Cloud Control Panel\n", ui.TextSize(16), ui.TextColor{0.0, 0.0, 0.8, .8}) // "RGBT" + + appendWithAttributes(newText, "(alpha)\n\n", ui.TextSize(10)) + + appendWithAttributes(newText, "This control panel was designed to be an interface to your 'private' cloud. ", ui.TextWeightBold) + appendWithAttributes(newText, "The concept of a private cloud means that you can use a providers system, or, seemlessly, use your own hardware in your own datacenter. ", ui.TextWeightBold) + + newText.AppendUnattributed("\n") + newText.AppendUnattributed("\n") + appendWithAttributes(newText, "This control panel requires:\n") + newText.AppendUnattributed("\n") + appendWithAttributes(newText, "IPv6\n") + appendWithAttributes(newText, "newText, Your hostname in DNS\n") + newText.AppendUnattributed("\n\n\n\n\n") + + appendWithAttributes(newText, "\n", ui.TextSize(10)) + + return newText +} diff --git a/structs.go b/structs.go index b78130e..6e0aeef 100644 --- a/structs.go +++ b/structs.go @@ -13,7 +13,7 @@ import pb "git.wit.com/wit/witProtobuf" // be the safe way to interact with the GUI // var Data GuiDataStructure -var myAH areaHandler +var myAH AreaHandler type GuiDataStructure struct { State string @@ -111,6 +111,7 @@ type ButtonMap struct { Account *pb.Account VM *pb.Event_VM + AH *AreaHandler Action string // what type of button custom func (*ButtonMap) @@ -118,10 +119,10 @@ type ButtonMap struct { // AREA STRUCTURES START -type areaHandler struct{ - // buttonFunc func(int, int) - // closeFunc func(int) - button *ButtonMap +type AreaHandler struct{ + Button *ButtonMap + Attrstr *ui.AttributedString + Area *ui.Area } // AREA STRUCTURES END diff --git a/vmBox.go b/vmBox.go new file mode 100644 index 0000000..541ef44 --- /dev/null +++ b/vmBox.go @@ -0,0 +1,125 @@ +package gui + +import "log" +import "fmt" + +import "github.com/andlabs/ui" +import _ "github.com/andlabs/ui/winmanifest" + +import pb "git.wit.com/wit/witProtobuf" + +import "github.com/davecgh/go-spew/spew" + +func GoShowVM() { + ui.Main(ShowVM) +} + +func ShowVM() { + name := Data.CurrentVM.Name + log.Println("ShowVM() START Data.CurrentVM=", Data.CurrentVM) + VMwin := ui.NewWindow("VM " + name, 500, 300, false) + + // create a 'fake' button entry for the mouse clicks + var newButtonMap ButtonMap + newButtonMap.Action = "WINDOW CLOSE" + newButtonMap.W = VMwin + Data.AllButtons = append(Data.AllButtons, newButtonMap) + + VMwin.OnClosing(func(*ui.Window) bool { + mouseClick(&newButtonMap) + return true + }) + ui.OnShouldQuit(func() bool { + mouseClick(&newButtonMap) + return true + }) + + VMtab := ui.NewTab() + VMwin.SetChild(VMtab) + VMwin.SetMargined(true) + + CreateVmBox(VMtab, Data.CurrentVM) + VMwin.Show() +} + +func AddVmConfigureTab(name string, pbVM *pb.Event_VM) { + CreateVmBox(Data.cloudTab, Data.CurrentVM) +} + +func CreateVmBox(tab *ui.Tab, vm *pb.Event_VM) { + log.Println("CreateVmBox() START") + log.Println("CreateVmBox() vm.Name", vm.Name) + spew.Dump(vm) + if (Data.Debug) { + spew.Dump(vm) + } + vbox := ui.NewVerticalBox() + vbox.SetPadded(true) + + hboxAccount := ui.NewHorizontalBox() + hboxAccount.SetPadded(true) + vbox.Append(hboxAccount, false) + + // Add hostname entry box + makeEntryVbox(hboxAccount, "hostname:", vm.Hostname, true, "Hostname") + makeEntryVbox(hboxAccount, "IPv6:", vm.IPv6, true, "IPv6") + makeEntryVbox(hboxAccount, "RAM:", fmt.Sprintf("%d",vm.Memory), true, "Memory") + makeEntryVbox(hboxAccount, "CPU:", fmt.Sprintf("%d",vm.Cpus), true, "Cpus") + makeEntryVbox(hboxAccount, "Disk (GB):",fmt.Sprintf("%d",vm.Disk), true, "Disk") + makeEntryVbox(hboxAccount, "OS Image:", vm.BaseImage, true, "BaseImage") + + vbox.Append(ui.NewHorizontalSeparator(), false) + + hboxButtons := ui.NewHorizontalBox() + hboxButtons.SetPadded(true) + vbox.Append(hboxButtons, false) + + hboxButtons.Append(CreateButton(nil, vm, "Power On", "POWERON", nil), false) + hboxButtons.Append(CreateButton(nil, vm, "Power Off", "POWEROFF", nil), false) + hboxButtons.Append(CreateButton(nil, vm, "Destroy", "DESTROY", nil), false) + hboxButtons.Append(CreateButton(nil, vm, "ping", "PING", runPingClick), false) + hboxButtons.Append(CreateButton(nil, vm, "Console", "XTERM", runTestExecClick), false) + hboxButtons.Append(CreateButton(nil, vm, "Save", "SAVE", nil), false) + hboxButtons.Append(CreateButton(nil, vm, "Done", "DONE", nil), false) + + AddBoxToTab(Data.CurrentVM.Name, tab, vbox) +} + +func createAddVmBox(tab *ui.Tab, name string, b *ButtonMap) { + log.Println("createAddVmBox() START") + vbox := ui.NewVerticalBox() + vbox.SetPadded(true) + + hbox := ui.NewHorizontalBox() + hbox.SetPadded(true) + vbox.Append(hbox, false) + + // Add hostname entry box + hostname := makeEntryHbox(vbox, "Hostname:", "testhost", true, "Hostname") + memory := makeEntryHbox(vbox, "Memory:", "512", true, "Memory") + disk := makeEntryHbox(vbox, "Disk:", "20", true, "Disk") + + log.Println("createAddVmBox() hostname, memory, disk =", hostname, memory, disk) + + vbox.Append(ui.NewHorizontalSeparator(), false) + + hboxButtons := ui.NewHorizontalBox() + hboxButtons.SetPadded(true) + vbox.Append(hboxButtons, false) + + var newb ButtonMap + newb.Action = "CREATE" + newb.VM = b.VM + newb.Account = b.Account + newb.T = tab + hostname.B = &newb + memory.B = &newb + disk.B = &newb + hboxButtons.Append(AddButton(&newb, "Add Virtual Machine"), false) + + // hboxButtons.Append(CreateButton(nil, nil, "Add Virtual Machine","CREATE",nil), false) + hboxButtons.Append(CreateButton(nil, nil, "Cancel", "CLOSE", nil), false) + + name += " (" + b.Account.Nick + ")" + AddBoxToTab(name, tab, vbox) +}