diff options
Diffstat (limited to 'toolkit/gocui/orig/mouse.go')
| -rw-r--r-- | toolkit/gocui/orig/mouse.go | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/toolkit/gocui/orig/mouse.go b/toolkit/gocui/orig/mouse.go new file mode 100644 index 0000000..7c77b14 --- /dev/null +++ b/toolkit/gocui/orig/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 +} |
