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)
// TODO: record the first window here?
// do initial setup of helper widgets here:
if me.ddview == nil {
me.ddview = makeDropdownView("addWidget() ddview")
if me.dropdownV == nil {
me.dropdownV = makeDropdownView("addWidget() ddview")
}
return
case widget.Tab:

115
click.go
View File

@ -1,9 +1,10 @@
package main
import (
"errors"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
"go.wit.com/toolkits/tree"
"go.wit.com/widget"
)
@ -178,53 +179,13 @@ func (w *guiWidget) doWidgetClick() {
w.toggleTree()
case widget.Button:
// doUserEvent(n)
me.myTree.SendUserEvent(w.node)
me.myTree.SendFromUser(w.node)
case widget.Combobox:
log.Log(NOW, "do the combobox here")
var ddItems string
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
w.showDropdown()
case widget.Dropdown:
log.Log(NOW, "do the dropdown here")
var ddItems string
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)
}
*/
w.showDropdown()
default:
}
}
@ -263,21 +224,18 @@ func click(g *gocui.Gui, v *gocui.View) error {
// var l string
// 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 := findUnderMouse()
var w *guiWidget
w = n.TK.(*guiWidget)
if w != nil {
w := findUnderMouse()
if w == nil {
log.Error(errors.New("click() could not find widget for view =" + v.Name()))
} else {
log.Log(NOW, "click() Found widget =", w.node.WidgetId, w.String(), ",", w.labelN)
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() set a global dropdown clicked flag=true here")
me.ddClicked = true
}
w.doWidgetClick()
} else {
log.Log(NOW, "click() could not find node name =", v.Name())
}
if _, err := g.SetCurrentView(v.Name()); err != nil {
@ -285,55 +243,57 @@ func click(g *gocui.Gui, v *gocui.View) error {
return err
}
log.Log(NOW, "click() END")
log.Log(NOW, "click() END gocui name:", v.Name())
return nil
}
func findUnderMouse() *tree.Node {
var found *tree.Node
var widgets []*tree.Node
var f func(n *tree.Node)
func findUnderMouse() *guiWidget {
var widgets []*guiWidget
var f func(w *guiWidget)
w, h := me.baseGui.MousePosition()
ddTK := me.ddview.TK.(*guiWidget)
// if the dropdown view is visable, close it
if ddTK.Visible() {
ddTK.dropdownClicked(w, h)
return me.ddview
if me.dropdownV.Visible() {
me.dropdownV.dropdownClicked(w, h)
return me.dropdownV
}
// find buttons that are below where the mouse button click
f = func(n *tree.Node) {
var widget *guiWidget
widget = n.TK.(*guiWidget)
f = func(widget *guiWidget) {
// ignore widgets that are not visible
if widget.Visible() {
if (widget.gocuiSize.w0 <= w) && (w <= widget.gocuiSize.w1) &&
(widget.gocuiSize.h0 <= h) && (h <= widget.gocuiSize.h1) {
widgets = append(widgets, n)
found = n
widgets = append(widgets, widget)
}
}
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
// TODO: pop up menu with a list of them
for _, n := range widgets {
//log(logNow, "ctrlDown() FOUND widget", widget.id, widget.name)
widget := n.TK.(*guiWidget)
widget.showWidgetPlacement("findUnderMouse() FOUND")
for _, w := range widgets {
w.showWidgetPlacement("findUnderMouse() FOUND")
// prioritize window buttons. This means if some code covers
// up the window widgets, then it will ignore everything else
// 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
}
// find the widget under the mouse click
func ctrlDown(g *gocui.Gui, v *gocui.View) error {
var found *tree.Node
var found *guiWidget
// var widgets []*node
// var f func (n *node)
found = findUnderMouse()
@ -349,11 +309,10 @@ func ctrlDown(g *gocui.Gui, v *gocui.View) error {
var tk *guiWidget
tk = me.ctrlDown.TK.(*guiWidget)
if found == nil {
found = me.treeRoot
found = me.treeRoot.TK.(*guiWidget)
}
tk.labelN = found.String()
foundtk := found.TK.(*guiWidget)
newR := foundtk.realGocuiSize()
newR := found.realGocuiSize()
tk.gocuiSize.w0 = newR.w0
tk.gocuiSize.h0 = newR.h0
tk.gocuiSize.w1 = newR.w1

View File

@ -2,7 +2,6 @@ package main
import (
"fmt"
"strings"
"github.com/awesome-gocui/gocui"
log "go.wit.com/log"
@ -10,7 +9,7 @@ import (
"go.wit.com/widget"
)
func makeDropdownView(ddItems string) *tree.Node {
func makeDropdownView(ddItems string) *guiWidget {
newNode := addDropdown()
tk := newNode.TK.(*guiWidget)
tk.labelN = ddItems
@ -25,40 +24,14 @@ func makeDropdownView(ddItems string) *tree.Node {
tk.gocuiSize.w1,
tk.gocuiSize.h1, 0)
if tk.v == nil {
return newNode
return tk
}
tk.v.Wrap = true
tk.v.Frame = true
tk.v.Clear()
fmt.Fprint(tk.v, ddItems)
tk.SetVisible(true)
return newNode
}
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)
return tk
}
func addDropdown() *tree.Node {
@ -93,13 +66,14 @@ func addDropdown() *tree.Node {
return n
}
func showDropdownItems(ddItems string) {
for i, s := range strings.Split(ddItems, "\n") {
log.Log(NOW, "showDropdownItems() found =", i, s)
func (tk *guiWidget) showDropdown() {
var ddItems string
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, "doWidgetClick() visible =", tk.Visible())
log.Log(NOW, "showDropdown() visible =", tk.Visible())
if tk.Visible() {
tk.SetVisible(false)
me.baseGui.DeleteView("ddview")
@ -115,43 +89,41 @@ func showDropdownItems(ddItems string) {
}
func dropdownClicked(mouseX, mouseH int) {
tk := me.ddview.TK.(*guiWidget)
tk := me.dropdownV
if tk.Visible() {
log.Log(NOW, "hide DDview() Mouse really down at:", mouseX, mouseH)
hideDDview()
} else {
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()
}
}
func hideDDview() error {
var tk *guiWidget
tk = me.ddview.TK.(*guiWidget)
w, h := me.baseGui.MousePosition()
log.Log(NOW, "hide dropdown menu() view msgMouseDown (w,h) =", w, h)
if me.ddview == nil {
if me.dropdownV == nil {
return gocui.ErrUnknownView
}
if tk.v == nil {
if me.dropdownV.v == nil {
return gocui.ErrUnknownView
}
tk.SetVisible(false)
me.dropdownV.SetVisible(false)
return nil
}
func showDDview() error {
w, h := me.baseGui.MousePosition()
log.Log(NOW, "show dropdown menu() view msgMouseDown (w,h) =", w, h)
if me.ddview == nil {
if me.dropdownV == nil {
return gocui.ErrUnknownView
}
var tk *guiWidget
tk = me.ddview.TK.(*guiWidget)
if tk.v == nil {
if me.dropdownV.v == nil {
return gocui.ErrUnknownView
}
tk.SetVisible(true)
me.dropdownV.SetVisible(true)
return nil
}
@ -168,38 +140,32 @@ func (w *guiWidget) dropdownClicked(mouseW, 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)
if me.ddClicked {
me.ddClicked = false
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() 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)
var newZone string = ""
if me.ddNode != nil {
var ddtk *guiWidget
ddtk = me.ddview.TK.(*guiWidget)
value := mouseH - tk.gocuiSize.h0 - 1
log.Log(NOW, "mouseUp() me.ddview.tk.gocuiSize.h1 =", tk.gocuiSize.h1)
log.Log(NOW, "mouseUp() me.ddNode.vals =", ddtk.vals)
valsLen := len(ddtk.vals)
log.Log(NOW, "mouseUp() value =", value, "valsLen =", valsLen)
log.Log(NOW, "mouseUp() me.ddNode.vals =", ddtk.vals)
if (value >= 0) && (value < valsLen) {
newZone = ddtk.vals[value]
log.Log(NOW, "mouseUp() value =", value, "newZone =", newZone)
}
}
hideDDview()
if newZone != "" {
if me.ddNode != nil {
var ddtk *guiWidget
ddtk = me.ddview.TK.(*guiWidget)
ddtk.SetText(newZone)
ddtk.value = newZone
// me.ddNode.doUserEvent()
me.myTree.SendUserEvent(me.ddNode)
}
}
var newZone string = ""
if me.dropdownW == nil {
return
}
// try to compute the line item clicked here
/*
var ddtk *guiWidget
ddtk = me.ddview.TK.(*guiWidget)
value := mouseH - tk.gocuiSize.h0 - 1
log.Log(NOW, "mouseUp() me.ddview.tk.gocuiSize.h1 =", tk.gocuiSize.h1)
log.Log(NOW, "mouseUp() me.ddNode.vals =", ddtk.vals)
valsLen := len(ddtk.vals)
log.Log(NOW, "mouseUp() value =", value, "valsLen =", valsLen)
log.Log(NOW, "mouseUp() me.ddNode.vals =", ddtk.vals)
if (value >= 0) && (value < valsLen) {
newZone = ddtk.vals[value]
log.Log(NOW, "mouseUp() value =", value, "newZone =", newZone)
}
*/
// send the event the user selected something from the dropdown
hideDDview()
me.dropdownW.SetText(newZone)
me.myTree.SendUserEvent(me.dropdownW.node)
}

View File

@ -37,10 +37,6 @@ func msgDown(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()
dropdownUnclicked(w, h)
@ -68,12 +64,9 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error {
}
globalMouseDown = true
maxX, _ := g.Size()
test := findUnderMouse()
msg := fmt.Sprintf("Mouse really down at: %d,%d", mx, my) + "foobar"
if test == me.ddview {
dropdownClicked(mx, my)
return nil
}
findUnderMouse()
msg := fmt.Sprintf("mouseDown() Mouse really down at: %d,%d", mx, my)
dropdownClicked(mx, my)
x := mx - len(msg)/2
if 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
logStdout *tree.Node // where to show STDOUT
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 the channel we send user events like
// mouse clicks or keyboard events back to the program
callback chan toolkit.Action
// this is the channel we get requests to make widgets
pluginChan chan toolkit.Action
*/
// this is a floating widget that we show whenever the user clicks on a
// dropdown menu or combobox
// the dropdown widget to select dropdrown lists
dropdownV *guiWidget
dropdownW *guiWidget // grab the dropdown choices from this widget
// 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