Skip to content

Commit

Permalink
Add view title (based on the implementation of @conejoninja)
Browse files Browse the repository at this point in the history
  • Loading branch information
jroimartin committed Feb 6, 2016
1 parent c5595da commit bb01d13
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 0 deletions.
135 changes: 135 additions & 0 deletions _examples/title.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
// 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 main

import (
"log"

"github.com/jroimartin/gocui"
)

func main() {
g := gocui.NewGui()
if err := g.Init(); err != nil {
log.Panicln(err)
}
defer g.Close()

g.SetLayout(layout)
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
log.Panicln(err)
}

if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
log.Panicln(err)
}
}

func quit(g *gocui.Gui, v *gocui.View) error {
return gocui.ErrQuit
}

func layout(g *gocui.Gui) error {
maxX, maxY := g.Size()

// Overlap (front)
if v, err := g.SetView("v1", 10, 2, 30, 6); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}
if v, err := g.SetView("v2", 20, 4, 40, 8); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}

// Overlap (back)
if v, err := g.SetView("v3", 60, 4, 80, 8); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}
if v, err := g.SetView("v4", 50, 2, 70, 6); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}

// Long title
if v, err := g.SetView("v5", 10, 12, 30, 16); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Long long long long title"
}

// No title
if v, err := g.SetView("v6", 35, 12, 55, 16); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = ""
}
if _, err := g.SetView("v7", 60, 12, 80, 16); err != nil {
if err != gocui.ErrUnknownView {
return err
}
}

// Small view
if v, err := g.SetView("v8", 85, 12, 88, 16); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}

// Screen borders
if v, err := g.SetView("v9", -10, 20, 10, 24); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}
if v, err := g.SetView("v10", maxX-10, 20, maxX+10, 24); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}

// Out of screen
if v, err := g.SetView("v11", -21, 28, -1, 32); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}
if v, err := g.SetView("v12", maxX, 28, maxX+20, 32); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}
if v, err := g.SetView("v13", 10, -7, 30, -1); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}
if v, err := g.SetView("v14", 10, maxY, 30, maxY+6); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = "Regular title"
}

return nil
}
25 changes: 25 additions & 0 deletions gui.go
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,11 @@ func (g *Gui) flush() error {
if err := g.drawFrame(v); err != nil {
return err
}
if v.Title != "" {
if err := g.drawTitle(v); err != nil {
return err
}
}
}

if err := g.draw(v); err != nil {
Expand Down Expand Up @@ -379,6 +384,26 @@ func (g *Gui) drawFrame(v *View) error {
return nil
}

// drawTitle draws the title of the view.
func (g *Gui) drawTitle(v *View) error {
if v.y0 < 0 || v.y0 >= g.maxY {
return nil
}

for i, ch := range v.Title {
x := v.x0 + i + 2
if x < 0 {
continue
} else if x > v.x1-2 || x >= g.maxX {
break
}
if err := g.SetRune(x, v.y0, ch); err != nil {
return err
}
}
return nil
}

// draw manages the cursor and calls the draw function of a view.
func (g *Gui) draw(v *View) error {
if g.Cursor {
Expand Down
3 changes: 3 additions & 0 deletions view.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ type View struct {
// If Autoscroll is true, the View will automatically scroll down when the
// text overflows. If true the view's y-origin will be ignored.
Autoscroll bool

// If Frame is true, Title allows to configure a title for the view.
Title string
}

type viewLine struct {
Expand Down

0 comments on commit bb01d13

Please sign in to comment.