From 42eafb87c729da4ad980c79c9e344db79def9186 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 8 Feb 2025 15:01:36 -0600 Subject: [PATCH] dropdown works again --- colorNew.go | 19 +++++++++++++++++++ debug.go | 8 +++----- dropdown.go | 13 +++++++++++-- eventMouseClick.go | 10 +++++++++- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/colorNew.go b/colorNew.go index 3357178..7a218b6 100644 --- a/colorNew.go +++ b/colorNew.go @@ -142,3 +142,22 @@ func (tk *guiWidget) setColorInput() { tk.color.selFg = gocui.ColorYellow tk.color.selBg = gocui.ColorBlack } + +func (tk *guiWidget) setColorModal() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.ColorRed + tk.color.fg = gocui.ColorRed + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.ColorBlack + tk.color.selBg = gocui.AttrNone + return + } + tk.color.frame = gocui.ColorRed + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.ColorRed +} diff --git a/debug.go b/debug.go index 7aeaa33..c4a0bfb 100644 --- a/debug.go +++ b/debug.go @@ -85,14 +85,12 @@ func (tk *guiWidget) dumpWidget(s string) { if tk.node.WidgetType == widget.Box { end = fmt.Sprintf("%-8s %-8s %s", tk.node.WidgetType, tk.cuiName, tk.node.State.Direction.String()) } else { - curval := tk.String() + curval := strings.TrimSpace(tk.node.ProgName()) if curval == "" { - curval = tk.node.GetLabel() - curval = strings.TrimSpace(curval) + curval = strings.TrimSpace(tk.node.GetLabel()) } if curval == "" { - curval = tk.labelN - curval = strings.TrimSpace(curval) + curval = strings.TrimSpace(tk.labelN) } end = fmt.Sprintf("%-8s %-8s %s", tk.node.WidgetType, tk.cuiName, curval) } diff --git a/dropdown.go b/dropdown.go index 899e947..875e567 100644 --- a/dropdown.go +++ b/dropdown.go @@ -74,6 +74,13 @@ func (tk *guiWidget) showDropdown() { me.dropdown.tk.Show() me.dropdown.active = true me.dropdown.callerTK = tk + + r := me.dropdown.tk.gocuiSize // set the 'full' size so that mouse clicks are sent here + me.dropdown.tk.full.w0 = r.w0 + me.dropdown.tk.full.w1 = r.w1 + me.dropdown.tk.full.h0 = r.h0 + me.dropdown.tk.full.h1 = r.h1 + me.dropdown.tk.dumpWidget("showDropdown()") } @@ -140,15 +147,17 @@ func (tk *guiWidget) showTextbox() { // log.Log(GOCUI, "showTextbox() SHOWING AT W,H=", startW, startH) me.textbox.tk.MoveToOffset(startW+3, startH+2) me.textbox.tk.labelN = "holy cow" - me.textbox.tk.setColorInput() + me.textbox.tk.setColorModal() me.textbox.tk.Show() me.textbox.active = true me.textbox.callerTK = tk - r := me.textbox.tk.gocuiSize + + r := me.textbox.tk.gocuiSize // set the 'full' size so that mouse clicks are sent here me.textbox.tk.full.w0 = r.w0 me.textbox.tk.full.w1 = r.w1 me.textbox.tk.full.h0 = r.h0 me.textbox.tk.full.h1 = r.h1 + me.textbox.tk.dumpWidget("showTextbox()") } diff --git a/eventMouseClick.go b/eventMouseClick.go index 67c877a..dcf394a 100644 --- a/eventMouseClick.go +++ b/eventMouseClick.go @@ -114,17 +114,19 @@ func doMouseClick(w int, h int) { // handle an open dropdown menu or text entry window first if me.dropdown.active || me.textbox.active { // can't drag or do anything when dropdown or textbox are visible - log.Info("can't do anything. dropdown or textbox is active") for _, tk := range findByXY(w, h) { if tk.node.WidgetId == me.dropdown.wId { log.Info("got dropdwon click", w, h, tk.cuiName) tk.dropdownClicked(w, h) + return } if tk.node.WidgetId == me.textbox.wId { log.Info("got textbox click", w, h, tk.cuiName) tk.textboxClosed() + return } } + log.Info("a dropdown or textbox is active. you can't click anywhere else (otherwise hit ESC)", w, h) return } @@ -186,6 +188,12 @@ func doMouseDoubleClick(w int, h int) { me.mouse.double = false // log.Printf("actually a double click (%d,%d)", w, h) + if me.dropdown.active || me.textbox.active { + // can't drag or do anything when dropdown or textbox are visible + log.Info("can't double click. dropdown or textbox is active") + return + } + for _, tk := range findByXY(w, h) { if tk.node.WidgetType == widget.Window { tk.redrawWindow(tk.gocuiSize.w0, tk.gocuiSize.h0)