Skip to content

Commit 7d734f3

Browse files
committed
Bug fixes and changed Target Framework
- Lowered Target Framework to v4.5.1 - Only loads the currently shown tab - No longer loads all data upon startup - Clears rows of other unused tabs to free memory - Disposing underlying streams of WZ files after completing loads
1 parent 73d4684 commit 7d734f3

File tree

11 files changed

+94
-96
lines changed

11 files changed

+94
-96
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# WzVisualizer
22
A GM Handtool written in C#
3-
Target framework .NET 4.6.1 using [MapleLib](https://github.com/haha01haha01/MapleLib/tree/59b31c04d2327d8d6a3f37c2b6907d9d817c66ab)
3+
Target framework .NET 4.5.1 using [MapleLib](https://github.com/haha01haha01/MapleLib/tree/59b31c04d2327d8d6a3f37c2b6907d9d817c66ab)
44

55
- Automatically copies cell contents upon selection
66
- Select multiple cells, rows or columns

WzVisualizer.sln

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ Global
3131
{A1DFB98D-E6D1-4DDE-91A2-710C0BA431CB}.Release|x86.Build.0 = Release|Any CPU
3232
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
3333
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|Any CPU.Build.0 = Debug|Any CPU
34-
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x64.ActiveCfg = Debug|x64
35-
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x64.Build.0 = Debug|x64
36-
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x86.ActiveCfg = Debug|x86
37-
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x86.Build.0 = Debug|x86
34+
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x64.ActiveCfg = Debug|Any CPU
35+
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x64.Build.0 = Debug|Any CPU
36+
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x86.ActiveCfg = Debug|Any CPU
37+
{28AAB36D-942E-4476-A000-0E9DE380F390}.Debug|x86.Build.0 = Debug|Any CPU
3838
{28AAB36D-942E-4476-A000-0E9DE380F390}.Release|Any CPU.ActiveCfg = Release|Any CPU
3939
{28AAB36D-942E-4476-A000-0E9DE380F390}.Release|Any CPU.Build.0 = Release|Any CPU
4040
{28AAB36D-942E-4476-A000-0E9DE380F390}.Release|x64.ActiveCfg = Release|x64

WzVisualizer/App.config

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
<?xml version="1.0" encoding="utf-8" ?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<configuration>
33
<configSections>
4-
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
5-
<section name="WzVisualizer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
4+
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
5+
<section name="WzVisualizer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
66
</sectionGroup>
77
</configSections>
88
<startup>
9-
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
10-
</startup>
9+
10+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/></startup>
1111
<userSettings>
1212
<WzVisualizer.Properties.Settings>
1313
<setting name="PathCache" serializeAs="String">
14-
<value />
14+
<value/>
1515
</setting>
1616
</WzVisualizer.Properties.Settings>
1717
</userSettings>
18-
</configuration>
18+
</configuration>

WzVisualizer/GUI/Form1.Designer.cs

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

WzVisualizer/GUI/Form1.cs

Lines changed: 31 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
273273
}
274274
}
275275
}
276+
_CharacterWZ.Dispose();
277+
_CharacterWZ = null;
276278
break;
277279
}
278280
case 1: // Use
@@ -347,6 +349,20 @@ private void DisposeWzFiles()
347349
_CharacterWZ = null;
348350
}
349351

352+
public void AddGridRow(DataGridView grid, BinData binData)
353+
{
354+
string allProperties = "";
355+
foreach (string prop in binData.properties)
356+
allProperties += prop + "\r\n";
357+
if (InvokeRequired)
358+
{
359+
Image image = binData?.image;
360+
Invoke(new Action(() => {
361+
grid.Rows.Add(new object[] { binData.ID, image, binData.Name, allProperties });
362+
}));
363+
}
364+
}
365+
350366
#region event handling
351367
/// <summary>
352368
/// Update the Window's clipboard when a cell is selected
@@ -397,19 +413,16 @@ private void BtnWzLoad_Click(object sender, EventArgs e)
397413
{
398414
if (!folderPath.Equals(Settings.Default.PathCache))
399415
{
400-
DisposeWzFiles();
401416
Settings.Default.PathCache = folderPath;
402417
Settings.Default.Save();
403418
}
404419
WzMapleVersion mapleVersion = (WzMapleVersion)ComboEncType.SelectedIndex;
405-
if (_StringWZ == null)
406-
{
407-
_StringWZ = new WzFile(folderPath + "/String.wz", mapleVersion);
408-
_StringWZ.ParseWzFile();
409-
StringUtility = new WzStringUtility(_StringWZ);
410-
}
420+
_StringWZ = new WzFile(folderPath + "/String.wz", mapleVersion);
421+
_StringWZ.ParseWzFile();
422+
StringUtility = new WzStringUtility(_StringWZ);
411423
LoadWzData(mapleVersion, folderPath);
412424
}
425+
DisposeWzFiles();
413426
}
414427

415428
/// <summary>
@@ -440,50 +453,23 @@ private void BtnSave_Click(object sender, EventArgs e)
440453

