A game about forced loneliness, made by TACStudios
1using UnityEngine;
2using Codice.CM.Common;
3using PlasticGui.WorkspaceWindow;
4using PlasticGui;
5using Unity.PlasticSCM.Editor.UI.StatusBar;
6using PlasticGui.WorkspaceWindow.PendingChanges;
7using Unity.PlasticSCM.Editor.UI;
8
9namespace Unity.PlasticSCM.Editor.Developer
10{
11 internal class IncomingChangesNotification :
12 StatusBar.IIncomingChangesNotification,
13 CheckIncomingChanges.IUpdateIncomingChanges
14 {
15 internal IncomingChangesNotification(
16 WorkspaceInfo wkInfo,
17 IMergeViewLauncher mergeViewLauncher,
18 PlasticWindow plasticWindow)
19 {
20 mWkInfo = wkInfo;
21 mMergeViewLauncher = mergeViewLauncher;
22 mPlasticWindow = plasticWindow;
23 }
24
25 internal void SetWorkspaceWindow(WorkspaceWindow workspaceWindow)
26 {
27 mWorkspaceWindow = workspaceWindow;
28 }
29
30 bool StatusBar.IIncomingChangesNotification.HasNotification
31 {
32 get { return mHasNotification; }
33 }
34
35 void StatusBar.IIncomingChangesNotification.OnGUI()
36 {
37 Texture2D icon = mData.Status == PlasticNotification.Status.Conflicts ?
38 Images.GetConflictedIcon() :
39 Images.GetOutOfSyncIcon();
40
41 StatusBar.DrawIcon(icon);
42
43 StatusBar.DrawNotification(new GUIContentNotification(
44 new GUIContent(mData.InfoText)));
45
46 if (StatusBar.DrawButton(new GUIContent(mData.ActionText, mData.TooltipText)))
47 {
48 if (mData.HasUpdateAction)
49 {
50 mWorkspaceWindow.UpdateWorkspace();
51 return;
52 }
53
54 ShowIncomingChanges.FromNotificationBar(mWkInfo, mMergeViewLauncher);
55 }
56 }
57
58 void CheckIncomingChanges.IUpdateIncomingChanges.Hide(WorkspaceInfo wkInfo)
59 {
60 if (!wkInfo.Equals(mWkInfo))
61 return;
62
63 PlasticPlugin.SetNotificationStatus(
64 mPlasticWindow,
65 PlasticNotification.Status.None);
66
67 mData.Clear();
68
69 mHasNotification = false;
70
71 mPlasticWindow.Repaint();
72 }
73
74 void CheckIncomingChanges.IUpdateIncomingChanges.Show(
75 WorkspaceInfo wkInfo,
76 string infoText,
77 string actionText,
78 string tooltipText,
79 CheckIncomingChanges.Severity severity,
80 CheckIncomingChanges.Action action)
81 {
82 if (!wkInfo.Equals(mWkInfo))
83 return;
84
85 PlasticNotification.Status status = GetStatusFromSeverity(severity);
86
87 mData.UpdateData(
88 infoText,
89 actionText,
90 tooltipText,
91 action == CheckIncomingChanges.Action.Update,
92 status);
93
94 mHasNotification = true;
95
96 PlasticPlugin.SetNotificationStatus(
97 mPlasticWindow,
98 status);
99
100 mPlasticWindow.Repaint();
101 }
102
103 static PlasticNotification.Status GetStatusFromSeverity(
104 CheckIncomingChanges.Severity severity)
105 {
106 if (severity == CheckIncomingChanges.Severity.Info)
107 return PlasticNotification.Status.IncomingChanges;
108
109 if (severity == CheckIncomingChanges.Severity.Warning)
110 return PlasticNotification.Status.Conflicts;
111
112 return PlasticNotification.Status.None;
113 }
114
115 bool mHasNotification;
116 StatusBar.IncomingChangesNotificationData mData =
117 new StatusBar.IncomingChangesNotificationData();
118 WorkspaceWindow mWorkspaceWindow;
119
120 readonly WorkspaceInfo mWkInfo;
121 readonly IMergeViewLauncher mMergeViewLauncher;
122 readonly PlasticWindow mPlasticWindow;
123 }
124}