views.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. AddItem("Direct Messages", "", 0, nil).
  13. SetSelectedFunc(func(guildIdx int, _ string, _ string, _ rune) {
  14. onGuildsListSelected(app, guildIdx)
  15. }).
  16. SetTitle("Guilds").
  17. SetTitleAlign(tview.AlignLeft).
  18. SetBorder(true).
  19. SetBorderPadding(0, 0, 1, 1)
  20. app.ChannelsTreeView.
  21. SetTopLevel(1).
  22. SetRoot(tview.NewTreeNode("")).
  23. SetSelectedFunc(func(n *tview.TreeNode) {
  24. onChannelsTreeViewSelected(app, n)
  25. }).
  26. SetTitle("Channels").
  27. SetTitleAlign(tview.AlignLeft).
  28. SetBorder(true).
  29. SetBorderPadding(0, 0, 1, 1)
  30. app.MessagesTextView.
  31. SetRegions(true).
  32. SetDynamicColors(true).
  33. SetWordWrap(true).
  34. SetChangedFunc(func() { app.Draw() }).
  35. SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
  36. return onMessagesTextViewInputCapture(app, e)
  37. }).
  38. SetTitleAlign(tview.AlignLeft).
  39. SetBorder(true).
  40. SetBorderPadding(0, 0, 1, 1)
  41. app.MessageInputField.
  42. SetPlaceholder("Message...").
  43. SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor).
  44. SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
  45. return onMessageInputFieldInputCapture(app, e)
  46. }).
  47. SetTitleAlign(tview.AlignLeft).
  48. SetBorder(true).
  49. SetBorderPadding(0, 0, 1, 0)
  50. leftFlex := tview.NewFlex().
  51. SetDirection(tview.FlexRow).
  52. AddItem(app.GuildsList, 10, 1, false).
  53. AddItem(app.ChannelsTreeView, 0, 1, false)
  54. rightFlex := tview.NewFlex().
  55. SetDirection(tview.FlexRow).
  56. AddItem(app.MessagesTextView, 0, 1, false).
  57. AddItem(app.MessageInputField, 3, 1, false)
  58. return tview.NewFlex().
  59. AddItem(leftFlex, 0, 1, false).
  60. AddItem(rightFlex, 0, 4, false)
  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. }