rename dropdown related variables

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-02-02 11:07:56 -06:00
parent dddef229dc
commit d6f1a45c77
5 changed files with 91 additions and 179 deletions

4
add.go
View File

@ -51,8 +51,8 @@ func addWidget(n *tree.Node) {
wRoot.redoWindows(0, 0) wRoot.redoWindows(0, 0)
// TODO: record the first window here? // TODO: record the first window here?
// do initial setup of helper widgets here: // do initial setup of helper widgets here:
if me.ddview == nil { if me.dropdownV == nil {
me.ddview = makeDropdownView("addWidget() ddview") me.dropdownV = makeDropdownView("addWidget() ddview")
} }
return return
case widget.Tab: case widget.Tab:

115
click.go
View File

@ -1,9 +1,10 @@
package main package main
import ( import (
"errors"
"github.com/awesome-gocui/gocui" "github.com/awesome-gocui/gocui"
"go.wit.com/log" "go.wit.com/log"
"go.wit.com/toolkits/tree"
"go.wit.com/widget" "go.wit.com/widget"
) )
@ -178,53 +179,13 @@ func (w *guiWidget) doWidgetClick() {
w.toggleTree() w.toggleTree()
case widget.Button: case widget.Button:
// doUserEvent(n) // doUserEvent(n)
me.myTree.SendUserEvent(w.node) me.myTree.SendFromUser(w.node)
case widget.Combobox: case widget.Combobox:
log.Log(NOW, "do the combobox here") log.Log(NOW, "do the combobox here")
var ddItems string w.showDropdown()
for i, s := range w.vals {
log.Log(NOW, "ddItem:", w.String(), i, s)
ddItems += s + "\n"
}
if me.ddview == nil {
me.ddview = makeDropdownView(ddItems)
}
showDropdownItems(ddItems)
me.ddNode = w.node
case widget.Dropdown: case widget.Dropdown:
log.Log(NOW, "do the dropdown here") log.Log(NOW, "do the dropdown here")
var ddItems string w.showDropdown()
for i, s := range w.vals {
log.Log(NOW, "ddItem:", w.String(), i, s)
ddItems += s + "\n"
}
/*
if me.ddview == nil {
me.ddview = makeDropdownView(ddItems)
}
*/
showDropdownItems(ddItems)
me.ddNode = w.node
/*
var tk *guiWidget
tk = me.ddview.TK.(*guiWidget)
log.Log(NOW, "doWidgetClick() visible =", tk.Visible())
if tk.Visible() {
tk.SetVisible(false)
me.baseGui.DeleteView("ddview")
tk.v = nil
} else {
me.ddNode = w.node
log.Log(NOW, "new dns list should be set to:", ddItems)
tk.labelN = ddItems
tk.SetText(ddItems)
tk.SetVisible(true)
fmt.Fprint(tk.v, ddItems)
}
for i, s := range tk.vals {
log.Log(NOW, "AddText()", tk.String(), i, s)
}
*/
default: default:
} }
} }
@ -263,21 +224,18 @@ func click(g *gocui.Gui, v *gocui.View) error {
// var l string // var l string
// var err error // var err error
log.Log(INFO, "click() START", v.Name()) log.Log(NOW, "click() START gocui name:", v.Name())
// n := me.rootNode.findWidgetName(v.Name()) // n := me.rootNode.findWidgetName(v.Name())
n := findUnderMouse() w := findUnderMouse()
var w *guiWidget if w == nil {
w = n.TK.(*guiWidget) log.Error(errors.New("click() could not find widget for view =" + v.Name()))
if w != nil { } else {
log.Log(NOW, "click() Found widget =", w.node.WidgetId, w.String(), ",", w.labelN) log.Log(NOW, "click() Found widget =", w.node.WidgetId, w.String(), ",", w.labelN)
if w.String() == "DropBox" { if w.String() == "DropBox" {
log.Log(NOW, "click() this is the dropdown menu. set a flag here what did I click? where is the mouse?") log.Log(NOW, "click() this is the dropdown menu. set a flag here what did I click? where is the mouse?")
log.Log(NOW, "click() set a global dropdown clicked flag=true here") log.Log(NOW, "click() set a global dropdown clicked flag=true here")
me.ddClicked = true
} }
w.doWidgetClick() w.doWidgetClick()
} else {
log.Log(NOW, "click() could not find node name =", v.Name())
} }
if _, err := g.SetCurrentView(v.Name()); err != nil { if _, err := g.SetCurrentView(v.Name()); err != nil {
@ -285,55 +243,57 @@ func click(g *gocui.Gui, v *gocui.View) error {
return err return err
} }
log.Log(NOW, "click() END") log.Log(NOW, "click() END gocui name:", v.Name())
return nil return nil
} }
func findUnderMouse() *tree.Node { func findUnderMouse() *guiWidget {
var found *tree.Node var widgets []*guiWidget
var widgets []*tree.Node var f func(w *guiWidget)
var f func(n *tree.Node)
w, h := me.baseGui.MousePosition() w, h := me.baseGui.MousePosition()
ddTK := me.ddview.TK.(*guiWidget)
// if the dropdown view is visable, close it // if the dropdown view is visable, close it
if ddTK.Visible() { if me.dropdownV.Visible() {
ddTK.dropdownClicked(w, h) me.dropdownV.dropdownClicked(w, h)
return me.ddview return me.dropdownV
} }
// find buttons that are below where the mouse button click // find buttons that are below where the mouse button click
f = func(n *tree.Node) { f = func(widget *guiWidget) {
var widget *guiWidget
widget = n.TK.(*guiWidget)
// ignore widgets that are not visible // ignore widgets that are not visible
if widget.Visible() { if widget.Visible() {
if (widget.gocuiSize.w0 <= w) && (w <= widget.gocuiSize.w1) && if (widget.gocuiSize.w0 <= w) && (w <= widget.gocuiSize.w1) &&
(widget.gocuiSize.h0 <= h) && (h <= widget.gocuiSize.h1) { (widget.gocuiSize.h0 <= h) && (h <= widget.gocuiSize.h1) {
widgets = append(widgets, n) widgets = append(widgets, widget)
found = n
} }
} }
for _, child := range widget.children { for _, child := range widget.children {
f(child.node) f(child)
} }
} }
f(me.treeRoot) rootW := me.treeRoot.TK.(*guiWidget)
f(rootW)
var found *guiWidget
// widgets has everything that matches // widgets has everything that matches
// TODO: pop up menu with a list of them for _, w := range widgets {
for _, n := range widgets { w.showWidgetPlacement("findUnderMouse() FOUND")
//log(logNow, "ctrlDown() FOUND widget", widget.id, widget.name) // prioritize window buttons. This means if some code covers
widget := n.TK.(*guiWidget) // up the window widgets, then it will ignore everything else
widget.showWidgetPlacement("findUnderMouse() FOUND") // and allow the user (hopefully) to redraw or switch windows
// TODO: display the window widgets on top
if w.WidgetType == widget.Window {
return w
}
found = w
} }
return found return found
} }
// find the widget under the mouse click // find the widget under the mouse click
func ctrlDown(g *gocui.Gui, v *gocui.View) error { func ctrlDown(g *gocui.Gui, v *gocui.View) error {
var found *tree.Node var found *guiWidget
// var widgets []*node // var widgets []*node
// var f func (n *node) // var f func (n *node)
found = findUnderMouse() found = findUnderMouse()
@ -349,11 +309,10 @@ func ctrlDown(g *gocui.Gui, v *gocui.View) error {
var tk *guiWidget var tk *guiWidget
tk = me.ctrlDown.TK.(*guiWidget) tk = me.ctrlDown.TK.(*guiWidget)
if found == nil { if found == nil {
found = me.treeRoot found = me.treeRoot.TK.(*guiWidget)
} }
tk.labelN = found.String() tk.labelN = found.String()
foundtk := found.TK.(*guiWidget) newR := found.realGocuiSize()
newR := foundtk.realGocuiSize()
tk.gocuiSize.w0 = newR.w0 tk.gocuiSize.w0 = newR.w0
tk.gocuiSize.h0 = newR.h0 tk.gocuiSize.h0 = newR.h0
tk.gocuiSize.w1 = newR.w1 tk.gocuiSize.w1 = newR.w1

View File

@ -2,7 +2,6 @@ package main
import ( import (
"fmt" "fmt"
"strings"
"github.com/awesome-gocui/gocui" "github.com/awesome-gocui/gocui"
log "go.wit.com/log" log "go.wit.com/log"
@ -10,7 +9,7 @@ import (
"go.wit.com/widget" "go.wit.com/widget"
) )
func makeDropdownView(ddItems string) *tree.Node { func makeDropdownView(ddItems string) *guiWidget {
newNode := addDropdown() newNode := addDropdown()
tk := newNode.TK.(*guiWidget) tk := newNode.TK.(*guiWidget)
tk.labelN = ddItems tk.labelN = ddItems
@ -25,40 +24,14 @@ func makeDropdownView(ddItems string) *tree.Node {
tk.gocuiSize.w1, tk.gocuiSize.w1,
tk.gocuiSize.h1, 0) tk.gocuiSize.h1, 0)
if tk.v == nil { if tk.v == nil {
return newNode return tk
} }
tk.v.Wrap = true tk.v.Wrap = true
tk.v.Frame = true tk.v.Frame = true
tk.v.Clear() tk.v.Clear()
fmt.Fprint(tk.v, ddItems) fmt.Fprint(tk.v, ddItems)
tk.SetVisible(true) tk.SetVisible(true)
return newNode return tk
}
func makeDropdownViewOrig() {
if me.ddview != nil {
return
}
me.ddview = addDropdown()
// n.TK = initWidget(n)
var tk *guiWidget
tk = me.ddview.TK.(*guiWidget)
tk.gocuiSize.w0 = 20
tk.gocuiSize.w1 = 40
tk.gocuiSize.h0 = 10
tk.gocuiSize.h1 = 25
tk.v, _ = me.baseGui.SetView("ddview",
tk.gocuiSize.w0,
tk.gocuiSize.h0,
tk.gocuiSize.w1,
tk.gocuiSize.h1, 0)
if tk.v == nil {
return
}
tk.v.Wrap = true
tk.v.Frame = true
tk.v.Clear()
fmt.Fprint(tk.v, tk.labelN)
} }
func addDropdown() *tree.Node { func addDropdown() *tree.Node {
@ -93,13 +66,14 @@ func addDropdown() *tree.Node {
return n return n
} }
func showDropdownItems(ddItems string) { func (tk *guiWidget) showDropdown() {
for i, s := range strings.Split(ddItems, "\n") { var ddItems string
log.Log(NOW, "showDropdownItems() found =", i, s) for i, s := range tk.vals {
log.Log(NOW, "showDropdown()", tk.String(), i, s)
ddItems += s + "\n"
} }
var tk *guiWidget
tk = me.ddview.TK.(*guiWidget) log.Log(NOW, "showDropdown() visible =", tk.Visible())
log.Log(NOW, "doWidgetClick() visible =", tk.Visible())
if tk.Visible() { if tk.Visible() {
tk.SetVisible(false) tk.SetVisible(false)
me.baseGui.DeleteView("ddview") me.baseGui.DeleteView("ddview")
@ -115,43 +89,41 @@ func showDropdownItems(ddItems string) {
} }
func dropdownClicked(mouseX, mouseH int) { func dropdownClicked(mouseX, mouseH int) {
tk := me.ddview.TK.(*guiWidget) tk := me.dropdownV
if tk.Visible() { if tk.Visible() {
log.Log(NOW, "hide DDview() Mouse really down at:", mouseX, mouseH) log.Log(NOW, "hide DDview() Mouse really down at:", mouseX, mouseH)
hideDDview() hideDDview()
} else { } else {
log.Log(NOW, "show DDview() Mouse really down at:", mouseX, mouseH) log.Log(NOW, "show DDview() Mouse really down at:", mouseX, mouseH)
log.Log(NOW, "can you see the dropdown menu right now?")
log.Log(NOW, "if so, something is wrong. I think you can't see it")
showDDview() showDDview()
} }
} }
func hideDDview() error { func hideDDview() error {
var tk *guiWidget
tk = me.ddview.TK.(*guiWidget)
w, h := me.baseGui.MousePosition() w, h := me.baseGui.MousePosition()
log.Log(NOW, "hide dropdown menu() view msgMouseDown (w,h) =", w, h) log.Log(NOW, "hide dropdown menu() view msgMouseDown (w,h) =", w, h)
if me.ddview == nil { if me.dropdownV == nil {
return gocui.ErrUnknownView return gocui.ErrUnknownView
} }
if tk.v == nil { if me.dropdownV.v == nil {
return gocui.ErrUnknownView return gocui.ErrUnknownView
} }
tk.SetVisible(false) me.dropdownV.SetVisible(false)
return nil return nil
} }
func showDDview() error { func showDDview() error {
w, h := me.baseGui.MousePosition() w, h := me.baseGui.MousePosition()
log.Log(NOW, "show dropdown menu() view msgMouseDown (w,h) =", w, h) log.Log(NOW, "show dropdown menu() view msgMouseDown (w,h) =", w, h)
if me.ddview == nil { if me.dropdownV == nil {
return gocui.ErrUnknownView return gocui.ErrUnknownView
} }
var tk *guiWidget if me.dropdownV.v == nil {
tk = me.ddview.TK.(*guiWidget)
if tk.v == nil {
return gocui.ErrUnknownView return gocui.ErrUnknownView
} }
tk.SetVisible(true) me.dropdownV.SetVisible(true)
return nil return nil
} }
@ -168,15 +140,17 @@ func (w *guiWidget) dropdownClicked(mouseW, mouseH int) {
} }
func dropdownUnclicked(mouseX, mouseH int) { func dropdownUnclicked(mouseX, mouseH int) {
tk := me.ddview.TK.(*guiWidget) tk := me.dropdownV
log.Log(NOW, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", mouseX, mouseH) log.Log(NOW, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", mouseX, mouseH)
if me.ddClicked {
me.ddClicked = false
log.Log(NOW, "mouseUp() ddview is the thing that was clicked", mouseX, mouseH) log.Log(NOW, "mouseUp() ddview is the thing that was clicked", mouseX, mouseH)
log.Log(NOW, "mouseUp() find out what the string is here", mouseX, mouseH, tk.gocuiSize.h1) log.Log(NOW, "mouseUp() find out what the string is here", mouseX, mouseH, tk.gocuiSize.h1)
var newZone string = "" var newZone string = ""
if me.ddNode != nil { if me.dropdownW == nil {
return
}
// try to compute the line item clicked here
/*
var ddtk *guiWidget var ddtk *guiWidget
ddtk = me.ddview.TK.(*guiWidget) ddtk = me.ddview.TK.(*guiWidget)
value := mouseH - tk.gocuiSize.h0 - 1 value := mouseH - tk.gocuiSize.h0 - 1
@ -189,17 +163,9 @@ func dropdownUnclicked(mouseX, mouseH int) {
newZone = ddtk.vals[value] newZone = ddtk.vals[value]
log.Log(NOW, "mouseUp() value =", value, "newZone =", newZone) log.Log(NOW, "mouseUp() value =", value, "newZone =", newZone)
} }
} */
// send the event the user selected something from the dropdown
hideDDview() hideDDview()
if newZone != "" { me.dropdownW.SetText(newZone)
if me.ddNode != nil { me.myTree.SendUserEvent(me.dropdownW.node)
var ddtk *guiWidget
ddtk = me.ddview.TK.(*guiWidget)
ddtk.SetText(newZone)
ddtk.value = newZone
// me.ddNode.doUserEvent()
me.myTree.SendUserEvent(me.ddNode)
}
}
}
} }

View File

@ -37,10 +37,6 @@ func msgDown(g *gocui.Gui, v *gocui.View) error {
} }
func mouseUp(g *gocui.Gui, v *gocui.View) error { func mouseUp(g *gocui.Gui, v *gocui.View) error {
if me.ddview == nil {
me.ddview = makeDropdownView("mouseUp unclick")
}
w, h := g.MousePosition() w, h := g.MousePosition()
dropdownUnclicked(w, h) dropdownUnclicked(w, h)
@ -68,12 +64,9 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error {
} }
globalMouseDown = true globalMouseDown = true
maxX, _ := g.Size() maxX, _ := g.Size()
test := findUnderMouse() findUnderMouse()
msg := fmt.Sprintf("Mouse really down at: %d,%d", mx, my) + "foobar" msg := fmt.Sprintf("mouseDown() Mouse really down at: %d,%d", mx, my)
if test == me.ddview {
dropdownClicked(mx, my) dropdownClicked(mx, my)
return nil
}
x := mx - len(msg)/2 x := mx - len(msg)/2
if x < 0 { if x < 0 {
x = 0 x = 0

View File

@ -43,18 +43,12 @@ type config struct {
currentWindow *tree.Node // this is the current tab or window to show currentWindow *tree.Node // this is the current tab or window to show
logStdout *tree.Node // where to show STDOUT logStdout *tree.Node // where to show STDOUT
helpLabel *gocui.View helpLabel *gocui.View
ddview *tree.Node // the gocui view to select dropdrown lists
ddClicked bool // the dropdown menu view was clicked
ddNode *tree.Node // the dropdown menu is for this widget
/* // this is a floating widget that we show whenever the user clicks on a
// this is the channel we send user events like // dropdown menu or combobox
// mouse clicks or keyboard events back to the program // the dropdown widget to select dropdrown lists
callback chan toolkit.Action dropdownV *guiWidget
dropdownW *guiWidget // grab the dropdown choices from this widget
// this is the channel we get requests to make widgets
pluginChan chan toolkit.Action
*/
// When the widget has a frame, like a button, it adds 2 lines runes on each side // When the widget has a frame, like a button, it adds 2 lines runes on each side
// so you need 3 char spacing in each direction to not have them overlap // so you need 3 char spacing in each direction to not have them overlap