try to stabilize the GUI

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2019-05-10 01:21:32 -07:00
parent 745ef852ef
commit baecdd3d58
3 changed files with 121 additions and 55 deletions

View File

@ -4,20 +4,17 @@ import "log"
// import "time"
// import "fmt"
// import "github.com/gookit/config"
import "github.com/gookit/config"
import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
// import "github.com/davecgh/go-spew/spew"
// var mainwin *ui.Window
// var maintab *ui.Tab
var jwcmainwin *ui.Window
var jwcmaintab *ui.Tab
var tabcount int
// var tabcount int
// var jcarrButton *ui.Button
// var jcarrEntry *ui.MultilineEntry
func makeCloudInfoBox() ui.Control {
hbox := ui.NewHorizontalBox()
@ -38,6 +35,7 @@ func makeCloudInfoBox() ui.Control {
log.Println("send over socket")
})
vbox.Append(mybutton, false)
vbox.Append(ui.NewLabel("Hostname:"), false)
hbox.Append(ui.NewVerticalSeparator(), false)
@ -119,5 +117,44 @@ func makeCloudInfoBox() ui.Control {
1, 0, 1, 1,
false, ui.AlignFill, false, ui.AlignFill)
vbox.Append(ui.NewLabel("Hostname:"), false)
vbox.Append(ui.NewLabel("librem15.lab.wit.com"), false)
entryForm := ui.NewForm()
entryForm.SetPadded(true)
vbox.Append(entryForm, false)
hostnameEntry := ui.NewEntry()
entryForm.Append("hostname:", hostnameEntry, false)
hostnameEntry.SetText("librem15.lab.wit.com")
IPv6entry := ui.NewEntry()
entryForm.Append("IPv6:", IPv6entry, false)
IPv6entry.SetText("2604:bbc0:3:3:0:10:0:1003")
return hbox
}
func setupCloudUI() {
jwcmainwin = ui.NewWindow("Cloud Control Panel", config.Int("width"), config.Int("height"), false)
jwcmainwin.OnClosing(func(*ui.Window) bool {
ui.Quit()
return true
})
ui.OnShouldQuit(func() bool {
jwcmainwin.Destroy()
return true
})
jwcmaintab = ui.NewTab()
jwcmainwin.SetChild(jwcmaintab)
jwcmainwin.SetMargined(true)
tabcount = 0
jwcmaintab.Append("Cloud Info", makeCloudInfoBox())
jwcmaintab.SetMargined(tabcount, true)
jwcmainwin.Show()
}

66
main.go
View File

