summary refs log tree commit diff stats
path: root/widgets/getpasswd.go
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/getpasswd.go')
-rw-r--r--widgets/getpasswd.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/widgets/getpasswd.go b/widgets/getpasswd.go
new file mode 100644
index 0000000..08702c5
--- /dev/null
+++ b/widgets/getpasswd.go
@@ -0,0 +1,61 @@
+package widgets
+
+import (
+	"github.com/gdamore/tcell"
+
+	"git.sr.ht/~sircmpwn/aerc/lib/ui"
+)
+
+type GetPasswd struct {
+	ui.Invalidatable
+	callback func(string)
+	title    string
+	prompt   string
+	input    *ui.TextInput
+}
+
+func NewGetPasswd(title string, prompt string, cb func(string)) *GetPasswd {
+	getpasswd := &GetPasswd{
+		callback: cb,
+		title:    title,
+		prompt:   prompt,
+		input:    ui.NewTextInput("").Password(true).Prompt("Password: "),
+	}
+	getpasswd.input.OnInvalidate(func(_ ui.Drawable) {
+		getpasswd.Invalidate()
+	})
+	getpasswd.input.Focus(true)
+	return getpasswd
+}
+
+func (gp *GetPasswd) Draw(ctx *ui.Context) {
+	ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault)
+	ctx.Fill(0, 0, ctx.Width(), 1, ' ', tcell.StyleDefault.Reverse(true))
+	ctx.Printf(1, 0, tcell.StyleDefault.Reverse(true), "%s", gp.title)
+	ctx.Printf(1, 1, tcell.StyleDefault, gp.prompt)
+	gp.input.Draw(ctx.Subcontext(1, 3, ctx.Width()-2, 1))
+}
+
+func (gp *GetPasswd) Invalidate() {
+	gp.DoInvalidate(gp)
+}
+
+func (gp *GetPasswd) Event(event tcell.Event) bool {
+	switch event := event.(type) {
+	case *tcell.EventKey:
+		switch event.Key() {
+		case tcell.KeyEnter:
+			gp.input.Focus(false)
+			gp.callback(gp.input.String())
+		default:
+			gp.input.Event(event)
+		}
+	default:
+		gp.input.Event(event)
+	}
+	return true
+}
+
+func (gp *GetPasswd) Focus(f bool) {
+	// Who cares
+}