Skip to content

Commit 93b50b6

Browse files
authored
Merge pull request #2540 from ivan-mogilko/362--globalvarsarray
Editor: support arrays on Global Variables panel
2 parents af9a08a + 62b6f24 commit 93b50b6

File tree

6 files changed

+200
-28
lines changed

6 files changed

+200
-28
lines changed

Editor/AGS.Editor/Components/GlobalVariablesComponent.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,17 @@ private string GenerateGlobalVariablesScriptModule(IList<GlobalVariable> variabl
6060

6161
foreach (GlobalVariable variable in variables)
6262
{
63-
string declaration = variable.Type + " " + variable.Name;
63+
string declaration = $"{variable.Type} {variable.Name}";
64+
switch (variable.ArrayType)
65+
{
66+
case VariableArrayType.Array:
67+
declaration = declaration + $"[{variable.ArraySize}]";
68+
break;
69+
case VariableArrayType.DynamicArray:
70+
declaration = declaration + $"[]";
71+
break;
72+
}
73+
6474
if (((variable.Type == "int") ||
6575
(variable.Type == "bool") ||
6676
(variable.Type == "float")) &&
@@ -91,7 +101,18 @@ private void UpdateScriptHeader()
91101
StringBuilder sb = new StringBuilder();
92102
foreach (GlobalVariable variable in _agsEditor.CurrentGame.GlobalVariables.ToList())
93103
{
94-
sb.AppendLine("import " + variable.Type + " " + variable.Name + ";");
104+
switch (variable.ArrayType)
105+
{
106+
case VariableArrayType.None:
107+
sb.AppendLine($"import {variable.Type} {variable.Name};");
108+
break;
109+
case VariableArrayType.Array:
110+
sb.AppendLine($"import {variable.Type} {variable.Name}[{variable.ArraySize}];");
111+
break;
112+
case VariableArrayType.DynamicArray:
113+
sb.AppendLine($"import {variable.Type} {variable.Name}[];");
114+
break;
115+
}
95116
}
96117
_scriptHeader.Text = sb.ToString();
97118
AutoComplete.ConstructCache(_scriptHeader, null);

Editor/AGS.Editor/GUI/GlobalVariableDialog.Designer.cs

Lines changed: 92 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/AGS.Editor/GUI/GlobalVariableDialog.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public GlobalVariableDialog(GlobalVariable variable, Game game, IEnumerable<APIT
3535
}
3636
}
3737

38+
cmbArray.SelectedIndex = (int)variable.ArrayType;
39+
udArraySize.Value = MathExtra.Clamp(variable.ArraySize, 1, Int32.MaxValue);
40+
3841
Utilities.CheckLabelWidthsOnForm(this);
3942
}
4043

@@ -91,6 +94,8 @@ private void btnOK_Click(object sender, EventArgs e)
9194
_variable.Name = txtName.Text;
9295
_variable.DefaultValue = txtDefaultValue.Text;
9396
_variable.Type = cmbType.SelectedItem.ToString();
97+
_variable.ArrayType = (VariableArrayType)cmbArray.SelectedIndex;
98+
_variable.ArraySize = _variable.ArrayType == VariableArrayType.Array ? (int)udArraySize.Value : 0;
9499
this.DialogResult = DialogResult.OK;
95100
this.Close();
96101
}
@@ -108,6 +113,25 @@ private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
108113
}
109114
}
110115

116+
private void cmbArray_SelectedIndexChanged(object sender, EventArgs e)
117+
{
118+
VariableArrayType arrType = (VariableArrayType)cmbArray.SelectedIndex;
119+
if (arrType == VariableArrayType.None)
120+
{
121+
label5.Enabled = false;
122+
udArraySize.Enabled = false;
123+
txtDefaultValue.Enabled = ((GlobalVariableType)cmbType.SelectedItem).CanHaveDefaultValue;
124+
}
125+
else
126+
{
127+
label5.Enabled = arrType == VariableArrayType.Array;
128+
udArraySize.Enabled = arrType == VariableArrayType.Array;
129+
// TODO: maybe support array initialization? although it's not convenient to do with a single textbox
130+
txtDefaultValue.Enabled = false;
131+
txtDefaultValue.Text = string.Empty;
132+
}
133+
}
134+
111135
private class GlobalVariableType
112136
{
113137
public string TypeName;

Editor/AGS.Editor/GUI/GlobalVariableDialog.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@
112112
<value>2.0</value>
113113
</resheader>
114114
<resheader name="reader">
115-
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116116
</resheader>
117117
<resheader name="writer">
118-
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120120
<data name="label2.Text" xml:space="preserve">
121121
<value>Choose the type of the variable here. This depends on what sort of information you want to store in the variable. If you just want to store a number, choose "int". To store a string of text, choose "String".</value>

Editor/AGS.Editor/Panes/GlobalVariablesEditor.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,27 @@ private void PopulateScriptTypeList()
9696

9797
private ListViewItem CreateListItemFromVariable(GlobalVariable variable)
9898
{
99-
ListViewItem newItem = new ListViewItem(new string[] { variable.Name, variable.Type, variable.DefaultValue });
100-
newItem.Tag = variable;
99+
ListViewItem newItem = new ListViewItem(new string[] { string.Empty, string.Empty, string.Empty });
100+
FillListItemFromVariable(newItem, variable);
101101
return newItem;
102102
}
103103

104+
private void FillListItemFromVariable(ListViewItem item, GlobalVariable variable)
105+
{
106+
string varType;
107+
switch (variable.ArrayType)
108+
{
109+
case VariableArrayType.Array: varType = $"{variable.Type}[{variable.ArraySize}]"; break;
110+
case VariableArrayType.DynamicArray: varType = $"{variable.Type}[]"; break;
111+
default: varType = variable.Type; break;
112+
}
113+
114+
item.SubItems[0].Text = variable.Name;
115+
item.SubItems[1].Text = varType;
116+
item.SubItems[2].Text = variable.DefaultValue;
117+
item.Tag = variable;
118+
}
119+
104120
private void UpdateListItemFromVariableObject(ListViewItem listItem)
105121
{
106122
GlobalVariable selectedWord = ((GlobalVariable)listItem.Tag);
@@ -169,9 +185,7 @@ private void EditSelectedVariable(GlobalVariable variable)
169185
_variables.VariableRenamed(variable, nameWas);
170186
}
171187

172-
lvwWords.SelectedItems[0].SubItems[0].Text = variable.Name;
173-
lvwWords.SelectedItems[0].SubItems[1].Text = variable.Type;
174-
lvwWords.SelectedItems[0].SubItems[2].Text = variable.DefaultValue;
188+
FillListItemFromVariable(lvwWords.SelectedItems[0], variable);
175189
OnGlobalVariableChanged();
176190
}
177191
}

0 commit comments

Comments
 (0)