crtview

package module
v1.6.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2021 License: MIT Imports: 18 Imported by: 0

README

crtview - Terminal-based user interface toolkit

This project is a fork of cview, which is also fork of original tview. :-) See docs/about-crtview.md for more details.

Features

Available widgets:

  • Input forms (including input/password fields, drop-down selections, checkboxes, and buttons)
  • Navigable multi-color text views
  • Selectable lists with context menus
  • Modal dialogs
  • Horizontal and vertical progress bars
  • Grid, Flexbox and tabbed panel layouts
  • Sophisticated navigable table views
  • Flexible tree views
  • Draggable and resizable windows
  • An application wrapper

Widgets may be customized and extended to suit any application.

Installation

go get github.com/isbm/crtview

Hello World

This basic example creates a TextView titled "Hello, World!" and displays it in your terminal:

package main

import (
	"github.com/isbm/crtview"
)

func main() {
	app := crtview.NewApplication()
	
	box := crtview.NewTextView()
		.SetBorder(true)
		.SetTitle("Hello, world!")
		.SetText("Here is some meaning-less text for your app.")
	
	app.SetRoot(box, true)
	if err := app.Run(); err != nil {
		panic(err)
	}
}

Documentation

Overview

Package crtview implements rich widgets for terminal based user interfaces.

See the demos folder and the example application provided with the NewApplication documentation for usage examples.

Types

This package is built on top of tcell, which provides the types necessary to create a terminal-based application (e.g. EventKey). For information on inherited types see the tcell documentation.

tcell: https://github.com/gdamore/tcell

Base Primitive

Widgets must implement the Primitive interface. All widgets embed the base primitive, Box, and thus inherit its functions. This isn't necessarily required, but it makes more sense than reimplementing Box's functionality in each widget.

Widgets

The following widgets are available:

Button - Button which is activated when the user selects it.
CheckBox - Selectable checkbox for boolean values.
DropDown - Drop-down selection field.
Flex - A Flexbox based layout manager.
Form - Form composed of input fields, drop down selections, checkboxes, and
  buttons.
Grid - A grid based layout manager.
InputField - Single-line text entry field.
List - A navigable text list with optional keyboard shortcuts.
Modal - A centered window with a text message and one or more buttons.
Panels - A panel based layout manager.
ProgressBar - Indicates the progress of an operation.
Table - A scrollable display of tabular data. Table cells, rows, or columns
  may also be highlighted.
TextView - A scrollable window that displays multi-colored text. Text may
  also be highlighted.
TreeView - A scrollable display for hierarchical data. Tree nodes can be
  highlighted, collapsed, expanded, and more.
Window - A draggable and resizable container.

Widgets may be used without an application created via NewApplication, allowing them to be integrated into any tcell-based application.

Concurrency

All functions may be called concurrently (they are thread-safe). When called from multiple threads, functions will block until the application or widget becomes available. Function calls may be queued with Application.QueueUpdate to avoid blocking.

Unicode Support

This package supports unicode characters including wide characters.

Keyboard Shortcuts

Widgets use keyboard shortcuts (a.k.a. keybindings) such as arrow keys and H/J/K/L by default. You may replace these defaults by modifying the shortcuts listed in Keys. You may also override keyboard shortcuts globally by setting a handler with Application.SetInputCapture.

cbind is a library which simplifies the process of adding support for custom keyboard shortcuts to your application. It allows setting handlers for EventKeys. It also translates between EventKeys and human-readable strings such as "Alt+Enter". This makes it possible to store keybindings in a configuration file.

cbind: https://gitlab.com/tslocum/cbind

Bracketed Paste Mode

Bracketed paste mode is enabled by default. It may be disabled by calling Application.EnableBracketedPaste before Application.Run. The following demo shows how to handle paste events and process pasted text.

tcell bracketed paste demo: https://github.com/gdamore/tcell/blob/master/_demos/mouse.go

Mouse Support

Mouse support may be enabled by calling Application.EnableMouse before Application.Run. See the example application provided with the Application.EnableMouse documentation.

Double clicks are treated single clicks by default. Specify a maximum duration between clicks with Application.SetDoubleClickInterval to enable double clicks. A standard duration is provided as StandardDoubleClick.

Mouse events are passed to:

- The handler set with SetMouseCapture, which is reserved for use by application developers to permanently intercept mouse events. Return nil to stop propagation.

- The MouseHandler method of the topmost widget under the mouse.

Colors

Throughout this package, colors are specified using the tcell.Color type. Functions such as tcell.GetColor(), tcell.NewHexColor(), and tcell.NewRGBColor() can be used to create colors from W3C color names or RGB values.

Almost all strings which are displayed can contain color tags. Color tags are W3C color names or six hexadecimal digits following a hash tag, wrapped in square brackets. Examples:

This is a [red]warning[white]!
The sky is [#8080ff]blue[#ffffff].

A color tag changes the color of the characters following that color tag. This applies to almost everything from box titles, list text, form item labels, to table cells. In a TextView, this functionality must be explicitly enabled. See the TextView documentation for more information.

Color tags may contain not just the foreground (text) color but also the background color and additional flags. In fact, the full definition of a color tag is as follows:

[<foreground>:<background>:<flags>]

Each of the three fields can be left blank and trailing fields can be omitted. (Empty square brackets "[]", however, are not considered color tags.) Colors that are not specified will be left unchanged. A field with just a dash ("-") means "reset to default".

You can specify the following flags (some flags may not be supported by your terminal):

l: blink
b: bold
d: dim
i: italic
r: reverse (switch foreground and background color)
u: underline
s: strikethrough

Examples:

[yellow]Yellow text
[yellow:red]Yellow text on red background
[:red]Red background, text color unchanged
[yellow::u]Yellow text underlined
[::bl]Bold, blinking text
[::-]Colors unchanged, flags reset
[-]Reset foreground color
[-:-:-]Reset everything
[:]No effect
[]Not a valid color tag, will print square brackets as they are

In the rare event that you want to display a string such as "[red]" or "[#00ff1a]" without applying its effect, you need to put an opening square bracket before the closing square bracket. Note that the text inside the brackets will be matched less strictly than region or colors tags. I.e. any character that may be used in color or region tags will be recognized. Examples:

[red[]      will be output as [red]
["123"[]    will be output as ["123"]
[#6aff00[[] will be output as [#6aff00[]
[a#"[[[]    will be output as [a#"[[]
[]          will be output as [] (see color tags above)
[[]         will be output as [[] (not an escaped tag)

You can use the Escape() function to insert brackets automatically where needed.

Setting the background color of a primitive to tcell.ColorDefault will use the default terminal background color. To enable transparency (allowing one or more primitives to display behind a primitive) call SetBackgroundTransparent.

Styles

When primitives are instantiated, they are initialized with colors taken from the global Styles variable. You may change this variable to adapt the look and feel of the primitives to your preferred style.

Scroll Bars

Scroll bars are supported by the following widgets: List, Table, TextView and TreeView. Each widget will display scroll bars automatically when there are additional items offscreen, except TextView. See Widget.SetScrollBarColor and Widget.SetScrollBarVisibility.

Hello World

The following is an example application which shows a box titled "Greetings" containing the text "Hello, world!":

package main

import (
  "github.com/isbm/crtview"
)

func main() {
  tv := crtview.NewTextView()
  tv.SetText("Hello, world!").
     SetBorder(true).
     SetTitle("Greetings")
  if err := crtview.NewApplication().SetRoot(tv, true).Run(); err != nil {
    panic(err)
  }
}

First, we create a TextView with a border and a title. Then we create an application, set the TextView as its root primitive, and run the event loop. The application exits when the application's Stop() function is called or when Ctrl-C is pressed.

If we have a primitive which consumes key presses, we call the application's SetFocus() function to redirect all key presses to that primitive. Most primitives then offer ways to install handlers that allow you to react to any actions performed on them.

Demos

The "demos" subdirectory contains a demo for each widget, as well as a presentation which gives an overview of the widgets and how they may be used.

Index

Examples

Constants

View Source
const (
	FlexRow = iota
	FlexColumn
)

Configuration values.

View Source
const (
	// Block: General Punctation U+2000-U+206F (http://unicode.org/charts/PDF/U2000.pdf)
	SemigraphicsHorizontalEllipsis rune = '\u2026' // …

	// Block: Box Drawing U+2500-U+257F (http://unicode.org/charts/PDF/U2500.pdf)
	BoxDrawingsLightHorizontal                    rune = '\u2500' // ─
	BoxDrawingsHeavyHorizontal                    rune = '\u2501' // ━
	BoxDrawingsLightVertical                      rune = '\u2502' // │
	BoxDrawingsHeavyVertical                      rune = '\u2503' // ┃
	BoxDrawingsLightTripleDashHorizontal          rune = '\u2504' // ┄
	BoxDrawingsHeavyTripleDashHorizontal          rune = '\u2505' // ┅
	BoxDrawingsLightTripleDashVertical            rune = '\u2506' // ┆
	BoxDrawingsHeavyTripleDashVertical            rune = '\u2507' // ┇
	BoxDrawingsLightQuadrupleDashHorizontal       rune = '\u2508' // ┈
	BoxDrawingsHeavyQuadrupleDashHorizontal       rune = '\u2509' // ┉
	BoxDrawingsLightQuadrupleDashVertical         rune = '\u250a' // ┊
	BoxDrawingsHeavyQuadrupleDashVertical         rune = '\u250b' // ┋
	BoxDrawingsLightDownAndRight                  rune = '\u250c' // ┌
	BoxDrawingsDownLighAndRightHeavy              rune = '\u250d' // ┍
	BoxDrawingsDownHeavyAndRightLight             rune = '\u250e' // ┎
	BoxDrawingsHeavyDownAndRight                  rune = '\u250f' // ┏
	BoxDrawingsLightDownAndLeft                   rune = '\u2510' // ┐
	BoxDrawingsDownLighAndLeftHeavy               rune = '\u2511' // ┑
	BoxDrawingsDownHeavyAndLeftLight              rune = '\u2512' // ┒
	BoxDrawingsHeavyDownAndLeft                   rune = '\u2513' // ┓
	BoxDrawingsLightUpAndRight                    rune = '\u2514' // └
	BoxDrawingsUpLightAndRightHeavy               rune = '\u2515' // ┕
	BoxDrawingsUpHeavyAndRightLight               rune = '\u2516' // ┖
	BoxDrawingsHeavyUpAndRight                    rune = '\u2517' // ┗
	BoxDrawingsLightUpAndLeft                     rune = '\u2518' // ┘
	BoxDrawingsUpLightAndLeftHeavy                rune = '\u2519' // ┙
	BoxDrawingsUpHeavyAndLeftLight                rune = '\u251a' // ┚
	BoxDrawingsHeavyUpAndLeft                     rune = '\u251b' // ┛
	BoxDrawingsLightVerticalAndRight              rune = '\u251c' // ├
	BoxDrawingsVerticalLightAndRightHeavy         rune = '\u251d' // ┝
	BoxDrawingsUpHeavyAndRightDownLight           rune = '\u251e' // ┞
	BoxDrawingsDownHeacyAndRightUpLight           rune = '\u251f' // ┟
	BoxDrawingsVerticalHeavyAndRightLight         rune = '\u2520' // ┠
	BoxDrawingsDownLightAnbdRightUpHeavy          rune = '\u2521' // ┡
	BoxDrawingsUpLightAndRightDownHeavy           rune = '\u2522' // ┢
	BoxDrawingsHeavyVerticalAndRight              rune = '\u2523' // ┣
	BoxDrawingsLightVerticalAndLeft               rune = '\u2524' // ┤
	BoxDrawingsVerticalLightAndLeftHeavy          rune = '\u2525' // ┥
	BoxDrawingsUpHeavyAndLeftDownLight            rune = '\u2526' // ┦
	BoxDrawingsDownHeavyAndLeftUpLight            rune = '\u2527' // ┧
	BoxDrawingsVerticalheavyAndLeftLight          rune = '\u2528' // ┨
	BoxDrawingsDownLightAndLeftUpHeavy            rune = '\u2529' // ┨
	BoxDrawingsUpLightAndLeftDownHeavy            rune = '\u252a' // ┪
	BoxDrawingsHeavyVerticalAndLeft               rune = '\u252b' // ┫
	BoxDrawingsLightDownAndHorizontal             rune = '\u252c' // ┬
	BoxDrawingsLeftHeavyAndRightDownLight         rune = '\u252d' // ┭
	BoxDrawingsRightHeavyAndLeftDownLight         rune = '\u252e' // ┮
	BoxDrawingsDownLightAndHorizontalHeavy        rune = '\u252f' // ┯
	BoxDrawingsDownHeavyAndHorizontalLight        rune = '\u2530' // ┰
	BoxDrawingsRightLightAndLeftDownHeavy         rune = '\u2531' // ┱
	BoxDrawingsLeftLightAndRightDownHeavy         rune = '\u2532' // ┲
	BoxDrawingsHeavyDownAndHorizontal             rune = '\u2533' // ┳
	BoxDrawingsLightUpAndHorizontal               rune = '\u2534' // ┴
	BoxDrawingsLeftHeavyAndRightUpLight           rune = '\u2535' // ┵
	BoxDrawingsRightHeavyAndLeftUpLight           rune = '\u2536' // ┶
	BoxDrawingsUpLightAndHorizontalHeavy          rune = '\u2537' // ┷
	BoxDrawingsUpHeavyAndHorizontalLight          rune = '\u2538' // ┸
	BoxDrawingsRightLightAndLeftUpHeavy           rune = '\u2539' // ┹
	BoxDrawingsLeftLightAndRightUpHeavy           rune = '\u253a' // ┺
	BoxDrawingsHeavyUpAndHorizontal               rune = '\u253b' // ┻
	BoxDrawingsLightVerticalAndHorizontal         rune = '\u253c' // ┼
	BoxDrawingsLeftHeavyAndRightVerticalLight     rune = '\u253d' // ┽
	BoxDrawingsRightHeavyAndLeftVerticalLight     rune = '\u253e' // ┾
	BoxDrawingsVerticalLightAndHorizontalHeavy    rune = '\u253f' // ┿
	BoxDrawingsUpHeavyAndDownHorizontalLight      rune = '\u2540' // ╀
	BoxDrawingsDownHeavyAndUpHorizontalLight      rune = '\u2541' // ╁
	BoxDrawingsVerticalHeavyAndHorizontalLight    rune = '\u2542' // ╂
	BoxDrawingsLeftUpHeavyAndRightDownLight       rune = '\u2543' // ╃
	BoxDrawingsRightUpHeavyAndLeftDownLight       rune = '\u2544' // ╄
	BoxDrawingsLeftDownHeavyAndRightUpLight       rune = '\u2545' // ╅
	BoxDrawingsRightDownHeavyAndLeftUpLight       rune = '\u2546' // ╆
	BoxDrawingsDownLightAndUpHorizontalHeavy      rune = '\u2547' // ╇
	BoxDrawingsUpLightAndDownHorizontalHeavy      rune = '\u2548' // ╈
	BoxDrawingsRightLightAndLeftVerticalHeavy     rune = '\u2549' // ╉
	BoxDrawingsLeftLightAndRightVerticalHeavy     rune = '\u254a' // ╊
	BoxDrawingsHeavyVerticalAndHorizontal         rune = '\u254b' // ╋
	BoxDrawingsLightDoubleDashHorizontal          rune = '\u254c' // ╌
	BoxDrawingsHeavyDoubleDashHorizontal          rune = '\u254d' // ╍
	BoxDrawingsLightDoubleDashVertical            rune = '\u254e' // ╎
	BoxDrawingsHeavyDoubleDashVertical            rune = '\u254f' // ╏
	BoxDrawingsDoubleHorizontal                   rune = '\u2550' // ═
	BoxDrawingsDoubleVertical                     rune = '\u2551' // ║
	BoxDrawingsDownSingleAndRightDouble           rune = '\u2552' // ╒
	BoxDrawingsDownDoubleAndRightSingle           rune = '\u2553' // ╓
	BoxDrawingsDoubleDownAndRight                 rune = '\u2554' // ╔
	BoxDrawingsDownSingleAndLeftDouble            rune = '\u2555' // ╕
	BoxDrawingsDownDoubleAndLeftSingle            rune = '\u2556' // ╖
	BoxDrawingsDoubleDownAndLeft                  rune = '\u2557' // ╗
	BoxDrawingsUpSingleAndRightDouble             rune = '\u2558' // ╘
	BoxDrawingsUpDoubleAndRightSingle             rune = '\u2559' // ╙
	BoxDrawingsDoubleUpAndRight                   rune = '\u255a' // ╚
	BoxDrawingsUpSingleAndLeftDouble              rune = '\u255b' // ╛
	BoxDrawingsUpDobuleAndLeftSingle              rune = '\u255c' // ╜
	BoxDrawingsDoubleUpAndLeft                    rune = '\u255d' // ╝
	BoxDrawingsVerticalSingleAndRightDouble       rune = '\u255e' // ╞
	BoxDrawingsVerticalDoubleAndRightSingle       rune = '\u255f' // ╟
	BoxDrawingsDoubleVerticalAndRight             rune = '\u2560' // ╠
	BoxDrawingsVerticalSingleAndLeftDouble        rune = '\u2561' // ╡
	BoxDrawingsVerticalDoubleAndLeftSingle        rune = '\u2562' // ╢
	BoxDrawingsDoubleVerticalAndLeft              rune = '\u2563' // ╣
	BoxDrawingsDownSingleAndHorizontalDouble      rune = '\u2564' // ╤
	BoxDrawingsDownDoubleAndHorizontalSingle      rune = '\u2565' // ╥
	BoxDrawingsDoubleDownAndHorizontal            rune = '\u2566' // ╦
	BoxDrawingsUpSingleAndHorizontalDouble        rune = '\u2567' // ╧
	BoxDrawingsUpDoubleAndHorizontalSingle        rune = '\u2568' // ╨
	BoxDrawingsDoubleUpAndHorizontal              rune = '\u2569' // ╩
	BoxDrawingsVerticalSingleAndHorizontalDouble  rune = '\u256a' // ╪
	BoxDrawingsVerticalDoubleAndHorizontalSingle  rune = '\u256b' // ╫
	BoxDrawingsDoubleVerticalAndHorizontal        rune = '\u256c' // ╬
	BoxDrawingsLightArcDownAndRight               rune = '\u256d' // ╭
	BoxDrawingsLightArcDownAndLeft                rune = '\u256e' // ╮
	BoxDrawingsLightArcUpAndLeft                  rune = '\u256f' // ╯
	BoxDrawingsLightArcUpAndRight                 rune = '\u2570' // ╰
	BoxDrawingsLightDiagonalUpperRightToLowerLeft rune = '\u2571' // ╱
	BoxDrawingsLightDiagonalUpperLeftToLowerRight rune = '\u2572' // ╲
	BoxDrawingsLightDiagonalCross                 rune = '\u2573' // ╳
	BoxDrawingsLightLeft                          rune = '\u2574' // ╴
	BoxDrawingsLightUp                            rune = '\u2575' // ╵
	BoxDrawingsLightRight                         rune = '\u2576' // ╶
	BoxDrawingsLightDown                          rune = '\u2577' // ╷
	BoxDrawingsHeavyLeft                          rune = '\u2578' // ╸
	BoxDrawingsHeavyUp                            rune = '\u2579' // ╹
	BoxDrawingsHeavyRight                         rune = '\u257a' // ╺
	BoxDrawingsHeavyDown                          rune = '\u257b' // ╻
	BoxDrawingsLightLeftAndHeavyRight             rune = '\u257c' // ╼
	BoxDrawingsLightUpAndHeavyDown                rune = '\u257d' // ╽
	BoxDrawingsHeavyLeftAndLightRight             rune = '\u257e' // ╾
	BoxDrawingsHeavyUpAndLightDown                rune = '\u257f' // ╿
)

Semigraphics provides an easy way to access unicode characters for drawing.

Named like the unicode characters, 'Semigraphics'-prefix used if unicode block isn't prefixed itself.

View Source
const (
	AlignLeft = iota
	AlignCenter
	AlignRight
)

Text alignment within a box.

View Source
const StandardDoubleClick = 500 * time.Millisecond

StandardDoubleClick is a commonly used double click interval.

Variables

View Source
var (
	// InputFieldInteger accepts integers.
	InputFieldInteger func(text string, ch rune) bool

	// InputFieldFloat accepts floating-point numbers.
	InputFieldFloat func(text string, ch rune) bool

	// InputFieldMaxLength returns an input field accept handler which accepts
	// input strings up to a given length. Use it like this:
	//
	//   inputField.SetAcceptanceFunc(InputFieldMaxLength(10)) // Accept up to 10 characters.
	InputFieldMaxLength func(maxLength int) func(text string, ch rune) bool
)

Predefined InputField acceptance functions.

View Source
var (
	ScrollBarArea          = []byte("[-:-:-]░")
	ScrollBarAreaFocused   = []byte("[-:-:-]▒")
	ScrollBarHandle        = []byte("[-:-:-]▓")
	ScrollBarHandleFocused = []byte("[::r] [-:-:-]")
)

Scroll bar render text (must be one cell wide)

View Source
var Borders = struct {
	Horizontal  rune
	Vertical    rune
	TopLeft     rune
	TopRight    rune
	BottomLeft  rune
	BottomRight rune

	LeftT   rune
	RightT  rune
	TopT    rune
	BottomT rune
	Cross   rune

	HorizontalFocus  rune
	VerticalFocus    rune
	TopLeftFocus     rune
	TopRightFocus    rune
	BottomLeftFocus  rune
	BottomRightFocus rune
}{
	Horizontal:  BoxDrawingsLightHorizontal,
	Vertical:    BoxDrawingsLightVertical,
	TopLeft:     BoxDrawingsLightDownAndRight,
	TopRight:    BoxDrawingsLightDownAndLeft,
	BottomLeft:  BoxDrawingsLightUpAndRight,
	BottomRight: BoxDrawingsLightUpAndLeft,

	LeftT:   BoxDrawingsLightVerticalAndRight,
	RightT:  BoxDrawingsLightVerticalAndLeft,
	TopT:    BoxDrawingsLightDownAndHorizontal,
	BottomT: BoxDrawingsLightUpAndHorizontal,
	Cross:   BoxDrawingsLightVerticalAndHorizontal,

	HorizontalFocus:  BoxDrawingsDoubleHorizontal,
	VerticalFocus:    BoxDrawingsDoubleVertical,
	TopLeftFocus:     BoxDrawingsDoubleDownAndRight,
	TopRightFocus:    BoxDrawingsDoubleDownAndLeft,
	BottomLeftFocus:  BoxDrawingsDoubleUpAndRight,
	BottomRightFocus: BoxDrawingsDoubleUpAndLeft,
}

Borders defines various borders used when primitives are drawn. These may be changed to accommodate a different look and feel.

View Source
var ColorUnset = tcell.ColorSpecial | 108

ColorUnset represents an unset color. This is necessary because the zero value of color, ColorDefault, results in default terminal colors.

View Source
var DefaultFormFieldWidth = 10

DefaultFormFieldWidth is the default field screen width of form elements whose field width is flexible (0). This is used in the Form class for horizontal layouts.

View Source
var Keys = Key{
	Cancel: []string{"Escape"},

	Select:  []string{"Enter", "Ctrl+J"},
	Select2: []string{"Space"},

	MoveUp:     []string{"Up"},
	MoveUp2:    []string{"k"},
	MoveDown:   []string{"Down"},
	MoveDown2:  []string{"j"},
	MoveLeft:   []string{"Left"},
	MoveLeft2:  []string{"h"},
	MoveRight:  []string{"Right"},
	MoveRight2: []string{"l"},

	MoveFirst:  []string{"Home", "Ctrl+A"},
	MoveFirst2: []string{"g"},
	MoveLast:   []string{"End", "Ctrl+E"},
	MoveLast2:  []string{"G"},

	MovePreviousField: []string{"Backtab"},
	MoveNextField:     []string{"Tab"},
	MovePreviousPage:  []string{"PageUp", "Ctrl+B"},
	MoveNextPage:      []string{"PageDown", "Ctrl+F"},

	ShowContextMenu: []string{"Alt+Enter"},
}

Keys defines the keyboard shortcuts of an application. Secondary shortcuts apply when not focusing a text input.

View Source
var SemigraphicJoints = map[string]rune{

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVertical}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightDownAndRight}): BoxDrawingsLightDownAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightDownAndLeft}): BoxDrawingsLightDownAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightUpAndRight}): BoxDrawingsLightUpAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightUpAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightDownAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightUpAndHorizontal,

	string([]rune{BoxDrawingsLightHorizontal, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightDownAndRight}): BoxDrawingsLightVerticalAndRight,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightDownAndLeft}): BoxDrawingsLightVerticalAndLeft,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightUpAndRight}): BoxDrawingsLightVerticalAndRight,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightVerticalAndLeft,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndRight,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndLeft,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVertical, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightDownAndLeft}): BoxDrawingsLightDownAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightUpAndRight}): BoxDrawingsLightVerticalAndRight,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndRight,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightDownAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndRight, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightUpAndRight}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightVerticalAndLeft,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndLeft,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightDownAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndLeft, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightUpAndLeft}): BoxDrawingsLightUpAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndRight,

	string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightUpAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndRight, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightVerticalAndRight}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndLeft,

	string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightUpAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndLeft, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightVerticalAndLeft}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndRight, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndLeft, BoxDrawingsLightDownAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndLeft, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightVerticalAndLeft, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndHorizontal, BoxDrawingsLightUpAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightDownAndHorizontal, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,

	string([]rune{BoxDrawingsLightUpAndHorizontal, BoxDrawingsLightVerticalAndHorizontal}): BoxDrawingsLightVerticalAndHorizontal,
}

