Refactoring and documentation
This commit is contained in:
		@@ -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.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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()}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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).
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user