| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- using UnityEditor;
- using UnityEngine;
- using Codice.CM.Common;
- using PlasticGui;
- using PlasticGui.Gluon;
- using PlasticGui.WorkspaceWindow.PendingChanges;
- using Unity.PlasticSCM.Editor.UI;
- using GluonShowIncomingChanges = PlasticGui.Gluon.WorkspaceWindow.ShowIncomingChanges;
- namespace Unity.PlasticSCM.Editor
- {
- internal class NotificationPanelData
- {
- internal enum StyleType
- {
- None,
- Red,
- Green,
- }
- internal bool HasUpdateAction;
- internal string InfoText;
- internal string ActionText;
- internal string TooltipText;
- internal StyleType NotificationStyle;
- internal void Clear()
- {
- HasUpdateAction = false;
- InfoText = string.Empty;
- ActionText = string.Empty;
- TooltipText = string.Empty;
- NotificationStyle = StyleType.None;
- }
- }
- interface IIncomingChangesNotificationPanel
- {
- bool IsVisible
- {
- get;
- }
- NotificationPanelData Data
- {
- get;
- }
- }
- internal static class DrawIncomingChangesNotificationPanel
- {
- internal static void ForMode(
- WorkspaceInfo workspaceInfo,
- WorkspaceWindow workspaceWindow,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonSwitcher,
- bool isGluonMode,
- bool isVisible,
- NotificationPanelData notificationPanelData)
- {
- if (!isVisible)
- return;
- GUIContent labelContent = new GUIContent(
- notificationPanelData.InfoText, notificationPanelData.TooltipText);
- GUIContent buttonContent = new GUIContent(
- notificationPanelData.ActionText, notificationPanelData.TooltipText);
- float panelWidth = GetPanelWidth(
- labelContent, buttonContent,
- UnityStyles.Notification.Label, EditorStyles.miniButton);
- EditorGUILayout.BeginHorizontal(
- GetStyle(notificationPanelData.NotificationStyle),
- GUILayout.Width(panelWidth));
- GUILayout.Label(labelContent, UnityStyles.Notification.Label);
- DoActionButton(
- workspaceInfo, workspaceWindow,
- mergeViewLauncher, gluonSwitcher, isGluonMode,
- notificationPanelData.HasUpdateAction,
- buttonContent, EditorStyles.miniButton);
- EditorGUILayout.EndHorizontal();
- }
- static void DoActionButton(
- WorkspaceInfo workspaceInfo,
- WorkspaceWindow workspaceWindow,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonSwitcher,
- bool isGluonMode,
- bool isUpdateAction,
- GUIContent buttonContent,
- GUIStyle buttonStyle)
- {
- if (!GUILayout.Button(
- buttonContent, buttonStyle,
- GUILayout.ExpandHeight(true),
- GUILayout.MinWidth(40)))
- return;
- if (isUpdateAction)
- {
- workspaceWindow.UpdateWorkspace();
- return;
- }
- ShowIncomingChangesForMode(
- workspaceInfo, mergeViewLauncher,
- gluonSwitcher, isGluonMode);
- }
- static void ShowIncomingChangesForMode(
- WorkspaceInfo workspaceInfo,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonSwitcher,
- bool isGluonMode)
- {
- if (isGluonMode)
- {
- GluonShowIncomingChanges.FromNotificationBar(
- workspaceInfo, gluonSwitcher);
- return;
- }
- ShowIncomingChanges.FromNotificationBar(
- workspaceInfo, mergeViewLauncher);
- }
- static GUIStyle GetStyle(
- NotificationPanelData.StyleType styleType)
- {
- if (styleType == NotificationPanelData.StyleType.Red)
- return UnityStyles.Notification.RedNotification;
- return UnityStyles.Notification.GreenNotification;
- }
- static float GetPanelWidth(
- GUIContent labelContent, GUIContent buttonContent,
- GUIStyle labelStyle, GUIStyle buttonStyle)
- {
- return labelStyle.CalcSize(labelContent).x +
- buttonStyle.CalcSize(buttonContent).x + 12;
- }
- }
- }
|