using System; using JetBrains.Annotations; using Unity.Cloud.Collaborate.Assets; using Unity.Cloud.Collaborate.UserInterface; using Unity.Cloud.Collaborate.Utilities; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; namespace Unity.Cloud.Collaborate.Components { internal class ChangesGroupHeader : VisualElement { public const string UssClassName = "changes-group-header"; public const string NameUssClassName = UssClassName + "__name"; public const string OverflowButtonUssClassName = UssClassName + "__overflow-button"; static readonly string k_LayoutPath = $"{CollaborateWindow.LayoutPath}/{nameof(ChangesGroupHeader)}.uxml"; static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(ChangesGroupHeader)}.uss"; readonly Label m_GroupName; readonly IconButton m_OverflowButton; public event Action<float, float> OnOverflowButtonClicked; public ChangesGroupHeader() { // Get the layout and style sheet AddToClassList(UssClassName); AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(k_LayoutPath).CloneTree(this); styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>(k_StylePath)); // Initialise fields m_GroupName = this.Q<Label>(className: NameUssClassName); m_OverflowButton = this.Q<IconButton>(className: OverflowButtonUssClassName); // Wire up overflow button m_OverflowButton.Clicked += TriggerOverflowMenu; } public void SetEnableOverflowMenu(bool enable) { if (enable) { m_OverflowButton.RemoveFromClassList(UiConstants.ussHidden); } else { m_OverflowButton.AddToClassList(UiConstants.ussHidden); } } void TriggerOverflowMenu() { var (x, y) = MenuUtilities.GetMenuPosition(m_OverflowButton, MenuUtilities.AnchorPoint.BottomRight); OnOverflowButtonClicked?.Invoke(x, y); } public void UpdateGroupName(string text) { m_GroupName.text = text; } [UsedImplicitly] public new class UxmlFactory : UxmlFactory<ChangesGroupHeader> { } } }