mirror of https://github.com/mum4k/termdash.git
Complete demo of a text input form with keyboard navigation.
This commit is contained in:
parent
d30bc47245
commit
ba6224f5ae
|
@ -35,6 +35,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
#### Text input form functionality with keyboard navigation
|
||||||
|
|
||||||
|
- added a new `formdemo` that demonstrates the text input form with keyboard
|
||||||
|
navigation.
|
||||||
|
|
||||||
#### Infrastructure changes
|
#### Infrastructure changes
|
||||||
|
|
||||||
- `container` now allows users to configure keyboard keys that move focus to
|
- `container` now allows users to configure keyboard keys that move focus to
|
||||||
|
|
|
@ -30,6 +30,7 @@ import (
|
||||||
"github.com/mum4k/termdash/linestyle"
|
"github.com/mum4k/termdash/linestyle"
|
||||||
"github.com/mum4k/termdash/terminal/tcell"
|
"github.com/mum4k/termdash/terminal/tcell"
|
||||||
"github.com/mum4k/termdash/widgets/button"
|
"github.com/mum4k/termdash/widgets/button"
|
||||||
|
"github.com/mum4k/termdash/widgets/text"
|
||||||
"github.com/mum4k/termdash/widgets/textinput"
|
"github.com/mum4k/termdash/widgets/textinput"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -113,9 +114,7 @@ func newForm(cancel context.CancelFunc) (*form, error) {
|
||||||
textinput.ExclusiveKeyboardOnFocus(),
|
textinput.ExclusiveKeyboardOnFocus(),
|
||||||
)
|
)
|
||||||
|
|
||||||
submitB, err := button.NewFromChunks(buttonChunks("Submit"), func() error {
|
submitB, err := button.NewFromChunks(buttonChunks("Submit"), nil,
|
||||||
return nil
|
|
||||||
},
|
|
||||||
button.Key(keyboard.KeyEnter),
|
button.Key(keyboard.KeyEnter),
|
||||||
button.GlobalKeys('s', 'S'),
|
button.GlobalKeys('s', 'S'),
|
||||||
button.DisableShadow(),
|
button.DisableShadow(),
|
||||||
|
@ -228,6 +227,68 @@ func formLayout(c *container.Container, f *form) error {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// submitLayout updates the container into a layout that displays the submitted data.
|
||||||
|
// The cancel argument is a function that terminates Termdash when called.
|
||||||
|
func submitLayout(c *container.Container, f *form, cancel context.CancelFunc) error {
|
||||||
|
t, err := text.New()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := t.Write("Submitted data:\n\n"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := t.Write(fmt.Sprintf("Username: %s\n", f.userInput.Read())); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := t.Write(fmt.Sprintf("UID: %s\n", f.uidInput.Read())); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := t.Write(fmt.Sprintf("GID: %s\n", f.gidInput.Read())); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := t.Write(fmt.Sprintf("Home: %s\n", f.homeInput.Read())); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
okB, err := button.NewFromChunks(buttonChunks("OK"), func() error {
|
||||||
|
cancel()
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
button.FillColor(cell.ColorNumber(220)),
|
||||||
|
button.Key(keyboard.KeyEnter),
|
||||||
|
button.GlobalKeys('o', 'O'),
|
||||||
|
button.DisableShadow(),
|
||||||
|
button.Height(1),
|
||||||
|
button.TextHorizontalPadding(0),
|
||||||
|
button.FillColor(cell.ColorBlack),
|
||||||
|
button.FocusedFillColor(cell.ColorNumber(117)),
|
||||||
|
button.PressedFillColor(cell.ColorNumber(220)),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Update("root",
|
||||||
|
container.SplitHorizontal(
|
||||||
|
container.Top(
|
||||||
|
container.SplitVertical(
|
||||||
|
container.Left(),
|
||||||
|
container.Right(
|
||||||
|
container.PlaceWidget(t),
|
||||||
|
),
|
||||||
|
container.SplitPercent(33),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
container.Bottom(
|
||||||
|
container.Focused(),
|
||||||
|
container.PlaceWidget(okB),
|
||||||
|
),
|
||||||
|
container.SplitFixed(7),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
t, err := tcell.New()
|
t, err := tcell.New()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -245,6 +306,9 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
f.submitB.SetCallback(func() error {
|
||||||
|
return submitLayout(c, f, cancel)
|
||||||
|
})
|
||||||
if err := formLayout(c, f); err != nil {
|
if err := formLayout(c, f); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue