create LoginDialog
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user