views.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. app.MainFlex = tview.NewFlex().
  59. AddItem(leftFlex, 0, 1, false).
  60. AddItem(rightFlex, 0, 4, false)
  61. return app.MainFlex
  62. }
  63. func NewLoginForm(mfa bool) *tview.Form {
  64. loginForm := tview.NewForm()
  65. loginForm.
  66. SetButtonsAlign(tview.AlignCenter).
  67. SetBorder(true).
  68. SetBorderPadding(0, 0, 1, 0)
  69. if mfa {
  70. loginForm.AddPasswordField("MFA Code (optional)", "", 0, 0, nil)
  71. } else {
  72. loginForm.
  73. AddInputField("Email", "", 0, nil, nil).
  74. AddPasswordField("Password", "", 0, 0, nil)
  75. }
  76. return loginForm
  77. }