diff options
| author | Jeff Carr <[email protected]> | 2022-10-11 11:25:46 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2022-10-11 11:25:46 -0500 |
| commit | 8358ca44efa625be9cd69fab870dfcf9c2a05df5 (patch) | |
| tree | 82a012480818d6825f01ce9bc5b62847347629c1 /button.go | |
| parent | 45644ef9bc333f5def62d1c7f474dc96274e63fa (diff) | |
Change Node to Box
Diffstat (limited to 'button.go')
| -rw-r--r-- | button.go | 151 |
1 files changed, 120 insertions, 31 deletions
@@ -2,14 +2,11 @@ package gui import "log" import "reflect" -// import "image/color" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" // import "github.com/davecgh/go-spew/spew" -// TODO: bring this generic mouse click function back -// // This is the default mouse click handler // Every mouse click that hasn't been assigned to // something specific will fall into this routine @@ -19,7 +16,41 @@ import _ "github.com/andlabs/ui/winmanifest" // This routine MUST be here as this is how the andlabs/ui works // This is the raw routine passed to every button in andlabs libui / ui // +// There is a []GuiButton which has all the buttons. We search +// for the button and then call the function below // +func defaultButtonClick(button *ui.Button) { + log.Println("gui.defaultButtonClick() LOOK FOR BUTTON button =", button) + for key, foo := range Data.AllButtons { + if (Config.Debug) { + log.Println("gui.defaultButtonClick() Data.AllButtons =", key, foo) + // spew.Dump(foo) + } + if Data.AllButtons[key].B == button { + log.Println("\tgui.defaultButtonClick() BUTTON MATCHED") + guiButtonClick(Data.AllButtons[key]) + return + } + } + log.Println("\tgui.defaultButtonClick() ERROR: BUTTON NOT FOUND") + if (Config.Debug) { + panic("gui.defaultButtonClick() ERROR: UNMAPPED ui.Button") + } +} + +func guiButtonClick(button *GuiButton) { + log.Println("\tgui.guiButtonClick() button.Name =", button.Name) + if button.Custom != nil { + log.Println("\tgui.guiButtonClick() DOING CUSTOM FUNCTION") + button.Custom(button) + return + } + if (Data.MouseClick != nil) { + Data.MouseClick(button) + } else { + log.Println("\tgui.guiButtonClick() IGNORING BUTTON. MouseClick() is nil") + } +} func (n *Node) AddButton(name string, custom func(*Node)) *Node { if (n.uiBox == nil) { @@ -27,12 +58,9 @@ func (n *Node) AddButton(name string, custom func(*Node)) *Node { return n } button := ui.NewButton(name) - if (Config.Debug) { - log.Println("reflect.TypeOF(uiBox) =", reflect.TypeOf(n.uiBox)) - log.Println("reflect.TypeOF(uiButton) =", reflect.TypeOf(button)) - } - // true == expand, false == make normal size button - n.uiBox.Append(button, Config.Stretchy) + log.Println("reflect.TypeOF(uiBox) =", reflect.TypeOf(n.uiBox)) + log.Println("reflect.TypeOF(uiButton) =", reflect.TypeOf(button)) + n.uiBox.Append(button, false) n.uiButton = button newNode := n.makeNode(name, 888, 888 + Config.counter) @@ -43,40 +71,101 @@ func (n *Node) AddButton(name string, custom func(*Node)) *Node { log.Println("gui.AppendButton() Button Clicked. Running custom()") custom(newNode) }) + // panic("AppendButton") + // time.Sleep(3 * time.Second) return newNode } -func (n *Node) CreateFontButton(action string) *Node { - n.uiFontButton = ui.NewFontButton() +func (n *Node) CreateButton(custom func(*GuiButton), name string, values interface {}) *Node { + newNode := n.AddBox(Xaxis, "test CreateButton") + box := newNode.FindBox() + if (box == nil) { + panic("node.CreateButton().FindBox() == nil") + } + newUiB := ui.NewButton(name) + newUiB.OnClicked(defaultButtonClick) - n.uiFontButton.OnChanged(func (*ui.FontButton) { - log.Println("FontButton.OnChanged() START") - n.Dump() - }) - n.uiBox.Append(n.uiFontButton, Config.Stretchy) + var newB *GuiButton + newB = new(GuiButton) + newB.B = newUiB + if (box.UiBox == nil) { + log.Println("CreateButton() box.Window == nil") + // ErrorWindow(box.Window, "Login Failed", msg) // can't even do this + panic("maybe print an error and return nil? or make a fake button?") + } else { + // uibox := box.UiBox + // uibox.Append(newUiB, true) + } + newB.Box = box + newB.Custom = custom + newB.Values = values - // TODO: implement Grid - n.uiGrid = ui.NewGrid() - return n + Data.AllButtons = append(Data.AllButtons, newB) + + box.Append(newB.B, false) + return newNode +} + +func CreateButton(box *GuiBox, custom func(*GuiButton), name string, values interface {}) *GuiButton { + newUiB := ui.NewButton(name) + newUiB.OnClicked(defaultButtonClick) + + var newB *GuiButton + newB = new(GuiButton) + newB.B = newUiB + if (box.Window == nil) { + log.Println("CreateButton() box.Window == nil") + // ErrorWindow(box.Window, "Login Failed", msg) // can't even do this + panic("maybe print an error and return nil? or make a fake button?") + } + newB.Box = box + newB.Custom = custom + newB.Values = values + + Data.AllButtons = append(Data.AllButtons, newB) + + box.Append(newB.B, false) + return newB } -func (n *Node) CreateColorButton(custom func(*Node), name string, values interface {}) *Node { +func CreateFontButton(box *GuiBox, action string) *GuiButton { // create a 'fake' button entry for the mouse clicks - n.uiColorButton = ui.NewColorButton() - n.custom = custom - n.values = values + var newGB GuiButton + newGB.Name = "FONT" + newGB.FB = ui.NewFontButton() + newGB.Box = box + Data.AllButtons = append(Data.AllButtons, &newGB) + + newGB.FB.OnChanged(func (*ui.FontButton) { + log.Println("FontButton.OnChanged() START mouseClick(&newBM)", newGB) + if (Data.MouseClick != nil) { + Data.MouseClick(&newGB) + } + }) + return &newGB +} + +func CreateColorButton(box *GuiBox, custom func(*GuiButton), name string, values interface {}) *GuiButton { + // create a 'fake' button entry for the mouse clicks + var newCB GuiButton + newCB.Name = name + newCB.CB = ui.NewColorButton() + newCB.Box = box + newCB.Custom = custom + newCB.Values = values + + Data.AllButtons = append(Data.AllButtons, &newCB) - n.uiColorButton.OnChanged(func (*ui.ColorButton) { + newCB.CB.OnChanged(func (*ui.ColorButton) { log.Println("ColorButton.OnChanged() START Color Button Click") - rgba := n.Color - r, g, b, a := rgba.R, rgba.G, rgba.B, rgba.A + r, g, b, a := newCB.CB.Color() log.Println("ColorButton.OnChanged() Color() =", r, g, b, a) - if (n.custom != nil) { - n.custom(n) + if (newCB.Custom != nil) { + newCB.Custom(&newCB) } else if (Data.MouseClick != nil) { - Data.MouseClick(n) + Data.MouseClick(&newCB) } }) - n.uiBox.Append(n.uiColorButton, Config.Stretchy) - return n + box.Append(newCB.CB, false) + return &newCB } |
