diff options
Diffstat (limited to 'toolkit')
| -rw-r--r-- | toolkit/andlabs/box.go | 49 | ||||
| -rw-r--r-- | toolkit/andlabs/button.go | 50 | ||||
| -rw-r--r-- | toolkit/andlabs/group.go | 60 | ||||
| -rw-r--r-- | toolkit/andlabs/label.go | 26 | ||||
| -rw-r--r-- | toolkit/andlabs/slider.go | 26 | ||||
| -rw-r--r-- | toolkit/andlabs/spinbox.go | 2 | ||||
| -rw-r--r-- | toolkit/andlabs/structs.go | 64 | ||||
| -rw-r--r-- | toolkit/andlabs/tab.go | 143 | ||||
| -rw-r--r-- | toolkit/andlabs/window.go | 45 | ||||
| -rw-r--r-- | toolkit/gocui/mouse.go | 186 |
10 files changed, 585 insertions, 66 deletions
diff --git a/toolkit/andlabs/box.go b/toolkit/andlabs/box.go new file mode 100644 index 0000000..548c90a --- /dev/null +++ b/toolkit/andlabs/box.go @@ -0,0 +1,49 @@ +package toolkit + +import "log" + +import "github.com/andlabs/ui" +import _ "github.com/andlabs/ui/winmanifest" + +// create a new box +func (t *Toolkit) GetBox() *ui.Box { + return t.uiBox +} + +// create a new box +func (t *Toolkit) NewBox() *Toolkit { + log.Println("gui.Toolbox.NewBox() START create default") + t.Dump() + if (t.uiGroup != nil) { + log.Println("gui.Toolbox.NewBox() is a Group") + var newTK Toolkit + + vbox := ui.NewVerticalBox() + vbox.SetPadded(true) + t.uiGroup.SetChild(vbox) + newTK.uiBox = vbox + + return &newTK + } + if (t.uiBox != nil) { + log.Println("gui.Toolbox.NewBox() is a Box") + // return t + } + log.Println("gui.Toolbox.NewBox() FAILED. Couldn't figure out where to make a box") + t.Dump() + return nil +} + +// Make a new box +func MakeBox(name string) *Toolkit { + var newt Toolkit + + vbox := ui.NewVerticalBox() + vbox.SetPadded(border) + newt.uiBox = vbox + newt.Name = name + + log.Println("gui.Toolbox.MakeBox() name =", name) + newt.Dump() + return &newt +} diff --git a/toolkit/andlabs/button.go b/toolkit/andlabs/button.go new file mode 100644 index 0000000..3278c09 --- /dev/null +++ b/toolkit/andlabs/button.go @@ -0,0 +1,50 @@ +package toolkit + +import "log" +import "os" + +import "github.com/andlabs/ui" +import _ "github.com/andlabs/ui/winmanifest" + +// make new Group here +func (t Toolkit) NewButton(name string) *Toolkit { + var newt Toolkit + var b *ui.Button + + if (t.uiBox == nil) { + log.Println("gui.ToolboxNode.NewButton() node.UiBox == nil. I can't add a range UI element without a place to put it") + log.Println("probably could just make a box here?") + os.Exit(0) + return nil + } + + log.Println("gui.Toolbox.NewGroup() create", name) + b = ui.NewButton(name) + newt.uiButton = b + + b.OnClicked(func(*ui.Button) { + log.Println("TODO: IN TOOLKIT GOROUTINE. SHOULD LEAVE HERE VIA channels. button name =", name) + t.Dump() + newt.Dump() + log.Println("wit/gui/toolkit NewButton() Should do something here") + if (newt.Custom == nil) { + log.Println("wit/gui/toolkit NewButton() toolkit.Custom == nil") + } else { + log.Println("wit/gui/toolkit NewButton() toolkit.Custom() START") + newt.Custom() + log.Println("wit/gui/toolkit NewButton() toolkit.Custom() END") + } + if (t.Custom == nil) { + log.Println("wit/gui/toolkit NewButton() parent toolkit.Custom == nil") + } else { + log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() START (IS THIS A BAD IDEA?)") + t.Custom() + log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() END (IS THIS A BAD IDEA?)") + } + log.Println("TODO: LEFT TOOLKIT GOROUTINE button name =", name) + }) + + t.uiBox.Append(b, false) + + return &newt +} diff --git a/toolkit/andlabs/group.go b/toolkit/andlabs/group.go index 1c3f63e..12d9206 100644 --- a/toolkit/andlabs/group.go +++ b/toolkit/andlabs/group.go @@ -1,59 +1,37 @@ package toolkit import "log" +import "os" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" // make new Group here -func NewGroup(b *ui.Box, title string) *Toolkit { - var t Toolkit +func (t Toolkit) NewGroup(title string) *Toolkit { + var newt Toolkit - if (b == nil) { - log.Println("gui.ToolboxNode.NewSpinbox() node.UiBox == nil. I can't add a range UI element without a place to put it") - return &t + if (t.uiBox == nil) { + log.Println("gui.ToolboxNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it") + log.Println("probably could just make a box here?") + os.Exit(0) + return nil } log.Println("gui.Toolbox.NewGroup() create", title) g := ui.NewGroup(title) g.SetMargined(true) - t.uiGroup = g - t.uiBox = b - t.uiBox.Append(g, false) + t.uiBox.Append(g, streachy) - return &t -} - -// create a new box -func (t *Toolkit) GetBox() *ui.Box { - return t.uiBox -} - -// create a new box -func (t *Toolkit) NewBox() *Toolkit { - log.Println("gui.Toolbox.NewBox() START create default") - if (t.uiGroup != nil) { - log.Println("gui.Toolbox.NewBox() is a Group") - var newTK Toolkit + hbox := ui.NewVerticalBox() + hbox.SetPadded(true) + g.SetChild(hbox) - vbox := ui.NewVerticalBox() - vbox.SetPadded(true) - t.uiGroup.SetChild(vbox) - newTK.uiBox = vbox + newt.uiGroup = g + newt.uiBox = hbox + newt.Name = title - return &newTK - } - log.Println("gui.Toolbox.NewBox() FAILED") - return nil + t.Dump() + newt.Dump() + // panic("toolkit.NewGroup") + return &newt } - -/* -func (n *Node) NewGroup(title string) *Node { - group := ui.NewGroup(title) - group.SetMargined(true) - hbox.Append(group, true) - - vbox := ui.NewVerticalBox() - vbox.SetPadded(true) - group.SetChild(vbox) -*/ diff --git a/toolkit/andlabs/label.go b/toolkit/andlabs/label.go index 23d4927..453412a 100644 --- a/toolkit/andlabs/label.go +++ b/toolkit/andlabs/label.go @@ -1,23 +1,31 @@ package toolkit import "log" +import "os" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" -func NewLabel(b *ui.Box, name string) *Toolkit { +// func NewLabel(b *ui.Box, name string) *Toolkit { + +func (t *Toolkit) NewLabel(name string) *Toolkit { // make new node here log.Println("gui.Toolbox.NewLabel", name) - var t Toolkit - if (b == nil) { + if (t.uiBox == nil) { log.Println("gui.ToolboxNode.NewLabel() node.UiBox == nil. I can't add a range UI element without a place to put it") - return &t + os.Exit(0) + return nil } - l := ui.NewLabel(name) - t.uiLabel = l - t.uiBox = b - t.uiBox.Append(l, false) + var newt Toolkit + newt.uiLabel = ui.NewLabel(name) + newt.uiBox = t.uiBox + t.uiBox.Append(newt.uiLabel, false) + log.Println("parent toolkit") + t.Dump() + log.Println("newt toolkit") + newt.Dump() + // panic("got here") - return &t + return &newt } diff --git a/toolkit/andlabs/slider.go b/toolkit/andlabs/slider.go index 930c514..65cf531 100644 --- a/toolkit/andlabs/slider.go +++ b/toolkit/andlabs/slider.go @@ -1,38 +1,44 @@ package toolkit import "log" +import "os" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" import "github.com/davecgh/go-spew/spew" -func NewSlider(b *ui.Box, name string, x int, y int) *Toolkit { +// func NewSlider(b *ui.Box, name string *Toolkit { +func (t Toolkit) NewSlider(title string, x int, y int) *Toolkit { // make new node here log.Println("gui.Toolbox.NewSpinbox()", x, y) - var t Toolkit + var newt Toolkit - if (b == nil) { - log.Println("gui.ToolboxNode.NewSpinbox() node.UiBox == nil. I can't add a range UI element without a place to put it") - return &t + if (t.uiBox == nil) { + log.Println("gui.ToolboxNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it") + log.Println("probably could just make a box here?") + os.Exit(0) + return nil } + s := ui.NewSlider(x, y) - t.uiSlider = s - t.uiBox = b + newt.uiSlider = s + newt.uiBox = t.uiBox t.uiBox.Append(s, false) s.OnChanged(func(spin *ui.Slider) { i := spin.Value() + log.Println("gui.Toolbox.ui.Slider.OnChanged() val =", i) if (DebugToolkit) { log.Println("gui.Toolbox.ui.OnChanged() val =", i) scs := spew.ConfigState{MaxDepth: 1} - scs.Dump(t) + scs.Dump(newt) } if (t.OnChanged != nil) { log.Println("gui.Toolbox.OnChanged() entered val =", i) - t.OnChanged(&t) + newt.OnChanged(&newt) } }) - return &t + return &newt } diff --git a/toolkit/andlabs/spinbox.go b/toolkit/andlabs/spinbox.go index d3d7bfe..c47fab7 100644 --- a/toolkit/andlabs/spinbox.go +++ b/toolkit/andlabs/spinbox.go @@ -14,7 +14,7 @@ func NewSpinbox(b *ui.Box, name string, x int, y int) *Toolkit { if (b == nil) { log.Println("gui.ToolboxNode.NewSpinbox() node.UiBox == nil. I can't add a range UI element without a place to put it") - return &t + return nil } spin := ui.NewSpinbox(x, y) t.uiSpinbox = spin diff --git a/toolkit/andlabs/structs.go b/toolkit/andlabs/structs.go index ab75139..a089a12 100644 --- a/toolkit/andlabs/structs.go +++ b/toolkit/andlabs/structs.go @@ -9,6 +9,10 @@ import "github.com/davecgh/go-spew/spew" var DebugToolkit bool = false +var streachy = true +var border = true + + // stores the raw toolkit internals type Toolkit struct { id string @@ -18,8 +22,12 @@ type Toolkit struct { Height int OnChanged func(*Toolkit) + OnExit func(*Toolkit) + + Custom func() uiBox *ui.Box + uiBox2 *ui.Box // temporary hack while implementing tabs uiButton *ui.Button uiControl *ui.Control uiEntry *ui.Entry @@ -30,11 +38,7 @@ type Toolkit struct { uiTab *ui.Tab uiText *ui.EditableCombobox uiWindow *ui.Window -} - -func (t *Toolkit) Dump() { - log.Println("gui.Toolkit.Dump() uiBox =", t.uiBox) - log.Println("gui.Toolkit.Dump() uiGroup =", t.uiGroup) + UiWindowBad *ui.Window } func (t *Toolkit) GetText() string { @@ -68,6 +72,31 @@ func (t *Toolkit) SetText(s string) bool { return false } +func sanity(t *Toolkit) bool { + if (DebugToolkit) { + log.Println("gui.Toolkit.Value() Enter") + scs := spew.ConfigState{MaxDepth: 1} + scs.Dump(t) + } + if (t.uiEntry == nil) { + if (DebugToolkit) { + log.Println("gui.Toolkit.Value() =", t.uiEntry.Text) + } + return false + } + return true +} + +func (t *Toolkit) SetValue(i int) bool { + log.Println("gui.Toolkit.SetValue() START") + if (sanity(t)) { + return false + } + t.Dump() + // panic("got to toolkit.SetValue") + return true +} + func (t *Toolkit) Value() int { if (DebugToolkit) { log.Println("gui.Toolkit.Value() Enter") @@ -93,3 +122,28 @@ func (t *Toolkit) Value() int { log.Println("gui.Toolkit.Value() Could not find a ui element to get a value from") return 0 } + +func (t *Toolkit) Dump() { + log.Println("gui.Toolkit.Dump()", t.Name, t.Width, t.Height) + if (t.uiBox != nil) { + log.Println("gui.Toolkit.Dump() uiBox =", t.uiBox) + } + if (t.uiButton != nil) { + log.Println("gui.Toolkit.Dump() uiButton =", t.uiButton) + } + if (t.uiWindow != nil) { + log.Println("gui.Toolkit.Dump() uiWindow =", t.uiWindow) + } + if (t.uiTab != nil) { + log.Println("gui.Toolkit.Dump() uiTab =", t.uiTab) + } + if (t.uiGroup != nil) { + log.Println("gui.Toolkit.Dump() uiGroup =", t.uiGroup) + } + if (t.uiSlider != nil) { + log.Println("gui.Toolkit.Dump() uiSlider =", t.uiSlider) + } + if (t.OnExit != nil) { + log.Println("gui.Toolkit.Dump() uiExit =", t.OnExit) + } +} diff --git a/toolkit/andlabs/tab.go b/toolkit/andlabs/tab.go new file mode 100644 index 0000000..c068022 --- /dev/null +++ b/toolkit/andlabs/tab.go @@ -0,0 +1,143 @@ +package toolkit + +import ( + "log" + "time" + + "github.com/andlabs/ui" + _ "github.com/andlabs/ui/winmanifest" + +) + +/* + This adds a tab + + andlabs/ui is goofy in the sense that you have to determine + if the ui.Window already has a tab in it. If it does, then + you need to add this tab and not run SetChild() on the window + or instead it replaces the existing tab with the new one + + I work around this by always sending a Toolkit that is a tab + once there is one. If you send a Window here, it will replace + any existing tabs rather than adding a new one +*/ +func (t *Toolkit) AddTab(name string) *Toolkit { + var w *ui.Window + var newt *Toolkit + + log.Println("gui.Toolbox.AddTab() sleep 3") + + w = t.uiWindow + if (w == nil) { + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + return nil + } + + if (t.uiTab == nil) { + // this means you have to make a new tab + log.Println("gui.Toolbox.NewTab() GOOD. This should be the first tab:", name) + newt = newTab(w, name) + t.uiTab = newt.uiTab + } else { + log.Println("gui.Toolbox.NewTab() GOOD. This should be an additional tab:", name) + newt = t.appendTab(name) + // this means you have to append a tab + } + log.Println("t:") + t.Dump() + log.Println("newt:") + newt.Dump() + + return newt +} + +func (t *Toolkit) SetTabBox(box *ui.Box) { + var tab *ui.Tab + + log.Println("wit/gui/toolkit SetTabBox()") + t.Dump() + if (t.uiTab == nil) { + log.Println("wit/gui/toolkit SetTabBox() got uiTab == nil") + panic("fucknuts") + return + } + if (t.uiBox == nil) { + log.Println("wit/gui/toolkit SetTabBox() got uiBox == nil. Appending a new tab here") + tab = t.uiTab + tab.Append(t.Name, box) + tabSetMargined(tab) + return + } else { + log.Println("wit/gui/toolkit SetTabBox() got uiBox != nil. Appending the box to the existing box strechy = true") + t.uiBox.Append(box, true) // strechy == true + t.uiBox2 = box + // t.uiBox.Append(box, false) // strechy == false + return + } + +} + +// This sets _all_ the tabs to Margin = true +// +// TODO: do proper tab tracking (will be complicated). low priority +func tabSetMargined(tab *ui.Tab) { + c := tab.NumPages() + for i := 0; i < c; i++ { + tab.SetMargined(i, true) + } +} + +func newTab(w *ui.Window, name string) *Toolkit { + log.Println("gui.Toolbox.NewTab() ADD", name) + var t Toolkit + + if (w == nil) { + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + time.Sleep(1 * time.Second) + return nil + } + log.Println("gui.Toolbox.AddTab() START name =", name) + // time.Sleep(2 * time.Second) + tab := ui.NewTab() + w.SetMargined(true) + + hbox := ui.NewHorizontalBox() // this makes everything go along the horizon + // hbox := ui.NewVerticalBox() + hbox.SetPadded(true) + tab.Append(name, hbox) + w.SetChild(tab) + + t.uiWindow = w + t.uiTab = tab + t.uiBox = hbox + // tabSetMargined(newNode.uiTab) + return &t +} + +func (t *Toolkit) appendTab(name string) *Toolkit { + log.Println("gui.Toolbox.NewTab() ADD", name) + var newT Toolkit + + if (t.uiWindow == nil) { + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + time.Sleep(1 * time.Second) + return nil + } + log.Println("gui.Toolbox.AddTab() START name =", name) + + hbox := ui.NewHorizontalBox() // this makes everything go along the horizon + // hbox := ui.NewVerticalBox() + hbox.SetPadded(true) + t.uiTab.Append(name, hbox) + // w.SetChild(tab) + + newT.uiWindow = t.uiWindow + newT.uiTab = t.uiTab + newT.uiBox = hbox + // tabSetMargined(newNode.uiTab) + return &newT +} diff --git a/toolkit/andlabs/window.go b/toolkit/andlabs/window.go new file mode 100644 index 0000000..f0357ed --- /dev/null +++ b/toolkit/andlabs/window.go @@ -0,0 +1,45 @@ +package toolkit + +import ( + "log" + "os" + + "github.com/andlabs/ui" + _ "github.com/andlabs/ui/winmanifest" +) + +func (t *Toolkit) MessageWindow(msg1 string, msg2 string) { + ui.MsgBox(t.uiWindow, msg1, msg2) +} + +func (t *Toolkit) ErrorWindow(msg1 string, msg2 string) { + ui.MsgBoxError(t.uiWindow, msg1, msg2) +} + +func NewWindow(title string, x int, y int) *Toolkit { + var t Toolkit + log.Println("toolkit NewWindow", title, x, y) + w := ui.NewWindow(title, x, y, false) + w.SetBorderless(false) + w.OnClosing(func(*ui.Window) bool { + log.Println("ui.Window().OnExit() SHOULD ATTEMPT CALLBACK here") + t.Dump() + if (t.OnExit != nil) { + log.Println("ui.Window().OnExit() ATTEMPTING toolkit.OnExit CALLBACK") + t.OnExit(&t) + } + if (t.Custom != nil) { + log.Println("ui.Window().Custom() ATTEMPTING toolkit.Custom CALLBACK") + t.Custom() + } + log.Println("ui.Window().OnExit() Toolkit.OnExit is nil") + t.Dump() + os.Exit(0) + return true + }) + w.SetMargined(true) + w.Show() + t.uiWindow = w + t.UiWindowBad = w // deprecate this as soon as possible + return &t +} diff --git a/toolkit/gocui/mouse.go b/toolkit/gocui/mouse.go new file mode 100644 index 0000000..7c77b14 --- /dev/null +++ b/toolkit/gocui/mouse.go @@ -0,0 +1,186 @@ +// Copyright 2014 The gocui Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package toolkit + +import ( + "errors" + "fmt" + "log" + "os" + + "github.com/awesome-gocui/gocui" +) + +var g *gocui.Gui +var err error +var Custom func(string) + +func OnExit(f func(string)) { + Custom = f +} + +func Exit() { + g.Close() +} + +func mouseClick(name string) { + // output screws up the console. Need to fix this by redirecting all console output to a file from log.Println() + // log.Println("g.Close()") + // g.Close() + + log.Println("Found andlabs Running custom function for the mouse click") + Custom(name) + // panic("got andlabs") +} + +func Init() { + log.Println("start Init()") + + f, err := os.OpenFile("/tmp/guilogfile", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666) + if err != nil { + log.Fatalf("error opening file: %v", err) + } + defer f.Close() + + log.SetOutput(f) + log.Println("This is a test log entry") + + g, err = gocui.NewGui(gocui.OutputNormal, true) + if err != nil { + log.Panicln(err) + } + + g.Cursor = true + g.Mouse = true + + g.SetManagerFunc(layout) + + if err := keybindings(g); err != nil { + log.Panicln(err) + } + log.Println("exit Init()") +} + +func StartConsoleMouse() { + defer g.Close() + log.Println("start Main()") + + if err := g.MainLoop(); err != nil && !errors.Is(err, gocui.ErrQuit) { + log.Panicln(err) + } + log.Println("exit Main()") +} + +func layout(g *gocui.Gui) error { + if v, err := g.SetView("but1", 2, 2, 22, 17, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + v.Highlight = true + v.SelBgColor = gocui.ColorGreen + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, "andlabs") + fmt.Fprintln(v, "addDemoTab") + fmt.Fprintln(v, "DemoToolkitWindow") + fmt.Fprintln(v, "DebugWindow") + fmt.Fprintln(v, "do nothing") + fmt.Fprintln(v, "exit") + if _, err := g.SetCurrentView("but1"); err != nil { + return err + } + } + if v, err := g.SetView("but2", 24, 2, 44, 4, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + v.Highlight = true + v.SelBgColor = gocui.ColorGreen + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, "Button 2 - line 1") + } + if v, err := g.SetView("but3", 24, 2, 44, 4, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + v.Highlight = true + v.SelBgColor = gocui.ColorGreen + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, "Button 2 - line 1") + } + if v, err := g.SetView("but4", 24, 2, 44, 4, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + v.Highlight = true + v.SelBgColor = gocui.ColorGreen + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, "Button 2 - line 1") + } + if v, err := g.SetView("but5", 24, 2, 44, 4, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + v.Highlight = true + v.SelBgColor = gocui.ColorGreen + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, "Button 2 - line 1") + } + return nil +} + +func keybindings(g *gocui.Gui) error { + if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { + return err + } + for _, n := range []string{"but1", "but2"} { + if err := g.SetKeybinding(n, gocui.MouseLeft, gocui.ModNone, showMsg); err != nil { + return err + } + } + if err := g.SetKeybinding("msg", gocui.MouseLeft, gocui.ModNone, delMsg); err != nil { + return err + } + if err := g.SetKeybinding("", gocui.MouseRight, gocui.ModNone, delMsg); err != nil { + return err + } + if err := g.SetKeybinding("", gocui.MouseMiddle, gocui.ModNone, delMsg); err != nil { + return err + } + return nil +} + +func quit(g *gocui.Gui, v *gocui.View) error { + return gocui.ErrQuit +} + +func showMsg(g *gocui.Gui, v *gocui.View) error { + var l string + var err error + + if _, err := g.SetCurrentView(v.Name()); err != nil { + return err + } + + _, cy := v.Cursor() + if l, err = v.Line(cy); err != nil { + l = "" + } + + maxX, maxY := g.Size() + if v, err := g.SetView("msg", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + mouseClick(l) + fmt.Fprintln(v, l) + } + return nil +} + +func delMsg(g *gocui.Gui, v *gocui.View) error { + // Error check removed, because delete could be called multiple times with the above keybindings + g.DeleteView("msg") + return nil +} |
