From d4c2f8cb1b7514c1afa1d85092988b3ef25cef16 Mon Sep 17 00:00:00 2001 From: Jeff Carr <jcarr@wit.com> Date: Fri, 2 Feb 2024 11:47:32 -0600 Subject: [PATCH] crippled, but works Signed-off-by: Jeff Carr <jcarr@wit.com> --- dropdown.go | 35 +++++++++++++++-------------------- main.go | 28 +++++++++++++++++++++++++--- mouse.go | 2 +- view.go | 33 +++++++++++++++++++-------------- widget.go | 35 +++++++++++++++++++++++++---------- 5 files changed, 85 insertions(+), 48 deletions(-) diff --git a/dropdown.go b/dropdown.go index cb0f38d..872bc22 100644 --- a/dropdown.go +++ b/dropdown.go @@ -88,19 +88,6 @@ func (tk *guiWidget) showDropdown() { } } -func dropdownClicked(mouseX, mouseH int) { - 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 { w, h := me.baseGui.MousePosition() log.Log(NOW, "hide dropdown menu() view msgMouseDown (w,h) =", w, h) @@ -127,18 +114,26 @@ func showDDview() error { return nil } -/* // if there is a drop down view active, treat it like a dialog box and close it - - if (hideDDview() == nil) { - return nil - } -*/ func (w *guiWidget) dropdownClicked(mouseW, mouseH int) { log.Log(NOW, "dropdownClicked() (w,h) =", mouseW, mouseH) - w.SetVisible(false) + w.deleteView() + + /* + 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 dropdownUnclicked(mouseX, mouseH int) { tk := me.dropdownV log.Log(NOW, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", mouseX, mouseH) diff --git a/main.go b/main.go index 4d4dde4..e90794e 100644 --- a/main.go +++ b/main.go @@ -118,9 +118,31 @@ func mainGogui() { // it runs SetManagerFunc which passes every input // event (keyboard, mouse, etc) to the function "gocuiEvent()" func gocuiMain() { + defer func() { + if r := recover(); r != nil { + log.Warn("YAHOOOO Recovered in gocuiMain()", r) + log.Warn("Recovered from panic:", r) + me.baseGui.Close() + panic("BUMMER 2") + + // allow gocui to close if possible, then print stack + log.Sleep(1) + os.Stdout = origStdout + os.Stderr = origStderr + me.myTree.SendToolkitPanic() + log.Warn("Stack trace:") + debug.PrintStack() + + // attempt to switch to the nocui toolkit + log.Sleep(1) + me.myTree.SendToolkitLoad("nocui") + // panic("BUMMER") + return + } + }() g, err := gocui.NewGui(gocui.OutputNormal, true) if err != nil { - panic(err) + return } defer g.Close() @@ -135,10 +157,10 @@ func gocuiMain() { g.SetManagerFunc(gocuiEvent) if err := defaultKeybindings(g); err != nil { - panic(err) + // normally panic here } if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) { - panic(err) + // normally panic here } } diff --git a/mouse.go b/mouse.go index eec39a0..7488a07 100644 --- a/mouse.go +++ b/mouse.go @@ -66,7 +66,7 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error { maxX, _ := g.Size() findUnderMouse() msg := fmt.Sprintf("mouseDown() Mouse really down at: %d,%d", mx, my) - dropdownClicked(mx, my) + // dropdownClicked(mx, my) x := mx - len(msg)/2 if x < 0 { x = 0 diff --git a/view.go b/view.go index a78d19c..67a1e11 100644 --- a/view.go +++ b/view.go @@ -62,32 +62,35 @@ func (w *guiWidget) showView() { } log.Log(INFO, "showView() labelN =", w.labelN) + /* if w.hidden { w.SetVisible(false) return } - - // if the gocui element doesn't exist, create it - if w.v == nil { - w.recreateView() + */ + if w.v != nil { + return } + + w.recreateView() + w.textResize() + w.v.Clear() + fmt.Fprint(w.v, w.labelN) + /* x0, y0, x1, y1, _ := me.baseGui.ViewPosition(w.cuiName) // x0, y0, x1, y1, err := me.baseGui.ViewPosition(w.cuiName) // log.Log(INFO, "showView() w.v already defined for widget", w.String(), x0, y0, x1, y1, err) // n.smartGocuiSize() - changed := w.textResize() + // changed := w.textResize() - if !changed { - log.Log(INFO, "showView() Clear() and Fprint() here wId =", w.cuiName) - w.v.Clear() - fmt.Fprint(w.v, w.labelN) - w.SetVisible(false) - w.SetVisible(true) - return - } + log.Log(INFO, "showView() Clear() and Fprint() here wId =", w.cuiName) + w.v.Clear() + fmt.Fprint(w.v, w.labelN) log.Log(INFO, "showView() textResize() changed. Should recreateView here wId =", w.cuiName) + */ + /* // if the gocui element has changed where it is supposed to be on the screen // recreate it if x0 != w.gocuiSize.w0 { @@ -109,8 +112,9 @@ func (w *guiWidget) showView() { w.recreateView() return } + */ - w.SetVisible(true) + // w.SetVisible(true) } // create or recreate the gocui widget visible @@ -127,6 +131,7 @@ func (w *guiWidget) recreateView() { me.baseGui.DeleteView(w.cuiName) w.v = nil + w.textResize() a := w.gocuiSize.w0 b := w.gocuiSize.h0 c := w.gocuiSize.w1 diff --git a/widget.go b/widget.go index c0d6557..ec1387c 100644 --- a/widget.go +++ b/widget.go @@ -70,11 +70,14 @@ func setupCtrlDownWidget() { } func (w *guiWidget) deleteView() { - if w.v != nil { - w.v.Visible = false - return - } + /* + if w.v != nil { + w.v.Visible = false + return + } + */ // make sure the view isn't really there + log.Log(NOW, "deleteView()", w.cuiName, w.WidgetType, w.node.WidgetId) me.baseGui.DeleteView(w.cuiName) w.v = nil } @@ -103,12 +106,24 @@ func (tk *guiWidget) Visible() bool { if tk.v == nil { return false } - return tk.v.Visible + // return tk.v.Visible + tk.v.Visible = true + return true } -func (w *guiWidget) SetVisible(b bool) { - if w.v == nil { - return - } - w.v.Visible = b +func (tk *guiWidget) Show() { + tk.showView() +} + +func (tk *guiWidget) Hide() { + tk.deleteView() +} + +func (tk *guiWidget) SetVisible(b bool) { + if b { + tk.Show() + } else { + tk.Hide() + } + // w.v.Visible = b }