SemigraphicJoints is a map for joining semigraphic (or otherwise) runes. So far only light lines are supported but if you want to change the border styling you need to provide the joints, too. The matching will be sorted ascending by rune value, so you don't need to provide all rune combinations, e.g. (─) + (│) = (┼) will also match (│) + (─) = (┼)

View Source
var Styles = Theme{
	TitleColor:    tcell.ColorWhite.TrueColor(),
	BorderColor:   tcell.ColorWhite.TrueColor(),
	GraphicsColor: tcell.ColorWhite.TrueColor(),

	PrimaryTextColor:           tcell.ColorWhite.TrueColor(),
	SecondaryTextColor:         tcell.ColorYellow.TrueColor(),
	TertiaryTextColor:          tcell.ColorGreen.TrueColor(),
	InverseTextColor:           tcell.ColorBlue.TrueColor(),
	ContrastPrimaryTextColor:   tcell.ColorBlack.TrueColor(),
	ContrastSecondaryTextColor: tcell.ColorDarkCyan.TrueColor(),

	PrimitiveBackgroundColor:    tcell.ColorBlack.TrueColor(),
	ContrastBackgroundColor:     tcell.ColorBlue.TrueColor(),
	MoreContrastBackgroundColor: tcell.ColorGreen.TrueColor(),

	CheckBoxCheckedRune: 'X',

	ContextMenuPaddingTop:    0,
	ContextMenuPaddingBottom: 0,
	ContextMenuPaddingLeft:   1,
	ContextMenuPaddingRight:  1,

	DropDownAbbreviationChars: "...",
	DropDownSymbol:            '▼',

	ScrollBarColor: tcell.ColorWhite.TrueColor(),

	WindowMinWidth:  4,
	WindowMinHeight: 3,
}

Styles defines the appearance of an application. The default is for a black background and some basic colors: black, white, yellow, green, cyan, and blue.

View Source
var (

	// TabSize is the number of spaces with which a tab character will be replaced.
	TabSize = 4
)

Functions

func ANSIWriter added in v0.1.18

func ANSIWriter(writer io.Writer) io.Writer

ANSIWriter returns an io.Writer which translates any ANSI escape codes written to it into crtview color tags. Other escape codes don't have an effect and are simply removed. The translated text is written to the provided writer.

func ColorHex added in v1.6.1

func ColorHex(c tcell.Color) string

ColorHex returns the hexadecimal value of a color as a string, prefixed with #. If the color is invalid, a blank string is returned.

func Escape added in v0.1.14

func Escape(text string) string

Escape escapes the given text such that color and/or region tags are not recognized and substituted by the print functions of this package. For example, to include a tag-like string in a box title or in a TextView:

box.SetTitle(crtview.Escape("[squarebrackets]"))
fmt.Fprint(textView, crtview.Escape(`["quoted"]`))

func EscapeBytes added in v1.6.1

func EscapeBytes(text []byte) []byte

EscapeBytes escapes the given text such that color and/or region tags are not recognized and substituted by the print functions of this package. For example, to include a tag-like string in a box title or in a TextView:

box.SetTitle(crtview.Escape("[squarebrackets]"))
fmt.Fprint(textView, crtview.EscapeBytes(`["quoted"]`))

func HitShortcut added in v1.6.1

func HitShortcut(event *tcell.EventKey, keybindings ...[]string) bool

HitShortcut returns whether the EventKey provided is present in one or more sets of keybindings.

func Print

func Print(screen tcell.Screen, text []byte, x, y, maxWidth, align int, color tcell.Color) (int, int)

Print prints text onto the screen into the given box at (x,y,maxWidth,1), not exceeding that box. "align" is one of AlignLeft, AlignCenter, or AlignRight. The screen's background color will not be changed.

You can change the colors and text styles mid-text by inserting a color tag. See the package description for details.

Returns the number of actual bytes of the text printed (including color tags) and the actual width used for the printed runes.

func PrintJoinedSemigraphics added in v0.1.17

func PrintJoinedSemigraphics(screen tcell.Screen, x, y int, ch rune, color tcell.Color)

PrintJoinedSemigraphics prints a semigraphics rune into the screen at the given position with the given color, joining it with any existing semigraphics rune. Background colors are preserved. At this point, only regular single line borders are supported.

func PrintSimple

func PrintSimple(screen tcell.Screen, text []byte, x, y int)

PrintSimple prints white text to the screen at the given position.

func PrintStyle added in v1.6.1

func PrintStyle(screen tcell.Screen, text []byte, x, y, maxWidth, align int, style tcell.Style) (int, int)

PrintStyle works like Print() but it takes a style instead of just a foreground color.

func RenderScrollBar added in v1.6.1

func RenderScrollBar(screen tcell.Screen, visibility ScrollBarVisibility, x int, y int, height int, items int, cursor int, printed int, focused bool, color tcell.Color)

RenderScrollBar renders a scroll bar at the specified position.

func SetAttributes added in v1.6.1

func SetAttributes(style tcell.Style, attrs tcell.AttrMask) tcell.Style

SetAttributes sets attributes on a style.

func StripTags added in v1.6.1

func StripTags(text []byte, colors bool, regions bool) []byte

StripTags returns the provided text without color and/or region tags.

func TaggedStringWidth added in v1.6.1

func TaggedStringWidth(text string) int

TaggedStringWidth returns the width of the given string needed to print it on screen. The text may contain color tags which are not counted.

func TaggedTextWidth added in v1.6.1

func TaggedTextWidth(text []byte) int

TaggedTextWidth returns the width of the given string needed to print it on screen. The text may contain color tags which are not counted.

func TranslateANSI added in v0.1.18

func TranslateANSI(text string) string

TranslateANSI replaces ANSI escape sequences found in the provided string with crtview's color tags and returns the resulting string.

func WordWrap

func WordWrap(text string, width int) (lines []string)

WordWrap splits a text such that each resulting line does not exceed the given screen width. Possible split points are after any punctuation or whitespace. Whitespace after split points will be dropped.

This function considers color tags to have no width.

Text is always split at newline characters ('\n').

Types

type Application

type Application struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Application represents the top node of an application.

It is not strictly required to use this class as none of the other classes depend on it. However, it provides useful tools to set up an application and plays nicely with all widgets.

The following command displays a primitive p on the screen until Ctrl-C is pressed:

if err := crtview.NewApplication().SetRoot(p, true).Run(); err != nil {
    panic(err)
}

func NewApplication

func NewApplication() *Application

NewApplication creates and returns a new application.

Example

Example of an application with multiple layouts.

// Initialize application.
app := NewApplication()

// Create shared TextView.
sharedTextView := NewTextView()
sharedTextView.SetTextAlign(AlignCenter)
sharedTextView.SetText("Widgets may be re-used between multiple layouts.")

// Create main layout using Grid.
mainTextView := NewTextView()
mainTextView.SetTextAlign(AlignCenter)
mainTextView.SetText("This is mainLayout.\n\nPress <Tab> to view aboutLayout.")

mainLayout := NewGrid()
mainLayout.AddItem(mainTextView, 0, 0, 1, 1, 0, 0, false)
mainLayout.AddItem(sharedTextView, 1, 0, 1, 1, 0, 0, false)

// Create about layout using Grid.
aboutTextView := NewTextView()
aboutTextView.SetTextAlign(AlignCenter)
aboutTextView.SetText("crtview muti-layout application example\n\nhttps://github.com/isbm/crtview")

aboutLayout := NewGrid()
aboutLayout.AddItem(aboutTextView, 0, 0, 1, 1, 0, 0, false)
aboutLayout.AddItem(sharedTextView, 1, 0, 1, 1, 0, 0, false)

// Track the current layout.
currentLayout := 0

// Set an input capture function that switches between layouts when the tab
// key is pressed.
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
	if event.Key() == tcell.KeyTab {
		if currentLayout == 0 {
			currentLayout = 1

			app.SetRoot(aboutLayout, true)
		} else {
			currentLayout = 0

			app.SetRoot(mainLayout, true)
		}

		// Return nil to stop propagating the event to any remaining
		// handlers.
		return nil
	}

	// Return the event to continue propagating it.
	return event
})

// Run the application.
app.SetRoot(mainLayout, true)
if err := app.Run(); err != nil {
	panic(err)
}
Output:

func (*Application) Draw

func (a *Application) Draw()

Draw refreshes the screen (during the next update cycle). It calls the Draw() function of the application's root primitive and then syncs the screen buffer.

func (*Application) EnableBracketedPaste added in v1.6.1

func (a *Application) EnableBracketedPaste(enable bool)

EnableBracketedPaste enables bracketed paste mode, which is enabled by default.

func (*Application) EnableMouse added in v1.6.1

func (a *Application) EnableMouse(enable bool)

EnableMouse enables mouse events.

Example

Example of an application with mouse support.

// Initialize application.
app := NewApplication()

// Enable mouse support.
app.EnableMouse(true)

// Enable double clicks.
app.SetDoubleClickInterval(StandardDoubleClick)

// Create a textview.
tv := NewTextView()
tv.SetText("Click somewhere!")

// Set a mouse capture function which prints where the mouse was clicked.
app.SetMouseCapture(func(event *tcell.EventMouse, action MouseAction) (*tcell.EventMouse, MouseAction) {
	if action == MouseLeftClick || action == MouseLeftDoubleClick {
		actionLabel := "click"
		if action == MouseLeftDoubleClick {
			actionLabel = "double-click"
		}

		x, y := event.Position()

		fmt.Fprintf(tv, "\nYou %sed at %d,%d! Amazing!", actionLabel, x, y)

		// Return nil to stop propagating the event to any remaining handlers.
		return nil, 0
	}

	// Return the event to continue propagating it.
	return event, action
})

// Run the application.
app.SetRoot(tv, true)
if err := app.Run(); err != nil {
	panic(err)
}
Output:

func (*Application) GetAfterDrawFunc added in v0.1.12

func (a *Application) GetAfterDrawFunc() func(screen tcell.Screen)

GetAfterDrawFunc returns the callback function installed with SetAfterDrawFunc() or nil if none has been installed.

func (*Application) GetAfterResizeFunc added in v1.6.1

func (a *Application) GetAfterResizeFunc() func(width int, height int)

GetAfterResizeFunc returns the callback function installed with SetAfterResizeFunc() or nil if none has been installed.

func (*Application) GetBeforeDrawFunc added in v0.1.12

func (a *Application) GetBeforeDrawFunc() func(screen tcell.Screen) bool

GetBeforeDrawFunc returns the callback function installed with SetBeforeDrawFunc() or nil if none has been installed.

func (*Application) GetFocus

func (a *Application) GetFocus() Primitive

GetFocus returns the primitive which has the current focus. If none has it, nil is returned.

func (*Application) GetInputCapture added in v0.1.12

func (a *Application) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey

GetInputCapture returns the function installed with SetInputCapture() or nil if no such function has been installed.

func (*Application) GetMouseCapture added in v1.6.1

func (a *Application) GetMouseCapture() func(event *tcell.EventMouse, action MouseAction) (*tcell.EventMouse, MouseAction)

GetMouseCapture returns the function installed with SetMouseCapture() or nil if no such function has been installed.

func (*Application) GetScreen added in v1.6.1

func (a *Application) GetScreen() tcell.Screen

GetScreen returns the current tcell.Screen of the application. Lock the application when manipulating the screen to prevent race conditions.

func (*Application) GetScreenSize added in v1.6.1

func (a *Application) GetScreenSize() (width, height int)

GetScreenSize returns the size of the application's screen.

func (*Application) QueueEvent added in v0.1.19

func (a *Application) QueueEvent(event tcell.Event)

QueueEvent sends an event to the Application event loop.

It is not recommended for event to be nil.

func (*Application) QueueUpdate added in v0.1.19

func (a *Application) QueueUpdate(f func())

QueueUpdate queues a function to be executed as part of the event loop.

Note that Draw() is not implicitly called after the execution of f as that may not be desirable. You can call Draw() from f if the screen should be refreshed after each update. Alternatively, use QueueUpdateDraw() to follow up with an immediate refresh of the screen.

func (*Application) QueueUpdateDraw added in v1.6.1

func (a *Application) QueueUpdateDraw(f func())

QueueUpdateDraw works like QueueUpdate() except it refreshes the screen immediately after executing f.

func (*Application) ResizeToFullScreen

func (a *Application) ResizeToFullScreen(p Primitive)

ResizeToFullScreen resizes the given primitive such that it fills the entire screen.

func (*Application) RingBell added in v1.6.1

func (a *Application) RingBell()

RingBell sends a bell code to the terminal.

func (*Application) Run

func (a *Application) Run() error

Run starts the application and thus the event loop. This function returns when Stop() was called.

func (*Application) SetAfterDrawFunc added in v0.1.11

func (a *Application) SetAfterDrawFunc(handler func(screen tcell.Screen))

SetAfterDrawFunc installs a callback function which is invoked after the root primitive was drawn during screen updates.

Provide nil to uninstall the callback function.

func (*Application) SetAfterFocusFunc added in v1.6.1

func (a *Application) SetAfterFocusFunc(handler func(p Primitive))

SetAfterFocusFunc installs a callback function which is invoked after the application's focus changes.

Provide nil to uninstall the callback function.

func (*Application) SetAfterResizeFunc added in v1.6.1

func (a *Application) SetAfterResizeFunc(handler func(width int, height int))

SetAfterResizeFunc installs a callback function which is invoked when the application's window is initialized, and when the application's window size changes. After invoking this callback the screen is cleared and the application is drawn.

Provide nil to uninstall the callback function.

func (*Application) SetBeforeDrawFunc added in v0.1.11

func (a *Application) SetBeforeDrawFunc(handler func(screen tcell.Screen) bool)

SetBeforeDrawFunc installs a callback function which is invoked just before the root primitive is drawn during screen updates. If the function returns true, drawing will not continue, i.e. the root primitive will not be drawn (and an after-draw-handler will not be called).

Note that the screen is not cleared by the application. To clear the screen, you may call screen.Clear().

Provide nil to uninstall the callback function.

func (*Application) SetBeforeFocusFunc added in v1.6.1

func (a *Application) SetBeforeFocusFunc(handler func(p Primitive) bool)

SetBeforeFocusFunc installs a callback function which is invoked before the application's focus changes. Return false to maintain the current focus.

Provide nil to uninstall the callback function.

func (*Application) SetDoubleClickInterval added in v1.6.1

func (a *Application) SetDoubleClickInterval(interval time.Duration)

SetDoubleClickInterval sets the maximum time between clicks to register a double click rather than a single click. A standard duration is provided as StandardDoubleClick. No interval is set by default, disabling double clicks.

func (*Application) SetFocus

func (a *Application) SetFocus(p Primitive)

SetFocus sets the focus on a new primitive. All key events will be redirected to that primitive. Callers must ensure that the primitive will handle key events.

Blur() will be called on the previously focused primitive. Focus() will be called on the new primitive.

func (*Application) SetInputCapture added in v0.1.6

func (a *Application) SetInputCapture(capture func(event *tcell.EventKey) *tcell.EventKey)

SetInputCapture sets a function which captures all key events before they are forwarded to the key event handler of the primitive which currently has focus. This function can then choose to forward that key event (or a different one) by returning it or stop the key event processing by returning nil.

Note that this also affects the default event handling of the application itself: Such a handler can intercept the Ctrl-C event which closes the application.

func (*Application) SetMouseCapture added in v1.6.1

func (a *Application) SetMouseCapture(capture func(event *tcell.EventMouse, action MouseAction) (*tcell.EventMouse, MouseAction))

SetMouseCapture sets a function which captures mouse events (consisting of the original tcell mouse event and the semantic mouse action) before they are forwarded to the appropriate mouse event handler. This function can then choose to forward that event (or a different one) by returning it or stop the event processing by returning a nil mouse event.

func (*Application) SetRoot

func (a *Application) SetRoot(root Primitive, fullscreen bool)

SetRoot sets the root primitive for this application. If "fullscreen" is set to true, the root primitive's position will be changed to fill the screen.

This function must be called at least once or nothing will be displayed when the application starts.

It also calls SetFocus() on the primitive.

func (*Application) SetScreen added in v0.1.18

func (a *Application) SetScreen(screen tcell.Screen)

SetScreen allows you to provide your own tcell.Screen object. For most applications, this is not needed and you should be familiar with tcell.Screen when using this function.

This function is typically called before the first call to Run(). Init() need not be called on the screen.

func (*Application) Stop

func (a *Application) Stop()

Stop stops the application, causing Run() to return.

func (*Application) Suspend added in v0.1.12

func (a *Application) Suspend(f func()) bool

Suspend temporarily suspends the application by exiting terminal UI mode and invoking the provided function "f". When "f" returns, terminal UI mode is entered again and the application resumes.

A return value of true indicates that the application was suspended and "f" was called. If false is returned, the application was already suspended, terminal UI mode was not exited, and "f" was not called.

BUG(isbm) First key event is lost when resuming a suspended application.

Issue: https://github.com/gdamore/tcell/issues/194

type Box

type Box struct {
	// contains filtered or unexported fields
}

