summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debug.go6
-rw-r--r--structs.go226
-rw-r--r--window-debug.go77
-rw-r--r--window.go2
4 files changed, 177 insertions, 134 deletions
diff --git a/debug.go b/debug.go
index c0ae5dd..8c1e947 100644
--- a/debug.go
+++ b/debug.go
@@ -33,8 +33,12 @@ func WatchGUI() {
}
func DumpMap() {
- for name, _ := range Data.WindowMap {
+ for name, window := range Data.WindowMap {
log.Println("gui.DumpBoxes() MAP: ", name)
+ log.Println("gui.DumpBoxes() BOXES:", name)
+ for name, abox := range window.BoxMap {
+ log.Printf("gui.DumpBoxes() \tBOX mapname=%-12s abox.Name=%-12s", name, abox.Name)
+ }
}
}
diff --git a/structs.go b/structs.go
index 6387b45..71921bd 100644
--- a/structs.go
+++ b/structs.go
@@ -1,36 +1,39 @@
package gui
-import "log"
-import "image/color"
-import "golang.org/x/image/font"
+import (
+ "image/color"
+ "log"
-import "github.com/andlabs/ui"
-import _ "github.com/andlabs/ui/winmanifest"
+ "github.com/andlabs/ui"
+ "golang.org/x/image/font"
+
+ _ "github.com/andlabs/ui/winmanifest"
+)
//
// All GUI Data Structures and functions that are external
// If you need cross platform support, these might only
// be the safe way to interact with the GUI
//
-var Data GuiData
-var Config GuiConfig
+var Data GuiData
+var Config GuiConfig
type GuiConfig struct {
- Width int
- Height int
- Debug bool
- DebugTable bool
- Exit func(*GuiWindow)
+ Width int
+ Height int
+ Debug bool
+ DebugTable bool
+ Exit func(*GuiWindow)
}
type GuiData struct {
- // a fallback default function to handle mouse events
+ // a fallback default function to handle mouse events
// if nothing else is defined to handle them
- MouseClick func(*GuiButton)
+ MouseClick func(*GuiButton)
// A map of all the entry boxes
- AllEntries []*GuiEntry
- WindowMap map[string]*GuiWindow
+ AllEntries []*GuiEntry
+ WindowMap map[string]*GuiWindow
// Windows []*GuiWindow
@@ -40,15 +43,15 @@ type GuiData struct {
//
// This has to work this way because of how
// andlabs/ui & andlabs/libui work
- AllButtons []*GuiButton
- buttonMap map[*ui.Button]*GuiButton
- Nodes *Node
+ AllButtons []*GuiButton
+ buttonMap map[*ui.Button]*GuiButton
+ Nodes *Node
}
type GuiTab struct {
- Name string // field for human readable name
- Number int // the andlabs/ui tab index
- Window *GuiWindow // the parent Window
+ Name string // field for human readable name
+ Number int // the andlabs/ui tab index
+ Window *GuiWindow // the parent Window
}
//
@@ -70,42 +73,42 @@ type GuiTab struct {
// can destroy and replace it with something else
//
type GuiWindow struct {
- Name string // field for human readable name
- Width int
- Height int
- Axis int // does it add items to the X or Y axis
- TabNumber *int // the andlabs/ui tab index
+ Name string // field for human readable name
+ Width int
+ Height int
+ Axis int // does it add items to the X or Y axis
+ TabNumber *int // the andlabs/ui tab index
// the callback function to make the window contents
// MakeWindow func(*GuiBox) *GuiBox
// the components of the window
- BoxMap map[string]*GuiBox
- EntryMap map[string]*GuiEntry
- Area *GuiArea
+ BoxMap map[string]*GuiBox
+ EntryMap map[string]*GuiEntry
+ Area *GuiArea
// andlabs/ui abstraction mapping
- UiWindow *ui.Window
- UiTab *ui.Tab // if this != nil, the window is 'tabbed'
+ UiWindow *ui.Window
+ UiTab *ui.Tab // if this != nil, the window is 'tabbed'
}
// GuiBox is any type of ui.Hbox or ui.Vbox
// There can be lots of these for each GuiWindow
type GuiBox struct {
- Name string // field for human readable name
- Axis int // does it add items to the X or Y axis
- Window *GuiWindow // the parent Window
+ Name string // field for human readable name
+ Axis int // does it add items to the X or Y axis
+ Window *GuiWindow // the parent Window
// andlabs/ui abstraction mapping
- UiBox *ui.Box
+ UiBox *ui.Box
}
func (s GuiBox) SetTitle(title string) {
log.Println("DID IT!", title)
- if (s.Window == nil) {
+ if s.Window == nil {
return
}
- if (s.Window.UiWindow == nil) {
+ if s.Window.UiWindow == nil {
return
}
s.Window.UiWindow.SetTitle(title)
@@ -113,17 +116,33 @@ func (s GuiBox) SetTitle(title string) {
}
func (s GuiBox) Append(child ui.Control, x bool) {
- if (s.UiBox == nil) {
+ if s.UiBox == nil {
return
}
s.UiBox.Append(child, x)
}
+func (w GuiWindow) InitBox(title string) *GuiBox {
+ if w.UiWindow == nil {
+ log.Println("gui.InitBox() THIS SHOULD NEVER HAPPEN. Window doesn't exist", w)
+ return nil
+ }
+ tab := ui.NewTab()
+ w.UiWindow.SetChild(tab)
+ w.UiWindow.SetMargined(true)
+
+ tab.Append(title, initBlankWindow())
+ tab.SetMargined(0, true)
+
+ w.UiTab = tab
+ return nil
+}
+
func (s GuiBox) InitTab(title string) *ui.Tab {
- if (s.Window == nil) {
+ if s.Window == nil {
return nil
}
- if (s.Window.UiWindow == nil) {
+ if s.Window.UiWindow == nil {
return nil
}
@@ -141,10 +160,10 @@ func (s GuiBox) InitTab(title string) *ui.Tab {
}
func (s GuiBox) AddTab(title string, custom ui.Control) *ui.Tab {
- if (s.Window == nil) {
+ if s.Window == nil {
return nil
}
- if (s.Window.UiTab == nil) {
+ if s.Window.UiTab == nil {
return nil
}
@@ -155,10 +174,10 @@ func (s GuiBox) AddTab(title string, custom ui.Control) *ui.Tab {
}
func (s GuiBox) AddTab2(title string, custom ui.Control) *ui.Tab {
- if (s.Window == nil) {
+ if s.Window == nil {
return nil
}
- if (s.Window.UiTab == nil) {
+ if s.Window.UiTab == nil {
return nil
}
@@ -200,32 +219,32 @@ func tabSetMargined(tab *ui.Tab) {
// the user clicks it. You could probably
// call this 'GuiMouseClick'
type GuiButton struct {
- Name string // field for human readable name
- Box *GuiBox // what box the button click was in
+ Name string // field for human readable name
+ Box *GuiBox // what box the button click was in
// a callback function for the main application
- Custom func (*GuiButton)
- Values interface {}
- Color color.RGBA
+ Custom func(*GuiButton)
+ Values interface{}
+ Color color.RGBA
// andlabs/ui abstraction mapping
- B *ui.Button
- FB *ui.FontButton
- CB *ui.ColorButton
+ B *ui.Button
+ FB *ui.FontButton
+ CB *ui.ColorButton
}
// text entry fields
type GuiEntry struct {
- Name string // field for human readable name
- Edit bool
- Last string // the last value
- Normalize func (string) string // function to 'normalize' the data
+ Name string // field for human readable name
+ Edit bool
+ Last string // the last value
+ Normalize func(string) string // function to 'normalize' the data
- B *GuiButton
- Box *GuiBox
+ B *GuiButton
+ Box *GuiBox
// andlabs/ui abstraction mapping
- UiEntry *ui.Entry
+ UiEntry *ui.Entry
}
//
@@ -233,20 +252,21 @@ type GuiEntry struct {
// AREA STRUCTURES START
// AREA STRUCTURES START
//
-type GuiArea struct{
- Button *GuiButton // what button handles mouse events
- Box *GuiBox
+type GuiArea struct {
+ Button *GuiButton // what button handles mouse events
+ Box *GuiBox
- UiAttrstr *ui.AttributedString
- UiArea *ui.Area
+ UiAttrstr *ui.AttributedString
+ UiArea *ui.Area
}
type FontString struct {
- S string
- Size int
- F font.Face
- W font.Weight
+ S string
+ Size int
+ F font.Face
+ W font.Weight
}
+
//
// AREA STRUCTURES END
// AREA STRUCTURES END
@@ -264,18 +284,18 @@ type FontString struct {
// to the GUI. This is the "authoritative" data.
//
type TableData struct {
- RowCount int // This is the number of 'rows' which really means data elements not what the human sees
- RowWidth int // This is how wide each row is
- Rows []RowData // This is all the table data by row
- generatedColumnTypes []ui.TableValue // generate this dynamically
+ RowCount int // This is the number of 'rows' which really means data elements not what the human sees
+ RowWidth int // This is how wide each row is
+ Rows []RowData // This is all the table data by row
+ generatedColumnTypes []ui.TableValue // generate this dynamically
- Cells [20]CellData
- Human [20]HumanMap
+ Cells [20]CellData
+ Human [20]HumanMap
- Box *GuiBox
+ Box *GuiBox
- lastRow int
- lastColumn int
+ lastRow int
+ lastColumn int
}
//
@@ -294,44 +314,44 @@ type TableData struct {
// TODO: re-add images and the progress bar (works in andlabs/ui)
//
type HumanCellData struct {
- Name string // what kind of row is this?
- Text string
- TextID int
- Color color.RGBA
- ColorID int
- Button *GuiButton
+ Name string // what kind of row is this?
+ Text string
+ TextID int
+ Color color.RGBA
+ ColorID int
+ Button *GuiButton
}
type HumanMap struct {
- Name string // what kind of row is this?
- TextID int
- ColorID int
+ Name string // what kind of row is this?
+ TextID int
+ ColorID int
}
type TableColumnData struct {
- Index int
- CellType string
- Heading string
- Color string
+ Index int
+ CellType string
+ Heading string
+ Color string
}
type CellData struct {
- Index int
- HumanID int
- Name string // what type of cell is this?
+ Index int
+ HumanID int
+ Name string // what type of cell is this?
}
// hmm. will this stand the test of time?
type RowData struct {
- Name string // what kind of row is this?
- Status string // status of the row?
-/*
- // TODO: These may or may not be implementable
- // depending on if it's possible to detect the bgcolor or what row is selected
- click func() // what function to call if the user clicks on it
- doubleclick func() // what function to call if the user double clicks on it
-*/
- HumanData [20]HumanCellData
+ Name string // what kind of row is this?
+ Status string // status of the row?
+ /*
+ // TODO: These may or may not be implementable
+ // depending on if it's possible to detect the bgcolor or what row is selected
+ click func() // what function to call if the user clicks on it
+ doubleclick func() // what function to call if the user double clicks on it
+ */
+ HumanData [20]HumanCellData
}
//
diff --git a/window-debug.go b/window-debug.go
index 77a7e5e..704ef7b 100644
--- a/window-debug.go
+++ b/window-debug.go
@@ -20,7 +20,7 @@ func makeWindowDebug() ui.Control {
vbox.Append(pbar, false)
/////////////////////////////////////////////////////
- vbox = addGroup(hbox, "WindowMap 2")
+ vbox = addGroup(hbox, "Window")
cbox := ui.NewCombobox()
for name, _ := range Data.WindowMap {
@@ -39,9 +39,9 @@ func makeWindowDebug() ui.Control {
})
/////////////////////////////////////////////////////
- vbox = addGroup(hbox, "Buttons")
+ vbox = addGroup(hbox, "Debug Window")
- b1 := addButton(vbox, "dumpBox(name)")
+ b1 := addButton(vbox, "dumpBox(window)")
b1.OnClicked(func(*ui.Button) {
x := cbox.Selected()
log.Println("x =", x)
@@ -49,23 +49,12 @@ func makeWindowDebug() ui.Control {
dumpBox(names[x])
})
- dump2 := addButton(vbox, "Dump Boxes")
- dump2.OnClicked(func(*ui.Button) {
- DumpBoxes()
- })
-
- dump1 := addButton(vbox, "Dump MAP")
- dump1.OnClicked(func(*ui.Button) {
- DumpMap()
- })
-
- b2 := addButton(vbox, "SetMargined()")
+ b2 := addButton(vbox, "SetMargined(tab)")
b2.OnClicked(func(*ui.Button) {
x := cbox.Selected()
log.Println("x =", x)
- log.Println("findBox; names[x] =", names[x])
- findBox(names[x])
- gw := findBox(names[x])
+ log.Println("FindWindow; names[x] =", names[x])
+ gw := FindWindow(names[x])
if gw == nil {
return
}
@@ -82,13 +71,12 @@ func makeWindowDebug() ui.Control {
gw.UiTab.SetMargined(*gw.TabNumber, true)
})
- b3 := addButton(vbox, "Hide()")
+ b3 := addButton(vbox, "Hide(tab)")
b3.OnClicked(func(*ui.Button) {
x := cbox.Selected()
log.Println("x =", x)
- log.Println("findBox; names[x] =", names[x])
- findBox(names[x])
- gw := findBox(names[x])
+ log.Println("FindWindow; names[x] =", names[x])
+ gw := FindWindow(names[x])
if gw == nil {
return
}
@@ -98,13 +86,12 @@ func makeWindowDebug() ui.Control {
gw.UiTab.Hide()
})
- b4 := addButton(vbox, "Show()")
+ b4 := addButton(vbox, "Show(tab)")
b4.OnClicked(func(*ui.Button) {
x := cbox.Selected()
log.Println("x =", x)
- log.Println("findBox; names[x] =", names[x])
- findBox(names[x])
- gw := findBox(names[x])
+ log.Println("FindWindow; names[x] =", names[x])
+ gw := FindWindow(names[x])
if gw == nil {
return
}
@@ -114,13 +101,12 @@ func makeWindowDebug() ui.Control {
gw.UiTab.Show()
})
- b5 := addButton(vbox, "Delete()")
+ b5 := addButton(vbox, "Delete(tab)")
b5.OnClicked(func(*ui.Button) {
x := cbox.Selected()
log.Println("x =", x)
- log.Println("findBox; names[x] =", names[x])
- findBox(names[x])
- gw := findBox(names[x])
+ log.Println("FindWindow; names[x] =", names[x])
+ gw := FindWindow(names[x])
if gw == nil {
return
}
@@ -133,6 +119,19 @@ func makeWindowDebug() ui.Control {
gw.UiTab.Delete(*gw.TabNumber)
})
+ /////////////////////////////////////////////////////
+ vbox = addGroup(hbox, "Global Debug")
+
+ dump2 := addButton(vbox, "Dump Boxes")
+ dump2.OnClicked(func(*ui.Button) {
+ DumpBoxes()
+ })
+
+ dump1 := addButton(vbox, "Dump MAP")
+ dump1.OnClicked(func(*ui.Button) {
+ DumpMap()
+ })
+
return hbox
}
@@ -156,12 +155,28 @@ func addGroup(b *ui.Box, name string) *ui.Box {
return vbox
}
-func findBox(s string) *GuiWindow {
+func FindWindow(s string) *GuiWindow {
for name, window := range Data.WindowMap {
if name == s {
return window
}
}
+ log.Printf("COULD NOT FIND WINDOW", s)
+ return nil
+}
+
+func FindBox(s string) *GuiBox {
+ for name, window := range Data.WindowMap {
+ if name != s {
+ continue
+ }
+ for name, abox := range window.BoxMap {
+ log.Printf("gui.DumpBoxes() \tBOX mapname=%-12s abox.Name=%-12s", name, abox.Name)
+ return abox
+ }
+ log.Println("gui.FindBox() NEED TO INIT WINDOW name =", name)
+ }
+ log.Println("gui.FindBox() COULD NOT FIND BOX", s)
return nil
}
@@ -180,6 +195,7 @@ func dumpBox(s string) {
// log.Println("gui.DumpBoxes()\tWindow.UiWindow type =", reflect.TypeOf(window.UiWindow))
log.Println("gui.DumpBoxes()\tWindow.UiWindow =", window.UiWindow)
log.Println("gui.DumpBoxes()\tWindow.UiTab =", window.UiTab)
+ log.Println("gui.dumpBox() BoxMap START")
for name, abox := range window.BoxMap {
log.Printf("gui.DumpBoxes() \tBOX mapname=%-12s abox.Name=%-12s", name, abox.Name)
if name == "MAINBOX" {
@@ -189,6 +205,7 @@ func dumpBox(s string) {
}
}
}
+ log.Println("gui.dumpBox() BoxMap END")
if window.UiTab != nil {
pages := window.UiTab.NumPages()
log.Println("gui.DumpBoxes()\tWindow.UiTab.NumPages() =", pages)
diff --git a/window.go b/window.go
index 1dfe05a..24bd879 100644
--- a/window.go
+++ b/window.go
@@ -210,6 +210,8 @@ func mapWindow(window *ui.Window, title string, x int, y int) *GuiBox {
box.Window = &newGuiWindow
box.Name = title
+ newGuiWindow.BoxMap["jcarrInitTest"] = &box
+
return &box
}