ChangesGroupHeader.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using JetBrains.Annotations;
  3. using Unity.Cloud.Collaborate.Assets;
  4. using Unity.Cloud.Collaborate.UserInterface;
  5. using Unity.Cloud.Collaborate.Utilities;
  6. using UnityEditor;
  7. using UnityEngine;
  8. using UnityEngine.UIElements;
  9. namespace Unity.Cloud.Collaborate.Components
  10. {
  11. internal class ChangesGroupHeader : VisualElement
  12. {
  13. public const string UssClassName = "changes-group-header";
  14. public const string NameUssClassName = UssClassName + "__name";
  15. public const string OverflowButtonUssClassName = UssClassName + "__overflow-button";
  16. static readonly string k_LayoutPath = $"{CollaborateWindow.LayoutPath}/{nameof(ChangesGroupHeader)}.uxml";
  17. static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(ChangesGroupHeader)}.uss";
  18. readonly Label m_GroupName;
  19. readonly IconButton m_OverflowButton;
  20. public event Action<float, float> OnOverflowButtonClicked;
  21. public ChangesGroupHeader()
  22. {
  23. // Get the layout and style sheet
  24. AddToClassList(UssClassName);
  25. AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(k_LayoutPath).CloneTree(this);
  26. styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>(k_StylePath));
  27. // Initialise fields
  28. m_GroupName = this.Q<Label>(className: NameUssClassName);
  29. m_OverflowButton = this.Q<IconButton>(className: OverflowButtonUssClassName);
  30. // Wire up overflow button
  31. m_OverflowButton.Clicked += TriggerOverflowMenu;
  32. }
  33. public void SetEnableOverflowMenu(bool enable)
  34. {
  35. if (enable)
  36. {
  37. m_OverflowButton.RemoveFromClassList(UiConstants.ussHidden);
  38. }
  39. else
  40. {
  41. m_OverflowButton.AddToClassList(UiConstants.ussHidden);
  42. }
  43. }
  44. void TriggerOverflowMenu()
  45. {
  46. var (x, y) = MenuUtilities.GetMenuPosition(m_OverflowButton, MenuUtilities.AnchorPoint.BottomRight);
  47. OnOverflowButtonClicked?.Invoke(x, y);
  48. }
  49. public void UpdateGroupName(string text)
  50. {
  51. m_GroupName.text = text;
  52. }
  53. [UsedImplicitly]
  54. public new class UxmlFactory : UxmlFactory<ChangesGroupHeader> { }
  55. }
  56. }