views.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. SetTitleAlign(tview.AlignLeft).
  38. SetBorder(true).
  39. SetBorderPadding(0, 0, 1, 1)
  40. app.MessageInputField.
  41. SetPlaceholder("Message...").
  42. SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor).
  43. SetPlaceholderStyle(tcell.StyleDefault.Background(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.
  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. }