widgets.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package ui
  2. import (
  3. "github.com/gdamore/tcell/v2"
  4. "github.com/rivo/tview"
  5. )
  6. func NewMainFlex(app *App) *tview.Flex {
  7. app.SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
  8. return onAppInputCapture(app, e)
  9. })
  10. app.GuildsList.
  11. ShowSecondaryText(false).
  12. SetSelectedFunc(func(guildIdx int, _ string, _ string, _ rune) {
  13. onGuildsListSelected(app, guildIdx)
  14. }).
  15. SetTitle("Guilds").
  16. SetTitleAlign(tview.AlignLeft).
  17. SetBorder(true).
  18. SetBorderPadding(0, 0, 1, 1)
  19. app.ChannelsTreeView.
  20. SetTopLevel(1).
  21. SetRoot(tview.NewTreeNode("")).
  22. SetSelectedFunc(func(n *tview.TreeNode) {
  23. onChannelsTreeViewSelected(app, n)
  24. }).
  25. SetTitle("Channels").
  26. SetTitleAlign(tview.AlignLeft).
  27. SetBorder(true).
  28. SetBorderPadding(0, 0, 1, 1)
  29. app.MessagesTextView.
  30. SetRegions(true).
  31. SetDynamicColors(true).
  32. SetWordWrap(true).
  33. SetChangedFunc(func() { app.Draw() }).
  34. SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
  35. return onMessagesTextViewInputCapture(app, e)
  36. }).
  37. SetBorder(true).
  38. SetBorderPadding(0, 0, 1, 1)
  39. app.MessageInputField.
  40. SetPlaceholder("Message...").
  41. SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor).
  42. SetPlaceholderStyle(tcell.StyleDefault.Background(tview.Styles.PrimitiveBackgroundColor)).
  43. SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
  44. return onMessageInputFieldInputCapture(app, e)
  45. }).
  46. SetTitleAlign(tview.AlignLeft).
  47. SetBorder(true).
  48. SetBorderPadding(0, 0, 1, 0)
  49. leftFlex := tview.NewFlex().
  50. SetDirection(tview.FlexRow).
  51. AddItem(app.GuildsList, 10, 1, false).
  52. AddItem(app.ChannelsTreeView, 0, 1, false)
  53. rightFlex := tview.NewFlex().
  54. SetDirection(tview.FlexRow).
  55. AddItem(app.MessagesTextView, 0, 1, false).
  56. AddItem(app.MessageInputField, 3, 1, false)
  57. app.MainFlex.
  58. AddItem(leftFlex, 0, 1, false).
  59. AddItem(rightFlex, 0, 4, false)
  60. return app.MainFlex
  61. }
  62. func NewLoginForm(mfa bool) *tview.Form {
  63. loginForm := tview.NewForm()
  64. loginForm.
  65. SetButtonsAlign(tview.AlignCenter).
  66. SetBorder(true).
  67. SetBorderPadding(0, 0, 1, 0)
  68. if mfa {
  69. loginForm.AddPasswordField("MFA Code (optional)", "", 0, 0, nil)
  70. } else {
  71. loginForm.
  72. AddInputField("Email", "", 0, nil, nil).
  73. AddPasswordField("Password", "", 0, 0, nil)
  74. }
  75. return loginForm
  76. }