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