Box is the base Primitive for all widgets. It has a background color and optional surrounding elements such as a border and a title. It does not have inner text. Widgets embed Box and draw their text over it.

func NewBox

func NewBox() *Box

NewBox returns a Box without a border.

func (*Box) Blur

func (b *Box) Blur()

Blur is called when this primitive loses focus.

func (*Box) Draw

func (b *Box) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Box) Focus

func (b *Box) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*Box) GetBackgroundColor added in v1.6.1

func (b *Box) GetBackgroundColor() tcell.Color

GetBackgroundColor returns the box's background color.

func (*Box) GetBorderPadding added in v1.6.1

func (b *Box) GetBorderPadding() (top, bottom, left, right int)

GetBorderPadding returns the size of the borders around the box content.

func (*Box) GetDrawFunc added in v0.1.12

func (b *Box) GetDrawFunc() func(screen tcell.Screen, x, y, width, height int) (int, int, int, int)

GetDrawFunc returns the callback function which was installed with SetDrawFunc() or nil if no such function has been installed.

func (*Box) GetFocusable

func (b *Box) GetFocusable() Focusable

GetFocusable returns the item's Focusable.

func (*Box) GetInnerRect

func (b *Box) GetInnerRect() (int, int, int, int)

GetInnerRect returns the position of the inner rectangle (x, y, width, height), without the border and without any padding. Width and height values will clamp to 0 and thus never be negative.

func (*Box) GetInputCapture added in v0.1.12

func (b *Box) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey

GetInputCapture returns the function installed with SetInputCapture() or nil if no such function has been installed.

func (*Box) GetMouseCapture added in v1.6.1

func (b *Box) GetMouseCapture() func(action MouseAction, event *tcell.EventMouse) (MouseAction, *tcell.EventMouse)

GetMouseCapture returns the function installed with SetMouseCapture() or nil if no such function has been installed.

func (*Box) GetRect

func (b *Box) GetRect() (int, int, int, int)

GetRect returns the current position of the rectangle, x, y, width, and height.

func (*Box) GetTitle added in v1.6.1

func (b *Box) GetTitle() string

GetTitle returns the box's current title.

func (*Box) HasBorder added in v1.6.1

func (b *Box) HasBorder() bool

HasBorder returns a value indicating whether the box have a border or not.

func (*Box) HasFocus

func (b *Box) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Box) Hide added in v1.6.1

func (b *Box) Hide() *Box

Hide box

func (*Box) InRect added in v1.6.1

func (b *Box) InRect(x, y int) bool

InRect returns true if the given coordinate is within the bounds of the box's rectangle.

func (*Box) InputHandler

func (b *Box) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns nil.

func (*Box) IsVisible added in v1.6.1

func (b *Box) IsVisible() bool

IsVisible returns a value indicating whether or not the box is visible.

func (*Box) MouseHandler added in v1.6.1

func (b *Box) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns nil.

func (*Box) SetBackgroundColor

func (b *Box) SetBackgroundColor(color tcell.Color)

SetBackgroundColor sets the box's background color.

func (*Box) SetBackgroundTransparent added in v1.6.1

func (b *Box) SetBackgroundTransparent(transparent bool) *Box

SetBackgroundTransparent sets the flag indicating whether or not the box's background is transparent.

func (*Box) SetBorder

func (b *Box) SetBorder(show bool) *Box

SetBorder sets the flag indicating whether or not the box should have a border.

func (*Box) SetBorderAttributes added in v0.1.18

func (b *Box) SetBorderAttributes(attr tcell.AttrMask) *Box

SetBorderAttributes sets the border's style attributes. You can combine different attributes using bitmask operations:

box.SetBorderAttributes(tcell.AttrUnderline | tcell.AttrBold)

func (*Box) SetBorderColor

func (b *Box) SetBorderColor(color tcell.Color) *Box

SetBorderColor sets the box's border color.

func (*Box) SetBorderColorFocused added in v1.6.1

func (b *Box) SetBorderColorFocused(color tcell.Color) *Box

SetBorderColorFocused sets the box's border color when the box is focused.

func (*Box) SetBorderPadding

func (b *Box) SetBorderPadding(top, bottom, left, right int) *Box

SetBorderPadding sets the size of the borders around the box content.

func (*Box) SetDrawFunc added in v0.1.11

func (b *Box) SetDrawFunc(handler func(screen tcell.Screen, x, y, width, height int) (int, int, int, int)) *Box

SetDrawFunc sets a callback function which is invoked after the box primitive has been drawn. This allows you to add a more individual style to the box (and all primitives which extend it).

The function is provided with the box's dimensions (set via SetRect()). It must return the box's inner dimensions (x, y, width, height) which will be returned by GetInnerRect(), used by descendent primitives to draw their own content.

func (*Box) SetInputCapture added in v0.1.6

func (b *Box) SetInputCapture(capture func(event *tcell.EventKey) *tcell.EventKey) *Box

SetInputCapture installs a function which captures key events before they are forwarded to the primitive's default key event handler. This function can then choose to forward that key event (or a different one) to the default handler by returning it. If nil is returned, the default handler will not be called.

Providing a nil handler will remove a previously existing handler.

Note that this function will not have an effect on primitives composed of other primitives, such as Form, Flex, or Grid. Key events are only captured by the primitives that have focus (e.g. InputField) and only one primitive can have focus at a time. Composing primitives such as Form pass the focus on to their contained primitives and thus never receive any key events themselves. Therefore, they cannot intercept key events.

func (*Box) SetMouseCapture added in v1.6.1

func (b *Box) SetMouseCapture(capture func(action MouseAction, event *tcell.EventMouse) (MouseAction, *tcell.EventMouse)) *Box

SetMouseCapture sets a function which captures mouse events (consisting of the original tcell mouse event and the semantic mouse action) before they are forwarded to the primitive's default mouse event handler. This function can then choose to forward that event (or a different one) by returning it or returning a nil mouse event, in which case the default handler will not be called.

Providing a nil handler will remove a previously existing handler.

func (*Box) SetRect

func (b *Box) SetRect(x, y, width, height int)

SetRect sets a new position of the primitive. Note that this has no effect if this primitive is part of a layout (e.g. Flex, Grid) or if it was added like this:

application.SetRoot(b, true)

func (*Box) SetTitle

func (b *Box) SetTitle(title string) *Box

SetTitle sets the box's title.

func (*Box) SetTitleAlign

func (b *Box) SetTitleAlign(align int) *Box

SetTitleAlign sets the alignment of the title, one of AlignLeft, AlignCenter, or AlignRight.

func (*Box) SetTitleColor

func (b *Box) SetTitleColor(color tcell.Color) *Box

SetTitleColor sets the box's title color.

func (*Box) Show added in v1.6.1

func (b *Box) Show() *Box

Show box

func (*Box) ShowFocus added in v1.6.1

func (b *Box) ShowFocus(showFocus bool) *Box

ShowFocus sets the flag indicating whether or not the borders of this primitive should change thickness when focused.

func (*Box) WrapInputHandler added in v0.1.13

func (b *Box) WrapInputHandler(inputHandler func(*tcell.EventKey, func(p Primitive))) func(*tcell.EventKey, func(p Primitive))

WrapInputHandler wraps an input handler (see InputHandler()) with the functionality to capture input (see SetInputCapture()) before passing it on to the provided (default) input handler.

This is only meant to be used by subclassing primitives.

func (*Box) WrapMouseHandler added in v1.6.1

func (b *Box) WrapMouseHandler(mouseHandler func(MouseAction, *tcell.EventMouse, func(p Primitive)) (bool, Primitive)) func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

WrapMouseHandler wraps a mouse event handler (see MouseHandler()) with the functionality to capture mouse events (see SetMouseCapture()) before passing them on to the provided (default) event handler.

This is only meant to be used by subclassing primitives.

type Button

type Button struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Button is labeled box that triggers an action when selected.

func NewButton

func NewButton(label string) *Button

NewButton returns a new input field.

func (*Button) Draw

func (b *Button) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Button) GetLabel

func (b *Button) GetLabel() string

GetLabel returns the button text.

func (*Button) InputHandler

func (b *Button) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*Button) MouseHandler added in v1.6.1

func (b *Button) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Button) SetBackgroundColorFocused added in v1.6.1

func (b *Button) SetBackgroundColorFocused(color tcell.Color)

SetBackgroundColorFocused sets the background color of the button text when the button is in focus.

func (*Button) SetBlurFunc

func (b *Button) SetBlurFunc(handler func(key tcell.Key))

SetBlurFunc sets a handler which is called when the user leaves the button. The callback function is provided with the key that was pressed, which is one of the following:

  • KeyEscape: Leaving the button with no specific direction.
  • KeyTab: Move to the next field.
  • KeyBacktab: Move to the previous field.

func (*Button) SetLabel

func (b *Button) SetLabel(label string)

SetLabel sets the button text.

func (*Button) SetLabelColor

func (b *Button) SetLabelColor(color tcell.Color)

SetLabelColor sets the color of the button text.

func (*Button) SetLabelColorFocused added in v1.6.1

func (b *Button) SetLabelColorFocused(color tcell.Color)

SetLabelColorFocused sets the color of the button text when the button is in focus.

func (*Button) SetSelectedFunc

func (b *Button) SetSelectedFunc(handler func())

SetSelectedFunc sets a handler which is called when the button was selected.

type CheckBox added in v1.6.1

type CheckBox struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

CheckBox implements a simple box for boolean values which can be checked and unchecked.

func NewCheckBox added in v1.6.1

func NewCheckBox() *CheckBox

NewCheckBox returns a new input field.

func (*CheckBox) Draw added in v1.6.1

func (c *CheckBox) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*CheckBox) GetFieldHeight added in v1.6.1

func (c *CheckBox) GetFieldHeight() int

GetFieldHeight returns the height of the field.

func (*CheckBox) GetFieldWidth added in v1.6.1

func (c *CheckBox) GetFieldWidth() int

GetFieldWidth returns this primitive's field width.

func (*CheckBox) GetLabel added in v1.6.1

func (c *CheckBox) GetLabel() string

GetLabel returns the text to be displayed before the input area.

func (*CheckBox) GetMessage added in v1.6.1

func (c *CheckBox) GetMessage() string

GetMessage returns the text to be displayed after the checkbox

func (*CheckBox) InputHandler added in v1.6.1

func (c *CheckBox) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*CheckBox) IsChecked added in v1.6.1

func (c *CheckBox) IsChecked() bool

IsChecked returns whether or not the box is checked.

func (*CheckBox) MouseHandler added in v1.6.1

func (c *CheckBox) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*CheckBox) SetChangedFunc added in v1.6.1

func (c *CheckBox) SetChangedFunc(handler func(checked bool))

SetChangedFunc sets a handler which is called when the checked state of this checkbox was changed by the user. The handler function receives the new state.

func (*CheckBox) SetChecked added in v1.6.1

func (c *CheckBox) SetChecked(checked bool)

SetChecked sets the state of the checkbox.

func (*CheckBox) SetCheckedRune added in v1.6.1

func (c *CheckBox) SetCheckedRune(rune rune)

SetCheckedRune sets the rune to show when the checkbox is checked.

func (*CheckBox) SetDoneFunc added in v1.6.1

func (c *CheckBox) SetDoneFunc(handler func(key tcell.Key))

SetDoneFunc sets a handler which is called when the user is done using the checkbox. The callback function is provided with the key that was pressed, which is one of the following:

  • KeyEscape: Abort text input.
  • KeyTab: Move to the next field.
  • KeyBacktab: Move to the previous field.

func (*CheckBox) SetFieldBackgroundColor added in v1.6.1

func (c *CheckBox) SetFieldBackgroundColor(color tcell.Color)

SetFieldBackgroundColor sets the background color of the input area.

func (*CheckBox) SetFieldBackgroundColorFocused added in v1.6.1

func (c *CheckBox) SetFieldBackgroundColorFocused(color tcell.Color)

SetFieldBackgroundColorFocused sets the background color of the input area when focused.

func (*CheckBox) SetFieldTextColor added in v1.6.1

func (c *CheckBox) SetFieldTextColor(color tcell.Color)

SetFieldTextColor sets the text color of the input area.

func (*CheckBox) SetFieldTextColorFocused added in v1.6.1

func (c *CheckBox) SetFieldTextColorFocused(color tcell.Color)

SetFieldTextColorFocused sets the text color of the input area when focused.

func (*CheckBox) SetFinishedFunc added in v1.6.1

func (c *CheckBox) SetFinishedFunc(handler func(key tcell.Key))

SetFinishedFunc sets a callback invoked when the user leaves this form item.

func (*CheckBox) SetLabel added in v1.6.1

func (c *CheckBox) SetLabel(label string)

SetLabel sets the text to be displayed before the input area.

func (*CheckBox) SetLabelColor added in v1.6.1

func (c *CheckBox) SetLabelColor(color tcell.Color)

SetLabelColor sets the color of the label.

func (*CheckBox) SetLabelColorFocused added in v1.6.1

func (c *CheckBox) SetLabelColorFocused(color tcell.Color)

SetLabelColorFocused sets the color of the label when focused.

func (*CheckBox) SetLabelWidth added in v1.6.1

func (c *CheckBox) SetLabelWidth(width int)

SetLabelWidth sets the screen width of the label. A value of 0 will cause the primitive to use the width of the label string.

func (*CheckBox) SetMessage added in v1.6.1

func (c *CheckBox) SetMessage(message string)

SetMessage sets the text to be displayed after the checkbox

type ContextMenu added in v1.6.1

type ContextMenu struct {
	// contains filtered or unexported fields
}

ContextMenu is a menu that appears upon user interaction, such as right clicking or pressing Alt+Enter.

func NewContextMenu added in v1.6.1

func NewContextMenu(parent Primitive) *ContextMenu

NewContextMenu returns a new context menu.

func (*ContextMenu) AddContextItem added in v1.6.1

func (c *ContextMenu) AddContextItem(text string, shortcut rune, selected func(index int))

AddContextItem adds an item to the context menu. Adding an item with no text or shortcut will add a divider.

func (*ContextMenu) ClearContextMenu added in v1.6.1

func (c *ContextMenu) ClearContextMenu()

ClearContextMenu removes all items from the context menu.

func (*ContextMenu) ContextMenuList added in v1.6.1

func (c *ContextMenu) ContextMenuList() *List

ContextMenuList returns the underlying List of the context menu.

func (*ContextMenu) ContextMenuVisible added in v1.6.1

func (c *ContextMenu) ContextMenuVisible() bool

ContextMenuVisible returns whether or not the context menu is visible.

func (*ContextMenu) HideContextMenu added in v1.6.1

func (c *ContextMenu) HideContextMenu(setFocus func(Primitive))

HideContextMenu hides the context menu.

func (*ContextMenu) SetContextSelectedFunc added in v1.6.1

func (c *ContextMenu) SetContextSelectedFunc(handler func(index int, text string, shortcut rune))

SetContextSelectedFunc sets the function which is called when the user selects a context menu item. The function receives the item's index in the menu (starting with 0), its text and its shortcut rune. SetSelectedFunc must be called before the context menu is shown.

func (*ContextMenu) ShowContextMenu added in v1.6.1

func (c *ContextMenu) ShowContextMenu(item int, x int, y int, setFocus func(Primitive))

ShowContextMenu shows the context menu. Provide -1 for both to position on the selected item, or specify a position.

type DropDown struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

DropDown implements a selection widget whose options become visible in a drop-down list when activated.

func NewDropDown

func NewDropDown() *DropDown

NewDropDown returns a new drop-down.

func (d *DropDown) AddOptions(options ...*DropDownOption)

AddOptions adds new selectable options to this drop-down.

func (d *DropDown) AddOptionsSimple(options ...string)

AddOptionsSimple adds new selectable options to this drop-down.

func (d *DropDown) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (d *DropDown) Focus(delegate func(p Primitive))

Focus is called by the application when the primitive receives focus.

func (d *DropDown) GetCurrentOption() (int, *DropDownOption)

GetCurrentOption returns the index of the currently selected option as well as the option itself. If no option was selected, -1 and nil is returned.

func (d *DropDown) GetFieldHeight() int

GetFieldHeight returns the height of the field.

func (d *DropDown) GetFieldWidth() int

GetFieldWidth returns this primitive's field screen width.

func (d *DropDown) GetLabel() string

GetLabel returns the text to be displayed before the input area.

func (d *DropDown) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (d *DropDown) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (d *DropDown) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (d *DropDown) SetChangedFunc(handler func(index int, option *DropDownOption))

SetChangedFunc sets a handler which is called when the user changes the focused drop-down option. The handler is provided with the selected option's index and the option itself. If "no option" was selected, these values are -1 and nil.

func (d *DropDown) SetCurrentOption(index int)

SetCurrentOption sets the index of the currently selected option. This may be a negative value to indicate that no option is currently selected. Calling this function will also trigger the "selected" callback (if there is one).

func (d *DropDown) SetDoneFunc(handler func(key tcell.Key))

SetDoneFunc sets a handler which is called when the user is done selecting options. The callback function is provided with the key that was pressed, which is one of the following:

  • KeyEscape: Abort selection.
  • KeyTab: Move to the next field.
  • KeyBacktab: Move to the previous field.
func (d *DropDown) SetDropDownBackgroundColor(color tcell.Color)

SetDropDownBackgroundColor sets the background color of the drop-down list.

func (d *DropDown) SetDropDownSelectedBackgroundColor(color tcell.Color)

SetDropDownSelectedBackgroundColor sets the background color of the selected option in the drop-down list.

func (d *DropDown) SetDropDownSelectedTextColor(color tcell.Color)

SetDropDownSelectedTextColor sets the text color of the selected option in the drop-down list.

func (d *DropDown) SetDropDownSymbolRune(symbol rune)

SetDropDownSymbolRune sets the rune to be drawn at the end of the dropdown field to indicate that this field is a dropdown.

func (d *DropDown) SetDropDownTextColor(color tcell.Color)

SetDropDownTextColor sets text color of the drop-down list.

func (d *DropDown) SetFieldBackgroundColor(color tcell.Color)

SetFieldBackgroundColor sets the background color of the options area.

func (d *DropDown) SetFieldBackgroundColorFocused(color tcell.Color)

SetFieldBackgroundColorFocused sets the background color of the options area when focused.

func (d *DropDown) SetFieldTextColor(color tcell.Color)

SetFieldTextColor sets the text color of the options area.

func (d *DropDown) SetFieldTextColorFocused(color tcell.Color)

SetFieldTextColorFocused sets the text color of the options area when focused.

func (d *DropDown) SetFieldWidth(width int)

SetFieldWidth sets the screen width of the options area. A value of 0 means extend to as long as the longest option text.

func (d *DropDown) SetFinishedFunc(handler func(key tcell.Key))

SetFinishedFunc sets a callback invoked when the user leaves this form item.

func (d *DropDown) SetLabel(label string)

SetLabel sets the text to be displayed before the input area.

func (d *DropDown) SetLabelColor(color tcell.Color)

SetLabelColor sets the color of the label.

func (d *DropDown) SetLabelColorFocused(color tcell.Color)

SetLabelColorFocused sets the color of the label when focused.

func (d *DropDown) SetLabelWidth(width int)

SetLabelWidth sets the screen width of the label. A value of 0 will cause the primitive to use the width of the label string.

func (d *DropDown) SetOptions(selected func(index int, option *DropDownOption), options ...*DropDownOption)

SetOptions replaces all current options with the ones provided and installs one callback function which is called when one of the options is selected. It will be called with the option's index and the option itself. The "selected" parameter may be nil.

func (d *DropDown) SetOptionsSimple(selected func(index int, option *DropDownOption), options ...string)

SetOptionsSimple replaces all current options with the ones provided and installs one callback function which is called when one of the options is selected. It will be called with the option's index and the option itself The "selected" parameter may be nil.

func (d *DropDown) SetPrefixTextColor(color tcell.Color)

SetPrefixTextColor sets the color of the prefix string. The prefix string is shown when the user starts typing text, which directly selects the first option that starts with the typed string.

func (d *DropDown) SetSelectedFunc(handler func(index int, option *DropDownOption))

SetSelectedFunc sets a handler which is called when the user selects a drop-down's option. This handler will be called in addition and prior to an option's optional individual handler. The handler is provided with the selected option's index and the option itself. If "no option" was selected, these values are -1 and nil.

func (d *DropDown) SetTextOptions(prefix, suffix, currentPrefix, currentSuffix, noSelection string)

SetTextOptions sets the text to be placed before and after each drop-down option (prefix/suffix), the text placed before and after the currently selected option (currentPrefix/currentSuffix) as well as the text to be displayed when no option is currently selected. Per default, all of these strings are empty.

type DropDownOption struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

DropDownOption is one option that can be selected in a drop-down primitive.

func NewDropDownOption added in v1.6.1

func NewDropDownOption(text string) *DropDownOption

NewDropDownOption returns a new option for a dropdown.

func (d *DropDownOption) GetReference() interface{}

GetReference returns the reference object of this dropdown option.

func (d *DropDownOption) GetText() string

GetText returns the text of this dropdown option.

func (d *DropDownOption) SetReference(reference interface{})

SetReference allows you to store a reference of any type in this option.

func (d *DropDownOption) SetSelectedFunc(handler func(index int, option *DropDownOption))

SetSelectedFunc sets the handler to be called when this option is selected.

func (d *DropDownOption) SetText(text string)

SetText returns the text of this dropdown option.

type Flex

