package views import ( "github.com/rivo/tview" ) var _ View = &login{} const ( ViewEventLoginClicked = "login-clicked" ) type login struct { view *tview.Flex form *tview.Form username string password string url string loginFunc func(u, p, url string) exitFunc func() } func (l *login) GetView() tview.Primitive { return l.view } func (l *login) onFormLogin() { l.loginFunc(l.username, l.password, l.url) } func NewLoginView(loginFunc func(u, p, url string), exitFunc func()) View { l := &login{} l.loginFunc = loginFunc l.exitFunc = exitFunc form := tview.NewForm(). AddInputField("Server URL", "https://", 20, nil, func(text string) { l.url = text }). AddInputField("Username", "", 20, nil, func(text string) { l.username = text }). AddPasswordField("Password", "", 20, '*', func(text string) { l.password = text }). AddButton("Login", l.onFormLogin). AddButton("Quit", func() { l.exitFunc() }) form.SetBorder(true).SetTitle(" Login ").SetTitleAlign(tview.AlignCenter) width := 50 height := 20 wrapper := tview.NewFlex(). AddItem(nil, 0, 1, false). AddItem(tview.NewFlex().SetDirection(tview.FlexRow). AddItem(nil, 0, 1, false). AddItem(form, height, 1, true). AddItem(nil, 0, 1, false), width, 1, true). AddItem(nil, 0, 1, false) l.view = wrapper l.form = form l.GetView().Focus(func(p tview.Primitive) {}) form.SetFocus(0) return l } func (l *login) Update() { }