Net-Game/Library/PackageCache/com.unity.collab-proxy@50ac96531b63/Editor/Developer/IncomingChangesNotification.cs
2025-03-28 08:33:16 -04:00

123 lines
3.7 KiB
C#

using UnityEngine;
using Codice.CM.Common;
using PlasticGui.WorkspaceWindow;
using PlasticGui;
using Unity.PlasticSCM.Editor.UI.StatusBar;
using PlasticGui.WorkspaceWindow.PendingChanges;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor.Developer
{
internal class IncomingChangesNotification :
StatusBar.IIncomingChangesNotification,
CheckIncomingChanges.IUpdateIncomingChanges
{
internal IncomingChangesNotification(
WorkspaceInfo wkInfo,
IMergeViewLauncher mergeViewLauncher,
PlasticWindow plasticWindow)
{
mWkInfo = wkInfo;
mMergeViewLauncher = mergeViewLauncher;
mPlasticWindow = plasticWindow;
}
internal void SetWorkspaceWindow(WorkspaceWindow workspaceWindow)
{
mWorkspaceWindow = workspaceWindow;
}
bool StatusBar.IIncomingChangesNotification.HasNotification
{
get { return mHasNotification; }
}
void StatusBar.IIncomingChangesNotification.OnGUI()
{
Texture2D icon = mData.Status == PlasticNotification.Status.Conflicts ?
Images.GetConflictedIcon() :
Images.GetOutOfSyncIcon();
StatusBar.DrawIcon(icon);
StatusBar.DrawNotificationLabel(new GUIContent(mData.InfoText));
if (StatusBar.DrawButton(new GUIContent(mData.ActionText, mData.TooltipText)))
{
if (mData.HasUpdateAction)
{
mWorkspaceWindow.UpdateWorkspace();
return;
}
ShowIncomingChanges.FromNotificationBar(mWkInfo, mMergeViewLauncher);
}
}
void CheckIncomingChanges.IUpdateIncomingChanges.Hide(WorkspaceInfo wkInfo)
{
if (!wkInfo.Equals(mWkInfo))
return;
PlasticPlugin.SetNotificationStatus(
mPlasticWindow,
PlasticNotification.Status.None);
mData.Clear();
mHasNotification = false;
mPlasticWindow.Repaint();
}
void CheckIncomingChanges.IUpdateIncomingChanges.Show(
WorkspaceInfo wkInfo,
string infoText,
string actionText,
string tooltipText,
CheckIncomingChanges.Severity severity,
CheckIncomingChanges.Action action)
{
if (!wkInfo.Equals(mWkInfo))
return;
PlasticNotification.Status status = GetStatusFromSeverity(severity);
mData.UpdateData(
infoText,
actionText,
tooltipText,
action == CheckIncomingChanges.Action.Update,
status);
mHasNotification = true;
PlasticPlugin.SetNotificationStatus(
mPlasticWindow,
status);
mPlasticWindow.Repaint();
}
static PlasticNotification.Status GetStatusFromSeverity(
CheckIncomingChanges.Severity severity)
{
if (severity == CheckIncomingChanges.Severity.Info)
return PlasticNotification.Status.IncomingChanges;
if (severity == CheckIncomingChanges.Severity.Warning)
return PlasticNotification.Status.Conflicts;
return PlasticNotification.Status.None;
}
bool mHasNotification;
StatusBar.IncomingChangesNotificationData mData =
new StatusBar.IncomingChangesNotificationData();
WorkspaceWindow mWorkspaceWindow;
readonly WorkspaceInfo mWkInfo;
readonly IMergeViewLauncher mMergeViewLauncher;
readonly PlasticWindow mPlasticWindow;
}
}