util.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package ui
  2. import (
  3. "github.com/ayn2op/discordo/internal/config"
  4. "github.com/ayn2op/tview"
  5. )
  6. // ConfigureBox configures the provided box according to the provided theme.
  7. func ConfigureBox(box *tview.Box, cfg *config.Theme) *tview.Box {
  8. border := cfg.Border
  9. title := cfg.Title
  10. normalBorderStyle, activeBorderStyle := border.NormalStyle.Style, border.ActiveStyle.Style
  11. normalBorderSet, activeBorderSet := border.NormalSet.BorderSet, border.ActiveSet.BorderSet
  12. normalTitleStyle, activeTitleStyle := title.NormalStyle.Style, title.ActiveStyle.Style
  13. p := border.Padding
  14. box.
  15. SetBorderStyle(normalBorderStyle).
  16. SetBorderSet(normalBorderSet).
  17. SetBorderPadding(p[0], p[1], p[2], p[3]).
  18. SetTitleStyle(normalTitleStyle).
  19. SetTitleAlignment(title.Alignment.Alignment).
  20. SetBlurFunc(func() {
  21. box.
  22. SetBorderStyle(normalBorderStyle).
  23. SetBorderSet(normalBorderSet)
  24. box.SetTitleStyle(normalTitleStyle)
  25. }).
  26. SetFocusFunc(func() {
  27. box.
  28. SetBorderStyle(activeBorderStyle).
  29. SetBorderSet(activeBorderSet)
  30. box.SetTitleStyle(activeTitleStyle)
  31. })
  32. if border.Enabled {
  33. box.SetBorders(tview.BordersAll)
  34. }
  35. return box
  36. }
  37. // Centered creates a new grid with provided primitive aligned in the center.
  38. func Centered(p tview.Primitive, width, height int) tview.Primitive {
  39. return tview.NewGrid().
  40. SetColumns(0, width, 0).
  41. SetRows(0, height, 0).
  42. AddItem(p, 1, 1, 1, 1, 0, 0, true)
  43. }