using UnityEditor; using UnityEngine; using PlasticGui.WorkspaceWindow; using Unity.PlasticSCM.Editor.Developer; using Unity.PlasticSCM.Editor.UI; namespace Unity.PlasticSCM.Editor.Topbar { internal class NotificationsArea { internal interface IIncomingChangesNotification { bool HasNotification { get; } void OnGUI(); void Show( string infoText, string actionText, string tooltipText, bool hasUpdateAction, UVCSNotificationStatus.IncomingChangesStatus status); void Hide(); } internal interface IShelvedChangesNotification : CheckShelvedChanges.IUpdateShelvedChangesNotification { bool HasNotification { get; } void SetWorkspaceWindow( WorkspaceWindow workspaceWindow); void SetShelvedChangesUpdater( IShelvedChangesUpdater shelvedChangesUpdater); void OnGUI(); } internal class IncomingChangesNotificationData { internal string InfoText { get; private set; } internal string ActionText { get; private set; } internal string TooltipText { get; private set; } internal bool HasUpdateAction { get; private set; } internal UVCSNotificationStatus.IncomingChangesStatus Status { get; private set; } internal void UpdateData( string infoText, string actionText, string tooltipText, bool hasUpdateAction, UVCSNotificationStatus.IncomingChangesStatus status) { InfoText = infoText; ActionText = actionText; TooltipText = tooltipText; HasUpdateAction = hasUpdateAction; Status = status; } internal void Clear() { InfoText = string.Empty; ActionText = string.Empty; TooltipText = string.Empty; HasUpdateAction = false; Status = UVCSNotificationStatus.IncomingChangesStatus.None; } } internal NotificationsArea( WorkspaceWindow workspaceWindow, IIncomingChangesNotification incomingChangesNotification, IShelvedChangesNotification shelvedChangesNotification) { mIncomingChangesNotification = incomingChangesNotification; mShelvedChangesNotification = shelvedChangesNotification; if (incomingChangesNotification is IncomingChangesNotification) ((IncomingChangesNotification)incomingChangesNotification).SetWorkspaceWindow(workspaceWindow); shelvedChangesNotification.SetWorkspaceWindow(workspaceWindow); } internal void OnGUI() { if (mIncomingChangesNotification.HasNotification) { mIncomingChangesNotification.OnGUI(); } if (mShelvedChangesNotification.HasNotification) { if (mIncomingChangesNotification.HasNotification) EditorGUILayout.Space(10); mShelvedChangesNotification.OnGUI(); } } internal static void DrawIcon( Texture2D icon, int size = UnityConstants.STATUS_BAR_ICON_SIZE, int marginTop = 0) { GUILayout.BeginVertical(); GUILayout.FlexibleSpace(); GUILayout.Space(marginTop); GUILayout.Label( icon, UnityStyles.StatusBar.Icon, GUILayout.Height(size), GUILayout.Width(size)); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); } internal static void DrawNotification(INotificationContent notification) { GUILayout.BeginVertical(); GUILayout.FlexibleSpace(); notification.OnGUI(); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); } internal static bool DrawButton(GUIContent content) { Rect rt = GUILayoutUtility.GetRect( content, UnityStyles.Topbar.Button, GUILayout.Width(60)); return GUI.Button( rt, content, UnityStyles.Topbar.Button); } IIncomingChangesNotification mIncomingChangesNotification; IShelvedChangesNotification mShelvedChangesNotification; } }