type Flex struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Flex is a basic implementation of the Flexbox layout. The contained primitives are arranged horizontally or vertically. The way they are distributed along that dimension depends on their layout settings, which is either a fixed length or a proportional length. See AddItem() for details.

func NewFlex

func NewFlex() *Flex

NewFlex returns a new flexbox layout container with no primitives and its direction set to FlexColumn. To add primitives to this layout, see AddItem(). To change the direction, see SetDirection().

Note that Flex will have a transparent background by default so that any nil flex items will show primitives behind the Flex. To disable this transparency:

flex.SetBackgroundTransparent(false)

func (*Flex) AddItem

func (f *Flex) AddItem(item Primitive, fixedSize, proportion int, focus bool) *Flex

AddItem adds a new item to the container. The "fixedSize" argument is a width or height that may not be changed by the layout algorithm. A value of 0 means that its size is flexible and may be changed. The "proportion" argument defines the relative size of the item compared to other flexible-size items. For example, items with a proportion of 2 will be twice as large as items with a proportion of 1. The proportion must be at least 1 if fixedSize == 0 (ignored otherwise).

If "focus" is set to true, the item will receive focus when the Flex primitive receives focus. If multiple items have the "focus" flag set to true, the first one will receive focus.

You can provide a nil value for the primitive. This will fill the empty screen space with the default background color. To show content behind the space, add a Box with a transparent background instead.

func (*Flex) AddItemAtIndex added in v1.6.1

func (f *Flex) AddItemAtIndex(index int, item Primitive, fixedSize, proportion int, focus bool) *Flex

AddItemAtIndex adds an item to the flex at a given index. For more information see AddItem.

func (*Flex) Draw

func (f *Flex) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Flex) Focus

func (f *Flex) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*Flex) GetDirection added in v1.6.1

func (f *Flex) GetDirection() int

GetDirection returns the direction in which the contained primitives are distributed. This can be either FlexColumn (default) or FlexRow.

func (*Flex) HasFocus

func (f *Flex) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Flex) MouseHandler added in v1.6.1

func (f *Flex) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Flex) RemoveItem added in v0.1.11

func (f *Flex) RemoveItem(p Primitive) *Flex

RemoveItem removes all items for the given primitive from the container, keeping the order of the remaining items intact.

func (*Flex) ResizeItem added in v0.1.17

func (f *Flex) ResizeItem(p Primitive, fixedSize, proportion int) *Flex

ResizeItem sets a new size for the item(s) with the given primitive. If there are multiple Flex items with the same primitive, they will all receive the same size. For details regarding the size parameters, see AddItem().

func (*Flex) SetBackgroundColor added in v1.6.1

func (f *Flex) SetBackgroundColor(color tcell.Color) *Flex

SetBackgroundColor of the Flex container

func (*Flex) SetDirection

func (f *Flex) SetDirection(direction int) *Flex

SetDirection sets the direction in which the contained primitives are distributed. This can be either FlexColumn (default) or FlexRow.

func (*Flex) SetFullScreen

func (f *Flex) SetFullScreen(fullScreen bool) *Flex

SetFullScreen sets the flag which, when true, causes the flex layout to use the entire screen space instead of whatever size it is currently assigned to.

type FocusManager added in v1.6.1

type FocusManager struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

FocusManager manages application focus.

func NewFocusManager added in v1.6.1

func NewFocusManager(setFocus func(p Primitive)) *FocusManager

NewFocusManager returns a new FocusManager object.

func (*FocusManager) Add added in v1.6.1

func (f *FocusManager) Add(p ...Primitive)

Add adds an element to the focus handler.

func (*FocusManager) AddAt added in v1.6.1

func (f *FocusManager) AddAt(index int, p Primitive)

AddAt adds an element to the focus handler at the specified index.

func (*FocusManager) Focus added in v1.6.1

func (f *FocusManager) Focus(p Primitive)

Focus focuses the provided element.

func (*FocusManager) FocusAt added in v1.6.1

func (f *FocusManager) FocusAt(index int)

FocusAt focuses the element at the provided index.

func (*FocusManager) FocusNext added in v1.6.1

func (f *FocusManager) FocusNext()

FocusNext focuses the next element.

func (*FocusManager) FocusPrevious added in v1.6.1

func (f *FocusManager) FocusPrevious()

FocusPrevious focuses the previous element.

func (*FocusManager) GetFocusIndex added in v1.6.1

func (f *FocusManager) GetFocusIndex() int

GetFocusIndex returns the index of the currently focused element.

func (*FocusManager) GetFocusedPrimitive added in v1.6.1

func (f *FocusManager) GetFocusedPrimitive() Primitive

GetFocusedPrimitive returns the currently focused primitive.

func (*FocusManager) SetWrapAround added in v1.6.1

func (f *FocusManager) SetWrapAround(wrapAround bool)

SetWrapAround sets the flag that determines whether navigation will wrap around. That is, navigating forwards on the last field will move the selection to the first field (similarly in the other direction). If set to false, the focus won't change when navigating forwards on the last element or navigating backwards on the first element.

func (*FocusManager) Transform added in v1.6.1

func (f *FocusManager) Transform(tr Transformation)

Transform modifies the current focus.

type Focusable

type Focusable interface {
	HasFocus() bool
}

Focusable provides a method which determines if a primitive has focus. Composed primitives may be focused based on the focused state of their contained primitives.

type Form

type Form struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Form allows you to combine multiple one-line form elements into a vertical or horizontal layout. Form elements include types such as InputField or CheckBox. These elements can be optionally followed by one or more buttons for which you can define form-wide actions (e.g. Save, Clear, Cancel).

func NewForm

func NewForm() *Form

NewForm returns a new form.

func (*Form) AddButton

func (f *Form) AddButton(label string, selected func())

AddButton adds a new button to the form. The "selected" function is called when the user selects this button. It may be nil.

func (*Form) AddCheckBox added in v1.6.1

func (f *Form) AddCheckBox(label string, message string, checked bool, changed func(checked bool))

AddCheckBox adds a checkbox to the form. It has a label, a message, an initial state, and an (optional) callback function which is invoked when the state of the checkbox was changed by the user.

func (*Form) AddDropDown

func (f *Form) AddDropDown(label string, initialOption int, selected func(index int, option *DropDownOption), options []*DropDownOption)

AddDropDown adds a drop-down element to the form. It has a label, options, and an (optional) callback function which is invoked when an option was selected. The initial option may be a negative value to indicate that no option is currently selected.

func (*Form) AddDropDownSimple added in v1.6.1

func (f *Form) AddDropDownSimple(label string, initialOption int, selected func(index int, option *DropDownOption), options ...string)

AddDropDownSimple adds a drop-down element to the form. It has a label, options, and an (optional) callback function which is invoked when an option was selected. The initial option may be a negative value to indicate that no option is currently selected.

func (*Form) AddFormItem added in v0.1.7

func (f *Form) AddFormItem(item FormItem)

AddFormItem adds a new item to the form. This can be used to add your own objects to the form. Note, however, that the Form class will override some of its attributes to make it work in the form context. Specifically, these are:

  • The label width
  • The label color
  • The background color
  • The field text color
  • The field background color

func (*Form) AddInputField

func (f *Form) AddInputField(label, value string, fieldWidth int, accept func(textToCheck string, lastChar rune) bool, changed func(text string))

AddInputField adds an input field to the form. It has a label, an optional initial value, a field width (a value of 0 extends it as far as possible), an optional accept function to validate the item's value (set to nil to accept any text), and an (optional) callback function which is invoked when the input field's text has changed.

func (*Form) AddPasswordField added in v0.1.3

func (f *Form) AddPasswordField(label, value string, fieldWidth int, mask rune, changed func(text string))

AddPasswordField adds a password field to the form. This is similar to an input field except that the user's input not shown. Instead, a "mask" character is displayed. The password field has a label, an optional initial value, a field width (a value of 0 extends it as far as possible), and an (optional) callback function which is invoked when the input field's text has changed.

func (*Form) AddSlider added in v1.6.1

func (f *Form) AddSlider(label string, current, max, increment int, changed func(value int))

AddSlider adds a slider to the form. It has a label, an initial value, a maximum value, an amount to increment by when modified via keyboard, and an (optional) callback function which is invoked when the state of the slider was changed by the user.

func (*Form) Clear added in v0.1.7

func (f *Form) Clear(includeButtons bool)

Clear removes all input elements from the form, including the buttons if specified.

func (*Form) ClearButtons added in v1.6.1

func (f *Form) ClearButtons()

ClearButtons removes all buttons from the form.

func (*Form) Draw

func (f *Form) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Form) Focus

func (f *Form) Focus(delegate func(p Primitive))

Focus is called by the application when the primitive receives focus.

func (*Form) GetAttributes added in v1.6.1

func (f *Form) GetAttributes() *FormItemAttributes

GetAttributes returns the current attribute settings of a form.

func (*Form) GetButton added in v0.1.18

func (f *Form) GetButton(index int) *Button

GetButton returns the button at the specified 0-based index. Note that buttons have been specially prepared for this form and modifying some of their attributes may have unintended side effects.

func (*Form) GetButtonCount added in v0.1.18

func (f *Form) GetButtonCount() int

GetButtonCount returns the number of buttons in this form.

func (*Form) GetButtonIndex added in v0.1.18

func (f *Form) GetButtonIndex(label string) int

GetButtonIndex returns the index of the button with the given label, starting with 0 for the button that was added first. If no such label was found, -1 is returned.

func (*Form) GetFocusedItemIndex added in v1.6.1

func (f *Form) GetFocusedItemIndex() (formItem, button int)

GetFocusedItemIndex returns the indices of the form element or button which currently has focus. If they don't, -1 is returned resepectively.

func (*Form) GetFormItem added in v0.1.5

func (f *Form) GetFormItem(index int) FormItem

GetFormItem returns the form item at the given position, starting with index 0. Elements are referenced in the order they were added. Buttons are not included. If index is out of bounds it returns nil.

func (*Form) GetFormItemByLabel added in v0.1.14

func (f *Form) GetFormItemByLabel(label string) FormItem

GetFormItemByLabel returns the first form element with the given label. If no such element is found, nil is returned. Buttons are not searched and will therefore not be returned.

func (*Form) GetFormItemCount added in v1.6.1

func (f *Form) GetFormItemCount() int

GetFormItemCount returns the number of items in the form (not including the buttons).

func (*Form) GetFormItemIndex added in v0.1.18

func (f *Form) GetFormItemIndex(label string) int

GetFormItemIndex returns the index of the first form element with the given label. If no such element is found, -1 is returned. Buttons are not searched and will therefore not be returned.

func (*Form) HasFocus

func (f *Form) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Form) IndexOfFormItem added in v1.6.1

func (f *Form) IndexOfFormItem(item FormItem) int

IndexOfFormItem returns the index of the given FormItem.

func (*Form) MouseHandler added in v1.6.1

func (f *Form) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Form) RemoveButton added in v0.1.18

func (f *Form) RemoveButton(index int)

RemoveButton removes the button at the specified position, starting with 0 for the button that was added first.

func (*Form) RemoveFormItem added in v0.1.18

func (f *Form) RemoveFormItem(index int)

RemoveFormItem removes the form element at the given position, starting with index 0. Elements are referenced in the order they were added. Buttons are not included.

func (*Form) SetButtonBackgroundColor

func (f *Form) SetButtonBackgroundColor(color tcell.Color)

SetButtonBackgroundColor sets the background color of the buttons.

func (*Form) SetButtonBackgroundColorFocused added in v1.6.1

func (f *Form) SetButtonBackgroundColorFocused(color tcell.Color)

SetButtonBackgroundColorFocused sets the background color of the buttons when focused.

func (*Form) SetButtonTextColor

func (f *Form) SetButtonTextColor(color tcell.Color)

SetButtonTextColor sets the color of the button texts.

func (*Form) SetButtonTextColorFocused added in v1.6.1

func (f *Form) SetButtonTextColorFocused(color tcell.Color)

SetButtonTextColorFocused sets the color of the button texts when focused.

func (*Form) SetButtonsAlign

func (f *Form) SetButtonsAlign(align int)

SetButtonsAlign sets how the buttons align horizontally, one of AlignLeft (the default), AlignCenter, and AlignRight. This is only

func (*Form) SetCancelFunc

func (f *Form) SetCancelFunc(callback func())

SetCancelFunc sets a handler which is called when the user hits the Escape key.

func (*Form) SetFieldBackgroundColor

func (f *Form) SetFieldBackgroundColor(color tcell.Color)

SetFieldBackgroundColor sets the background color of the input areas.

func (*Form) SetFieldBackgroundColorFocused added in v1.6.1

func (f *Form) SetFieldBackgroundColorFocused(color tcell.Color)

SetFieldBackgroundColorFocused sets the background color of the input areas when focused.

func (*Form) SetFieldTextColor

func (f *Form) SetFieldTextColor(color tcell.Color)

SetFieldTextColor sets the text color of the input areas.

func (*Form) SetFieldTextColorFocused added in v1.6.1

func (f *Form) SetFieldTextColorFocused(color tcell.Color)

SetFieldTextColorFocused sets the text color of the input areas when focused.

func (*Form) SetFocus added in v1.6.1

func (f *Form) SetFocus(index int)

SetFocus shifts the focus to the form element with the given index, counting non-button items first and buttons last. Note that this index is only used when the form itself receives focus.

func (*Form) SetHorizontal added in v0.1.7

func (f *Form) SetHorizontal(horizontal bool)

SetHorizontal sets the direction the form elements are laid out. If set to true, instead of positioning them from top to bottom (the default), they are positioned from left to right, moving into the next row if there is not enough space.

func (*Form) SetItemPadding

func (f *Form) SetItemPadding(padding int)

SetItemPadding sets the number of empty rows between form items for vertical layouts and the number of empty cells between form items for horizontal layouts.

func (*Form) SetLabelColor

func (f *Form) SetLabelColor(color tcell.Color)

SetLabelColor sets the color of the labels.

func (*Form) SetLabelColorFocused added in v1.6.1

func (f *Form) SetLabelColorFocused(color tcell.Color)

SetLabelColorFocused sets the color of the labels when focused.

func (*Form) SetWrapAround added in v1.6.1

func (f *Form) SetWrapAround(wrapAround bool)

SetWrapAround sets the flag that determines whether navigating the form will wrap around. That is, navigating downwards on the last item will move the selection to the first item (similarly in the other direction). If set to false, the selection won't change when navigating downwards on the last item or navigating upwards on the first item.

type FormItem

type FormItem interface {
	Primitive

	// GetLabel returns the item's label text.
	GetLabel() string

	// SetLabelWidth sets the screen width of the label. A value of 0 will cause the
	// primitive to use the width of the label string.
	SetLabelWidth(int)

	// SetLabelColor sets the color of the label.
	SetLabelColor(tcell.Color)

	// SetLabelColor sets the color of the label when focused.
	SetLabelColorFocused(tcell.Color)

	// GetFieldWidth returns the width of the form item's field (the area which
	// is manipulated by the user) in number of screen cells. A value of 0
	// indicates the the field width is flexible and may use as much space as
	// required.
	GetFieldWidth() int

	// GetFieldHeight returns the height of the form item.
	GetFieldHeight() int

	// SetFieldTextColor sets the text color of the input area.
	SetFieldTextColor(tcell.Color)

	// SetFieldTextColorFocused sets the text color of the input area when focused.
	SetFieldTextColorFocused(tcell.Color)

	// SetFieldBackgroundColor sets the background color of the input area.
	SetFieldBackgroundColor(tcell.Color)

	// SetFieldBackgroundColor sets the background color of the input area when focused.
	SetFieldBackgroundColorFocused(tcell.Color)

	// SetBackgroundColor sets the background color of the form item.
	SetBackgroundColor(tcell.Color)

	// SetFinishedFunc sets a callback invoked when the user leaves the form item.
	SetFinishedFunc(func(key tcell.Key))
}

FormItem is the interface all form items must implement to be able to be included in a form.

type FormItemAttributes added in v1.6.1

type FormItemAttributes struct {
	// The screen width of the label. A value of 0 will cause the primitive to
	// use the width of the label string.
	LabelWidth int

	BackgroundColor             tcell.Color
	LabelColor                  tcell.Color
	LabelColorFocused           tcell.Color
	FieldBackgroundColor        tcell.Color
	FieldBackgroundColorFocused tcell.Color
	FieldTextColor              tcell.Color
	FieldTextColorFocused       tcell.Color

	FinishedFunc func(key tcell.Key)
}

FormItemAttributes is a set of attributes to be applied.

type Frame

type Frame struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Frame is a wrapper which adds space around another primitive. In addition, the top area (header) and the bottom area (footer) may also contain text.

func NewFrame

func NewFrame(primitive Primitive) *Frame

NewFrame returns a new frame around the given primitive. The primitive's size will be changed to fit within this frame.

func (*Frame) AddText

func (f *Frame) AddText(text string, header bool, align int, color tcell.Color)

AddText adds text to the frame. Set "header" to true if the text is to appear in the header, above the contained primitive. Set it to false for it to appear in the footer, below the contained primitive. "align" must be one of the Align constants. Rows in the header are printed top to bottom, rows in the footer are printed bottom to top. Note that long text can overlap as different alignments will be placed on the same row.

func (*Frame) Clear

func (f *Frame) Clear()

Clear removes all text from the frame.

func (*Frame) Draw

func (f *Frame) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Frame) Focus

func (f *Frame) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*Frame) HasFocus

func (f *Frame) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Frame) MouseHandler added in v1.6.1

func (f *Frame) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Frame) SetBorders

func (f *Frame) SetBorders(top, bottom, header, footer, left, right int)

SetBorders sets the width of the frame borders as well as "header" and "footer", the vertical space between the header and footer text and the contained primitive (does not apply if there is no text).

type Grid added in v0.1.11

type Grid struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Grid is an implementation of a grid-based layout. It works by defining the size of the rows and columns, then placing primitives into the grid.

Some settings can lead to the grid exceeding its available space. SetOffset() can then be used to scroll in steps of rows and columns. These offset values can also be controlled with the arrow keys (or the "g","G", "j", "k", "h", and "l" keys) while the grid has focus and none of its contained primitives do.

func NewGrid added in v0.1.11

func NewGrid() *Grid

NewGrid returns a new grid-based layout container with no initial primitives.

Note that Grid will have a transparent background by default so that any areas not covered by any primitives will show primitives behind the Grid. To disable this transparency:

grid.SetBackgroundTransparent(false)

func (*Grid) AddItem added in v0.1.11

func (g *Grid) AddItem(p Primitive, row, column, rowSpan, colSpan, minGridHeight, minGridWidth int, focus bool)

AddItem adds a primitive and its position to the grid. The top-left corner of the primitive will be located in the top-left corner of the grid cell at the given row and column and will span "rowSpan" rows and "colSpan" columns. For example, for a primitive to occupy rows 2, 3, and 4 and columns 5 and 6:

grid.AddItem(p, 2, 5, 3, 2, 0, 0, true)

If rowSpan or colSpan is 0, the primitive will not be drawn.

You can add the same primitive multiple times with different grid positions. The minGridWidth and minGridHeight values will then determine which of those positions will be used. This is similar to CSS media queries. These minimum values refer to the overall size of the grid. If multiple items for the same primitive apply, the one that has at least one highest minimum value will be used, or the primitive added last if those values are the same. Example:

grid.AddItem(p, 0, 0, 0, 0, 0, 0, true). // Hide in small grids.
  AddItem(p, 0, 0, 1, 2, 100, 0, true).  // One-column layout for medium grids.
  AddItem(p, 1, 1, 3, 2, 300, 0, true)   // Multi-column layout for large grids.

To use the same grid layout for all sizes, simply set minGridWidth and minGridHeight to 0.

If the item's focus is set to true, it will receive focus when the grid receives focus. If there are multiple items with a true focus flag, the last visible one that was added will receive focus.

func (*Grid) Blur added in v0.1.11

func (g *Grid) Blur()

Blur is called when this primitive loses focus.

func (*Grid) Clear added in v0.1.11

func (g *Grid) Clear()

Clear removes all items from the grid.

func (*Grid) Draw added in v0.1.11

func (g *Grid) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Grid) Focus added in v0.1.11

func (g *Grid) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*Grid) GetOffset added in v0.1.11

func (g *Grid) GetOffset() (rows, columns int)

GetOffset returns the current row and column offset (see SetOffset() for details).

func (*Grid) HasFocus added in v0.1.11

func (g *Grid) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Grid) InputHandler added in v0.1.11

func (g *Grid) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*Grid) MouseHandler added in v1.6.1

func (g *Grid) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Grid) RemoveItem added in v0.1.11

func (g *Grid) RemoveItem(p Primitive)

RemoveItem removes all items for the given primitive from the grid, keeping the order of the remaining items intact.

func (*Grid) SetBorders added in v0.1.11

func (g *Grid) SetBorders(borders bool)

SetBorders sets whether or not borders are drawn around grid items. Setting this value to true will cause the gap values (see SetGap()) to be ignored and automatically assumed to be 1 where the border graphics are drawn.

func (*Grid) SetBordersColor added in v0.1.11

func (g *Grid) SetBordersColor(color tcell.Color)

SetBordersColor sets the color of the item borders.

func (*Grid) SetColumns added in v0.1.11

func (g *Grid) SetColumns(columns ...int)

