mirror of
https://github.com/jroimartin/gocui.git
synced 2025-04-28 13:48:51 +08:00
Remove Gui.Start callback. Add Gui.SetLayout()
This commit is contained in:
parent
7c70c8be3b
commit
271ec3f2a0
@ -8,31 +8,40 @@ import (
|
|||||||
|
|
||||||
func layout(g *gocui.Gui) error {
|
func layout(g *gocui.Gui) error {
|
||||||
maxX, maxY := g.Size()
|
maxX, maxY := g.Size()
|
||||||
if _, err := g.SetView("v1", -1, -1, 10, 10); err != nil {
|
if _, err := g.SetView("v1", -1, -1, 10, 10); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v2", maxX-10, -1, maxX, 10); err != nil {
|
if _, err := g.SetView("v2", maxX-10, -1, maxX, 10); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v3", maxX/2-5, -1, maxX/2+5, 10); err != nil {
|
if _, err := g.SetView("v3", maxX/2-5, -1, maxX/2+5, 10); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v4", -1, maxY/2-5, 10, maxY/2+5); err != nil {
|
if _, err := g.SetView("v4", -1, maxY/2-5, 10, maxY/2+5); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v5", maxX-10, maxY/2-5, maxX, maxY/2+5); err != nil {
|
if _, err := g.SetView("v5", maxX-10, maxY/2-5, maxX, maxY/2+5); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v6", -1, maxY-10, 10, maxY); err != nil {
|
if _, err := g.SetView("v6", -1, maxY-10, 10, maxY); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v7", maxX-10, maxY-10, maxX, maxY); err != nil {
|
if _, err := g.SetView("v7", maxX-10, maxY-10, maxX, maxY); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v8", maxX/2-5, maxY-10, maxX/2+5, maxY); err != nil {
|
if _, err := g.SetView("v8", maxX/2-5, maxY-10, maxX/2+5, maxY); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("v9", maxX/2-5, maxY/2-5, maxX/2+5, maxY/2+5); err != nil {
|
if _, err := g.SetView("v9", maxX/2-5, maxY/2-5, maxX/2+5, maxY/2+5); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -51,8 +60,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer g.Close()
|
defer g.Close()
|
||||||
|
|
||||||
g.Layout = layout
|
g.SetLayout(layout)
|
||||||
|
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,14 @@ func writeTest(g *gocui.Gui, v *gocui.View) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func setLayout1(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
g.SetLayout(layout)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func setLayout2(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
g.SetLayout(layout2)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func keybindings(g *gocui.Gui) error {
|
func keybindings(g *gocui.Gui) error {
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlM, 0, focusMain); err != nil {
|
if err := g.SetKeybinding("", gocui.KeyCtrlM, 0, focusMain); err != nil {
|
||||||
@ -106,6 +114,12 @@ func keybindings(g *gocui.Gui) error {
|
|||||||
if err := g.SetKeybinding("", 't', 0, writeTest); err != nil {
|
if err := g.SetKeybinding("", 't', 0, writeTest); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := g.SetKeybinding("", '1', 0, setLayout1); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := g.SetKeybinding("", '2', 0, setLayout2); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -116,39 +130,42 @@ func quit(g *gocui.Gui, v *gocui.View) error {
|
|||||||
|
|
||||||
func layout(g *gocui.Gui) error {
|
func layout(g *gocui.Gui) error {
|
||||||
maxX, maxY := g.Size()
|
maxX, maxY := g.Size()
|
||||||
if _, err := g.SetView("side", -1, -1, 30, maxY-5); err != nil {
|
if v, err := g.SetView("side", -1, -1, 30, maxY-5); err != nil {
|
||||||
|
if err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("main", 30, -1, maxX, maxY-5); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := g.SetView("cmdline", -1, maxY-5, maxX, maxY); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func start(g *gocui.Gui) error {
|
|
||||||
if err := keybindings(g); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if v := g.GetView("main"); v != nil {
|
|
||||||
fmt.Fprintln(v, "This is a test")
|
|
||||||
}
|
|
||||||
if v := g.GetView("side"); v != nil {
|
|
||||||
v.Highlight = true
|
v.Highlight = true
|
||||||
fmt.Fprintln(v, "Item 1")
|
fmt.Fprintln(v, "Item 1")
|
||||||
fmt.Fprintln(v, "Item 2")
|
fmt.Fprintln(v, "Item 2")
|
||||||
fmt.Fprintln(v, "Item 3")
|
fmt.Fprintln(v, "Item 3")
|
||||||
fmt.Fprintln(v, "Item 4")
|
fmt.Fprintln(v, "Item 4")
|
||||||
}
|
}
|
||||||
if v := g.GetView("cmdline"); v != nil {
|
if v, err := g.SetView("main", 30, -1, maxX, maxY-5); err != nil {
|
||||||
fmt.Fprintln(v, "Buffer test")
|
if err != gocui.ErrorUnkView {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
fmt.Fprintln(v, "This is a test")
|
||||||
if err := g.SetCurrentView("main"); err != nil {
|
if err := g.SetCurrentView("main"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
g.ShowCursor = true
|
}
|
||||||
|
if v, err := g.SetView("cmdline", -1, maxY-5, maxX, maxY); err != nil {
|
||||||
|
if err != gocui.ErrorUnkView {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintln(v, "Command line test")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func layout2(g *gocui.Gui) error {
|
||||||
|
maxX, maxY := g.Size()
|
||||||
|
if v, err := g.SetView("center", maxX/2-10, maxY/2-10, maxX/2+10, maxY/2+10); err != nil {
|
||||||
|
if err != gocui.ErrorUnkView {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintln(v, "Center view test")
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,10 +178,13 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer g.Close()
|
defer g.Close()
|
||||||
|
|
||||||
g.Layout = layout
|
g.SetLayout(layout)
|
||||||
g.Start = start
|
if err := keybindings(g); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
}
|
||||||
g.SelBgColor = gocui.ColorGreen
|
g.SelBgColor = gocui.ColorGreen
|
||||||
g.SelFgColor = gocui.ColorBlack
|
g.SelFgColor = gocui.ColorBlack
|
||||||
|
g.ShowCursor = true
|
||||||
|
|
||||||
err = g.MainLoop()
|
err = g.MainLoop()
|
||||||
if err != nil && err != gocui.ErrorQuit {
|
if err != nil && err != gocui.ErrorQuit {
|
||||||
|
@ -8,13 +8,16 @@ import (
|
|||||||
|
|
||||||
func layout(g *gocui.Gui) error {
|
func layout(g *gocui.Gui) error {
|
||||||
maxX, maxY := g.Size()
|
maxX, maxY := g.Size()
|
||||||
if _, err := g.SetView("side", -1, -1, int(0.2*float32(maxX)), maxY-5); err != nil {
|
if _, err := g.SetView("side", -1, -1, int(0.2*float32(maxX)), maxY-5); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("main", int(0.2*float32(maxX)), -1, maxX, maxY-5); err != nil {
|
if _, err := g.SetView("main", int(0.2*float32(maxX)), -1, maxX, maxY-5); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := g.SetView("cmdline", -1, maxY-5, maxX, maxY); err != nil {
|
if _, err := g.SetView("cmdline", -1, maxY-5, maxX, maxY); err != nil &&
|
||||||
|
err != gocui.ErrorUnkView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -33,7 +36,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer g.Close()
|
defer g.Close()
|
||||||
|
|
||||||
g.Layout = layout
|
g.SetLayout(layout)
|
||||||
|
|
||||||
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
if err := g.SetKeybinding("", gocui.KeyCtrlC, 0, quit); err != nil {
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
|
24
gui.go
24
gui.go
@ -6,17 +6,19 @@ import (
|
|||||||
"github.com/nsf/termbox-go"
|
"github.com/nsf/termbox-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrorQuit error = errors.New("quit")
|
var (
|
||||||
|
ErrorQuit error = errors.New("quit")
|
||||||
|
ErrorUnkView error = errors.New("view exists")
|
||||||
|
)
|
||||||
|
|
||||||
type Gui struct {
|
type Gui struct {
|
||||||
CurrentView *View
|
CurrentView *View
|
||||||
Layout func(*Gui) error
|
|
||||||
Start func(*Gui) error
|
|
||||||
BgColor, FgColor Attribute
|
BgColor, FgColor Attribute
|
||||||
SelBgColor, SelFgColor Attribute
|
SelBgColor, SelFgColor Attribute
|
||||||
ShowCursor bool
|
ShowCursor bool
|
||||||
events chan termbox.Event
|
events chan termbox.Event
|
||||||
views []*View
|
views []*View
|
||||||
|
layout func(*Gui) error
|
||||||
keybindings []*Keybinding
|
keybindings []*Keybinding
|
||||||
maxX, maxY int
|
maxX, maxY int
|
||||||
}
|
}
|
||||||
@ -77,7 +79,7 @@ func (g *Gui) SetView(name string, x0, y0, x1, y1 int) (v *View, err error) {
|
|||||||
v.bgColor, v.fgColor = g.BgColor, g.FgColor
|
v.bgColor, v.fgColor = g.BgColor, g.FgColor
|
||||||
v.selBgColor, v.selFgColor = g.SelBgColor, g.SelFgColor
|
v.selBgColor, v.selFgColor = g.SelBgColor, g.SelFgColor
|
||||||
g.views = append(g.views, v)
|
g.views = append(g.views, v)
|
||||||
return v, nil
|
return v, ErrorUnkView
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Gui) GetView(name string) (v *View) {
|
func (g *Gui) GetView(name string) (v *View) {
|
||||||
@ -124,6 +126,11 @@ func (g *Gui) SetKeybinding(viewname string, key interface{}, mod Modifier, cb K
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *Gui) SetLayout(layout func(*Gui) error) {
|
||||||
|
g.layout = layout
|
||||||
|
go func() { g.events <- termbox.Event{Type: termbox.EventResize} }()
|
||||||
|
}
|
||||||
|
|
||||||
func (g *Gui) MainLoop() (err error) {
|
func (g *Gui) MainLoop() (err error) {
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
@ -136,11 +143,6 @@ func (g *Gui) MainLoop() (err error) {
|
|||||||
if err := g.resize(); err != nil {
|
if err := g.resize(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if g.Start != nil {
|
|
||||||
if err := g.Start(g); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := g.draw(); err != nil {
|
if err := g.draw(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -207,13 +209,13 @@ func (g *Gui) draw() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *Gui) resize() (err error) {
|
func (g *Gui) resize() (err error) {
|
||||||
if g.Layout == nil {
|
if g.layout == nil {
|
||||||
return errors.New("Null layout")
|
return errors.New("Null layout")
|
||||||
}
|
}
|
||||||
|
|
||||||
termbox.Clear(termbox.Attribute(g.FgColor), termbox.Attribute(g.BgColor))
|
termbox.Clear(termbox.Attribute(g.FgColor), termbox.Attribute(g.BgColor))
|
||||||
g.maxX, g.maxY = termbox.Size()
|
g.maxX, g.maxY = termbox.Size()
|
||||||
if err := g.Layout(g); err != nil {
|
if err := g.layout(g); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.drawFrames(); err != nil {
|
if err := g.drawFrames(); err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user