A game about forced loneliness, made by TACStudios
1using UnityEditor;
2using UnityEngine;
3
4using Codice.Client.Common;
5
6using Codice.Client.Commands;
7using PlasticGui;
8using PlasticGui.WorkspaceWindow.Update;
9using Unity.PlasticSCM.Editor.UI;
10
11namespace Unity.PlasticSCM.Editor.Views
12{
13 internal class ContinueWithPendingChangesQuestionerBuilder :
14 SwitchController.IContinueWithPendingChangesQuestionerBuilder
15 {
16 internal ContinueWithPendingChangesQuestionerBuilder(
17 IViewSwitcher viewSwitcher,
18 EditorWindow parentWindow)
19 {
20 mViewSwitcher = viewSwitcher;
21 mParentWindow = parentWindow;
22 }
23
24 public IContinueWithPendingChangesQuestioner Get(string title, string explanation)
25 {
26 return new ContinueWithPendingChangesQuestioner(
27 title,
28 explanation,
29 mViewSwitcher,
30 mParentWindow);
31 }
32
33 IViewSwitcher mViewSwitcher;
34 EditorWindow mParentWindow;
35 }
36
37 internal class ContinueWithPendingChangesQuestioner : IContinueWithPendingChangesQuestioner
38 {
39 internal ContinueWithPendingChangesQuestioner(
40 string title,
41 string explanation,
42 IViewSwitcher viewSwitcher,
43 EditorWindow parentWindow)
44 {
45 mTitle = title;
46 mExplanation = explanation;
47 mViewSwitcher = viewSwitcher;
48 mParentWindow = parentWindow;
49 }
50
51 public bool ContinueWithPendingChanges()
52 {
53 bool result = false;
54
55 GUIActionRunner.RunGUIAction(() =>
56 {
57 result = ConfirmContinueWithPendingChangesDialog.ConfirmContinue(
58 mTitle,
59 mExplanation,
60 mViewSwitcher,
61 mParentWindow);
62 });
63
64 return result;
65 }
66
67 string mTitle;
68 string mExplanation;
69 IViewSwitcher mViewSwitcher;
70 EditorWindow mParentWindow;
71 }
72
73 internal class ConfirmContinueWithPendingChangesDialog : PlasticDialog
74 {
75 protected override Rect DefaultRect
76 {
77 get
78 {
79 var baseRect = base.DefaultRect;
80 return new Rect(baseRect.x, baseRect.y, 500, 287);
81 }
82 }
83
84 internal static bool ConfirmContinue(
85 string title,
86 string explanation,
87 IViewSwitcher viewSwitcher,
88 EditorWindow parentWindow)
89 {
90 ConfirmContinueWithPendingChangesDialog dialog = Create(
91 title,
92 explanation,
93 viewSwitcher);
94
95 if (dialog.RunModal(parentWindow) != ResponseType.Ok)
96 return false;
97
98 if (dialog.mIsSwitchToConfirmationChecked)
99 SavePreference();
100
101 return true;
102 }
103
104 static ConfirmContinueWithPendingChangesDialog Create(
105 string title,
106 string explanation,
107 IViewSwitcher viewSwitcher)
108 {
109 var instance = CreateInstance<ConfirmContinueWithPendingChangesDialog>();
110 instance.mTitle = title;
111 instance.mExplanation = explanation;
112 instance.mViewSwitcher = viewSwitcher;
113 return instance;
114 }
115
116 static void SavePreference()
117 {
118 ClientConfigData data = ClientConfig.Get().GetClientConfigData();
119 data.SetPendingChangesOnSwitchAction(UserAction.None);
120 ClientConfig.Get().Save(data);
121 }
122
123 protected override string GetTitle()
124 {
125 return mTitle;
126 }
127
128 protected override void OnModalGUI()
129 {
130 Title(mTitle);
131
132 Paragraph(mExplanation);
133
134 DoSwitchToConfirmationCheckButton();
135
136 GUILayout.Space(10);
137
138 DoButtonsArea();
139 }
140
141 void DoSwitchToConfirmationCheckButton()
142 {
143 using (new EditorGUILayout.HorizontalScope())
144 {
145 GUILayout.FlexibleSpace();
146
147 mIsSwitchToConfirmationChecked = TitleToggle(
148 PlasticLocalization.GetString(
149 PlasticLocalization.Name.SwitchToConfirmationCheckButton),
150 mIsSwitchToConfirmationChecked);
151 }
152 }
153
154 void DoButtonsArea()
155 {
156 using (new EditorGUILayout.HorizontalScope())
157 {
158 GUILayout.FlexibleSpace();
159
160 if (Application.platform == RuntimePlatform.WindowsEditor)
161 {
162 DoContinueButton();
163 DoCancelAndViewPendingChangesButton();
164 DoCancelButton();
165 return;
166 }
167
168 DoCancelButton();
169 DoCancelAndViewPendingChangesButton();
170 DoContinueButton();
171 }
172 }
173
174 void DoContinueButton()
175 {
176 if (!NormalButton(PlasticLocalization.GetString(
177 PlasticLocalization.Name.SwitchToConfirmationContinueButton)))
178 return;
179
180 OkButtonAction();
181 }
182
183 void DoCancelButton()
184 {
185 if (!NormalButton(PlasticLocalization.GetString(
186 PlasticLocalization.Name.CancelButton)))
187 return;
188
189 CancelButtonAction();
190 }
191
192 void DoCancelAndViewPendingChangesButton()
193 {
194 if (!NormalButton(PlasticLocalization.GetString(
195 PlasticLocalization.Name.SwitchToConfirmationCancelViewChangesButton)))
196 return;
197
198 mViewSwitcher.ShowPendingChanges();
199 CancelButtonAction();
200 }
201
202 string mTitle;
203 string mExplanation;
204 IViewSwitcher mViewSwitcher;
205
206 bool mIsSwitchToConfirmationChecked;
207 }
208}