Refactoring and documentation

This commit is contained in:
Tulir Asokan 2018-03-22 23:03:36 +02:00
parent 225dbdba4e
commit b93dea2e1c
5 changed files with 30 additions and 44 deletions

View File

@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// Based on https://github.com/rivo/tview/blob/master/inputfield.go
package widget package widget
import ( import (
@ -68,6 +70,7 @@ type AdvancedInputField struct {
// disables masking. // disables masking.
maskCharacter rune maskCharacter rune
// Whether or not to enable vim-style keybindings.
vimBindings bool vimBindings bool
// An optional function which may reject the last character that was entered. // An optional function which may reject the last character that was entered.

View File

@ -21,10 +21,16 @@ import (
"maunium.net/go/tview" "maunium.net/go/tview"
) )
// Border is a simple tview widget that renders a horizontal or vertical bar.
//
// If the width of the box is 1, the bar will be vertical.
// If the height is 1, the bar will be horizontal.
// If the width nor the height are 1, nothing will be rendered.
type Border struct { type Border struct {
*tview.Box *tview.Box
} }
// NewBorder wraps a new tview Box into a new Border.
func NewBorder() *Border { func NewBorder() *Border {
return &Border{tview.NewBox()} return &Border{tview.NewBox()}
} }

View File

@ -20,6 +20,8 @@ import (
"maunium.net/go/tview" "maunium.net/go/tview"
) )
// Center wraps the given tview primitive into a Flex element in order to
// vertically and horizontally center the given primitive.
func Center(width, height int, p tview.Primitive) tview.Primitive { func Center(width, height int, p tview.Primitive) tview.Primitive {
return tview.NewFlex(). return tview.NewFlex().
AddItem(tview.NewBox(), 0, 1, false). AddItem(tview.NewBox(), 0, 1, false).

View File

@ -26,6 +26,7 @@ import (
var colorNames []string var colorNames []string
// init initializes the colorNames array.
func init() { func init() {
colorNames = make([]string, len(tcell.ColorNames)) colorNames = make([]string, len(tcell.ColorNames))
i := 0 i := 0
@ -33,9 +34,22 @@ func init() {
colorNames[i] = name colorNames[i] = name
i++ i++
} }
// In order to have consistent coloring between restarts, we need to sort the array.
sort.Sort(sort.StringSlice(colorNames)) sort.Sort(sort.StringSlice(colorNames))
} }
// GetHashColorName gets a color name for the given string based on its FNV-1 hash.
//
// The array of possible color names are the alphabetically ordered color
// names specified in tcell.ColorNames.
//
// The algorithm to get the color is as follows:
// colorNames[ FNV1(string) % len(colorNames) ]
//
// With the exception of the three special cases:
// --> = green
// <-- = red
// --- = yellow
func GetHashColorName(s string) string { func GetHashColorName(s string) string {
switch s { switch s {
case "-->": case "-->":
@ -51,10 +65,15 @@ func GetHashColorName(s string) string {
} }
} }
// GetHashColor gets the tcell Color value for the given string.
//
// GetHashColor calls GetHashColorName() and gets the Color value from the tcell.ColorNames map.
func GetHashColor(s string) tcell.Color { func GetHashColor(s string) tcell.Color {
return tcell.ColorNames[GetHashColorName(s)] return tcell.ColorNames[GetHashColorName(s)]
} }
// AddHashColor adds tview color tags to the given string.
// The color added is the color returned by GetHashColorName().
func AddHashColor(s string) string { func AddHashColor(s string) string {
return fmt.Sprintf("[%s]%s[white]", GetHashColorName(s), s) return fmt.Sprintf("[%s]%s[white]", GetHashColorName(s), s)
} }

View File

@ -1,44 +0,0 @@
// gomuks - A terminal Matrix client written in Go.
// Copyright (C) 2018 Tulir Asokan
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package widget
import (
"github.com/gdamore/tcell"
"maunium.net/go/tview"
)
type FormTextView struct {
*tview.TextView
}
func (ftv *FormTextView) GetLabel() string {
return ""
}
func (ftv *FormTextView) SetFormAttributes(label string, labelColor, bgColor, fieldTextColor, fieldBgColor tcell.Color) tview.FormItem {
return ftv
}
func (ftv *FormTextView) GetFieldWidth() int {
_, _, w, _ := ftv.TextView.GetRect()
return w
}
func (ftv *FormTextView) SetFinishedFunc(handler func(key tcell.Key)) tview.FormItem {
ftv.SetDoneFunc(handler)
return ftv
}