main_flex.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package main
  2. import (
  3. "github.com/ayn2op/discordo/internal/config"
  4. "github.com/gdamore/tcell/v2"
  5. "github.com/rivo/tview"
  6. )
  7. type MainFlex struct {
  8. *tview.Flex
  9. guildsTree *GuildsTree
  10. messagesText *MessagesText
  11. messageInput *MessageInput
  12. }
  13. func newMainFlex() *MainFlex {
  14. mf := &MainFlex{
  15. Flex: tview.NewFlex(),
  16. guildsTree: newGuildsTree(),
  17. messagesText: newMessagesText(),
  18. messageInput: newMessageInput(),
  19. }
  20. right := tview.NewFlex()
  21. right.SetDirection(tview.FlexRow)
  22. right.AddItem(mf.messagesText, 0, 1, false)
  23. right.AddItem(mf.messageInput, 3, 1, false)
  24. // The guilds tree is always focused first at start-up.
  25. mf.AddItem(mf.guildsTree, 0, 1, true)
  26. mf.AddItem(right, 0, 4, false)
  27. mf.SetInputCapture(mf.onInputCapture)
  28. return mf
  29. }
  30. func (mf *MainFlex) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
  31. switch event.Name() {
  32. case config.Current.Keys.GuildsTree.Focus:
  33. app.SetFocus(mf.guildsTree)
  34. return nil
  35. case config.Current.Keys.MessagesText.Focus:
  36. app.SetFocus(mf.messagesText)
  37. return nil
  38. case config.Current.Keys.MessageInput.Focus:
  39. app.SetFocus(mf.messageInput)
  40. return nil
  41. }
  42. return event
  43. }