REFACTOR: continue to move in a better direction
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
b4a11c0aa1
commit
790e6f2c46
25
main.go
25
main.go
|
@ -1,9 +1,11 @@
|
|||
package gui
|
||||
|
||||
import "log"
|
||||
import (
|
||||
"log"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
import _ "github.com/andlabs/ui/winmanifest"
|
||||
"github.com/andlabs/ui"
|
||||
_ "github.com/andlabs/ui/winmanifest"
|
||||
)
|
||||
|
||||
func Main(f func()) {
|
||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||
|
@ -13,7 +15,7 @@ func Main(f func()) {
|
|||
// Other goroutines must use this
|
||||
//
|
||||
// You can not acess / process the GUI thread directly from
|
||||
// other goroutines. This is due to the nature of how
|
||||
// other goroutines. This is due to the nature of how
|
||||
// Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
|
||||
// For example: gui.Queue(addNewTabForColorSelection())
|
||||
func Queue(f func()) {
|
||||
|
@ -21,16 +23,15 @@ func Queue(f func()) {
|
|||
ui.QueueMain(f)
|
||||
}
|
||||
|
||||
// gui.Main(
|
||||
// gui.MainExample()
|
||||
// )
|
||||
func MainExample() {
|
||||
name := "jcarr"
|
||||
log.Println("gui.initUI() inside ui.Main()")
|
||||
// gui.Main(gui.MainExample())
|
||||
func ExampleWindow() {
|
||||
log.Println("START gui.ExampleWindow()")
|
||||
|
||||
box := InitWindow(nil, "StartNewWindow" + name, 0)
|
||||
title := "Test Window"
|
||||
box := InitWindow(nil, title, 0)
|
||||
window := box.Window
|
||||
log.Println("StartNewWindow() box =", box)
|
||||
log.Println("box =", box)
|
||||
log.Println("window =", window)
|
||||
|
||||
window.UiWindow.Show()
|
||||
}
|
||||
|
|
98
window.go
98
window.go
|
@ -1,18 +1,22 @@
|
|||
package gui
|
||||
|
||||
import "log"
|
||||
import "time"
|
||||
import "strconv"
|
||||
// import "regexp"
|
||||
import (
|
||||
"log"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
import _ "github.com/andlabs/ui/winmanifest"
|
||||
"github.com/andlabs/ui"
|
||||
|
||||
// import "regexp"
|
||||
|
||||
_ "github.com/andlabs/ui/winmanifest"
|
||||
)
|
||||
|
||||
func initUI(name string, callback func(*GuiBox) *GuiBox) {
|
||||
ui.Main(func() {
|
||||
log.Println("gui.initUI() inside ui.Main()")
|
||||
|
||||
box := InitWindow(nil, "StartNewWindow" + name, 0)
|
||||
box := InitWindow(nil, "StartNewWindow"+name, 0)
|
||||
box = callback(box)
|
||||
window := box.Window
|
||||
log.Println("StartNewWindow() box =", box)
|
||||
|
@ -24,7 +28,7 @@ func initUI(name string, callback func(*GuiBox) *GuiBox) {
|
|||
func StartNewWindow(bg bool, name string, axis int, callback func(*GuiBox) *GuiBox) {
|
||||
log.Println("StartNewWindow() ui.Main() Create a new window")
|
||||
|
||||
if (bg) {
|
||||
if bg {
|
||||
go initUI(name, callback)
|
||||
time.Sleep(500 * time.Millisecond) // this might make it more stable on windows?
|
||||
} else {
|
||||
|
@ -49,7 +53,7 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox {
|
|||
log.Println("InitGuiWindow() START")
|
||||
|
||||
var box *GuiBox
|
||||
if (gw == nil) {
|
||||
if gw == nil {
|
||||
box = mapWindow(nil, name, Config.Height, Config.Width)
|
||||
} else {
|
||||
box = mapWindow(gw.UiWindow, name, Config.Height, Config.Width)
|
||||
|
@ -59,7 +63,7 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox {
|
|||
newGuiWindow := box.Window
|
||||
|
||||
// This is the first window. One must create it here
|
||||
if (gw == nil) {
|
||||
if gw == nil {
|
||||
log.Println("initWindow() ADDING ui.NewWindow()")
|
||||
newGuiWindow.UiWindow = ui.NewWindow(name, int(newGuiWindow.Height), int(newGuiWindow.Width), true)
|
||||
newGuiWindow.UiWindow.SetBorderless(false)
|
||||
|
@ -68,7 +72,7 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox {
|
|||
newGuiWindow.UiWindow.OnClosing(func(*ui.Window) bool {
|
||||
log.Println("initTabWindow() OnClosing() THIS WINDOW IS CLOSING newGuiWindow=", newGuiWindow)
|
||||
// newGuiWindow.UiWindow.Destroy()
|
||||
if (Config.Exit == nil) {
|
||||
if Config.Exit == nil {
|
||||
ui.Quit()
|
||||
} else {
|
||||
// allow a custom exit function
|
||||
|
@ -83,23 +87,23 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox {
|
|||
tmp := 0
|
||||
newGuiWindow.TabNumber = &tmp
|
||||
} else {
|
||||
newGuiWindow.UiWindow = gw.UiWindow
|
||||
newGuiWindow.UiTab = gw.UiTab
|
||||
newGuiWindow.UiWindow = gw.UiWindow
|
||||
newGuiWindow.UiTab = gw.UiTab
|
||||
}
|
||||
|
||||
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
||||
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
||||
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
||||
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
||||
// Data.Windows = append(Data.Windows, &newGuiWindow)
|
||||
|
||||
if (newGuiWindow.UiTab == nil) {
|
||||
tabnum := 0
|
||||
newGuiWindow.TabNumber = &tabnum
|
||||
if newGuiWindow.UiTab == nil {
|
||||
tabnum := 0
|
||||
newGuiWindow.TabNumber = &tabnum
|
||||
} else {
|
||||
tabnum := newGuiWindow.UiTab.NumPages()
|
||||
newGuiWindow.TabNumber = &tabnum
|
||||
tabnum := newGuiWindow.UiTab.NumPages()
|
||||
newGuiWindow.TabNumber = &tabnum
|
||||
}
|
||||
|
||||
Data.WindowMap[newGuiWindow.Name] = newGuiWindow
|
||||
Data.WindowMap[newGuiWindow.Name] = newGuiWindow
|
||||
|
||||
log.Println("InitGuiWindow() END *GuiWindow =", newGuiWindow)
|
||||
return box
|
||||
|
@ -108,14 +112,14 @@ func InitWindow(gw *GuiWindow, name string, axis int) *GuiBox {
|
|||
func DeleteWindow(name string) {
|
||||
log.Println("gui.DeleteWindow() START name =", name)
|
||||
window := Data.WindowMap[name]
|
||||
if (window == nil) {
|
||||
if window == nil {
|
||||
log.Println("gui.DeleteWindow() NO WINDOW WITH name =", name)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("gui.DumpBoxes() MAP: ", name)
|
||||
log.Println("gui.DumpBoxes()\tWindow.name =", window.Name)
|
||||
if (window.TabNumber == nil) {
|
||||
if window.TabNumber == nil {
|
||||
log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil")
|
||||
}
|
||||
tab := *window.TabNumber
|
||||
|
@ -127,11 +131,11 @@ func DeleteWindow(name string) {
|
|||
// renumber tabs here
|
||||
for name, window := range Data.WindowMap {
|
||||
log.Println("gui.DumpBoxes() MAP: ", name)
|
||||
if (window.TabNumber == nil) {
|
||||
if window.TabNumber == nil {
|
||||
log.Println("gui.DumpBoxes() \tWindows.TabNumber = nil")
|
||||
} else {
|
||||
log.Println("gui.DumpBoxes() \tWindows.TabNumber =", *window.TabNumber)
|
||||
if (tab < *window.TabNumber) {
|
||||
if tab < *window.TabNumber {
|
||||
log.Println("gui.DumpBoxes() \tSubtracting 1 from TabNumber")
|
||||
*window.TabNumber -= 1
|
||||
log.Println("gui.DumpBoxes() \tWindows.TabNumber is now =", *window.TabNumber)
|
||||
|
@ -170,8 +174,8 @@ func CreateBlankWindow(title string, x int, y int) *GuiBox {
|
|||
}
|
||||
|
||||
func initBlankWindow() ui.Control {
|
||||
hbox := ui.NewHorizontalBox()
|
||||
hbox.SetPadded(true)
|
||||
hbox := ui.NewHorizontalBox()
|
||||
hbox.SetPadded(true)
|
||||
|
||||
return hbox
|
||||
}
|
||||
|
@ -180,27 +184,27 @@ var master = 0
|
|||
|
||||
func mapWindow(window *ui.Window, title string, x int, y int) *GuiBox {
|
||||
log.Println("gui.WindowMap START title =", title)
|
||||
if (Data.WindowMap[title] != nil) {
|
||||
if Data.WindowMap[title] != nil {
|
||||
log.Println("Data.WindowMap[title] already exists title =", title)
|
||||
master = master + 1
|
||||
title = title + " jcarr " + strconv.Itoa(master)
|
||||
}
|
||||
if (Data.WindowMap[title] != nil) {
|
||||
if Data.WindowMap[title] != nil {
|
||||
log.Println("Data.WindowMap[title] already exists title =", title)
|
||||
panic("Data.WindowMap[newGuiWindow.Name] already exists")
|
||||
return nil
|
||||
}
|
||||
log.Println("gui.WindowMap START title =", title)
|
||||
var newGuiWindow GuiWindow
|
||||
newGuiWindow.Width = x
|
||||
newGuiWindow.Height = y
|
||||
newGuiWindow.Name = title
|
||||
newGuiWindow.UiWindow = window
|
||||
newGuiWindow.Width = x
|
||||
newGuiWindow.Height = y
|
||||
newGuiWindow.Name = title
|
||||
newGuiWindow.UiWindow = window
|
||||
|
||||
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
||||
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
||||
newGuiWindow.BoxMap = make(map[string]*GuiBox)
|
||||
newGuiWindow.EntryMap = make(map[string]*GuiEntry)
|
||||
|
||||
Data.WindowMap[newGuiWindow.Name] = &newGuiWindow
|
||||
Data.WindowMap[newGuiWindow.Name] = &newGuiWindow
|
||||
|
||||
var box GuiBox
|
||||
box.Window = &newGuiWindow
|
||||
|
@ -208,3 +212,25 @@ func mapWindow(window *ui.Window, title string, x int, y int) *GuiBox {
|
|||
|
||||
return &box
|
||||
}
|
||||
|
||||
func NewWindow(title string, x int, y int) {
|
||||
box := mapWindow(nil, title, x, y)
|
||||
log.Println("gui.NewWindow() title = box.Name =", box.Name)
|
||||
|
||||
window := ui.NewWindow(box.Name, x, y, false)
|
||||
window.SetBorderless(false)
|
||||
window.OnClosing(func(*ui.Window) bool {
|
||||
log.Println("createWindow().OnClosing()", box.Name)
|
||||
return true
|
||||
})
|
||||
ui.OnShouldQuit(func() bool {
|
||||
log.Println("createWindow().Destroy()", box.Name)
|
||||
window.Destroy()
|
||||
return true
|
||||
})
|
||||
|
||||
window.SetMargined(true)
|
||||
window.Show()
|
||||
|
||||
box.Window.UiWindow = window
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue