diff --git a/ui/widget/advanced-inputfield.go b/ui/widget/advanced-inputfield.go index 8115b18..4948247 100644 --- a/ui/widget/advanced-inputfield.go +++ b/ui/widget/advanced-inputfield.go @@ -14,6 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +// Based on https://github.com/rivo/tview/blob/master/inputfield.go + package widget import ( @@ -68,6 +70,7 @@ type AdvancedInputField struct { // disables masking. maskCharacter rune + // Whether or not to enable vim-style keybindings. vimBindings bool // An optional function which may reject the last character that was entered. diff --git a/ui/widget/border.go b/ui/widget/border.go index a32f4dd..7c42f3d 100644 --- a/ui/widget/border.go +++ b/ui/widget/border.go @@ -21,10 +21,16 @@ import ( "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 { *tview.Box } +// NewBorder wraps a new tview Box into a new Border. func NewBorder() *Border { return &Border{tview.NewBox()} } diff --git a/ui/widget/center.go b/ui/widget/center.go index 41181a2..45312e2 100644 --- a/ui/widget/center.go +++ b/ui/widget/center.go @@ -20,6 +20,8 @@ import ( "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 { return tview.NewFlex(). AddItem(tview.NewBox(), 0, 1, false). diff --git a/ui/widget/color.go b/ui/widget/color.go index 874b93d..57f943f 100644 --- a/ui/widget/color.go +++ b/ui/widget/color.go @@ -26,6 +26,7 @@ import ( var colorNames []string +// init initializes the colorNames array. func init() { colorNames = make([]string, len(tcell.ColorNames)) i := 0 @@ -33,9 +34,22 @@ func init() { colorNames[i] = name i++ } + // In order to have consistent coloring between restarts, we need to sort the array. 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 { switch s { 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 { 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 { return fmt.Sprintf("[%s]%s[white]", GetHashColorName(s), s) } diff --git a/ui/widget/form-text-view.go b/ui/widget/form-text-view.go deleted file mode 100644 index 58046e9..0000000 --- a/ui/widget/form-text-view.go +++ /dev/null @@ -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 . - -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 -}