From 43127dad0f0c190b0ac93e8f54ff4f16eec9c28c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 19 Mar 2018 10:57:31 +0200 Subject: [PATCH] Switch forms to use advanced inputfields and use user-friendly panics for UI errors --- gomuks.go | 1 + ui/view-login.go | 14 ++++++++------ ui/widget/advanced-inputfield.go | 8 ++++++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/gomuks.go b/gomuks.go index 418fc9e..67b6989 100644 --- a/gomuks.go +++ b/gomuks.go @@ -99,6 +99,7 @@ func (gmx *Gomuks) Recover() { } func (gmx *Gomuks) Start() { + defer gmx.Recover() if err := gmx.app.Run(); err != nil { panic(err) } diff --git a/ui/view-login.go b/ui/view-login.go index 2a19d3b..c46ad25 100644 --- a/ui/view-login.go +++ b/ui/view-login.go @@ -28,11 +28,13 @@ func (ui *GomuksUI) NewLoginView() tview.Primitive { hs = "https://matrix.org" } + homeserver := widget.NewAdvancedInputField().SetLabel("Homeserver").SetText(hs).SetFieldWidth(30) + username := widget.NewAdvancedInputField().SetLabel("Username").SetText(ui.gmx.Config().MXID).SetFieldWidth(30) + password := widget.NewAdvancedInputField().SetLabel("Password").SetMaskCharacter('*').SetFieldWidth(30) + ui.loginView = tview.NewForm() ui.loginView. - AddInputField("Homeserver", hs, 30, nil, nil). - AddInputField("Username", ui.gmx.Config().MXID, 30, nil, nil). - AddPasswordField("Password", "", 30, '*', nil). + AddFormItem(homeserver).AddFormItem(username).AddFormItem(password). AddButton("Log in", ui.login). AddButton("Quit", ui.gmx.Stop). SetButtonsAlign(tview.AlignCenter). @@ -41,9 +43,9 @@ func (ui *GomuksUI) NewLoginView() tview.Primitive { } func (ui *GomuksUI) login() { - hs := ui.loginView.GetFormItem(0).(*tview.InputField).GetText() - mxid := ui.loginView.GetFormItem(1).(*tview.InputField).GetText() - password := ui.loginView.GetFormItem(2).(*tview.InputField).GetText() + hs := ui.loginView.GetFormItem(0).(*widget.AdvancedInputField).GetText() + mxid := ui.loginView.GetFormItem(1).(*widget.AdvancedInputField).GetText() + password := ui.loginView.GetFormItem(2).(*widget.AdvancedInputField).GetText() debug.Printf("Logging into %s as %s...", hs, mxid) ui.gmx.Config().HS = hs diff --git a/ui/widget/advanced-inputfield.go b/ui/widget/advanced-inputfield.go index 6928c27..6cb1d00 100644 --- a/ui/widget/advanced-inputfield.go +++ b/ui/widget/advanced-inputfield.go @@ -75,7 +75,7 @@ type AdvancedInputField struct { changed func(text string) // An optional function which is called when the user indicated that they - // are done entering text. The key which was pressed is provided (enter or escape). + // are done entering text. The key which was pressed is provided (enter, tab, backtab or escape). done func(tcell.Key) // An optional function which is called when the user presses tab. @@ -200,6 +200,8 @@ func (field *AdvancedInputField) SetChangedFunc(handler func(text string)) *Adva // // - KeyEnter: Done entering text. // - KeyEscape: Abort text input. +// - KeyTab: Tab +// - KeyBacktab: Shift + Tab func (field *AdvancedInputField) SetDoneFunc(handler func(key tcell.Key)) *AdvancedInputField { field.done = handler return field @@ -435,8 +437,10 @@ func (field *AdvancedInputField) InputHandler() func(event *tcell.EventKey, setF if oldWidth != newWidth { field.cursorOffset += newWidth - oldWidth } + break } - case tcell.KeyEnter, tcell.KeyEscape: // We're done. + fallthrough + case tcell.KeyEnter, tcell.KeyEscape, tcell.KeyBacktab: // We're done. if field.done != nil { field.done(key) }