123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- using System;
- using JetBrains.Annotations;
- using Unity.Cloud.Collaborate.Assets;
- using Unity.Cloud.Collaborate.Components.Menus;
- using Unity.Cloud.Collaborate.UserInterface;
- using Unity.Cloud.Collaborate.Utilities;
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.UIElements;
- namespace Unity.Cloud.Collaborate.Components
- {
- [UsedImplicitly]
- internal class TopBar : VisualElement
- {
- public const string UssClassName = "top-bar";
- public const string IconUssClassName = UssClassName + "__icon";
- public const string BranchInfoUssClassName = UssClassName + "__branch-info";
- public const string OverflowMenuUssClassName = UssClassName + "__overflow-button";
- public const string BackUssClassName = UssClassName + "__back";
- public const string BackButtonUssClassName = UssClassName + "__back-button";
- public const string BackTextUssClassName = UssClassName + "__back-text";
- static readonly string k_LayoutPath = $"{CollaborateWindow.LayoutPath}/{nameof(TopBar)}.uxml";
- static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(TopBar)}.uss";
- public event Action BackButtonClicked;
- readonly VisualElement m_Icon;
- readonly TextElement m_BranchInfo;
- readonly IconButton m_OverflowMenu;
- readonly VisualElement m_BackContainer;
- readonly IconButton m_BackButton;
- readonly TextElement m_BackText;
- [CanBeNull]
- string m_BranchName;
- public TopBar()
- {
- // Get the layout
- AddToClassList(UssClassName);
- AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(k_LayoutPath).CloneTree(this);
- styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>(k_StylePath));
- // Initialise fields
- m_Icon = this.Q<VisualElement>(className: IconUssClassName);
- m_BranchInfo = this.Q<TextElement>(className: BranchInfoUssClassName);
- m_OverflowMenu = this.Q<IconButton>(className: OverflowMenuUssClassName);
- m_BackContainer = this.Q<VisualElement>(className: BackUssClassName);
- m_BackButton = this.Q<IconButton>(className: BackButtonUssClassName);
- m_BackText = this.Q<TextElement>(className: BackTextUssClassName);
- m_OverflowMenu.Clicked += ClickableOnClicked;
- m_BackButton.Clicked += () => BackButtonClicked?.Invoke();
- HideBackNavigation();
- }
- /// <summary>
- /// Hide the current back navigation.
- /// </summary>
- public void HideBackNavigation()
- {
- m_BackContainer.AddToClassList(UiConstants.ussHidden);
- m_BackButton.SetEnabled(false);
- m_BackText.text = string.Empty;
- }
- /// <summary>
- /// Register back navigation to be made available to the user to navigate backwards in the UI.
- /// </summary>
- /// <param name="text">Destination of the back navigation</param>
- public void DisplayBackNavigation([NotNull] string text)
- {
- m_BackText.text = text;
- m_BackButton.SetEnabled(true);
- m_BackContainer.RemoveFromClassList(UiConstants.ussHidden);
- }
- void ClickableOnClicked()
- {
- var (x, y) = MenuUtilities.GetMenuPosition(m_OverflowMenu, MenuUtilities.AnchorPoint.BottomRight);
- new FloatingMenu()
- .AddEntry("Invite Teammate", OpenLinksUtility.OpenMembersLink, true)
- .SetOpenDirection(MenuUtilities.OpenDirection.DownLeft)
- .Open(x, y);
- }
- [UsedImplicitly]
- public new class UxmlFactory : UxmlFactory<TopBar> { }
- }
- }
|