SetColumns defines how the columns of the grid are distributed. Each value defines the size of one column, starting with the leftmost column. Values greater 0 represent absolute column widths (gaps not included). Values less or equal 0 represent proportional column widths or fractions of the remaining free space, where 0 is treated the same as -1. That is, a column with a value of -3 will have three times the width of a column with a value of -1 (or 0). The minimum width set with SetMinSize() is always observed.

Primitives may extend beyond the columns defined explicitly with this function. A value of 0 is assumed for any undefined column. In fact, if you never call this function, all columns occupied by primitives will have the same width. On the other hand, unoccupied columns defined with this function will always take their place.

Assuming a total width of the grid of 100 cells and a minimum width of 0, the following call will result in columns with widths of 30, 10, 15, 15, and 30 cells:

grid.Setcolumns(30, 10, -1, -1, -2)

If a primitive were then placed in the 6th and 7th column, the resulting widths would be: 30, 10, 10, 10, 20, 10, and 10 cells.

If you then called SetMinSize() as follows:

grid.SetMinSize(15, 20)

The resulting widths would be: 30, 15, 15, 15, 20, 15, and 15 cells, a total of 125 cells, 25 cells wider than the available grid width.

func (*Grid) SetGap added in v0.1.11

func (g *Grid) SetGap(row, column int)

SetGap sets the size of the gaps between neighboring primitives on the grid. If borders are drawn (see SetBorders()), these values are ignored and a gap of 1 is assumed. Panics if negative values are provided.

func (*Grid) SetMinSize added in v0.1.11

func (g *Grid) SetMinSize(row, column int)

SetMinSize sets an absolute minimum width for rows and an absolute minimum height for columns. Panics if negative values are provided.

func (*Grid) SetOffset added in v0.1.11

func (g *Grid) SetOffset(rows, columns int)

SetOffset sets the number of rows and columns which are skipped before drawing the first grid cell in the top-left corner. As the grid will never completely move off the screen, these values may be adjusted the next time the grid is drawn. The actual position of the grid may also be adjusted such that contained primitives that have focus remain visible.

func (*Grid) SetRows added in v0.1.11

func (g *Grid) SetRows(rows ...int)

SetRows defines how the rows of the grid are distributed. These values behave the same as the column values provided with SetColumns(), see there for a definition and examples.

The provided values correspond to row heights, the first value defining the height of the topmost row.

func (*Grid) SetSize added in v0.1.11

func (g *Grid) SetSize(numRows, numColumns, rowSize, columnSize int)

SetSize is a shortcut for SetRows() and SetColumns() where all row and column values are set to the given size values. See SetColumns() for details on sizes.

type InputField

type InputField struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

InputField is a one-line box (three lines if there is a title) where the user can enter text. Use SetAcceptanceFunc() to accept or reject input, SetChangedFunc() to listen for changes, and SetMaskCharacter() to hide input from onlookers (e.g. for password input).

The following keys can be used for navigation and editing:

  • Left arrow: Move left by one character.
  • Right arrow: Move right by one character.
  • Home, Ctrl-A, Alt-a: Move to the beginning of the line.
  • End, Ctrl-E, Alt-e: Move to the end of the line.
  • Alt-left, Alt-b: Move left by one word.
  • Alt-right, Alt-f: Move right by one word.
  • Backspace: Delete the character before the cursor.
  • Delete: Delete the character after the cursor.
  • Ctrl-K: Delete from the cursor to the end of the line.
  • Ctrl-W: Delete the last word before the cursor.
  • Ctrl-U: Delete the entire line.

func NewInputField

func NewInputField() *InputField

NewInputField returns a new input field.

func (*InputField) Autocomplete added in v1.6.1

func (i *InputField) Autocomplete()

Autocomplete invokes the autocomplete callback (if there is one). If the length of the returned autocomplete entries slice is greater than 0, the input field will present the user with a corresponding drop-down list the next time the input field is drawn.

It is safe to call this function from any goroutine. Note that the input field is not redrawn automatically unless called from the main goroutine (e.g. in response to events).

func (*InputField) Draw

func (i *InputField) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*InputField) GetCursorPosition added in v1.6.1

func (i *InputField) GetCursorPosition() int

GetCursorPosition returns the cursor position.

func (*InputField) GetFieldHeight added in v1.6.1

func (i *InputField) GetFieldHeight() int

GetFieldHeight returns the height of the field.

func (*InputField) GetFieldWidth added in v0.1.8

func (i *InputField) GetFieldWidth() int

GetFieldWidth returns this primitive's field width.

func (*InputField) GetLabel

func (i *InputField) GetLabel() string

GetLabel returns the text to be displayed before the input area.

func (*InputField) GetText

func (i *InputField) GetText() string

GetText returns the current text of the input field.

func (*InputField) InputHandler

func (i *InputField) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*InputField) MouseHandler added in v1.6.1

func (i *InputField) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*InputField) ResetFieldNote added in v1.6.1

func (i *InputField) ResetFieldNote()

ResetFieldNote sets the note to an empty string.

func (*InputField) SetAcceptanceFunc

func (i *InputField) SetAcceptanceFunc(handler func(textToCheck string, lastChar rune) bool)

SetAcceptanceFunc sets a handler which may reject the last character that was entered (by returning false).

This package defines a number of variables prefixed with InputField which may be used for common input (e.g. numbers, maximum text length).

func (*InputField) SetAutocompleteFunc added in v1.6.1

func (i *InputField) SetAutocompleteFunc(callback func(currentText string) (entries []*ListItem))

SetAutocompleteFunc sets an autocomplete callback function which may return ListItems to be selected from a drop-down based on the current text of the input field. The drop-down appears only if len(entries) > 0. The callback is invoked in this function and whenever the current text changes or when Autocomplete() is called. Entries are cleared when the user selects an entry or presses Escape.

func (*InputField) SetAutocompleteListBackgroundColor added in v1.6.1

func (i *InputField) SetAutocompleteListBackgroundColor(color tcell.Color)

SetAutocompleteListBackgroundColor sets the background color of the autocomplete list.

func (*InputField) SetAutocompleteListSelectedBackgroundColor added in v1.6.1

func (i *InputField) SetAutocompleteListSelectedBackgroundColor(color tcell.Color)

SetAutocompleteListSelectedBackgroundColor sets the background of the selected ListItem.

func (*InputField) SetAutocompleteListSelectedTextColor added in v1.6.1

func (i *InputField) SetAutocompleteListSelectedTextColor(color tcell.Color)

SetAutocompleteListSelectedTextColor sets the text color of the selected ListItem.

func (*InputField) SetAutocompleteListTextColor added in v1.6.1

func (i *InputField) SetAutocompleteListTextColor(color tcell.Color)

SetAutocompleteListTextColor sets the text color of the ListItems.

func (*InputField) SetAutocompleteSuggestionTextColor added in v1.6.1

func (i *InputField) SetAutocompleteSuggestionTextColor(color tcell.Color)

SetAutocompleteSuggestionTextColor sets the text color of the autocomplete suggestion in the input field.

func (*InputField) SetChangedFunc added in v0.1.2

func (i *InputField) SetChangedFunc(handler func(text string))

SetChangedFunc sets a handler which is called whenever the text of the input field has changed. It receives the current text (after the change).

func (*InputField) SetCursorPosition added in v1.6.1

func (i *InputField) SetCursorPosition(cursorPos int)

SetCursorPosition sets the cursor position.

func (*InputField) SetDoneFunc

func (i *InputField) SetDoneFunc(handler func(key tcell.Key))

SetDoneFunc sets a handler which is called when the user is done entering text. The callback function is provided with the key that was pressed, which is one of the following:

  • KeyEnter: Done entering text.
  • KeyEscape: Abort text input.
  • KeyTab: Move to the next field.
  • KeyBacktab: Move to the previous field.

func (*InputField) SetFieldBackgroundColor

func (i *InputField) SetFieldBackgroundColor(color tcell.Color)

SetFieldBackgroundColor sets the background color of the input area.

func (*InputField) SetFieldBackgroundColorFocused added in v1.6.1

func (i *InputField) SetFieldBackgroundColorFocused(color tcell.Color)

SetFieldBackgroundColorFocused sets the background color of the input area when focused.

func (*InputField) SetFieldNote added in v1.6.1

func (i *InputField) SetFieldNote(note string)

SetFieldNote sets the text to show below the input field, e.g. when the input is invalid.

func (*InputField) SetFieldNoteTextColor added in v1.6.1

func (i *InputField) SetFieldNoteTextColor(color tcell.Color)

SetFieldNoteTextColor sets the text color of the note.

func (*InputField) SetFieldTextColor

func (i *InputField) SetFieldTextColor(color tcell.Color)

SetFieldTextColor sets the text color of the input area.

func (*InputField) SetFieldTextColorFocused added in v1.6.1

func (i *InputField) SetFieldTextColorFocused(color tcell.Color)

SetFieldTextColorFocused sets the text color of the input area when focused.

func (*InputField) SetFieldWidth added in v0.1.8

func (i *InputField) SetFieldWidth(width int)

SetFieldWidth sets the screen width of the input area. A value of 0 means extend as much as possible.

func (*InputField) SetFinishedFunc

func (i *InputField) SetFinishedFunc(handler func(key tcell.Key))

SetFinishedFunc sets a callback invoked when the user leaves this form item.

func (*InputField) SetLabel

func (i *InputField) SetLabel(label string)

SetLabel sets the text to be displayed before the input area.

func (*InputField) SetLabelColor

func (i *InputField) SetLabelColor(color tcell.Color)

SetLabelColor sets the color of the label.

func (*InputField) SetLabelColorFocused added in v1.6.1

func (i *InputField) SetLabelColorFocused(color tcell.Color)

SetLabelColorFocused sets the color of the label when focused.

func (*InputField) SetLabelWidth added in v0.1.14

func (i *InputField) SetLabelWidth(width int)

SetLabelWidth sets the screen width of the label. A value of 0 will cause the primitive to use the width of the label string.

func (*InputField) SetMaskCharacter added in v0.1.3

func (i *InputField) SetMaskCharacter(mask rune)

SetMaskCharacter sets a character that masks user input on a screen. A value of 0 disables masking.

func (*InputField) SetPlaceholder added in v0.1.13

func (i *InputField) SetPlaceholder(text string)

SetPlaceholder sets the text to be displayed when the input text is empty.

func (*InputField) SetPlaceholderTextColor added in v0.1.14

func (i *InputField) SetPlaceholderTextColor(color tcell.Color)

SetPlaceholderTextColor sets the text color of placeholder text.

func (*InputField) SetPlaceholderTextColorFocused added in v1.6.1

func (i *InputField) SetPlaceholderTextColorFocused(color tcell.Color)

SetPlaceholderTextColorFocused sets the text color of placeholder text when focused.

func (*InputField) SetText

func (i *InputField) SetText(text string)

SetText sets the current text of the input field.

type Key added in v1.6.1

type Key struct {
	Cancel []string

	Select  []string
	Select2 []string

	MoveUp     []string
	MoveUp2    []string
	MoveDown   []string
	MoveDown2  []string
	MoveLeft   []string
	MoveLeft2  []string
	MoveRight  []string
	MoveRight2 []string

	MoveFirst  []string
	MoveFirst2 []string
	MoveLast   []string
	MoveLast2  []string

	MovePreviousField []string
	MoveNextField     []string
	MovePreviousPage  []string
	MoveNextPage      []string

	ShowContextMenu []string
}

Key defines the keyboard shortcuts of an application. Secondary shortcuts apply when not focusing a text input.

type List

type List struct {
	*Box
	*ContextMenu

	sync.RWMutex
	// contains filtered or unexported fields
}

List displays rows of items, each of which can be selected.

func NewList

func NewList() *List

NewList returns a new form.

func (*List) AddItem

func (l *List) AddItem(item *ListItem)

AddItem calls InsertItem() with an index of -1.

func (*List) Clear

func (l *List) Clear()

Clear removes all items from the list.

func (*List) Draw

func (l *List) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*List) FindItems added in v1.6.1

func (l *List) FindItems(mainSearch, secondarySearch string, mustContainBoth, ignoreCase bool) (indices []int)

FindItems searches the main and secondary texts for the given strings and returns a list of item indices in which those strings are found. One of the two search strings may be empty, it will then be ignored. Indices are always returned in ascending order.

If mustContainBoth is set to true, mainSearch must be contained in the main text AND secondarySearch must be contained in the secondary text. If it is false, only one of the two search strings must be contained.

Set ignoreCase to true for case-insensitive search.

func (*List) Focus added in v1.6.1

func (l *List) Focus(delegate func(p Primitive))

Focus is called by the application when the primitive receives focus.

func (*List) GetCurrentItem added in v0.1.13

func (l *List) GetCurrentItem() *ListItem

GetCurrentItem returns the currently selected list item, Returns nil if no item is selected.

func (*List) GetCurrentItemIndex added in v1.6.1

func (l *List) GetCurrentItemIndex() int

GetCurrentItemIndex returns the index of the currently selected list item, starting at 0 for the first item and its struct.

func (*List) GetItem added in v1.6.1

func (l *List) GetItem(index int) *ListItem

GetItem returns the ListItem at the given index. Returns nil when index is out of bounds.

func (*List) GetItemCount added in v0.1.15

func (l *List) GetItemCount() int

GetItemCount returns the number of items in the list.

func (*List) GetItemText added in v0.1.15

func (l *List) GetItemText(index int) (main, secondary string)

GetItemText returns an item's texts (main and secondary). Panics if the index is out of range.

func (*List) GetItems added in v1.6.1

func (l *List) GetItems() []*ListItem

GetItems returns all list items.

func (*List) GetOffset added in v1.6.1

func (l *List) GetOffset() (int, int)

GetOffset returns the number of list items and columns by which the list is scrolled down/to the right.

func (*List) HasFocus added in v1.6.1

func (l *List) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*List) InputHandler

func (l *List) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*List) InsertItem added in v1.6.1

func (l *List) InsertItem(index int, item *ListItem)

InsertItem adds a new item to the list at the specified index. An index of 0 will insert the item at the beginning, an index of 1 before the second item, and so on. An index of GetItemCount() or higher will insert the item at the end of the list. Negative indices are also allowed: An index of -1 will insert the item at the end of the list, an index of -2 before the last item, and so on. An index of -GetItemCount()-1 or lower will insert the item at the beginning.

An item has a main text which will be highlighted when selected. It also has a secondary text which is shown underneath the main text (if it is set to visible) but which may remain empty.

The shortcut is a key binding. If the specified rune is entered, the item is selected immediately. Set to 0 for no binding.

The "selected" callback will be invoked when the user selects the item. You may provide nil if no such callback is needed or if all events are handled through the selected callback set with SetSelectedFunc().

The currently selected item will shift its position accordingly. If the list was previously empty, a "changed" event is fired because the new item becomes selected.

func (*List) MouseHandler added in v1.6.1

func (l *List) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*List) RemoveItem added in v0.1.18

func (l *List) RemoveItem(index int)

RemoveItem removes the item with the given index (starting at 0) from the list. If a negative index is provided, items are referred to from the back (-1 = last item, -2 = second-to-last item, and so on). Out of range indices are clamped to the beginning/end, i.e. unless the list is empty, an item is always removed.

The currently selected item is shifted accordingly. If it is the one that is removed, a "changed" event is fired.

func (*List) SetChangedFunc

func (l *List) SetChangedFunc(handler func(index int, item *ListItem))

SetChangedFunc sets the function which is called when the user navigates to a list item. The function receives the item's index in the list of items (starting with 0) and the list item.

This function is also called when the first item is added or when SetCurrentItem() is called.

func (*List) SetCurrentItem

func (l *List) SetCurrentItem(index int)

SetCurrentItem sets the currently selected item by its index, starting at 0 for the first item. If a negative index is provided, items are referred to from the back (-1 = last item, -2 = second-to-last item, and so on). Out of range indices are clamped to the beginning/end.

Calling this function triggers a "changed" event if the selection changes.

func (*List) SetDoneFunc

func (l *List) SetDoneFunc(handler func())

SetDoneFunc sets a function which is called when the user presses the Escape key.

func (*List) SetHighlightFullLine added in v1.6.1

func (l *List) SetHighlightFullLine(highlight bool)

SetHighlightFullLine sets a flag which determines whether the colored background of selected items spans the entire width of the view. If set to true, the highlight spans the entire view. If set to false, only the text of the selected item from beginning to end is highlighted.

func (*List) SetHover added in v1.6.1

func (l *List) SetHover(hover bool)

SetHover sets the flag that determines whether hovering over an item will highlight it (without triggering callbacks set with SetSelectedFunc).

func (*List) SetItemEnabled added in v1.6.1

func (l *List) SetItemEnabled(index int, enabled bool)

SetItemEnabled sets whether an item is selectable. Panics if the index is out of range.

func (*List) SetItemText added in v0.1.15

func (l *List) SetItemText(index int, main, secondary string)

SetItemText sets an item's main and secondary text. Panics if the index is out of range.

func (*List) SetMainTextColor

func (l *List) SetMainTextColor(color tcell.Color)

SetMainTextColor sets the color of the items' main text.

func (*List) SetOffset added in v1.6.1

func (l *List) SetOffset(items, columns int)

SetOffset sets the number of list items and columns by which the list is scrolled down/to the right.

func (*List) SetScrollBarColor added in v1.6.1

func (l *List) SetScrollBarColor(color tcell.Color)

SetScrollBarColor sets the color of the scroll bar.

func (*List) SetScrollBarVisibility added in v1.6.1

func (l *List) SetScrollBarVisibility(visibility ScrollBarVisibility)

SetScrollBarVisibility specifies the display of the scroll bar.

func (*List) SetSecondaryTextColor

func (l *List) SetSecondaryTextColor(color tcell.Color)

SetSecondaryTextColor sets the color of the items' secondary text.

func (*List) SetSelectedAlwaysCentered added in v1.6.1

func (l *List) SetSelectedAlwaysCentered(alwaysCentered bool)

SetSelectedAlwaysCentered sets a flag which determines whether the currently selected list item must remain centered when scrolling.

func (*List) SetSelectedAlwaysVisible added in v1.6.1

func (l *List) SetSelectedAlwaysVisible(alwaysVisible bool)

SetSelectedAlwaysVisible sets a flag which determines whether the currently selected list item must remain visible when scrolling.

func (*List) SetSelectedBackgroundColor

func (l *List) SetSelectedBackgroundColor(color tcell.Color)

SetSelectedBackgroundColor sets the background color of selected items.

func (*List) SetSelectedFocusOnly added in v1.6.1

func (l *List) SetSelectedFocusOnly(focusOnly bool)

SetSelectedFocusOnly sets a flag which determines when the currently selected list item is highlighted. If set to true, selected items are only highlighted when the list has focus. If set to false, they are always highlighted.

func (*List) SetSelectedFunc

func (l *List) SetSelectedFunc(handler func(int, *ListItem))

SetSelectedFunc sets the function which is called when the user selects a list item by pressing Enter on the current selection. The function receives the item's index in the list of items (starting with 0) and its struct.

func (*List) SetSelectedTextAttributes added in v1.6.1

func (l *List) SetSelectedTextAttributes(attr tcell.AttrMask)

SetSelectedTextAttributes sets the style attributes of selected items.

func (*List) SetSelectedTextColor

func (l *List) SetSelectedTextColor(color tcell.Color)

SetSelectedTextColor sets the text color of selected items.

func (*List) SetShortcutColor

func (l *List) SetShortcutColor(color tcell.Color)

SetShortcutColor sets the color of the items' shortcut.

func (*List) SetWrapAround added in v1.6.1

func (l *List) SetWrapAround(wrapAround bool)

SetWrapAround sets the flag that determines whether navigating the list will wrap around. That is, navigating downwards on the last item will move the selection to the first item (similarly in the other direction). If set to false, the selection won't change when navigating downwards on the last item or navigating upwards on the first item.

func (*List) ShowSecondaryText

func (l *List) ShowSecondaryText(show bool)

ShowSecondaryText determines whether or not to show secondary item texts.

func (*List) Transform added in v1.6.1

func (l *List) Transform(tr Transformation)

Transform modifies the current selection.

type ListItem added in v1.6.1

type ListItem struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

ListItem represents an item in a List.

func NewListItem added in v1.6.1

func NewListItem(mainText string) *ListItem

NewListItem returns a new item for a list.

func (*ListItem) GetMainBytes added in v1.6.1

func (l *ListItem) GetMainBytes() []byte

GetMainBytes returns the item's main text.

func (*ListItem) GetMainText added in v1.6.1

func (l *ListItem) GetMainText() string

GetMainText returns the item's main text.

func (*ListItem) GetReference added in v1.6.1

func (l *ListItem) GetReference() interface{}

GetReference returns the item's reference object.

func (*ListItem) GetSecondaryBytes added in v1.6.1

func (l *ListItem) GetSecondaryBytes() []byte

GetSecondaryBytes returns the item's secondary text.

func (*ListItem) GetSecondaryText added in v1.6.1

func (l *ListItem) GetSecondaryText() string

GetSecondaryText returns the item's secondary text.

func (*ListItem) GetShortcut added in v1.6.1

func (l *ListItem) GetShortcut() rune

GetShortcut returns the ListItem's shortcut.

func (*ListItem) SetMainBytes added in v1.6.1

func (l *ListItem) SetMainBytes(val []byte)

SetMainBytes sets the main text of the list item.

func (*ListItem) SetMainText added in v1.6.1

func (l *ListItem) SetMainText(val string)

SetMainText sets the main text of the list item.

func (*ListItem) SetReference added in v1.6.1

func (l *ListItem) SetReference(val interface{})

