Paginator.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using JetBrains.Annotations;
  3. using Unity.Cloud.Collaborate.UserInterface;
  4. using UnityEditor;
  5. using UnityEngine.UIElements;
  6. namespace Unity.Cloud.Collaborate.Components
  7. {
  8. internal class Paginator : VisualElement
  9. {
  10. public const string UssClassName = "paginator";
  11. public const string PageTextUssClassName = UssClassName + "__page-text";
  12. public const string BackButtonUssClassName = UssClassName + "__back-button";
  13. public const string ForwardsButtonUssClassName = UssClassName + "__forwards-button";
  14. static readonly string k_LayoutPath = $"{CollaborateWindow.LayoutPath}/{nameof(Paginator)}.uxml";
  15. static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(Paginator)}.uss";
  16. public const int MoveBackwards = -1;
  17. public const int MoveForwards = 1;
  18. public event Action<int> ClickedMovePage;
  19. readonly Label m_PageText;
  20. readonly Button m_BackButton;
  21. readonly Button m_ForwardsButton;
  22. public Paginator()
  23. {
  24. // Get the layout
  25. AddToClassList(UssClassName);
  26. AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(k_LayoutPath).CloneTree(this);
  27. styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>(k_StylePath));
  28. m_PageText = this.Q<Label>(className: PageTextUssClassName);
  29. m_BackButton = this.Q<Button>(className: BackButtonUssClassName);
  30. m_ForwardsButton = this.Q<Button>(className: ForwardsButtonUssClassName);
  31. m_BackButton.text = "<";
  32. m_ForwardsButton.text = ">";
  33. m_BackButton.clickable.clicked += () => ClickedMovePage?.Invoke(MoveBackwards);
  34. m_ForwardsButton.clickable.clicked += () => ClickedMovePage?.Invoke(MoveForwards);
  35. }
  36. public void SetPage(int page, int maxPage)
  37. {
  38. m_PageText.text = $"Page {page + 1} of {maxPage + 1}";
  39. m_BackButton.SetEnabled(page != 0);
  40. m_ForwardsButton.SetEnabled(page != maxPage);
  41. }
  42. [UsedImplicitly]
  43. public new class UxmlFactory : UxmlFactory<Paginator> { }
  44. }
  45. }