@ -7,6 +7,9 @@ import "fmt"
import "github.com/gookit/config"
import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
import "git.wit.com/wit/gui"
// import "github.com/davecgh/go-spew/spew"
@ -24,32 +27,7 @@ import "git.wit.com/wit/gui"
// always sorted slice (new project)
// https://github.com/yaa110/sslice
func main() {
parseConfig()
// only test the socket code if no GUI
if (config.String("nogui") == "true") {
retrySocket()
onExit()
}
go gui.DoGUI()
go retrySocket()
//
// NOTE: This needs to be something long like 2 seconds.
// Not sure way. Otherwise it will hang GTK
//
/*
log.Println("Sleep for 2 seconds, then try to add new tabs")
time.Sleep(1 * 1000 * 1000 * 1000)
gui.AddChoosersDemo()
*/
log.Println("Sleep for 2 seconds, then try to add new tabs")
time.Sleep(1 * 1000 * 1000 * 1000)
gui.AddNewTab(makeCloudInfoBox())
func add2() {
var parts []gui.InputData
for key, foo := range []string{"BG", "TEXTCOLOR", "BUTTON", "TEXTCOLOR", "TEXTCOLOR", "TEXT", "BUTTON", "TEXT", "BUTTON"} {
@ -64,22 +42,24 @@ func main() {
log.Println("Sleep for 2 seconds, then try to add new tabs")
time.Sleep(1 * 1000 * 1000 * 1000)
gui.AddTableTab("test seven", 7, parts)
}
func main() {
parseConfig()
// only test the socket code if no GUI
if (config.String("nogui") == "true") {
retrySocket()
onExit()
}
go retrySocket()
// make this the main loop in an attempt to figure out the crashes
// do not change this until the GUI is stable
ui.Main(setupCloudUI)
/*
log.Println("Sleep for 1000 seconds, then try to add new tabs")
time.Sleep(1000 * 1000 * 1000 * 1000)
*/
/*
// THIS CRASHES FOR SOME REASON
log.Println("Sleep for 10 seconds, then try to add new tabs")
time.Sleep(10 * 1000 * 1000 * 1000)
gui.AddEntriesDemo()
*/
log.Println("Sleep for 2 seconds, then try to add new tabs")
time.Sleep(2 * 1000 * 1000 * 1000)
for account, _ := range config.StringMap("cloud") {
port := config.String("cloud." + account + ".port")
proto := config.String("cloud." + account + ".proto")
@ -92,11 +72,7 @@ func main() {
log.Println("Sleep for 10 seconds, then add next table")
time.Sleep(10 * 1000 * 1000 * 1000)
}
for {
// TODO: figure out how to exit
time.Sleep(10 * 1000 * 1000 * 1000)
}
*/
}
// Exit and write out the config

View File

@ -6,13 +6,14 @@ import "time"
import "net"
import "fmt"
import "bufio"
import "strings"
import "git.wit.com/wit/shell"
import "git.wit.com/jcarr/dnssecsocket"
import "git.wit.com/wit/gui"
//import "github.com/svent/go-nbreader"
// import "github.com/gookit/config"
// import "git.wit.com/wit/gui"
// import "github.com/davecgh/go-spew/spew"
@ -29,12 +30,31 @@ import "git.wit.com/jcarr/dnssecsocket"
// always sorted slice (new project)
// https://github.com/yaa110/sslice
var socketAlive bool = false
var connCurrent *net.TCPConn
const (
CONN_HOST = "v000185.testing.com.customers.wprod.wit.com"
CONN_PORT = "3333"
CONN_PROTO = "tcp"
)
func writelnToSocket(aline string) {
if connCurrent == nil {
fmt.Println("SOCKET IS NOT CONNECTED")
return
}
// a, err := connCurrent.Write([]byte(string(text + "\n")))
a, err := connCurrent.Write([]byte(string(aline + "\n")))
if err != nil {
fmt.Println("SOCKET WRITE FAILED with err=", err, a)
connCurrent = nil
return
}
}
func socketToWIT(myhostname string) {
remoteAddr := CONN_HOST + ":" + CONN_PORT
log.Println("remoteAddr:", remoteAddr)
@ -49,6 +69,7 @@ func socketToWIT(myhostname string) {
log.Println(CONN_HOST, CONN_PORT, CONN_PROTO)
log.Println(err)
log.Println("socket connect failed. Not sure what to do here. os.Exit() ?")
connCurrent = nil
return
}
defer conn.Close()
@ -58,7 +79,23 @@ func socketToWIT(myhostname string) {
tmp, err := conn.Write([]byte(string(myhostname + "\n")))
log.Println("conn.Write:", tmp, err)
connStdin, _ := conn.File()
if (err != nil) {
fmt.Println("SOCKET DIED with err=", err)
connCurrent = nil
return
}
connStdin, err := conn.File()
if (err != nil) {
fmt.Println("SOCKET File() failed with err=", err)
connCurrent = nil
return
}
// set the socketAlive flag to true since the socket appears to be alive
socketAlive = true
connCurrent = conn
newreader := bufio.NewReader(connStdin)
go shell.NonBlockingReader(newreader, os.Stdout)
@ -70,11 +107,27 @@ func socketToWIT(myhostname string) {
fmt.Print("Text to send: ")
text, _ := reader.ReadString('\n')
text = strings.TrimSpace(text) // this is like perl chomp
log.Println("LINE WAS:", text)
log.Println("LINE WAS:", text)
log.Println("LINE WAS:", text)
if (text == "ADD") {
tmp := makeCloudInfoBox()
time.Sleep(1 * 1000 * 1000 * 1000)
gui.AddNewTab(jwcmaintab, tmp, 0)
continue
}
if (text == "ADD2") {
add2()
continue
}
// send the command over the socket socket
a, err := conn.Write([]byte(string(text + "\n")))
if (err != nil) {
fmt.Println("SOCKET DIED with err=", err, a)
fmt.Println("SOCKET WRITE FAILED with err=", err, a)
return
}
}