SetReference allows you to store a reference of any type in the item

func (*ListItem) SetSecondaryBytes added in v1.6.1

func (l *ListItem) SetSecondaryBytes(val []byte)

SetSecondaryBytes sets a secondary text to be shown underneath the main text.

func (*ListItem) SetSecondaryText added in v1.6.1

func (l *ListItem) SetSecondaryText(val string)

SetSecondaryText sets a secondary text to be shown underneath the main text.

func (*ListItem) SetSelectedFunc added in v1.6.1

func (l *ListItem) SetSelectedFunc(handler func())

SetSelectedFunc sets a function which is called when the ListItem is selected.

func (*ListItem) SetShortcut added in v1.6.1

func (l *ListItem) SetShortcut(val rune)

SetShortcut sets the key to select the ListItem directly, 0 if there is no shortcut.

type Modal struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Modal is a centered message window used to inform the user or prompt them for an immediate decision. It needs to have at least one button (added via AddButtons) or it will never disappear. You may change the title and appearance of the window by modifying the Frame returned by GetFrame. You may include additional elements within the window by modifying the Form returned by GetForm.

func NewModal

func NewModal() *Modal

NewModal returns a new centered message window.

func (*Modal) AddButtons

func (m *Modal) AddButtons(labels []string)

AddButtons adds buttons to the window. There must be at least one button and a "done" handler so the window can be closed again.

func (*Modal) ClearButtons added in v1.6.1

func (m *Modal) ClearButtons()

ClearButtons removes all buttons from the window.

func (*Modal) Draw

func (m *Modal) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Modal) Focus

func (m *Modal) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*Modal) GetForm added in v1.6.1

func (m *Modal) GetForm() *Form

GetForm returns the Form embedded in the window. The returned Form may be modified to include additional elements (e.g. AddInputField, AddFormItem).

func (*Modal) GetFrame added in v1.6.1

func (m *Modal) GetFrame() *Frame

GetFrame returns the Frame embedded in the window.

func (*Modal) HasFocus

func (m *Modal) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Modal) MouseHandler added in v1.6.1

func (m *Modal) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Modal) SetBackgroundColor added in v1.6.1

func (m *Modal) SetBackgroundColor(color tcell.Color)

SetBackgroundColor sets the color of the Modal Frame background.

func (*Modal) SetButtonBackgroundColor added in v1.6.1

func (m *Modal) SetButtonBackgroundColor(color tcell.Color)

SetButtonBackgroundColor sets the background color of the buttons.

func (*Modal) SetButtonTextColor added in v1.6.1

func (m *Modal) SetButtonTextColor(color tcell.Color)

SetButtonTextColor sets the color of the button texts.

func (*Modal) SetDoneFunc

func (m *Modal) SetDoneFunc(handler func(buttonIndex int, buttonLabel string))

SetDoneFunc sets a handler which is called when one of the buttons was pressed. It receives the index of the button as well as its label text. The handler is also called when the user presses the Escape key. The index will then be negative and the label text an empty string.

func (*Modal) SetFocus added in v1.6.1

func (m *Modal) SetFocus(index int)

SetFocus shifts the focus to the button with the given index.

func (*Modal) SetText

func (m *Modal) SetText(text string)

SetText sets the message text of the window. The text may contain line breaks. Note that words are wrapped, too, based on the final size of the window.

func (*Modal) SetTextColor

func (m *Modal) SetTextColor(color tcell.Color)

SetTextColor sets the color of the message text.

type MouseAction added in v1.6.1

type MouseAction int16

MouseAction indicates one of the actions the mouse is logically doing.

const (
	MouseMove MouseAction = iota
	MouseLeftDown
	MouseLeftUp
	MouseLeftClick
	MouseLeftDoubleClick
	MouseMiddleDown
	MouseMiddleUp
	MouseMiddleClick
	MouseMiddleDoubleClick
	MouseRightDown
	MouseRightUp
	MouseRightClick
	MouseRightDoubleClick
	MouseScrollUp
	MouseScrollDown
	MouseScrollLeft
	MouseScrollRight
)

Available mouse actions.

type Pages

type Pages struct {
	*Panels
}

Pages is a wrapper around Panels. It is provided for backwards compatibility. Application developers should use Panels instead.

func NewPages

func NewPages() *Pages

NewPages returns a new Panels object.

func (*Pages) AddAndSwitchToPage added in v0.1.9

func (p *Pages) AddAndSwitchToPage(name string, item Primitive, resize bool)

AddAndSwitchToPage calls Add(), then SwitchTo() on that newly added panel.

func (*Pages) AddPage

func (p *Pages) AddPage(name string, item Primitive, resize, visible bool)

AddPage adds a new panel with the given name and primitive.

func (*Pages) GetFrontPage added in v1.6.1

func (p *Pages) GetFrontPage() (name string, item Primitive)

GetFrontPage returns the front-most visible panel.

func (*Pages) GetPageCount added in v1.6.1

func (p *Pages) GetPageCount() int

GetPageCount returns the number of panels currently stored in this object.

func (*Pages) HasPage

func (p *Pages) HasPage(name string) bool

HasPage returns true if a panel with the given name exists in this object.

func (*Pages) HidePage

func (p *Pages) HidePage(name string)

HidePage sets a panel's visibility to "false".

func (*Pages) RemovePage

func (p *Pages) RemovePage(name string)

RemovePage removes the panel with the given name.

func (*Pages) ShowPage

func (p *Pages) ShowPage(name string)

ShowPage sets a panel's visibility to "true".

func (*Pages) SwitchToPage

func (p *Pages) SwitchToPage(name string)

SwitchToPage sets a panel's visibility to "true" and all other panels' visibility to "false".

type Panels added in v1.6.1

type Panels struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Panels is a container for other primitives often used as the application's root primitive. It allows to easily switch the visibility of the contained primitives.

func NewPanels added in v1.6.1

func NewPanels() *Panels

NewPanels returns a new Panels object.

func (*Panels) AddPanel added in v1.6.1

func (p *Panels) AddPanel(name string, item Primitive, resize, visible bool)

AddPanel adds a new panel with the given name and primitive. If there was previously a panel with the same name, it is overwritten. Leaving the name empty may cause conflicts in other functions so always specify a non-empty name.

Visible panels will be drawn in the order they were added (unless that order was changed in one of the other functions). If "resize" is set to true, the primitive will be set to the size available to the Panels primitive whenever the panels are drawn.

func (*Panels) Draw added in v1.6.1

func (p *Panels) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Panels) Focus added in v1.6.1

func (p *Panels) Focus(delegate func(p Primitive))

Focus is called by the application when the primitive receives focus.

func (*Panels) GetFrontPanel added in v1.6.1

func (p *Panels) GetFrontPanel() (name string, item Primitive)

GetFrontPanel returns the front-most visible panel. If there are no visible panels, ("", nil) is returned.

func (*Panels) GetPanelCount added in v1.6.1

func (p *Panels) GetPanelCount() int

GetPanelCount returns the number of panels currently stored in this object.

func (*Panels) HasFocus added in v1.6.1

func (p *Panels) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Panels) HasPanel added in v1.6.1

func (p *Panels) HasPanel(name string) bool

HasPanel returns true if a panel with the given name exists in this object.

func (*Panels) HidePanel added in v1.6.1

func (p *Panels) HidePanel(name string)

HidePanel sets a panel's visibility to "false".

func (*Panels) MouseHandler added in v1.6.1

func (p *Panels) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Panels) RemovePanel added in v1.6.1

func (p *Panels) RemovePanel(name string)

RemovePanel removes the panel with the given name. If that panel was the only visible panel, visibility is assigned to the last panel.

func (*Panels) SendToBack added in v1.6.1

func (p *Panels) SendToBack(name string)

SendToBack changes the order of the panels such that the panel with the given name comes first, causing it to be drawn first with the next update (if visible).

func (*Panels) SendToFront added in v1.6.1

func (p *Panels) SendToFront(name string)

SendToFront changes the order of the panels such that the panel with the given name comes last, causing it to be drawn last with the next update (if visible).

func (*Panels) SetChangedFunc added in v1.6.1

func (p *Panels) SetChangedFunc(handler func())

SetChangedFunc sets a handler which is called whenever the visibility or the order of any visible panels changes. This can be used to redraw the panels.

func (*Panels) SetCurrentPanel added in v1.6.1

func (p *Panels) SetCurrentPanel(name string)

SetCurrentPanel sets a panel's visibility to "true" and all other panels' visibility to "false".

func (*Panels) ShowPanel added in v1.6.1

func (p *Panels) ShowPanel(name string)

ShowPanel sets a panel's visibility to "true" (in addition to any other panels which are already visible).

type Primitive

type Primitive interface {
	// Draw draws this primitive onto the screen. Implementers can call the
	// screen's ShowCursor() function but should only do so when they have focus.
	// (They will need to keep track of this themselves.)
	Draw(screen tcell.Screen)

	// GetRect returns the current position of the primitive, x, y, width, and
	// height.
	GetRect() (int, int, int, int)

	// SetRect sets a new position of the primitive.
	SetRect(x, y, width, height int)

	// IsVisible returns whether or not the primitive is visible.
	IsVisible() bool

	// InputHandler returns a handler which receives key events when it has focus.
	// It is called by the Application class.
	//
	// A value of nil may also be returned, in which case this primitive cannot
	// receive focus and will not process any key events.
	//
	// The handler will receive the key event and a function that allows it to
	// set the focus to a different primitive, so that future key events are sent
	// to that primitive.
	//
	// The Application's Draw() function will be called automatically after the
	// handler returns.
	//
	// The Box class provides functionality to intercept keyboard input. If you
	// subclass from Box, it is recommended that you wrap your handler using
	// Box.WrapInputHandler() so you inherit that functionality.
	InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

	// Focus is called by the application when the primitive receives focus.
	// Implementers may call delegate() to pass the focus on to another primitive.
	Focus(delegate func(p Primitive))

	// Blur is called by the application when the primitive loses focus.
	Blur()

	// GetFocusable returns the item's Focusable.
	GetFocusable() Focusable

	// MouseHandler returns a handler which receives mouse events.
	// It is called by the Application class.
	//
	// A value of nil may also be returned to stop the downward propagation of
	// mouse events.
	//
	// The Box class provides functionality to intercept mouse events. If you
	// subclass from Box, it is recommended that you wrap your handler using
	// Box.WrapMouseHandler() so you inherit that functionality.
	MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)
	// contains filtered or unexported methods
}

Primitive is the top-most interface for all graphical primitives.

type ProgressBar added in v1.6.1

type ProgressBar struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

ProgressBar indicates the progress of an operation.

func NewProgressBar added in v1.6.1

func NewProgressBar() *ProgressBar

NewProgressBar returns a new progress bar.

func (*ProgressBar) AddProgress added in v1.6.1

func (p *ProgressBar) AddProgress(progress int)

AddProgress adds to the current progress.

func (*ProgressBar) Complete added in v1.6.1

func (p *ProgressBar) Complete() bool

Complete returns whether the progress bar has been filled.

func (*ProgressBar) Draw added in v1.6.1

func (p *ProgressBar) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*ProgressBar) GetMax added in v1.6.1

func (p *ProgressBar) GetMax() int

GetMax returns the progress required to fill the bar.

func (*ProgressBar) GetProgress added in v1.6.1

func (p *ProgressBar) GetProgress() int

GetProgress gets the current progress.

func (*ProgressBar) SetEmptyColor added in v1.6.1

func (p *ProgressBar) SetEmptyColor(empty tcell.Color)

SetEmptyColor sets the color of the empty area of the progress bar.

func (*ProgressBar) SetEmptyRune added in v1.6.1

func (p *ProgressBar) SetEmptyRune(empty rune)

SetEmptyRune sets the rune used for the empty area of the progress bar.

func (*ProgressBar) SetFilledColor added in v1.6.1

func (p *ProgressBar) SetFilledColor(filled tcell.Color)

SetFilledColor sets the color of the filled area of the progress bar.

func (*ProgressBar) SetFilledRune added in v1.6.1

func (p *ProgressBar) SetFilledRune(filled rune)

SetFilledRune sets the rune used for the filled area of the progress bar.

func (*ProgressBar) SetMax added in v1.6.1

func (p *ProgressBar) SetMax(max int)

SetMax sets the progress required to fill the bar.

func (*ProgressBar) SetProgress added in v1.6.1

func (p *ProgressBar) SetProgress(progress int)

SetProgress sets the current progress.

func (*ProgressBar) SetVertical added in v1.6.1

func (p *ProgressBar) SetVertical(vertical bool)

SetVertical sets the direction of the progress bar.

type ScrollBarVisibility added in v1.6.1

type ScrollBarVisibility int

ScrollBarVisibility specifies the display of a scroll bar.

const (
	// ScrollBarNever never shows a scroll bar.
	ScrollBarNever ScrollBarVisibility = iota

	// ScrollBarAuto shows a scroll bar when there are items offscreen.
	ScrollBarAuto

	// ScrollBarAlways always shows a scroll bar.
	ScrollBarAlways
)

type Slider added in v1.6.1

type Slider struct {
	*ProgressBar

	sync.RWMutex
	// contains filtered or unexported fields
}

Slider is a progress bar which may be modified via keyboard and mouse.

func NewSlider added in v1.6.1

func NewSlider() *Slider

NewSlider returns a new slider.

func (*Slider) Draw added in v1.6.1

func (s *Slider) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Slider) GetFieldHeight added in v1.6.1

func (s *Slider) GetFieldHeight() int

GetFieldHeight returns the height of the field.

func (*Slider) GetFieldWidth added in v1.6.1

func (s *Slider) GetFieldWidth() int

GetFieldWidth returns this primitive's field width.

func (*Slider) GetLabel added in v1.6.1

func (s *Slider) GetLabel() string

GetLabel returns the text to be displayed before the input area.

func (*Slider) InputHandler added in v1.6.1

func (s *Slider) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*Slider) MouseHandler added in v1.6.1

func (s *Slider) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Slider) SetChangedFunc added in v1.6.1

func (s *Slider) SetChangedFunc(handler func(value int))

SetChangedFunc sets a handler which is called when the value of this slider was changed by the user. The handler function receives the new value.

func (*Slider) SetDoneFunc added in v1.6.1

func (s *Slider) SetDoneFunc(handler func(key tcell.Key))

SetDoneFunc sets a handler which is called when the user is done using the slider. The callback function is provided with the key that was pressed, which is one of the following:

  • KeyEscape: Abort text input.
  • KeyTab: Move to the next field.
  • KeyBacktab: Move to the previous field.

func (*Slider) SetFieldBackgroundColor added in v1.6.1

func (s *Slider) SetFieldBackgroundColor(color tcell.Color)

SetFieldBackgroundColor sets the background color of the input area.

func (*Slider) SetFieldBackgroundColorFocused added in v1.6.1

func (s *Slider) SetFieldBackgroundColorFocused(color tcell.Color)

SetFieldBackgroundColorFocused sets the background color of the input area when focused.

func (*Slider) SetFieldTextColor added in v1.6.1

func (s *Slider) SetFieldTextColor(color tcell.Color)

SetFieldTextColor sets the text color of the input area.

func (*Slider) SetFieldTextColorFocused added in v1.6.1

func (s *Slider) SetFieldTextColorFocused(color tcell.Color)

SetFieldTextColorFocused sets the text color of the input area when focused.

func (*Slider) SetFinishedFunc added in v1.6.1

func (s *Slider) SetFinishedFunc(handler func(key tcell.Key))

SetFinishedFunc sets a callback invoked when the user leaves this form item.

func (*Slider) SetIncrement added in v1.6.1

func (s *Slider) SetIncrement(increment int)

SetIncrement sets the amount the slider is incremented by when modified via keyboard.

func (*Slider) SetLabel added in v1.6.1

func (s *Slider) SetLabel(label string)

SetLabel sets the text to be displayed before the input area.

func (*Slider) SetLabelColor added in v1.6.1

func (s *Slider) SetLabelColor(color tcell.Color)

SetLabelColor sets the color of the label.

func (*Slider) SetLabelColorFocused added in v1.6.1

func (s *Slider) SetLabelColorFocused(color tcell.Color)

SetLabelColorFocused sets the color of the label when focused.

func (*Slider) SetLabelWidth added in v1.6.1

func (s *Slider) SetLabelWidth(width int)

SetLabelWidth sets the screen width of the label. A value of 0 will cause the primitive to use the width of the label string.

type TabbedPanels added in v1.6.1

type TabbedPanels struct {
	*Flex
	Switcher *TextView

	sync.RWMutex
	// contains filtered or unexported fields
}

TabbedPanels is a tabbed container for other primitives. The tab switcher may be positioned vertically or horizontally, before or after the content.

func NewTabbedPanels added in v1.6.1

func NewTabbedPanels() *TabbedPanels

NewTabbedPanels returns a new TabbedPanels object.

func (*TabbedPanels) AddTab added in v1.6.1

func (t *TabbedPanels) AddTab(name, label string, item Primitive)

AddTab adds a new tab. Tab names should consist only of letters, numbers and spaces.

func (*TabbedPanels) Draw added in v1.6.1

func (t *TabbedPanels) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*TabbedPanels) GetCurrentTab added in v1.6.1

func (t *TabbedPanels) GetCurrentTab() string

GetCurrentTab returns the currently visible tab.

func (*TabbedPanels) InputHandler added in v1.6.1

func (t *TabbedPanels) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*TabbedPanels) MouseHandler added in v1.6.1

func (t *TabbedPanels) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*TabbedPanels) RemoveTab added in v1.6.1

func (t *TabbedPanels) RemoveTab(name, label string, item Primitive)

RemoveTab removes a tab.

func (*TabbedPanels) SetCurrentTab added in v1.6.1

func (t *TabbedPanels) SetCurrentTab(name string)

SetCurrentTab sets the currently visible tab.

func (*TabbedPanels) SetTabBackgroundColor added in v1.6.1

func (t *TabbedPanels) SetTabBackgroundColor(color tcell.Color)

SetTabBackgroundColor sets the background color of the tab.

func (*TabbedPanels) SetTabBackgroundColorFocused added in v1.6.1

func (t *TabbedPanels) SetTabBackgroundColorFocused(color tcell.Color)

SetTabBackgroundColorFocused sets the background color of the tab when the tab is in focus.

func (*TabbedPanels) SetTabLabel added in v1.6.1

func (t *TabbedPanels) SetTabLabel(name, label string)

SetTabLabel sets the label of a tab.

func (*TabbedPanels) SetTabSwitcherAfterContent added in v1.6.1

func (t *TabbedPanels) SetTabSwitcherAfterContent(after bool)

SetTabSwitcherAfterContent sets whether the tab switcher is positioned after content.

func (*TabbedPanels) SetTabSwitcherDivider added in v1.6.1

func (t *TabbedPanels) SetTabSwitcherDivider(start, mid, end string)

SetTabSwitcherDivider sets the tab switcher divider text. Color tags are supported.

func (*TabbedPanels) SetTabSwitcherVertical added in v1.6.1

func (t *TabbedPanels) SetTabSwitcherVertical(vertical bool)

SetTabSwitcherVertical sets the orientation of the tab switcher.

func (*TabbedPanels) SetTabTextColor added in v1.6.1

func (t *TabbedPanels) SetTabTextColor(color tcell.Color)

SetTabTextColor sets the color of the tab text.

func (*TabbedPanels) SetTabTextColorFocused added in v1.6.1

func (t *TabbedPanels) SetTabTextColorFocused(color tcell.Color)

SetTabTextColorFocused sets the color of the tab text when the tab is in focus.

type Table

type Table struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Table visualizes two-dimensional data consisting of rows and columns. Each Table cell is defined via SetCell() by the TableCell type. They can be added dynamically to the table and changed any time.

Each row of the table must have the same number of columns when it is drawn or navigated. This isn't strictly enforced, however you may encounter issues when navigating a table with rows of varied column sizes.

The most compact display of a table is without borders. Each row will then occupy one row on screen and columns are separated by the rune defined via SetSeparator() (a space character by default).

When borders are turned on (via SetBorders()), each table cell is surrounded by lines. Therefore one table row will require two rows on screen.

Columns will use as much horizontal space as they need. You can constrain their size with the MaxWidth parameter of the TableCell type.

Fixed Columns

You can define fixed rows and rolumns via SetFixed(). They will always stay in their place, even when the table is scrolled. Fixed rows are always the top rows. Fixed columns are always the leftmost columns.

Selections

You can call SetSelectable() to set columns and/or rows to "selectable". If the flag is set only for columns, entire columns can be selected by the user. If it is set only for rows, entire rows can be selected. If both flags are set, individual cells can be selected. The "selected" handler set via SetSelectedFunc() is invoked when the user presses Enter on a selection.

Navigation

If the table extends beyond the available space, it can be navigated with key bindings similar to Vim:

  • h, left arrow: Move left by one column.
  • l, right arrow: Move right by one column.
  • j, down arrow: Move down by one row.
  • k, up arrow: Move up by one row.
  • g, home: Move to the top.
  • G, end: Move to the bottom.
  • Ctrl-F, page down: Move down by one page.
  • Ctrl-B, page up: Move up by one page.

When there is no selection, this affects the entire table (except for fixed rows and columns). When there is a selection, the user moves the selection. The class will attempt to keep the selection from moving out of the screen.

Use SetInputCapture() to override or modify keyboard input.

func NewTable

func NewTable() *Table

NewTable returns a new table.

func (*Table) Clear

func (t *Table) Clear()

