util.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package ui
  2. import (
  3. "github.com/ayn2op/discordo/internal/config"
  4. "github.com/ayn2op/tview"
  5. "github.com/diamondburned/arikawa/v3/discord"
  6. )
  7. // ConfigureBox configures the provided box according to the provided theme.
  8. func ConfigureBox(box *tview.Box, cfg *config.Theme) *tview.Box {
  9. border := cfg.Border
  10. title := cfg.Title
  11. normalBorderStyle, activeBorderStyle := border.NormalStyle.Style, border.ActiveStyle.Style
  12. normalTitleStyle, activeTitleStyle := title.NormalStyle.Style, title.ActiveStyle.Style
  13. p := border.Padding
  14. box.
  15. SetBorderStyle(normalBorderStyle).
  16. SetBorderSet(border.Set.BorderSet).
  17. SetBorderPadding(p[0], p[1], p[2], p[3]).
  18. SetTitleStyle(normalTitleStyle).
  19. SetTitleAlignment(title.Alignment.Alignment).
  20. SetFocusFunc(func() {
  21. box.SetBorderStyle(activeBorderStyle)
  22. box.SetTitleStyle(activeTitleStyle)
  23. }).
  24. SetBlurFunc(func() {
  25. box.SetBorderStyle(normalBorderStyle)
  26. box.SetTitleStyle(normalTitleStyle)
  27. })
  28. if border.Enabled {
  29. box.SetBorders(tview.BordersAll)
  30. }
  31. return box
  32. }
  33. // Centered creates a new grid with provided primitive aligned in the center.
  34. func Centered(p tview.Primitive, width, height int) tview.Primitive {
  35. return tview.NewGrid().
  36. SetColumns(0, width, 0).
  37. SetRows(0, height, 0).
  38. AddItem(p, 1, 1, 1, 1, 0, 0, true)
  39. }
  40. func PreferredMemberName(m *discord.Member, theme config.Theme) string {
  41. if theme.PreferNicknames && m.Nick != "" {
  42. return m.Nick
  43. }
  44. if theme.PreferDisplayNames && m.User.DisplayName != "" {
  45. return m.User.DisplayName
  46. }
  47. return m.User.Username
  48. }
  49. func PreferredName(u discord.User, theme config.Theme) string {
  50. if theme.PreferDisplayNames && u.DisplayName != "" {
  51. return u.DisplayName
  52. }
  53. return u.Username
  54. }