123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- using UnityEditor;
- using UnityEngine;
-
- using Codice.CM.Common;
- using PlasticGui;
- using PlasticGui.Gluon;
- using PlasticGui.WorkspaceWindow.Topbar;
- using PlasticGui.WorkspaceWindow.PendingChanges;
-
- using GluonShowIncomingChanges = PlasticGui.Gluon.WorkspaceWindow.ShowIncomingChanges;
-
- namespace Unity.PlasticSCM.Editor.UI.StatusBar
- {
- interface IIncomingChangesNotifier
- {
- bool HasNotification { get; }
- IncomingChangesNotification Notification { get; }
- }
-
- internal class StatusBar
- {
- internal NotificationBar NotificationBar { get; private set; }
-
- internal StatusBar()
- {
- mCooldownNotificationClearAction = new CooldownWindowDelayer(
- DelayedClearNotification,
- UnityConstants.NOTIFICATION_CLEAR_INTERVAL);
-
- NotificationBar = new NotificationBar();
- }
-
- internal void Notify(string message, MessageType type, Texture2D image)
- {
- mNotification = new Notification(message, type, image);
- mCooldownNotificationClearAction.Ping();
- }
-
- internal void OnGUI(
- WorkspaceInfo wkInfo,
- WorkspaceWindow workspaceWindow,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonViewSwitcher,
- IIncomingChangesNotifier incomingChangesNotifier,
- bool isGluonMode)
- {
- if (NotificationBar.HasNotification &&
- NotificationBar.IsVisible)
- {
- BeginDrawBar();
- NotificationBar.OnGUI();
- EndDrawBar();
- }
-
- BeginDrawBar();
-
- if (NotificationBar.HasNotification)
- {
- DrawNotificationAvailablePanel(NotificationBar);
- }
-
- if (incomingChangesNotifier.HasNotification)
- {
- DrawIncomingChangesNotification(
- wkInfo,
- workspaceWindow,
- mergeViewLauncher,
- gluonViewSwitcher,
- incomingChangesNotifier.Notification,
- isGluonMode);
- }
-
- if (mNotification != null)
- DrawNotification(mNotification);
-
- GUILayout.FlexibleSpace();
-
- DrawWorkspaceStatus(workspaceWindow.WorkspaceStatus);
-
- EndDrawBar();
- }
-
- void DelayedClearNotification()
- {
- mNotification = null;
- }
-
- static void DrawNotificationAvailablePanel(
- NotificationBar notificationBar)
- {
- GUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
-
- if (GUILayout.Button(PlasticLocalization.GetString(
- notificationBar.IsVisible ?
- PlasticLocalization.Name.HideNotification :
- PlasticLocalization.Name.ShowNotification)))
- {
- notificationBar.SetVisibility(!notificationBar.IsVisible);
- }
-
- GUILayout.FlexibleSpace();
- GUILayout.EndVertical();
- }
-
- static void DrawIncomingChangesNotification(
- WorkspaceInfo wkInfo,
- WorkspaceWindow workspaceWindow,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonViewSwitcher,
- IncomingChangesNotification notification,
- bool isGluonMode)
- {
- Texture2D icon = notification.Status == PlasticNotification.Status.Conflicts ?
- Images.GetConflictedIcon() :
- Images.GetOutOfSyncIcon();
-
- DrawIcon(icon);
-
- DrawNotificationLabel(notification.InfoText);
-
- if (DrawButton(notification.ActionText, notification.TooltipText))
- {
- if (notification.HasUpdateAction)
- {
- workspaceWindow.UpdateWorkspace();
- return;
- }
-
- ShowIncomingChangesForMode(
- wkInfo,
- mergeViewLauncher,
- gluonViewSwitcher,
- isGluonMode);
- }
- }
-
- static void DrawNotification(Notification notification)
- {
- DrawIcon(notification.Image);
- DrawNotificationLabel(notification.Message);
- }
-
- static void DrawWorkspaceStatus(WorkspaceStatusString.Data status)
- {
- DrawIcon(Images.GetBranchIcon());
-
- if (status == null)
- return;
-
- DrawLabel(string.Format(
- "{0}@{1}@{2}",
- status.ObjectSpec,
- status.RepositoryName,
- status.Server));
- }
-
- static void DrawIcon(Texture2D icon)
- {
- GUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
-
- GUILayout.Label(
- icon,
- UnityStyles.StatusBar.Icon,
- GUILayout.Height(UnityConstants.STATUS_BAR_ICON_SIZE),
- GUILayout.Width(UnityConstants.STATUS_BAR_ICON_SIZE));
-
- GUILayout.FlexibleSpace();
- GUILayout.EndVertical();
- }
-
- static void DrawLabel(string label)
- {
- GUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
-
- GUILayout.Label(
- label,
- UnityStyles.StatusBar.Label);
-
- GUILayout.FlexibleSpace();
- GUILayout.EndVertical();
- }
-
- static void DrawNotificationLabel(string label)
- {
- GUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
-
- GUILayout.Label(
- label,
- UnityStyles.StatusBar.NotificationLabel);
-
- GUILayout.FlexibleSpace();
- GUILayout.EndVertical();
- }
-
- static bool DrawButton(string label, string tooltip)
- {
- GUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
-
- bool buttonClicked = GUILayout.Button(
- new GUIContent(label, tooltip),
- UnityStyles.StatusBar.Button);
-
- GUILayout.FlexibleSpace();
- GUILayout.EndVertical();
-
- return buttonClicked;
- }
-
- static void ShowIncomingChangesForMode(
- WorkspaceInfo workspaceInfo,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonSwitcher,
- bool isGluonMode)
- {
- if (isGluonMode)
- {
- GluonShowIncomingChanges.FromNotificationBar(
- workspaceInfo, gluonSwitcher);
- return;
- }
-
- ShowIncomingChanges.FromNotificationBar(
- workspaceInfo, mergeViewLauncher);
- }
-
- static void BeginDrawBar()
- {
- EditorGUILayout.BeginVertical(
- GetBarStyle(),
- GUILayout.Height(UnityConstants.STATUS_BAR_HEIGHT));
- GUILayout.FlexibleSpace();
- EditorGUILayout.BeginHorizontal();
- }
-
- static void EndDrawBar()
- {
- EditorGUILayout.EndHorizontal();
- GUILayout.FlexibleSpace();
- EditorGUILayout.EndVertical();
- }
-
- static GUIStyle GetBarStyle()
- {
- if (sBarTexture == null)
- sBarTexture = new Texture2D(1, 1);
-
- if (sBarStyle == null)
- sBarStyle = new GUIStyle();
-
- sBarTexture.SetPixel(0, 0, UnityStyles.Colors.BackgroundBar);
- sBarTexture.Apply();
- sBarStyle.normal.background = sBarTexture;
-
- return sBarStyle;
- }
-
- class Notification
- {
- internal string Message { get; private set; }
- internal MessageType MessageType { get; private set; }
- internal Texture2D Image { get; private set; }
-
- internal Notification(string message, MessageType messageType, Texture2D image)
- {
- Message = message;
- MessageType = messageType;
- Image = image;
- }
- }
-
- Notification mNotification;
-
- readonly CooldownWindowDelayer mCooldownNotificationClearAction;
-
- static Texture2D sBarTexture;
- static GUIStyle sBarStyle;
- }
- }
|