Clear removes all table data.

func (*Table) Draw

func (t *Table) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Table) GetCell

func (t *Table) GetCell(row, column int) *TableCell

GetCell returns the contents of the cell at the specified position. A valid TableCell object is always returned but it will be uninitialized if the cell was not previously set. Such an uninitialized object will not automatically be inserted. Therefore, repeated calls to this function may return different pointers for uninitialized cells.

func (*Table) GetColumnCount

func (t *Table) GetColumnCount() int

GetColumnCount returns the (maximum) number of columns in the table.

func (*Table) GetOffset added in v0.1.11

func (t *Table) GetOffset() (row, column int)

GetOffset returns the current row and column offset. This indicates how many rows and columns the table is scrolled down and to the right.

func (*Table) GetRowCount

func (t *Table) GetRowCount() int

GetRowCount returns the number of rows in the table.

func (*Table) GetSelectable added in v0.1.5

func (t *Table) GetSelectable() (rows, columns bool)

GetSelectable returns what can be selected in a table. Refer to SetSelectable() for details.

func (*Table) GetSelection added in v0.1.6

func (t *Table) GetSelection() (row, column int)

GetSelection returns the position of the current selection. If entire rows are selected, the column index is undefined. Likewise for entire columns.

func (*Table) InputHandler

func (t *Table) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*Table) InsertColumn added in v1.6.1

func (t *Table) InsertColumn(column int) *Table

InsertColumn inserts a column before the column with the given index. Cells in the given column and to its right will be shifted to the right by one column. Rows that have fewer initialized cells than "column" will remain unchanged.

func (*Table) InsertRow added in v1.6.1

func (t *Table) InsertRow(row int) *Table

InsertRow inserts a row before the row with the given index. Cells on the given row and below will be shifted to the bottom by one row. If "row" is equal or larger than the current number of rows, this function has no effect.

func (*Table) MouseHandler added in v1.6.1

func (t *Table) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Table) RemoveColumn added in v1.6.1

func (t *Table) RemoveColumn(column int) *Table

RemoveColumn removes the column at the given position from the table. If there is no such column, this has no effect.

func (*Table) RemoveRow added in v1.6.1

func (t *Table) RemoveRow(row int) *Table

RemoveRow removes the row at the given position from the table. If there is no such row, this has no effect.

func (*Table) ScrollToBeginning

func (t *Table) ScrollToBeginning() *Table

ScrollToBeginning scrolls the table to the beginning to that the top left corner of the table is shown. Note that this position may be corrected if there is a selection.

func (*Table) ScrollToEnd

func (t *Table) ScrollToEnd() *Table

ScrollToEnd scrolls the table to the beginning to that the bottom left corner of the table is shown. Adding more rows to the table will cause it to automatically scroll with the new data. Note that this position may be corrected if there is a selection.

func (*Table) Select

func (t *Table) Select(row, column int) *Table

Select sets the selected cell. Depending on the selection settings specified via SetSelectable(), this may be an entire row or column, or even ignored completely. The "selection changed" event is fired if such a callback is available (even if the selection ends up being the same as before and even if cells are not selectable).

func (*Table) SetBackgroundColor added in v1.6.1

func (t *Table) SetBackgroundColor(color tcell.Color) *Table

SetBackgroundColor sets the background color of the table

func (*Table) SetBorders

func (t *Table) SetBorders(show bool) *Table

SetBorders sets whether or not each cell in the table is surrounded by a border.

func (*Table) SetBordersColor

func (t *Table) SetBordersColor(color tcell.Color) *Table

SetBordersColor sets the color of the cell borders.

func (*Table) SetCell

func (t *Table) SetCell(row, column int, cell *TableCell) *Table

SetCell sets the content of a cell the specified position. It is ok to directly instantiate a TableCell object. If the cell has content, at least the Text and Color fields should be set.

Note that setting cells in previously unknown rows and columns will automatically extend the internal table representation, e.g. starting with a row of 100,000 will immediately create 100,000 empty rows.

To avoid unnecessary garbage collection, fill columns from left to right.

func (*Table) SetCellSimple

func (t *Table) SetCellSimple(row, column int, text string) *Table

SetCellSimple calls SetCell() with the given text, left-aligned, in white.

func (*Table) SetDoneFunc

func (t *Table) SetDoneFunc(handler func(key tcell.Key)) *Table

SetDoneFunc sets a handler which is called whenever the user presses the Escape, Tab, or Backtab key. If nothing is selected, it is also called when user presses the Enter key (because pressing Enter on a selection triggers the "selected" handler set via SetSelectedFunc()).

func (*Table) SetEvaluateAllRows added in v1.6.1

func (t *Table) SetEvaluateAllRows(all bool) *Table

SetEvaluateAllRows sets a flag which determines the rows to be evaluated when calculating the widths of the table's columns. When false, only visible rows are evaluated. When true, all rows in the table are evaluated.

Set this flag to true to avoid shifting column widths when the table is scrolled. (May be slower for large tables.)

func (*Table) SetFixed

func (t *Table) SetFixed(rows, columns int) *Table

SetFixed sets the number of fixed rows and columns which are always visible even when the rest of the cells are scrolled out of view. Rows are always the top-most ones. Columns are always the left-most ones.

func (*Table) SetInputCapture added in v1.6.1

func (t *Table) SetInputCapture(capture func(event *tcell.EventKey) *tcell.EventKey) *Table

SetInputCapture installs a function which captures key events before they are forwarded to the primitive's default key event handler. This function can then choose to forward that key event (or a different one) to the default handler by returning it. If nil is returned, the default handler will not be called.

Providing a nil handler will remove a previously existing handler.

Note that this function will not have an effect on primitives composed of other primitives, such as Form, Flex, or Grid. Key events are only captured by the primitives that have focus (e.g. InputField) and only one primitive can have focus at a time. Composing primitives such as Form pass the focus on to their contained primitives and thus never receive any key events themselves. Therefore, they cannot intercept key events.

func (*Table) SetOffset

func (t *Table) SetOffset(row, column int) *Table

SetOffset sets how many rows and columns should be skipped when drawing the table. This is useful for large tables that do not fit on the screen. Navigating a selection can change these values.

Fixed rows and columns are never skipped.

func (*Table) SetScrollBarColor added in v1.6.1

func (t *Table) SetScrollBarColor(color tcell.Color) *Table

SetScrollBarColor sets the color of the scroll bar.

func (*Table) SetScrollBarVisibility added in v1.6.1

func (t *Table) SetScrollBarVisibility(visibility ScrollBarVisibility) *Table

SetScrollBarVisibility specifies the display of the scroll bar.

func (*Table) SetSelectable

func (t *Table) SetSelectable(rows, columns bool) *Table

SetSelectable sets the flags which determine what can be selected in a table. There are three selection modi:

  • rows = false, columns = false: Nothing can be selected.
  • rows = true, columns = false: Rows can be selected.
  • rows = false, columns = true: Columns can be selected.
  • rows = true, columns = true: Individual cells can be selected.

func (*Table) SetSelectedFunc

func (t *Table) SetSelectedFunc(handler func(row, column int)) *Table

SetSelectedFunc sets a handler which is called whenever the user presses the Enter key on a selected cell/row/column. The handler receives the position of the selection and its cell contents. If entire rows are selected, the column index is undefined. Likewise for entire columns.

func (*Table) SetSelectedStyle added in v0.1.18

func (t *Table) SetSelectedStyle(foregroundColor, backgroundColor tcell.Color, attributes tcell.AttrMask) *Table

SetSelectedStyle sets a specific style for selected cells. If no such style is set, per default, selected cells are inverted (i.e. their foreground and background colors are swapped).

To reset a previous setting to its default, make the following call:

table.SetSelectedStyle(tcell.ColorDefault, tcell.ColorDefault, 0)

func (*Table) SetSelectionChangedFunc added in v0.1.6

func (t *Table) SetSelectionChangedFunc(handler func(row, column int)) *Table

SetSelectionChangedFunc sets a handler which is called whenever the current selection changes. The handler receives the position of the new selection. If entire rows are selected, the column index is undefined. Likewise for entire columns.

func (*Table) SetSeparator

func (t *Table) SetSeparator(separator rune) *Table

SetSeparator sets the character used to fill the space between two neighboring cells. This is a space character ' ' per default but you may want to set it to Borders.Vertical (or any other rune) if the column separation should be more visible. If cell borders are activated, this is ignored.

Separators have the same color as borders.

func (*Table) SetSortClicked added in v1.6.1

func (t *Table) SetSortClicked(sortClicked bool) *Table

SetSortClicked sets a flag which determines whether the table is sorted when a fixed row is clicked. This flag is enabled by default.

func (*Table) SetSortFunc added in v1.6.1

func (t *Table) SetSortFunc(sortFunc func(column, i, j int) bool) *Table

SetSortFunc sets the sorting function used for the table. When unset, a case-sensitive string comparison is used.

func (*Table) Sort added in v1.6.1

func (t *Table) Sort(column int, descending bool) *Table

Sort sorts the table by the column at the given index. You may set a custom sorting function with SetSortFunc.

type TableCell

type TableCell struct {
	// The reference object.
	Reference interface{}

	// The text to be displayed in the table cell.
	Text []byte

	// The alignment of the cell text. One of AlignLeft (default), AlignCenter,
	// or AlignRight.
	Align int

	// The maximum width of the cell in screen space. This is used to give a
	// column a maximum width. Any cell text whose screen width exceeds this width
	// is cut off. Set to 0 if there is no maximum width.
	MaxWidth int

	// If the total table width is less than the available width, this value is
	// used to add extra width to a column. See SetExpansion() for details.
	Expansion int

	// The color of the cell text.
	Color tcell.Color

	// The background color of the cell.
	BackgroundColor tcell.Color

	// The style attributes of the cell.
	Attributes tcell.AttrMask

	// If set to true, this cell cannot be selected.
	NotSelectable bool

	sync.RWMutex
	// contains filtered or unexported fields
}

TableCell represents one cell inside a Table. You can instantiate this type directly but all colors (background and text) will be set to their default which is black.

func NewTableCell added in v0.1.6

func NewTableCell(text string) *TableCell

NewTableCell returns a new table cell with sensible defaults. That is, left aligned text with the primary text color (see Styles) and a transparent background (using the background of the Table).

func (*TableCell) GetBytes added in v1.6.1

func (c *TableCell) GetBytes() []byte

GetBytes returns the cell's text.

func (*TableCell) GetLastPosition

func (c *TableCell) GetLastPosition() (x, y, width int)

GetLastPosition returns the position of the table cell the last time it was drawn on screen. If the cell is not on screen, the return values are undefined.

Because the Table class will attempt to keep selected cells on screen, this function is most useful in response to a "selected" event (see SetSelectedFunc()) or a "selectionChanged" event (see SetSelectionChangedFunc()).

func (*TableCell) GetReference added in v1.6.1

func (c *TableCell) GetReference() interface{}

GetReference returns this cell's reference object.

func (*TableCell) GetText added in v1.6.1

func (c *TableCell) GetText() string

GetText returns the cell's text.

func (*TableCell) SetAlign added in v0.1.6

func (c *TableCell) SetAlign(align int) *TableCell

SetAlign sets the cell's text alignment, one of AlignLeft, AlignCenter, or AlignRight.

func (*TableCell) SetAttributes added in v0.1.17

func (c *TableCell) SetAttributes(attr tcell.AttrMask) *TableCell

SetAttributes sets the cell's text attributes. You can combine different attributes using bitmask operations:

cell.SetAttributes(tcell.AttrUnderline | tcell.AttrBold)

func (*TableCell) SetBackgroundColor added in v0.1.6

func (c *TableCell) SetBackgroundColor(color tcell.Color) *TableCell

SetBackgroundColor sets the cell's background color. Set to tcell.ColorDefault to use the table's background color.

func (*TableCell) SetBytes added in v1.6.1

func (c *TableCell) SetBytes(text []byte) *TableCell

SetBytes sets the cell's text.

func (*TableCell) SetExpansion added in v0.1.12

func (c *TableCell) SetExpansion(expansion int) *TableCell

SetExpansion sets the value by which the column of this cell expands if the available width for the table is more than the table width (prior to applying this expansion value). This is a proportional value. The amount of unused horizontal space is divided into widths to be added to each column. How much extra width a column receives depends on the expansion value: A value of 0 (the default) will not cause the column to increase in width. Other values are proportional, e.g. a value of 2 will cause a column to grow by twice the amount of a column with a value of 1.

Since this value affects an entire column, the maximum over all visible cells in that column is used.

This function panics if a negative value is provided.

func (*TableCell) SetMaxWidth added in v0.1.6

func (c *TableCell) SetMaxWidth(maxWidth int) *TableCell

SetMaxWidth sets maximum width of the cell in screen space. This is used to give a column a maximum width. Any cell text whose screen width exceeds this width is cut off. Set to 0 if there is no maximum width.

func (*TableCell) SetReference added in v1.6.1

func (c *TableCell) SetReference(reference interface{}) *TableCell

SetReference allows you to store a reference of any type in this cell. This will allow you to establish a mapping between the cell and your actual data.

func (*TableCell) SetSelectable added in v0.1.6

func (c *TableCell) SetSelectable(selectable bool) *TableCell

SetSelectable sets whether or not this cell can be selected by the user.

func (*TableCell) SetStyle added in v0.1.17

func (c *TableCell) SetStyle(style tcell.Style) *TableCell

SetStyle sets the cell's style (foreground color, background color, and attributes) all at once.

func (*TableCell) SetText added in v0.1.6

func (c *TableCell) SetText(text string) *TableCell

SetText sets the cell's text.

func (*TableCell) SetTextColor added in v0.1.6

func (c *TableCell) SetTextColor(color tcell.Color) *TableCell

SetTextColor sets the cell's text color.

type TextView

type TextView struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

TextView is a box which displays text. It implements the io.Writer interface so you can stream text to it. This does not trigger a redraw automatically but if a handler is installed via SetChangedFunc(), you can cause it to be redrawn. (See SetChangedFunc() for more details.)

Navigation

If the text view is scrollable (the default), text is kept in a buffer which may be larger than the screen and can be navigated similarly to Vim:

  • h, left arrow: Move left.
  • l, right arrow: Move right.
  • j, down arrow: Move down.
  • k, up arrow: Move up.
  • g, home: Move to the top.
  • G, end: Move to the bottom.
  • Ctrl-F, page down: Move down by one page.
  • Ctrl-B, page up: Move up by one page.

If the text is not scrollable, any text above the top visible line is discarded.

Use SetInputCapture() to override or modify keyboard input.

Colors

If dynamic colors are enabled via SetDynamicColors(), text color can be changed dynamically by embedding color strings in square brackets. This works the same way as anywhere else. Please see the package documentation for more information.

Regions and Highlights

If regions are enabled via SetRegions(), you can define text regions within the text and assign region IDs to them. Text regions start with region tags. Region tags are square brackets that contain a region ID in double quotes, for example:

We define a ["rg"]region[""] here.

A text region ends with the next region tag. Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region. Region IDs must satisfy the following regular expression:

[a-zA-Z0-9_,;: \-\.]+

Regions can be highlighted by calling the Highlight() function with one or more region IDs. This can be used to display search results, for example.

The ScrollToHighlight() function can be used to jump to the currently highlighted region once when the text view is drawn the next time.

func NewTextView

func NewTextView() *TextView

NewTextView returns a new text view.

func (*TextView) Clear

func (t *TextView) Clear()

Clear removes all text from the buffer.

func (*TextView) Draw

func (t *TextView) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*TextView) Focus added in v0.1.19

func (t *TextView) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*TextView) GetBytes added in v1.6.1

func (t *TextView) GetBytes(stripTags bool) []byte

GetBytes returns the current text of this text view. If "stripTags" is set to true, any region/color tags are stripped from the text.

func (*TextView) GetHighlights

func (t *TextView) GetHighlights() (regionIDs []string)

GetHighlights returns the IDs of all currently highlighted regions.

func (*TextView) GetRegionText

func (t *TextView) GetRegionText(regionID string) string

GetRegionText returns the text of the region with the given ID. If dynamic colors are enabled, color tags are stripped from the text. Newlines are always returned as '\n' runes.

If the region does not exist or if regions are turned off, an empty string is returned.

func (*TextView) GetScrollOffset added in v0.1.18

func (t *TextView) GetScrollOffset() (row, column int)

GetScrollOffset returns the number of rows and columns that are skipped at the top left corner when the text view has been scrolled.

func (*TextView) GetText added in v1.6.1

func (t *TextView) GetText(stripTags bool) string

GetText returns the current text of this text view. If "stripTags" is set to true, any region/color tags are stripped from the text.

func (*TextView) HasFocus added in v0.1.19

func (t *TextView) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*TextView) Highlight

func (t *TextView) Highlight(regionIDs ...string) *TextView

Highlight specifies which regions should be highlighted. If highlight toggling is set to true (see SetToggleHighlights()), the highlight of the provided regions is toggled (highlighted regions are un-highlighted and vice versa). If toggling is set to false, the provided regions are highlighted and all other regions will not be highlighted (you may also provide nil to turn off all highlights).

For more information on regions, see class description. Empty region strings are ignored.

Text in highlighted regions will be drawn inverted, i.e. with their background and foreground colors swapped.

func (*TextView) InputHandler

func (t *TextView) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*TextView) MouseHandler added in v1.6.1

func (t *TextView) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*TextView) ScrollTo added in v0.1.17

func (t *TextView) ScrollTo(row, column int) *TextView

ScrollTo scrolls to the specified row and column (both starting with 0).

func (*TextView) ScrollToBeginning added in v0.1.6

func (t *TextView) ScrollToBeginning() *TextView

ScrollToBeginning scrolls to the top left corner of the text if the text view is scrollable.

func (*TextView) ScrollToEnd added in v0.1.6

func (t *TextView) ScrollToEnd() *TextView

ScrollToEnd scrolls to the bottom left corner of the text if the text view is scrollable. Adding new rows to the end of the text view will cause it to scroll with the new data.

func (*TextView) ScrollToHighlight

func (t *TextView) ScrollToHighlight() *TextView

ScrollToHighlight will cause the visible area to be scrolled so that the highlighted regions appear in the visible area of the text view. This repositioning happens the next time the text view is drawn. It happens only once so you will need to call this function repeatedly to always keep highlighted regions in view.

Nothing happens if there are no highlighted regions or if the text view is not scrollable.

func (*TextView) SetBackgroundColor added in v1.6.1

func (t *TextView) SetBackgroundColor(color tcell.Color) *TextView

SetBackgroundColor of the text view

func (*TextView) SetBytes added in v1.6.1

func (t *TextView) SetBytes(text []byte) *TextView

SetBytes sets the text of this text view to the provided byte slice. Previously contained text will be removed.

func (*TextView) SetChangedFunc

func (t *TextView) SetChangedFunc(handler func()) *TextView

SetChangedFunc sets a handler function which is called when the text of the text view has changed. This is useful when text is written to this io.Writer in a separate goroutine. Doing so does not automatically cause the screen to be refreshed so you may want to use the "changed" handler to redraw the screen.

Note that to avoid race conditions or deadlocks, there are a few rules you should follow:

  • You can call Application.Draw() from this handler.
  • You can call TextView.HasFocus() from this handler.
  • During the execution of this handler, access to any other variables from this primitive or any other primitive should be queued using Application.QueueUpdate().

See package description for details on dealing with concurrency.

func (*TextView) SetDoneFunc

func (t *TextView) SetDoneFunc(handler func(key tcell.Key)) *TextView

SetDoneFunc sets a handler which is called when the user presses on the following keys: Escape, Enter, Tab, Backtab. The key is passed to the handler.

func (*TextView) SetDynamicColors

func (t *TextView) SetDynamicColors(dynamic bool) *TextView

SetDynamicColors sets the flag that allows the text color to be changed dynamically. See class description for details.

func (*TextView) SetHighlightedFunc added in v1.6.1

func (t *TextView) SetHighlightedFunc(handler func(added, removed, remaining []string)) *TextView

SetHighlightedFunc sets a handler which is called when the list of currently highlighted regions change. It receives a list of region IDs which were newly highlighted, those that are not highlighted anymore, and those that remain highlighted.

Note that because regions are only determined during drawing, this function can only fire for regions that have existed during the last call to Draw().

func (*TextView) SetMaxLines added in v1.6.1

func (t *TextView) SetMaxLines(maxLines int) *TextView

SetMaxLines sets the maximum number of newlines the text view will hold before discarding older data from the buffer.

func (*TextView) SetRegions

func (t *TextView) SetRegions(regions bool) *TextView

SetRegions sets the flag that allows to define regions in the text. See class description for details.

func (*TextView) SetReindexBuffer added in v1.6.1

func (t *TextView) SetReindexBuffer(reindex bool) *TextView

SetReindexBuffer set a flag controlling whether the buffer is reindexed when it is modified. This improves the performance of TextViews whose contents always have line-breaks in the same location. This must be called after the buffer has been indexed.

func (*TextView) SetScrollBarColor added in v1.6.1

func (t *TextView) SetScrollBarColor(color tcell.Color) *TextView

SetScrollBarColor sets the color of the scroll bar.

func (*TextView) SetScrollBarVisibility added in v1.6.1

func (t *TextView) SetScrollBarVisibility(visibility ScrollBarVisibility) *TextView

SetScrollBarVisibility specifies the display of the scroll bar.

func (*TextView) SetScrollable

func (t *TextView) SetScrollable(scrollable bool) *TextView

