Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_SaveEditorUIComponent.c
Go to the documentation of this file.
2{
3 [Attribute()]
4 protected bool m_bIsLoad;
5
6 [Attribute()]
7 protected bool m_bCurrentMissionOnly;
8
9 [Attribute("false", UIWidgets.CheckBox)]
10 protected bool m_bVerboseDate;
11
12 [Attribute(uiwidget: UIWidgets.ResourceNamePicker, params: "layout")]
14
15 [Attribute(uiwidget: UIWidgets.ResourceNamePicker, params: "layout")]
17
18 [Attribute("session_save_override")]
19 protected string m_sConfirmPrompt;
20
21 [Attribute("session_delete")]
22 protected string m_sDeletePrompt;
23
24 [Attribute("session_load_bad_version")]
25 protected string m_sLoadBadVersionPrompt;
26
27 [Attribute("session_load_bad_addons")]
28 protected string m_sLoadBadAddonsPrompt;
29
31
33
34 protected Widget m_wRoot;
37
43
45 // Control buttons
47
48 //------------------------------------------------------------------------------------------------
49 protected void OnClose(SCR_InputButtonComponent button, string actionName)
50 {
51 CloseMenu();
52 }
53
54 //----------------------------------------------------------------------------------------
55 protected void OnConfirm(SCR_InputButtonComponent button, string actionName)
56 {
57 // Save dialogs
58 if (!m_bIsLoad)
59 {
60 string customName = m_Widgets.m_SaveNameInputComponent0.GetValue();
61 if (false /*GetGame().GetSaveManager().FileExists(m_eWriteSaveType, customName)*/)
62 {
63 //--- Confirm prompt
65 m_ConfirmPrompt.m_OnConfirm.Insert(OnConfirmPrompt);
66 }
67 else
68 {
69 //--- Creating a new file - save directly
71 return;
72 }
73
74 m_ConfirmPrompt.SetTitle(m_Widgets.m_SaveNameInputComponent0.GetValue());
75 return;
76 }
77
78 SCR_SaveLoadEntryComponent entryComponent;
79 if (m_mComponentEntries.Find(m_wSelectedWidget, entryComponent))
80 {
81 string displayname = entryComponent.GetDisplayName();
82
83 /*
84 SCR_MetaStruct meta = GetGame().GetSaveManager().GetMeta(entryComponent.GetFileName());
85 if (meta)
86 {
87 if (!meta.IsVersionCompatible())
88 {
89 // Warning - incompatible version
90 m_LoadBadVersionPrompt = SCR_ConfigurableDialogUi.CreateFromPreset(SCR_CommonDialogs.DIALOGS_CONFIG, m_sLoadBadVersionPrompt);
91 m_LoadBadVersionPrompt.m_OnConfirm.Insert(LoadEntry);
92 m_LoadBadVersionPrompt.SetTitle(displayname);
93 return;
94 }
95 else if (!meta.AreAddonsCompatible())
96 {
97 // Warning - incompatible addons
98 m_LoadBadAddonsPrompt = SCR_ConfigurableDialogUi.CreateFromPreset(SCR_CommonDialogs.DIALOGS_CONFIG, m_sLoadBadAddonsPrompt);
99 m_LoadBadAddonsPrompt.m_OnConfirm.Insert(LoadEntry);
100 m_LoadBadAddonsPrompt.SetTitle(displayname);
101 return;
102 }
103 }
104 */
105
106 //--- Confirm prompt
108 m_ConfirmPrompt.m_OnConfirm.Insert(OnConfirmPrompt);
109 m_ConfirmPrompt.SetTitle(displayname);
110 }
111 }
112
113 //----------------------------------------------------------------------------------------
114 protected void OnConfirmPrompt()
115 {
116 if (m_bIsLoad)
117 LoadEntry();
118 else
119 SaveEntry();
120
121 CloseMenu();
122 }
123
124 //----------------------------------------------------------------------------------------
126 protected void OnDelete(SCR_InputButtonComponent button, string actionName)
127 {
128 SCR_SaveLoadEntryComponent entryComponent;
129 if (!m_mComponentEntries.Find(m_wSelectedWidget, entryComponent))
130 return;
131
132 // Open delete dialog
134 m_DeletePrompt.m_OnConfirm.Insert(OnDeletePrompt);
135
136 // Setup string
137 string displayName = entryComponent.GetDisplayName();
138 m_DeletePrompt.SetTitle(displayName);
139 }
140
141 //----------------------------------------------------------------------------------------
142 protected void OnDeletePrompt()
143 {
145
146 //--- Delete the file
147 //GetGame().GetSaveManager().Delete(entryComponent.GetFileName());
148
149 //--- Update GUI
151
152 m_wSelectedWidget.RemoveFromHierarchy();
153 SelectEntry(null);
154 }
155
156 //----------------------------------------------------------------------------------------
157 protected void CloseMenu()
158 {
159 //--- Confirmation prompt opened, ignore
160 if (GetGame().GetWorkspace().GetModal() != m_wRoot)
161 return;
162
163 MenuBase menu = MenuBase.Cast(m_wRoot.FindHandler(MenuBase));
164 menu.Close();
165 }
166
168 // Main operations
170
171 //------------------------------------------------------------------------------------------------
172 protected void SaveEntry()
173 {
174 string customName = m_Widgets.m_SaveNameInputComponent0.GetValue();
175 //GetGame().GetSaveManager().Save(m_eWriteSaveType, customName);
176 }
177
178 //----------------------------------------------------------------------------------------
179 protected void LoadEntry()
180 {
181 SCR_SaveLoadEntryComponent entryComponent;
182 if (m_mComponentEntries.Find(m_wLastFocusedEntry, entryComponent))
183 {
184 /*
185 // Load save
186 SCR_SaveManagerCore saveManager = GetGame().GetSaveManager();
187 saveManager.RestartAndLoad(entryComponent.GetFileName());
188
189 // Handle server load
190 if (!Replication.IsClient())
191 return;
192
193 BackendCallback uploadCallback = saveManager.GetUploadCallback();
194 if (uploadCallback)
195 {
196 uploadCallback.SetOnSuccess(OnLoadEntryUploadResponse);
197 uploadCallback.SetOnError(OnLoadEntryUploadError);
198 m_LoadingOverlay = SCR_LoadingOverlayDialog.Create();
199 }
200 */
201 }
202 }
203
204 //------------------------------------------------------------------------------------------------
205 protected void OnOverrideSaveEntry(notnull SCR_SaveLoadEntryComponent entryComponent)
206 {
207 m_wSelectedWidget = SCR_MapHelper<Widget, SCR_SaveLoadEntryComponent>.GetKeyByValue(m_mComponentEntries, entryComponent);
208 OnConfirm(null, string.Empty);
209 }
210
211 //------------------------------------------------------------------------------------------------
212 protected void OnLoadSaveEntry(notnull SCR_SaveLoadEntryComponent entryComponent)
213 {
214 m_wSelectedWidget = SCR_MapHelper<Widget, SCR_SaveLoadEntryComponent>.GetKeyByValue(m_mComponentEntries, entryComponent);
215 OnConfirm(null, string.Empty);
216 }
217
218 //------------------------------------------------------------------------------------------------
219 protected void OnDeleteSaveEntry(notnull SCR_SaveLoadEntryComponent entryComponent)
220 {
221 m_wSelectedWidget = SCR_MapHelper<Widget, SCR_SaveLoadEntryComponent>.GetKeyByValue(m_mComponentEntries, entryComponent);
222 OnDelete(null, string.Empty);
223 }
224
225 //----------------------------------------------------------------------------------------
227 {
228 CloseMenu();
229 }
230
231 //----------------------------------------------------------------------------------------
232 protected void OnLoadEntryUploadError()
233 {
234 SCR_CommonDialogs.CreateRequestErrorDialog();
235
237 m_LoadingOverlay.Close();
238
239 CloseMenu();
240 }
241
243 // Interaction
245
246 //------------------------------------------------------------------------------------------------
247 protected void SelectEntry(Widget w, SCR_SaveLoadEntryComponent entryComponent = null)
248 {
249 string fileName;
250 if (entryComponent)
251 fileName = entryComponent.GetFileName();
252
253 const string customName; // GetGame().GetSaveManager().GetCustomName(fileName);
254 m_Widgets.m_SaveNameInputComponent0.SetValue(customName);
255
257
259 }
260
261 //------------------------------------------------------------------------------------------------
262 protected void UpdateButtons()
263 {
265
266 bool canSave = entryComponent.CanOverrideSave();
267 bool canLoad = entryComponent.CanLoadSave();
268 bool canDelete = entryComponent.CanDeleteSave();
269
270 string customName = m_Widgets.m_SaveNameInputComponent0.GetValue();
271 bool canOverride;
272 if (!customName.IsEmpty())// && !GetGame().GetSaveManager().FileExists(m_eWriteSaveType, customName))
273 canOverride = true;
274
275 m_Widgets.m_ConfirmButtonComponent.SetVisible(canSave);
276 m_Widgets.m_DeleteButtonComponent.SetEnabled(canDelete);
277 m_Widgets.m_OverrideButtonComponent.SetEnabled(false);
278 m_Widgets.m_ConfirmButtonComponent.SetEnabled(false);
279
280 if (canSave)
281 {
282 m_Widgets.m_OverrideButtonComponent.SetEnabled(canOverride);
283 m_Widgets.m_ConfirmButtonComponent.SetEnabled(canOverride);
284 }
285 }
286
287 //------------------------------------------------------------------------------------------------
288 protected void OnInit()
289 {
290 foreach(Widget entryWidget, SCR_SaveLoadEntryComponent entryComponent : m_mComponentEntries)
291 {
292 /*
293 string displayName = GetGame().GetSaveManager().GetCustomName(entryComponent.GetFileName());
294 entryComponent.SetDisplayName(displayName);
295
296 SCR_MetaStruct meta = GetGame().GetSaveManager().GetMeta(fileName);
297 if (meta && meta.IsValid())
298 {
299 SCR_UIInfo info = GetGame().GetSaveManager().GetSaveTypeInfo(fileName);
300 Color imageColor = Color.FromInt(Color.WHITE);
301 if (info)
302 {
303 info.SetIconTo(entryComponent.GetSaveIcon());
304 displayName = info.GetName() + " " + displayName; //--- Hardcoded space separator, ToDo: Solve using %1 in the string itself?
305
306 SCR_ColorUIInfo colorInfo = SCR_ColorUIInfo.Cast(info);
307 if (colorInfo)
308 imageColor = colorInfo.GetColor();
309 }
310
311 string versionText;
312 bool isVersionCompatible = meta.IsVersionCompatible(versionText);
313
314 int y, m, d, hh, mm;
315 meta.GetDateAndTime(y, m, d, hh, mm);
316
317 entryComponent.SetSaveName(displayName);
318 entryComponent.SetDateTime(SCR_DateTimeHelper.GetDateString(d, m, y, m_bVerboseDate), SCR_FormatHelper.GetTimeFormattingHoursMinutes(hh, mm));
319 entryComponent.SetVersion(versionText, isVersionCompatible);
320
321 if (!meta.AreAddonsCompatible())
322 entryComponent.SetIsWarning();
323
324 if (m_bIsLoad)
325 entryComponent.SetCanLoad(true);
326 else
327 entryComponent.SetCanSave(true);
328
329 entryComponent.SetCanDelete(true);
330
331 ResourceName headerResourceName = meta.GetHeaderResource();
332 if (!headerResourceName.IsEmpty())
333 {
334 Resource missionHeaderResource = Resource.Load(headerResourceName);
335 if (missionHeaderResource.IsValid())
336 {
337 SCR_MissionHeader missionHeader = SCR_MissionHeader.Cast(BaseContainerTools.CreateInstanceFromContainer(missionHeaderResource.GetResource().ToBaseContainer()));
338
339 entryComponent.SetSaveName(missionHeader.m_sName);
340
341 if (missionHeader.m_sIcon)
342 entryComponent.SetSaveIcon(imageColor, missionHeader.m_sIcon);
343 }
344 }
345 }
346 */
347 }
348 }
349
351 // Overrides
353
354 //------------------------------------------------------------------------------------------------
355 override bool OnClick(Widget w, int x, int y, int button)
356 {
357 if (w.GetParent() != m_Widgets.m_wSaveList)
358 return false;
359
360 SCR_SaveLoadEntryComponent entryComponent;
361 if (m_mComponentEntries.Find(w, entryComponent))
362 SelectEntry(w, entryComponent);
363
364 return false;
365 }
366
367 //----------------------------------------------------------------------------------------
368 override bool OnFocus(Widget w, int x, int y)
369 {
370 SCR_SaveLoadEntryComponent entryComponent;
371 if (m_mComponentEntries.Find(w, entryComponent))
372 {
374 SelectEntry(w, entryComponent);
375 }
376
377 return false;
378 }
379
380 //----------------------------------------------------------------------------------------
381 override bool OnDoubleClick(Widget w, int x, int y, int button)
382 {
383 if (w.GetParent() != m_Widgets.m_wSaveList)
384 return false;
385
386 //--- Select
387 OnClick(w, x, y, button);
388
389 //--- Activate
390 OnConfirm(null, string.Empty);
391
392 return false;
393 }
394
395 //----------------------------------------------------------------------------------------
396 override void HandlerAttached(Widget w)
397 {
398 if (!GetGame().InPlayMode())
399 {
401 Widget parent = w.FindWidget("SaveHorizontalLayout.SaveWindow.WindowOverlay.WindowStructure.Saves.SaveEntryList.m_SaveScroller.m_SaveList");
402 for (int i = 0; i < 10; i++)
403 {
404 GetGame().GetWorkspace().CreateWidgets(m_sEntryLayout, parent);
405 }
406 return;
407 }
408
409 //--- Find all widgets
410 m_wRoot = w;
411 m_Widgets.Init(w);
412
413 //--- Name input field
414 m_Widgets.m_SaveNameInputComponent0.m_OnChanged.Insert(UpdateButtons);
415
416 m_Widgets.m_ExitButtonComponent.m_OnActivated.Insert(OnClose);
417 m_Widgets.m_DeleteButtonComponent.m_OnActivated.Insert(OnDelete);
418 m_Widgets.m_OverrideButtonComponent.m_OnActivated.Insert(OnConfirm);
419 m_Widgets.m_ConfirmButtonComponent.m_OnActivated.Insert(OnConfirm);
420
421 m_Widgets.m_DeleteButtonComponent.SetEnabled(false);
422 m_Widgets.m_OverrideButtonComponent.SetEnabled(false);
423 m_Widgets.m_ConfirmButtonComponent.SetEnabled(false);
424
426
427 //--- Create new entries
428 /*
429 array<string> fileNames = {};
430 int fileCount = GetGame().GetSaveManager().GetLocalSaveFiles(fileNames, m_eReadSaveTypes, m_bCurrentMissionOnly);
431 fileNames.Sort();
432
433 WorkspaceWidget workspace = GetGame().GetWorkspace();
434
435 Widget entryWidget;
436 SCR_SaveLoadEntryComponent entryComponent;
437 for (int i = 0; i < fileCount; i++)
438 {
439 int ii = i % fileCount;
440 string fileName = fileNames[ii];
441 entryWidget = workspace.CreateWidgets(m_sEntryLayout, m_Widgets.m_wSaveList);
442 entryComponent = SCR_SaveLoadEntryComponent.Cast(entryWidget.FindHandler(SCR_SaveLoadEntryComponent));
443 m_mComponentEntries.Insert(entryWidget, entryComponent);
444
445 //--- Hide by default
446 entryWidget.SetVisible(false);
447
448 entryComponent.SetFileName(fileName);
449
450 entryComponent.GetOnOverrideSave().Insert(OnOverrideSaveEntry);
451 entryComponent.GetOnLoadSave().Insert(OnLoadSaveEntry);
452 entryComponent.GetOnDeleteSave().Insert(OnDeleteSaveEntry);
453
454 if (m_bIsLoad && i == 0)
455 SelectEntry(entryWidget, entryComponent);
456 }
457 */
458
459 OnInit();
460 }
461}
ArmaReforgerScripted GetGame()
Definition game.c:1398
void OnClick()
On click callback.
SCR_NewSessionToolbarAction SCR_EditorToolbarAction OnConfirm()
static SCR_ConfigurableDialogUi CreateFromPreset(ResourceName presetsResourceName, string tag, SCR_ConfigurableDialogUi customDialogObj=null)
Creates a dialog from preset.
void SelectEntry(Widget w, SCR_SaveLoadEntryComponent entryComponent=null)
override bool OnDoubleClick(Widget w, int x, int y, int button)
void OnLoadSaveEntry(notnull SCR_SaveLoadEntryComponent entryComponent)
override bool OnClick(Widget w, int x, int y, int button)
SCR_ConfigurableDialogUi m_ConfirmPrompt
override bool OnFocus(Widget w, int x, int y)
void OnConfirm(SCR_InputButtonComponent button, string actionName)
void OnOverrideSaveEntry(notnull SCR_SaveLoadEntryComponent entryComponent)
override void HandlerAttached(Widget w)
SCR_ConfigurableDialogUi m_LoadBadAddonsPrompt
SCR_ConfigurableDialogUi m_DeletePrompt
void OnClose(SCR_InputButtonComponent button, string actionName)
void OnDelete(SCR_InputButtonComponent button, string actionName)
Callback on clicking delete button or action.
SCR_LoadingOverlayDialog m_LoadingOverlay
ref map< Widget, SCR_SaveLoadEntryComponent > m_mComponentEntries
void OnDeleteSaveEntry(notnull SCR_SaveLoadEntryComponent entryComponent)
SCR_ConfigurableDialogUi m_LoadBadVersionPrompt
bool CanDeleteSave()
string GetDisplayName()
bool CanOverrideSave()
bool CanLoadSave()
Definition Types.c:486
SCR_FieldOfViewSettings Attribute