create LoginDialog

This commit is contained in:
Drew Weymouth
2023-02-11 16:50:48 -08:00
parent 0e8950f0fc
commit e85f0301e9
+66
View File
@@ -0,0 +1,66 @@
package dialogs
import (
"supersonic/backend"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
)
type LoginDialog struct {
widget.BaseWidget
OnSubmit func(server *backend.ServerConfig, password string)
servers []*backend.ServerConfig
serverSelect *widget.Select
passField *widget.Entry
container *fyne.Container
}
var _ fyne.Widget = (*LoginDialog)(nil)
func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
l := &LoginDialog{servers: servers}
l.ExtendBaseWidget(l)
titleLabel := widget.NewLabel("Login to Server")
titleLabel.TextStyle.Bold = true
serverNames := make([]string, len(servers))
for i, s := range servers {
serverNames[i] = s.Nickname
}
l.serverSelect = widget.NewSelect(serverNames, func(_ string) {})
l.serverSelect.SetSelectedIndex(0)
l.passField = widget.NewPasswordEntry()
okBtn := widget.NewButton("OK", l.onSubmit)
l.container = container.NewVBox(
container.NewHBox(layout.NewSpacer(), titleLabel, layout.NewSpacer()),
container.New(layout.NewFormLayout(),
widget.NewLabel("Server"),
l.serverSelect,
widget.NewLabel("Password"),
l.passField),
widget.NewSeparator(),
container.NewHBox(layout.NewSpacer(), okBtn),
)
return l
}
func (l *LoginDialog) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(l.container)
}
func (l *LoginDialog) MinSize() fyne.Size {
l.ExtendBaseWidget(l)
return fyne.NewSize(300, l.container.MinSize().Height)
}
func (l *LoginDialog) onSubmit() {
if l.OnSubmit != nil {
l.OnSubmit(l.servers[l.serverSelect.SelectedIndex()], l.passField.Text)
}
}