SetScrollable sets the flag that decides whether or not the text view is scrollable. If true, text is kept in a buffer and can be navigated. If false, the last line will always be visible.

func (*TextView) SetText added in v0.1.11

func (t *TextView) SetText(text string) *TextView

SetText sets the text of this text view to the provided string. Previously contained text will be removed.

func (*TextView) SetTextAlign added in v0.1.5

func (t *TextView) SetTextAlign(align int) *TextView

SetTextAlign sets the text alignment within the text view. This must be either AlignLeft, AlignCenter, or AlignRight.

func (*TextView) SetTextColor

func (t *TextView) SetTextColor(color tcell.Color) *TextView

SetTextColor sets the initial color of the text (which can be changed dynamically by sending color strings in square brackets to the text view if dynamic colors are enabled).

func (*TextView) SetToggleHighlights added in v1.6.1

func (t *TextView) SetToggleHighlights(toggle bool) *TextView

SetToggleHighlights sets a flag to determine how regions are highlighted. When set to true, the Highlight() function (or a mouse click) will toggle the provided/selected regions. When set to false, Highlight() (or a mouse click) will simply highlight the provided regions.

func (*TextView) SetWordWrap added in v0.1.5

func (t *TextView) SetWordWrap(wrapOnWords bool) *TextView

SetWordWrap sets the flag that, if true and if the "wrap" flag is also true (see SetWrap()), wraps the line at spaces or after punctuation marks. Note that trailing spaces will not be printed.

This flag is ignored if the "wrap" flag is false.

func (*TextView) SetWrap

func (t *TextView) SetWrap(wrap bool) *TextView

SetWrap sets the flag that, if true, leads to lines that are longer than the available width being wrapped onto the next line. If false, any characters beyond the available width are not displayed.

func (*TextView) Write

func (t *TextView) Write(p []byte) (n int, err error)

Write lets us implement the io.Writer interface. Tab characters will be replaced with TabSize space characters. A "\n" or "\r\n" will be interpreted as a new line.

type Theme added in v1.6.1

type Theme struct {
	// Title, border and other lines
	TitleColor    tcell.Color // Box titles.
	BorderColor   tcell.Color // Box borders.
	GraphicsColor tcell.Color // Graphics.

	// Text
	PrimaryTextColor           tcell.Color // Primary text.
	SecondaryTextColor         tcell.Color // Secondary text (e.g. labels).
	TertiaryTextColor          tcell.Color // Tertiary text (e.g. subtitles, notes).
	InverseTextColor           tcell.Color // Text on primary-colored backgrounds.
	ContrastPrimaryTextColor   tcell.Color // Primary text for contrasting elements.
	ContrastSecondaryTextColor tcell.Color // Secondary text on ContrastBackgroundColor-colored backgrounds.

	// Background
	PrimitiveBackgroundColor    tcell.Color // Main background color for primitives.
	ContrastBackgroundColor     tcell.Color // Background color for contrasting elements.
	MoreContrastBackgroundColor tcell.Color // Background color for even more contrasting elements.

	// Check box
	CheckBoxCheckedRune rune

	// Context menu
	ContextMenuPaddingTop    int
	ContextMenuPaddingBottom int
	ContextMenuPaddingLeft   int
	ContextMenuPaddingRight  int

	// Drop down
	DropDownAbbreviationChars string // The chars to show when the option's text gets shortened.
	DropDownSymbol            rune   // The symbol to draw at the end of the field.

	// Scroll bar
	ScrollBarColor tcell.Color

	// Window
	WindowMinWidth  int
	WindowMinHeight int
}

Theme defines the colors used when primitives are initialized.

type Transformation added in v1.6.1

type Transformation int

Transformation describes a widget modification.

const (
	TransformFirstItem    Transformation = 1
	TransformLastItem     Transformation = 2
	TransformPreviousItem Transformation = 3
	TransformNextItem     Transformation = 4
	TransformPreviousPage Transformation = 5
	TransformNextPage     Transformation = 6
)

Widget transformations.

type TreeNode added in v0.1.17

type TreeNode struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

TreeNode represents one node in a tree view.

func NewTreeNode added in v0.1.17

func NewTreeNode(text string) *TreeNode

NewTreeNode returns a new tree node.

func (*TreeNode) AddChild added in v0.1.17

func (n *TreeNode) AddChild(node *TreeNode)

AddChild adds a new child node to this node.

func (*TreeNode) ClearChildren added in v0.1.17

func (n *TreeNode) ClearChildren()

ClearChildren removes all child nodes from this node.

func (*TreeNode) Collapse added in v0.1.17

func (n *TreeNode) Collapse()

Collapse makes the child nodes of this node disappear.

func (*TreeNode) CollapseAll added in v0.1.17

func (n *TreeNode) CollapseAll()

CollapseAll collapses this node and all descendent nodes.

func (*TreeNode) Expand added in v0.1.17

func (n *TreeNode) Expand()

Expand makes the child nodes of this node appear.

func (*TreeNode) ExpandAll added in v0.1.17

func (n *TreeNode) ExpandAll()

ExpandAll expands this node and all descendent nodes.

func (*TreeNode) GetChildren added in v0.1.17

func (n *TreeNode) GetChildren() []*TreeNode

GetChildren returns this node's children.

func (*TreeNode) GetColor added in v1.6.1

func (n *TreeNode) GetColor() tcell.Color

GetColor returns the node's color.

func (*TreeNode) GetReference added in v0.1.17

func (n *TreeNode) GetReference() interface{}

GetReference returns this node's reference object.

func (*TreeNode) GetText added in v1.6.1

func (n *TreeNode) GetText() string

GetText returns this node's text.

func (*TreeNode) IsExpanded added in v0.1.17

func (n *TreeNode) IsExpanded() bool

IsExpanded returns whether the child nodes of this node are visible.

func (*TreeNode) SetChildren added in v0.1.17

func (n *TreeNode) SetChildren(childNodes []*TreeNode)

SetChildren sets this node's child nodes.

func (*TreeNode) SetColor added in v0.1.17

func (n *TreeNode) SetColor(color tcell.Color)

SetColor sets the node's text color.

func (*TreeNode) SetExpanded added in v0.1.17

func (n *TreeNode) SetExpanded(expanded bool)

SetExpanded sets whether or not this node's child nodes should be displayed.

func (*TreeNode) SetFocusedFunc added in v1.6.1

func (n *TreeNode) SetFocusedFunc(handler func())

SetFocusedFunc sets the function which is called when the user navigates to this node.

This function is also called when the user selects this node.

func (*TreeNode) SetIndent added in v0.1.17

func (n *TreeNode) SetIndent(indent int)

SetIndent sets an additional indentation for this node's text. A value of 0 keeps the text as far left as possible with a minimum of line graphics. Any value greater than that moves the text to the right.

func (*TreeNode) SetReference added in v0.1.17

func (n *TreeNode) SetReference(reference interface{})

SetReference allows you to store a reference of any type in this node. This will allow you to establish a mapping between the TreeView hierarchy and your internal tree structure.

func (*TreeNode) SetSelectable added in v0.1.17

func (n *TreeNode) SetSelectable(selectable bool)

SetSelectable sets a flag indicating whether this node can be focused and selected by the user.

func (*TreeNode) SetSelectedFunc added in v0.1.17

func (n *TreeNode) SetSelectedFunc(handler func())

SetSelectedFunc sets a function which is called when the user selects this node by hitting Enter when it is focused.

func (*TreeNode) SetText added in v0.1.17

func (n *TreeNode) SetText(text string)

SetText sets the node's text which is displayed.

func (*TreeNode) Walk added in v0.1.17

func (n *TreeNode) Walk(callback func(node, parent *TreeNode) bool)

Walk traverses this node's subtree in depth-first, pre-order (NLR) order and calls the provided callback function on each traversed node (which includes this node) with the traversed node and its parent node (nil for this node). The callback returns whether traversal should continue with the traversed node's child nodes (true) or not recurse any deeper (false).

type TreeView added in v0.1.17

type TreeView struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

TreeView displays tree structures. A tree consists of nodes (TreeNode objects) where each node has zero or more child nodes and exactly one parent node (except for the root node which has no parent node).

The SetRoot() function is used to specify the root of the tree. Other nodes are added locally to the root node or any of its descendents. See the TreeNode documentation for details on node attributes. (You can use SetReference() to store a reference to nodes of your own tree structure.)

Nodes can be focused by calling SetCurrentNode(). The user can navigate the selection or the tree by using the following keys:

  • j, down arrow, right arrow: Move (the selection) down by one node.
  • k, up arrow, left arrow: Move (the selection) up by one node.
  • g, home: Move (the selection) to the top.
  • G, end: Move (the selection) to the bottom.
  • Ctrl-F, page down: Move (the selection) down by one page.
  • Ctrl-B, page up: Move (the selection) up by one page.

Selected nodes can trigger the "selected" callback when the user hits Enter.

The root node corresponds to level 0, its children correspond to level 1, their children to level 2, and so on. Per default, the first level that is displayed is 0, i.e. the root node. You can call SetTopLevel() to hide levels.

If graphics are turned on (see SetGraphics()), lines indicate the tree's hierarchy. Alternative (or additionally), you can set different prefixes using SetPrefixes() for different levels, for example to display hierarchical bullet point lists.

func NewTreeView added in v0.1.17

func NewTreeView() *TreeView

NewTreeView returns a new tree view.

func (*TreeView) Draw added in v0.1.17

func (t *TreeView) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*TreeView) GetCurrentNode added in v0.1.17

func (t *TreeView) GetCurrentNode() *TreeNode

GetCurrentNode returns the currently selected node or nil of no node is currently selected.

func (*TreeView) GetRoot added in v0.1.17

func (t *TreeView) GetRoot() *TreeNode

GetRoot returns the root node of the tree. If no such node was previously set, nil is returned.

func (*TreeView) GetRowCount added in v1.6.1

func (t *TreeView) GetRowCount() int

GetRowCount returns the number of "visible" nodes. This includes nodes which fall outside the tree view's box but notably does not include the children of collapsed nodes. Note that this value is only up to date after the tree view has been drawn.

func (*TreeView) GetScrollOffset added in v1.6.1

func (t *TreeView) GetScrollOffset() int

GetScrollOffset returns the number of node rows that were skipped at the top of the tree view. Note that when the user navigates the tree view, this value is only updated after the tree view has been redrawn.

func (*TreeView) InputHandler added in v0.1.17

func (t *TreeView) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*TreeView) MouseHandler added in v1.6.1

func (t *TreeView) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*TreeView) SetAlign added in v0.1.17

func (t *TreeView) SetAlign(align bool)

SetAlign controls the horizontal alignment of the node texts. If set to true, all texts except that of top-level nodes will be placed in the same column. If set to false, they will indent with the hierarchy.

func (*TreeView) SetChangedFunc added in v0.1.17

func (t *TreeView) SetChangedFunc(handler func(node *TreeNode))

SetChangedFunc sets the function which is called when the user navigates to a new tree node.

func (*TreeView) SetCurrentNode added in v0.1.17

func (t *TreeView) SetCurrentNode(node *TreeNode)

SetCurrentNode focuses a node or, when provided with nil, clears focus. Selected nodes must be visible and selectable, or else the selection will be changed to the top-most selectable and visible node.

This function does NOT trigger the "changed" callback.

func (*TreeView) SetDoneFunc added in v1.6.1

func (t *TreeView) SetDoneFunc(handler func(key tcell.Key))

SetDoneFunc sets a handler which is called whenever the user presses the Escape, Tab, or Backtab key.

func (*TreeView) SetGraphics added in v0.1.17

func (t *TreeView) SetGraphics(showGraphics bool)

SetGraphics sets a flag which determines whether or not line graphics are drawn to illustrate the tree's hierarchy.

func (*TreeView) SetGraphicsColor added in v0.1.17

func (t *TreeView) SetGraphicsColor(color tcell.Color)

SetGraphicsColor sets the colors of the lines used to draw the tree structure.

func (*TreeView) SetPrefixes added in v0.1.17

func (t *TreeView) SetPrefixes(prefixes []string)

SetPrefixes defines the strings drawn before the nodes' texts. This is a slice of strings where each element corresponds to a node's hierarchy level, i.e. 0 for the root, 1 for the root's children, and so on (levels will cycle).

For example, to display a hierarchical list with bullet points:

treeView.SetGraphics(false).
  SetPrefixes([]string{"* ", "- ", "x "})

func (*TreeView) SetRoot added in v0.1.17

func (t *TreeView) SetRoot(root *TreeNode)

SetRoot sets the root node of the tree.

func (*TreeView) SetScrollBarColor added in v1.6.1

func (t *TreeView) SetScrollBarColor(color tcell.Color)

SetScrollBarColor sets the color of the scroll bar.

func (*TreeView) SetScrollBarVisibility added in v1.6.1

func (t *TreeView) SetScrollBarVisibility(visibility ScrollBarVisibility)

SetScrollBarVisibility specifies the display of the scroll bar.

func (*TreeView) SetSelectedBackgroundColor added in v1.6.1

func (t *TreeView) SetSelectedBackgroundColor(color tcell.Color)

SetSelectedBackgroundColor sets the background color of selected items.

func (*TreeView) SetSelectedFunc added in v0.1.17

func (t *TreeView) SetSelectedFunc(handler func(node *TreeNode))

SetSelectedFunc sets the function which is called when the user selects a node by pressing Enter on the current selection.

func (*TreeView) SetSelectedTextColor added in v1.6.1

func (t *TreeView) SetSelectedTextColor(color tcell.Color)

SetSelectedTextColor sets the text color of selected items.

func (*TreeView) SetTopLevel added in v0.1.17

func (t *TreeView) SetTopLevel(topLevel int)

SetTopLevel sets the first tree level that is visible with 0 referring to the root, 1 to the root's child nodes, and so on. Nodes above the top level are not displayed.

func (*TreeView) Transform added in v1.6.1

func (t *TreeView) Transform(tr Transformation)

Transform modifies the current selection.

type Window added in v1.6.1

type Window struct {
	*Box

	sync.RWMutex
	// contains filtered or unexported fields
}

Window is a draggable, resizable frame around a primitive. Windows must be added to a WindowManager.

func NewWindow added in v1.6.1

func NewWindow(primitive Primitive) *Window

NewWindow returns a new window around the given primitive.

func (*Window) Blur added in v1.6.1

func (w *Window) Blur()

Blur is called when this primitive loses focus.

func (*Window) Draw added in v1.6.1

func (w *Window) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*Window) Focus added in v1.6.1

func (w *Window) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*Window) GetMarginBorder added in v1.6.1

func (w *Window) GetMarginBorder() (int, int, int, int)

GetMarginBorder returns top/right/bottom/left space. This method is mainly used by the WindowManager to properly resize the window on final render.

func (*Window) GetSize added in v1.6.1

func (w *Window) GetSize() (int, int)

GetSize gets the size of the window

func (*Window) GetStatus added in v1.6.1

func (w *Window) GetStatus() string

GetStatus widget

func (*Window) GetStatusBarAlign added in v1.6.1

func (w *Window) GetStatusBarAlign() int

GetStatusBarAlign current alignment

func (*Window) GetStatusBarColor added in v1.6.1

func (w *Window) GetStatusBarColor() tcell.Color

GetStatusBarColor for the text.

func (*Window) HasFocus added in v1.6.1

func (w *Window) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*Window) Hide added in v1.6.1

func (w *Window) Hide() *Window

Hide window

func (*Window) InputHandler added in v1.6.1

func (w *Window) InputHandler() func(event *tcell.EventKey, setFocus func(p Primitive))

InputHandler returns the handler for this primitive.

func (*Window) IsCentered added in v1.6.1

func (w *Window) IsCentered() bool

IsCentered returns true if window is meant to be displayed center

func (*Window) MouseHandler added in v1.6.1

func (w *Window) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*Window) SetBackgroundColor added in v1.6.1

func (w *Window) SetBackgroundColor(color tcell.Color) *Window

SetBackgroundColor of the window

func (*Window) SetBorderColor added in v1.6.2

func (w *Window) SetBorderColor(color tcell.Color) *Window

SetBorderColor of the window

func (*Window) SetFullscreen added in v1.6.1

func (w *Window) SetFullscreen(fullscreen bool) *Window

SetFullscreen sets the flag indicating whether or not the the window should be drawn fullscreen.

func (*Window) SetMarginBorder added in v1.6.1

func (w *Window) SetMarginBorder(top int, right int, bottom int, left int) *Window

SetMarginBorder creates a space around window, outside of any defined borders. This works in full-screen mode too.

func (*Window) SetPosition added in v1.6.1

func (w *Window) SetPosition(x, y int) *Window

SetPosition sets the position of the window.

func (*Window) SetPositionCenter added in v1.6.1

func (w *Window) SetPositionCenter() *Window

SetPositionCenter sets the flag to the Window Manager that the current window should be displayed centered. If SetPosition is called, this flag is reset to false.

func (*Window) SetSize added in v1.6.1

func (w *Window) SetSize(width, height int) *Window

SetSize sets the size of the window.

func (*Window) SetStatus added in v1.6.1

func (w *Window) SetStatus(text string) *Window

SetStatus widget to be displayed on the window

func (*Window) SetStatusBarAlign added in v1.6.1

func (w *Window) SetStatusBarAlign(align int) *Window

SetStatusBarAlign on the window's footer (left/centered/right). Default: right

func (*Window) SetStatusBarColor added in v1.6.1

func (w *Window) SetStatusBarColor(color tcell.Color) *Window

SetStatusBarColor for the text. However, in case the string is dynamic, this is overridden.

func (*Window) SetTitle added in v1.6.2

func (w *Window) SetTitle(title string) *Window

SetTitle of the window

func (*Window) SetTitleColor added in v1.6.2

func (w *Window) SetTitleColor(color tcell.Color) *Window

SetTitleColor of the title of the window

func (*Window) Show added in v1.6.1

func (w *Window) Show() *Window

Show window

type WindowManager added in v1.6.1

type WindowManager struct {
	sync.RWMutex
	*Box
	// contains filtered or unexported fields
}

WindowManager provides an area which windows may be added to.

func NewWindowManager added in v1.6.1

func NewWindowManager() *WindowManager

NewWindowManager returns a new window manager.

func (*WindowManager) Add added in v1.6.1

func (wm *WindowManager) Add(w ...*Window) *WindowManager

Add adds a window to the manager.

func (*WindowManager) Clear added in v1.6.1

func (wm *WindowManager) Clear() *WindowManager

Clear removes all windows from the manager.

func (*WindowManager) Draw added in v1.6.1

func (wm *WindowManager) Draw(screen tcell.Screen)

Draw draws this primitive onto the screen.

func (*WindowManager) Focus added in v1.6.1

func (wm *WindowManager) Focus(delegate func(p Primitive))

Focus is called when this primitive receives focus.

func (*WindowManager) HasFocus added in v1.6.1

func (wm *WindowManager) HasFocus() bool

HasFocus returns whether or not this primitive has focus.

func (*WindowManager) IsFullScreen added in v1.6.1

func (wm *WindowManager) IsFullScreen() bool

IsFullScreen returns true if the window manager is set to be full screen

func (*WindowManager) MouseHandler added in v1.6.1

func (wm *WindowManager) MouseHandler() func(action MouseAction, event *tcell.EventMouse, setFocus func(p Primitive)) (consumed bool, capture Primitive)

MouseHandler returns the mouse handler for this primitive.

func (*WindowManager) SetFullScreen added in v1.6.1

func (wm *WindowManager) SetFullScreen(state bool) *WindowManager

SetFullScreen sets the window manager to a full screen. The size then is inherited from the screen directly.

Notes

Bugs

Directories

Path Synopsis
demos
box
Demo code for the Box primitive.
Demo code for the Box primitive.
button
Demo code for the Button primitive.
Demo code for the Button primitive.
checkbox
Demo code for the CheckBox primitive.
Demo code for the CheckBox primitive.
dropdown
Demo code for the DropDown primitive.
Demo code for the DropDown primitive.
flex
Demo code for the Flex primitive.
Demo code for the Flex primitive.
focusmanager
Demo code for the FocusManager utility.
Demo code for the FocusManager utility.
form
Demo code for the Form primitive.
Demo code for the Form primitive.
frame
Demo code for the Frame primitive.
Demo code for the Frame primitive.
grid
Demo code for the Grid primitive.
Demo code for the Grid primitive.
inputfield/simple
Demo code for the InputField primitive.
Demo code for the InputField primitive.
list
Demo code for the List primitive.
Demo code for the List primitive.
modal
Demo code for the Modal primitive.
Demo code for the Modal primitive.
panels
Demo code for the Panels primitive.
Demo code for the Panels primitive.
presentation
A presentation of the crtview package, implemented with crtview.
A presentation of the crtview package, implemented with crtview.
primitive
Demo code which illustrates how to implement your own primitive.
Demo code which illustrates how to implement your own primitive.
progressbar
Demo code for the ProgressBar primitive.
Demo code for the ProgressBar primitive.
tabbedpanels
Demo code for the TabbedPanels primitive.
Demo code for the TabbedPanels primitive.
table
Demo code for the Table primitive.
Demo code for the Table primitive.
textview
Demo code for the TextView primitive.
Demo code for the TextView primitive.
treeview
Demo code for the TreeView primitive.
Demo code for the TreeView primitive.
unicode
Demo code for unicode support (demonstrates wide Chinese characters).
Demo code for unicode support (demonstrates wide Chinese characters).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL