Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_LocStatusPlugin.c
Go to the documentation of this file.
1#ifdef WORKBENCH
2[WorkbenchPluginAttribute(name: "Temporarily unlock selected string(s)", shortcut: "Ctrl+E", wbModules: { "LocalizationEditor" })]
3class SCR_LocStatusPlugin : LocalizationEditorPlugin
4{
5 protected ref array<string> m_aUnlocked = {};
6
7 //------------------------------------------------------------------------------------------------
8 protected void ResetStatus(BaseContainer stringTableItem, string id, EStringTableStatus status)
9 {
10 LocalizationEditor locEditor = Workbench.GetModule(LocalizationEditor);
11 locEditor.BeginModify("LocStatusPlugin");
12 locEditor.ModifyProperty(stringTableItem, stringTableItem.GetVarIndex("Status"), EStringTableStatus.DEVELOPMENT_PENDING.ToString());
13 locEditor.EndModify();
14
15 Workbench.ScriptDialog("Notification", string.Format("Please note that editing the text of '%1' changed its status\nfrom %2 to %3!\n\nWhen done, please change the string status to DEVELOPMENT_DONE.", id, typename.EnumToString(EStringTableStatus, status), typename.EnumToString(EStringTableStatus, EStringTableStatus.DEVELOPMENT_PENDING)), this);
16 }
17
18 //------------------------------------------------------------------------------------------------
19 override void OnChange(BaseContainer stringTableItem, string propName, string propValue)
20 {
21 if (propName == "Target_en_us")
22 {
23 string id;
24 EStringTableStatus status;
25 stringTableItem.Get("Id", id);
26 stringTableItem.Get("Status", status);
27
28 switch (status)
29 {
30 case EStringTableStatus.PROOFREADING_PENDING:
31 case EStringTableStatus.PROOFREADING_DONE:
32 case EStringTableStatus.TRANSLATION_PENDING:
33 {
34 Workbench.ScriptDialog("Warning", string.Format("String '%1' is marked as %2!\n\nPlease modify 'Target_en_us_edited' instead of 'Target_en_us'.\n\nThe edited version will appear in the game while waiting for translation\n in the next batch.", id, typename.EnumToString(EStringTableStatus, status)), this);
35 ResetStatus(stringTableItem, id, status);
36 break;
37 }
38
39 case EStringTableStatus.DEVELOPMENT_DONE:
40 case EStringTableStatus.TRANSLATION_DONE:
41 {
42 ResetStatus(stringTableItem, id, status);
43 break;
44 }
45 }
46 }
47
48 if (propName == "Target_en_us_edited" && !propValue.IsEmpty() && propValue != "@@@")
49 {
50 string id;
51 EStringTableStatus status;
52 stringTableItem.Get("Id", id);
53 stringTableItem.Get("Status", status);
54
55 switch (status)
56 {
57 case EStringTableStatus.DEVELOPMENT_PENDING:
58 case EStringTableStatus.DEVELOPMENT_DONE:
59 case EStringTableStatus.TRANSLATION_DONE:
60 {
61 Workbench.ScriptDialog("Notification", string.Format("Editing of the string '%1' is not restricted.\n\nPlease modify 'Target_en_us' directly instead of 'Target_en_us_edited'.", id, typename.EnumToString(EStringTableStatus, status)), this);
62 break;
63 }
64
65 default:
66 {
67 ResetStatus(stringTableItem, id, status);
68 break;
69 }
70 }
71 }
72 }
73
74 //------------------------------------------------------------------------------------------------
75 //--- Lock based on status (always unlocked when importing)
76 override bool IsReadOnly(BaseContainer item, bool isImporting)
77 {
78 if (!isImporting)
79 {
80 EStringTableStatus status;
81 item.Get("Status", status);
82
83 string id;
84 item.Get("Id", id);
85
86 switch (status)
87 {
88 case EStringTableStatus.PROOFREADING_PENDING:
89 case EStringTableStatus.PROOFREADING_DONE:
90 case EStringTableStatus.TRANSLATION_PENDING:
91 case EStringTableStatus.TRANSLATION_DONE:
92 {
93 //--- Locked unless temporarily unlocked by plugin
94 return !m_aUnlocked.Contains(id);
95 }
96 }
97 }
98
99 //--- Unlocked by default
100 return false;
101 }
102
103 //------------------------------------------------------------------------------------------------
104 override void OnSelectionChanged()
105 {
106 m_aUnlocked.Clear();
107 }
108
109 //------------------------------------------------------------------------------------------------
110 override void Run()
111 {
112 LocalizationEditor locEditor = Workbench.GetModule(LocalizationEditor);
113 BaseContainer table = locEditor.GetTable();
114 if (!table)
115 return;
116
117 BaseContainerList items = table.GetObjectArray("Items");
118 array<int> selected = {};
119 locEditor.GetSelectedRows(selected);
120
121 m_aUnlocked.Clear();
122 BaseContainer item;
123 string id;
124 foreach (int index : selected)
125 {
126 item = items.Get(index);
127 item.Get("Id", id);
128 m_aUnlocked.Insert(id);
129 }
130
131 locEditor.RefreshUI();
132 }
133
134 //------------------------------------------------------------------------------------------------
135 [ButtonAttribute("Close")]
136 protected bool ButtonClose()
137 {
138 return false;
139 }
140}
141#endif // WORKBENCH
AddonBuildInfoTool id
EStringTableStatus
Localisation key status.
GenerateFlowMaps WorkbenchPlugin WorkbenchPluginAttribute("Regenerate river flow-maps", "Generate and save/overwrite river flow-maps", "", "", {"WorldEditor"}, "", 0xf773)
Definition FlowmapTool.c:59
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
void OnSelectionChanged(MapItem item)
override void Run()
class WorkbenchDialog_AbortRetryIgnore ButtonAttribute("OK", true)