main_flex.go 1.0 KB

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