diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-05-21 16:31:04 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-05-21 16:53:50 -0400 |
commit | 6811143925384ba1cfda8b3e1b338b0cfb9ac6e3 (patch) | |
tree | 584ce88b40ab87828d6adbfdb6bef7a5d3046600 /lib/ui/textinput.go | |
parent | 176245208d40a9ca2ec324be7863a22819de29bc (diff) | |
download | aerc-6811143925384ba1cfda8b3e1b338b0cfb9ac6e3.tar.gz |
New account wizard, part one
Diffstat (limited to 'lib/ui/textinput.go')
-rw-r--r-- | lib/ui/textinput.go | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go index 4a5308e..ce443c3 100644 --- a/lib/ui/textinput.go +++ b/lib/ui/textinput.go @@ -10,14 +10,15 @@ import ( type TextInput struct { Invalidatable - cells int - ctx *Context - focus bool - index int - prompt string - scroll int - text []rune - change []func(ti *TextInput) + cells int + ctx *Context + focus bool + index int + password bool + prompt string + scroll int + text []rune + change []func(ti *TextInput) } // Creates a new TextInput. TextInputs will render a "textbox" in the entire @@ -31,6 +32,11 @@ func NewTextInput(text string) *TextInput { } } +func (ti *TextInput) Password(password bool) *TextInput { + ti.password = password + return ti +} + func (ti *TextInput) Prompt(prompt string) *TextInput { ti.prompt = prompt return ti @@ -42,6 +48,7 @@ func (ti *TextInput) String() string { func (ti *TextInput) Set(value string) { ti.text = []rune(value) + ti.index = len(ti.text) } func (ti *TextInput) Invalidate() { @@ -51,7 +58,13 @@ func (ti *TextInput) Invalidate() { func (ti *TextInput) Draw(ctx *Context) { ti.ctx = ctx // gross ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault) - ctx.Printf(0, 0, tcell.StyleDefault, "%s%s", ti.prompt, string(ti.text)) + if ti.password { + x := ctx.Printf(0, 0, tcell.StyleDefault, "%s", ti.prompt) + cells := runewidth.StringWidth(string(ti.text)) + ctx.Fill(x, 0, cells, 1, '*', tcell.StyleDefault) + } else { + ctx.Printf(0, 0, tcell.StyleDefault, "%s%s", ti.prompt, string(ti.text)) + } cells := runewidth.StringWidth(string(ti.text[:ti.index]) + ti.prompt) if cells != ti.cells && ti.focus { ctx.SetCursor(cells, 0) |