Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ReportedAddonsDialog.c
Go to the documentation of this file.
1//------------------------------------------------------------------------------------------------
4{
5 protected const ResourceName LINE_LAYOUT = "{6D73127FB096229D}UI/layouts/Menus/ContentBrowser/DownloadManager/ReportedAddonEntry.layout";
6 protected const ResourceName DIALOGS_CONFIG = "{ADEA32EB841E8629}Configs/ContentBrowser/ContentBrowserReportDialogs.conf";
7
8 protected const string AUTHOR_REPORT_TAG = "report_author";
9 protected const string AUTHOR_UNBLOCK_TAG = "unblock_author_simple";
10
11 protected const string MSG_AUTHOR = "#AR-Workshop_FilterCategory_Author";
12 protected const string STR_FIXED_REPORT = "#AR-Workshop_Dialog_Success";
13 protected const string UNBLOCK_AUTHOR_MESSAGE = "#AR-Workshop_CancelAuthorReport";
14
15 protected const string WIDGET_DETAIL = "TxtDetailType";
16 protected const string WIDGET_MESSAGE = "TxtDetailMessage";
17
18 protected const string BUTTON_CANCEL_REPORT = "cancelReport";
19
20 protected const int AUTHOR_MOD_LIMIT = 20;
21
23 protected bool m_bBlocked;
24
25 // Widgets
29 protected Widget m_wList;
30
33
34 //protected SCR_WorkshopItem m_ItemFocused;
35 protected SCR_ModularButtonComponent m_LineFocused;
36
37 //protected ref array<SCR_ModularButtonComponent> m_aButtons = new array<SCR_ModularButtonComponent>();
38
41
44
45 //------------------------------------------------------------------------------------------------
46 // Override API
47 //------------------------------------------------------------------------------------------------
48
49 //------------------------------------------------------------------------------------------------
51 {
54
55 m_wList = VerticalLayoutWidget.Cast(GetRootWidget().FindAnyWidget("AddonList"));
56
57 // Find widgets
58 m_wTxtType = TextWidget.Cast(GetRootWidget().FindAnyWidget(WIDGET_DETAIL));
60
62
64
66 if (button)
67 {
68 button.m_OnActivated.Clear();
69 button.m_OnActivated.Insert(OnCancelReport);
70 }
71 }
72
73 //------------------------------------------------------------------------------------------------
76 protected void SetupReports()
77 {
78 ref array<WorkshopAuthor> blockedAuthors = {};
79
80 foreach (SCR_WorkshopItem item : m_aItems)
81 {
82 // Are there blocked/banned addons by serice?
83 if (item.GetBlocked())
84 {
85 CreateAddonEntry(item);
86 m_bBlocked = true;
87 continue;
88 }
89
90 // Author blocks
91 if (item.GetModAuthorReportedByMe())
92 {
93 // Save reported author
94 WorkshopAuthor author = item.GetWorkshopItem().Author();
95
96 if (!blockedAuthors.Contains(author))
97 {
98 // Add author entry
99 blockedAuthors.Insert(author);
100 CreateAuthorEntry(author);
101 }
102 }
103
104 // Report by player
105 if (item.GetReportedByMe())
106 CreateAddonEntry(item);
107 }
108 }
109
110 //------------------------------------------------------------------------------------------------
111 protected override void OnConfirm()
112 {
114 m_OnConfirm.Invoke(this);
115 }
116
117 //------------------------------------------------------------------------------------------------
118 // Protected API
119 //------------------------------------------------------------------------------------------------
120
121 //------------------------------------------------------------------------------------------------
123 protected SCR_ModularButtonComponent CreateEntry(string name, string message)
124 {
125 Widget entry = GetGame().GetWorkspace().CreateWidgets(LINE_LAYOUT, m_wList);
126
128 comp.SetMessages(name, message);
129
130 // Find button comp
131 SCR_ModularButtonComponent button = SCR_ModularButtonComponent.Cast(entry.FindHandler(SCR_ModularButtonComponent));
132 if (!button)
133 return null;
134
135 // Callback
136 button.m_OnFocus.Insert(OnAddonLineFocus);
137
138 return button;
139 }
140
141 //------------------------------------------------------------------------------------------------
142 // Addon report
143 //------------------------------------------------------------------------------------------------
144
145 //------------------------------------------------------------------------------------------------
147 protected void CreateAddonEntry(notnull SCR_WorkshopItem item)
148 {
149 // Msg
151
152 // Line
153 SCR_ModularButtonComponent button = CreateEntry(item.GetName(), msg);
154 m_mButtonsItems.Insert(button, item);
155
156 // Callbacks
157 button.m_OnDoubleClicked.Insert(OnAddonEntrySelected);
158 }
159
160 //------------------------------------------------------------------------------------------------
161 protected void OnAddonEntrySelected(SCR_ModularButtonComponent button)
162 {
163 SCR_WorkshopItem item;
164 m_mButtonsItems.Find(button, item);
165
166 if (!item)
167 Print("Item wasn't found or set!");
168
169 // Load
170 item.m_OnMyReportLoaded.Insert(OnAddonReportLoadSuccess);
171 item.m_OnError.Insert(OnAddonReportLoadError);
172 item.m_OnTimeout.Insert(OnAddonReportLoadError);
173 item.LoadReport();
174
175 // Show load UI
177 }
178
179 //------------------------------------------------------------------------------------------------
181 {
182 // Cleanup
183 item.m_OnMyReportLoaded.Remove(OnAddonReportLoadSuccess);
184 item.m_OnError.Remove(OnAddonReportLoadError);
185 item.m_OnTimeout.Remove(OnAddonReportLoadError);
186
187 m_LoadingOvelay.Close();
188
189 // Setup dialog and callbacks
191
193 {
197 }
198 }
199
200 //------------------------------------------------------------------------------------------------
202 {
203 // Cleanup
204 item.m_OnMyReportLoaded.Remove(OnAddonReportLoadSuccess);
205 item.m_OnError.Remove(OnAddonReportLoadError);
206 item.m_OnTimeout.Remove(OnAddonReportLoadError);
207
208 m_LoadingOvelay.Close();
209 }
210
211 //------------------------------------------------------------------------------------------------
212 // Author report
213 //------------------------------------------------------------------------------------------------
214
215 //------------------------------------------------------------------------------------------------
217 protected void CreateAuthorEntry(notnull WorkshopAuthor author)
218 {
219 SCR_ModularButtonComponent button = CreateEntry(author.Name(), MSG_AUTHOR);
220 m_mButtonsAuthors.Insert(button, author);
221
222 // Callbacks
223 button.m_OnDoubleClicked.Insert(OnAuthorEntrySelected);
224 }
225
226 //------------------------------------------------------------------------------------------------
227 protected void OnAuthorEntrySelected(SCR_ModularButtonComponent button)
228 {
230
231 if (!m_LoadingAuthor)
232 Print("Author wasn't found or set!");
233
234 // Request author addons - TODO: restore when fix is ready
235 /*
236 PageParams params = new PageParams();
237 params.limit = AUTHOR_MOD_LIMIT;
238 params.offset = 0;
239
240 m_ReportCallback.SetOnSuccess(OnAuthorReportLoadResponse);
241 m_ReportCallback.SetOnError(OnAuthorReportLoadError);
242
243 m_LoadingAuthor.RequestPage(m_ReportCallback, params, false);
244
245 // Show load UI
246 m_LoadingOvelay = SCR_LoadingOverlayDialog.Create();
247 */
248
249 // Show confirm list
251 }
252
253 //------------------------------------------------------------------------------------------------
254 protected void OnCancelReport()
255 {
256 if (m_mButtonsItems.Contains(m_LineFocused))
257 {
259 }
260 else
261 {
263 }
264 }
265
266 //------------------------------------------------------------------------------------------------
277
278 //------------------------------------------------------------------------------------------------
284
285 //------------------------------------------------------------------------------------------------
286 protected void OnAuthorReportLoadError()
287 {
288 m_LoadingOvelay.Close();
289 }
290
291 //------------------------------------------------------------------------------------------------
293 {
294 // Get items
295 array<WorkshopItem> items = {};
296 author.GetPageItems(items);
297
298 //Set items list
299 array<ref SCR_WorkshopItem> scrItems;
301
302 foreach (WorkshopItem item : items)
303 {
304 SCR_WorkshopItem scrItem = addonManager.Register(item);
305 scrItems.Insert(scrItem);
306 }
307
308 SCR_AddonListDialog dialog = SCR_AddonListDialog.CreateItemsList(scrItems, AUTHOR_REPORT_TAG, DIALOGS_CONFIG);
309
310 // Set message
311 dialog.GetMessageWidget().SetTextFormat(
312 "#AR-Workshop_CancelAuthorReport" + "\n\n" + "#AR-Workshop_AffectedMods", m_LoadingAuthor.Name());
313
314 // Callbacks
315 dialog.m_OnConfirm.Insert(OnConfirmRemoveAuthorBlock);
316 dialog.m_OnCancel.Insert(OnCancelRemoveAuthorReport);
317 dialog.m_OnClose.Insert(OnReportDialogClose);
318 }
319
320 //------------------------------------------------------------------------------------------------
331
332 //------------------------------------------------------------------------------------------------
334 {
335 m_LoadingOvelay.Close();
336
337 SCR_ModularButtonComponent button = SCR_MapHelper<SCR_ModularButtonComponent, WorkshopAuthor>.GetKeyByValue(m_mButtonsAuthors, m_LoadingAuthor);
339
340 // Remove item
341 m_mButtonsAuthors.Remove(button);
342
344 }
345
346 //------------------------------------------------------------------------------------------------
348 {
349 m_LoadingOvelay.Close();
350 SCR_CommonDialogs.CreateRequestErrorDialog();
351 }
352
353 //------------------------------------------------------------------------------------------------
356 {
357 dialog.m_OnClose.Remove(OnReportDialogClose);
358 GetGame().GetCallqueue().CallLater(FocusTopLine);
359 }
360
361 //------------------------------------------------------------------------------------------------
362 protected void DisplayReportCancelSuccess(notnull SCR_ModularButtonComponent button)
363 {
364 // Show success in ui
365 SCR_SimpleEntryComponent entry = SCR_SimpleEntryComponent.Cast(button.GetRootWidget().FindHandler(SCR_SimpleEntryComponent));
366
367 if (entry)
368 {
369 entry.GetMessage().SetColor(Color.FromInt(UIColors.CONFIRM.PackToInt()));
371 }
372
373 // Clearup button
374 button.m_OnFocus.Remove(OnAddonLineFocus);
375 button.m_OnDoubleClicked.Remove(OnAddonEntrySelected);
376 button.GetRootWidget().SetFlags(WidgetFlags.NOFOCUS);
377 }
378
379 //------------------------------------------------------------------------------------------------
380 protected void AllButtonsCanceled()
381 {
382 if (m_mButtonsItems.IsEmpty() && m_mButtonsAuthors.IsEmpty())
383 {
384 Close();
386 }
387 }
388
389 //------------------------------------------------------------------------------------------------
395
396 //------------------------------------------------------------------------------------------------
397 // Callbacks
398 //------------------------------------------------------------------------------------------------
399
400 //------------------------------------------------------------------------------------------------
402 protected void OnAddonLineFocus(SCR_ModularButtonComponent button)
403 {
404 Widget w = button.GetRootWidget();
405 SCR_ModularButtonComponent line = SCR_ModularButtonComponent.Cast(w.FindHandler(SCR_ModularButtonComponent));
406
407 if (line)
408 m_LineFocused = line;
409 }
410
411 //------------------------------------------------------------------------------------------------
413 protected void OnCancelReportActived()
414 {
415 if (!m_LineFocused)
416 return;
417
418 if (m_mButtonsAuthors.Contains(m_LineFocused))
419 {
421 return;
422 }
423
425 }
426
427 //------------------------------------------------------------------------------------------------
429 {
430 m_DialogCancelReport.GetWorkshopItemAction().m_OnCompleted.Insert(OnCancelReportSuccess);
431 m_DialogCancelReport.GetWorkshopItemAction().m_OnFailed.Insert(OnCancelReportFail);
432
433 // Clear confirm
435 }
436
437 //------------------------------------------------------------------------------------------------
439 {
440 SCR_ModularButtonComponent button = SCR_MapHelper<SCR_ModularButtonComponent, SCR_WorkshopItem>.GetKeyByValue(m_mButtonsItems, action.GetWorkshopItem());
442
443 // Remove item
444 m_mButtonsItems.Remove(button);
445
447 }
448
449 //------------------------------------------------------------------------------------------------
451 {
452 // Remove invoker actions
453 action.m_OnCompleted.Remove(OnCancelReportSuccess);
454 action.m_OnFailed.Remove(OnCancelReportFail);
455 }
456
457 //------------------------------------------------------------------------------------------------
459 {
460 // Clear invokers
463 }
464
465 //------------------------------------------------------------------------------------------------
466 protected void FocusTopLine()
467 {
468 // Addons
469 foreach (SCR_ModularButtonComponent button, SCR_WorkshopItem item : m_mButtonsItems)
470 {
471 if (button.GetRootWidget().IsFocusable())
472 {
473 GetGame().GetWorkspace().SetFocusedWidget(button.GetRootWidget());
474 return;
475 }
476 }
477
478 // Authors
479 foreach (SCR_ModularButtonComponent button, WorkshopAuthor author : m_mButtonsAuthors)
480 {
481 if (button.GetRootWidget().IsFocusable())
482 {
483 GetGame().GetWorkspace().SetFocusedWidget(button.GetRootWidget());
484 return;
485 }
486 }
487 }
488
489 //------------------------------------------------------------------------------------------------
490 // Invokers
491 //------------------------------------------------------------------------------------------------
492
493 //------------------------------------------------------------------------------------------------
501
502 //------------------------------------------------------------------------------------------------
510
511};
ArmaReforgerScripted GetGame()
Definition game.c:1398
Definition Color.c:13
ref array< ref SCR_WorkshopItem > m_aItems
void SCR_AddonListDialog(array< ref SCR_WorkshopItem > items, string preset)
SCR_WorkshopItem Register(WorkshopItem item)
Returns a SCR_WorkshopItem. If it's not registered, creates a new one and registers it.
static SCR_AddonManager GetInstance()
Dialog which sends a request to delete user's report.
static SCR_ConfigurableDialogUi CreateFromPreset(ResourceName presetsResourceName, string tag, SCR_ConfigurableDialogUi customDialogObj=null)
Creates a dialog from preset.
SCR_InputButtonComponent FindButton(string tag)
Returns a button with given tag.
static SCR_LoadingOverlayDialog Create(string text=string.Empty)
Show list of reported mods and provide option to cancel reports.
void OnReportDialogClose(SCR_ConfigurableDialogUi dialog)
Call this on closing any report dialog to set repot list focus.
void OpenAuthorModsDialog(WorkshopAuthor author)
void OnCancelReportFail(SCR_WorkshopItemActionCancelReport action)
void OnCancelReportConfirm(SCR_ConfigurableDialogUi dialog)
void CreateAddonEntry(notnull SCR_WorkshopItem item)
Create addon entry with message based on type.
ref map< SCR_ModularButtonComponent, WorkshopAuthor > m_mButtonsAuthors
void OnCancelReportSuccess(SCR_WorkshopItemActionCancelReport action)
SCR_ModularButtonComponent CreateEntry(string name, string message)
Create entry with specific reported author.
SCR_LoadingOverlayDialog m_LoadingOvelay
void OnAddonReportLoadError(SCR_WorkshopItem item)
void CreateAuthorEntry(notnull WorkshopAuthor author)
Create entry with reported author.
void OnCancelReportActived()
Start to canceling report of currently focused mod.
void DisplayReportCancelSuccess(notnull SCR_ModularButtonComponent button)
void OnAddonLineFocus(SCR_ModularButtonComponent button)
Show details of addon line report when focused.
ref map< SCR_ModularButtonComponent, SCR_WorkshopItem > m_mButtonsItems
void OnAddonEntrySelected(SCR_ModularButtonComponent button)
void OnConfirmRemoveAuthorBlock(SCR_ConfigurableDialogUi dialog)
override void OnMenuOpen(SCR_ConfigurableDialogUiPreset preset)
ref SCR_CancelMyReportDialog m_DialogCancelReport
SCR_ModularButtonComponent m_LineFocused
ref ScriptInvoker< SCR_ReportedAddonsDialog > Event_OnAllReportsCanceled
void OnCancelReportDialog(SCR_ConfigurableDialogUi dialog)
SCR_InputButtonComponent m_NavCancelReport
void OnAuthorEntrySelected(SCR_ModularButtonComponent button)
void OnAddonReportLoadSuccess(SCR_WorkshopItem item)
void OnCancelRemoveAuthorReport(SCR_ConfigurableDialogUi dialog)
string GetLeftText()
TextWidget GetMessage()
void SetMessages(string left, string right)
Action for canceling report of an item.
void LoadReport()
Loads report of current user from backend. Subscribe to m_OnMyReportLoaded to get result.
static string GetRestrictedAddonStateText(SCR_WorkshopItem item)
Returns string such as "Banned" or "Reported" for a restricted item. Otherwise returns empty string.
Workshop Item instance.
Definition Types.c:486
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
WidgetFlags
Widget flags. See enf::Widget::SetFlags().
Definition WidgetFlags.c:14
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134