441454
private void MainForm_Load(object sender, EventArgs e)
442455
{
443-
444-
#region loading equip data
445456
GridIOUtility.ImportGrid("equips/Hairs.bin", GridEHairs, AddGridRow);
446-
GridIOUtility.ImportGrid("equips/Faces.bin", GridEFaces, AddGridRow);
447-
GridIOUtility.ImportGrid("equips/Weapons.bin", GridEWeapons, AddGridRow);
448-
GridIOUtility.ImportGrid("equips/Accessory.bin", GridEAccessory, AddGridRow);
449-
GridIOUtility.ImportGrid("equips/Caps.bin", GridECaps, AddGridRow);
450-
GridIOUtility.ImportGrid("equips/Overalls.bin", GridELongcoats, AddGridRow);
451-
GridIOUtility.ImportGrid("equips/Tops.bin", GridETops, AddGridRow);
452-
GridIOUtility.ImportGrid("equips/Bottoms.bin", GridEBottoms, AddGridRow);
453-
GridIOUtility.ImportGrid("equips/Shoes.bin", GridEShoes, AddGridRow);
454-
GridIOUtility.ImportGrid("equips/Capes.bin", GridECapes, AddGridRow);
455-
GridIOUtility.ImportGrid("equips/Gloves.bin", GridEGloves, AddGridRow);
456-
GridIOUtility.ImportGrid("equips/Rings.bin", GridERings, AddGridRow);
457-
GridIOUtility.ImportGrid("equips/Shields.bin", GridEShields, AddGridRow);
458-
GridIOUtility.ImportGrid("equips/Mounts.bin", GridETames, AddGridRow);
459-
#endregion
460-
461-
#region loading use data
462-
GridIOUtility.ImportGrid("use/Consumes.bin", GridUConsumes, AddGridRow);
463-
GridIOUtility.ImportGrid("use/Scrolls.bin", GridUScrolls, AddGridRow);
464-
GridIOUtility.ImportGrid("use/Projectiles.bin", GridUProjectiles, AddGridRow);
465-
#endregion
466-
467-
#region loading setup data
468-
GridIOUtility.ImportGrid("setup/Chairs.bin", GridSChairs, AddGridRow);
469-
GridIOUtility.ImportGrid("setup/Others.bin", GridSOthers, AddGridRow);
470-
#endregion
471-
472-
GridIOUtility.ImportGrid("Etc/Etc.bin", GridEtc, AddGridRow);
473-
GridIOUtility.ImportGrid("Cash/Cash.bin", GridCash, AddGridRow);
474457
}
475458
#endregion
476459

477-
public void AddGridRow(DataGridView grid, BinData binData)
460+
private void TabEquips_Selected(object sender, TabControlEventArgs e)
478461
{
479-
string allProperties = "";
480-
foreach (string prop in binData.properties)
481-
allProperties += prop + "\r\n";
482-
if (InvokeRequired)
462+
FieldInfo[] fields = GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
463+
foreach (FieldInfo field in fields)
483464
{
484-
Invoke(new Action(() => {
485-
grid.Rows.Add(new object[] { binData.ID, binData?.image, binData.Name, allProperties });
486-
}));
465+
if (field.Name.StartsWith("Grid") && field.GetValue(this) is DataGridView grid && grid.Rows.Count > 0)
466+
{
467+
grid.Rows.Clear();
468+
GC.Collect();
469+
GC.WaitForPendingFinalizers();
470+
}
471+
if (field.Name.Equals(e.TabPage.Name))
472+
GridIOUtility.ImportGrid(string.Format("equips/{0}.bin", e.TabPage.Text), (DataGridView)e.TabPage.Controls[0], AddGridRow);
487473
}
488474
}
489475
}

WzVisualizer/GUI/Form1.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@
262262
<value>True</value>
263263
</metadata>
264264
<metadata name="mainFormBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
265-
<value>17, 17</value>
265+
<value>22, 18</value>
266266
</metadata>
267267
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
268268
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

WzVisualizer/IO/BinData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace WzVisualizer
1010
public class BinData
1111
{
1212
public int ID;
13-
public Bitmap image;
13+
public Image image;
1414
public string _name;
1515
public List<string> properties = new List<string>();
1616

WzVisualizer/IO/GridIOUtility.cs

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,33 @@ class GridIOUtility
1717

1818
private static void ReadFileContents(string path, ref List<BinData> datas)
1919
{
20-
using (BinaryReader breader = new BinaryReader(new FileStream(path, FileMode.Open)))
20+
using (FileStream fstream = new FileStream(path, FileMode.Open))
2121
{
22-
int rows = breader.ReadInt32();
23-
for (int i = 0; i < rows; i++)
22+
using (BinaryReader breader = new BinaryReader(fstream))
2423
{
25-
BinData binData = new BinData();
26-
binData.ID = breader.ReadInt32();
27-
binData.Name = breader.ReadString();
28-
int propCount = breader.ReadInt32();
29-
for (int p = 0; p < propCount; p++)
30-
binData.properties.Add(breader.ReadString());
31-
if (breader.ReadBoolean())
24+
int rows = breader.ReadInt32();
25+
for (int i = 0; i < rows; i++)
3226
{
33-
int bufferLength = breader.ReadInt32();
34-
byte[] buffer = breader.ReadBytes(bufferLength);
35-
using (MemoryStream memStream = new MemoryStream(buffer))
36-
binData.image = new Bitmap(memStream);
27+
BinData binData = new BinData();
28+
binData.ID = breader.ReadInt32();
29+
binData.Name = breader.ReadString();
30+
int propCount = breader.ReadInt32();
31+
for (int p = 0; p < propCount; p++)
32+
binData.properties.Add(breader.ReadString());
33+
if (breader.ReadBoolean())
34+
{
35+
int bufferLength = breader.ReadInt32();
36+
byte[] buffer = breader.ReadBytes(bufferLength);
37+
using (MemoryStream memStream = new MemoryStream(buffer))
38+
{
39+
binData.image = Image.FromStream(memStream);
40+
}
41+
}
42+
string allProperties = "";
43+
foreach (string prop in binData.properties)
44+
allProperties += prop + "\r\n";
45+
datas.Add(binData);
3746
}
38-
string allProperties = "";
39-
foreach (string prop in binData.properties)
40-
allProperties += prop + "\r\n";
41-
datas.Add(binData);
4247
}
4348
}
4449
}

WzVisualizer/Properties/Resources.Designer.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)