Skip to content

Commit 3d5b291

Browse files
committed
add support for multiple directories and easily switch between them
1 parent f8a34f5 commit 3d5b291

File tree

6 files changed

+319
-19
lines changed

6 files changed

+319
-19
lines changed

OpenLocoToolGui/GuiSettings.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,33 @@ namespace OpenLocoToolGui
55
{
66
public class GuiSettings
77
{
8-
public string ObjDataDirectory { get; set; }
8+
public string ObjDataDirectory
9+
{
10+
get => objectDirectory;
11+
set
12+
{
13+
objectDirectory = value;
14+
ObjDataDirectories ??= new();
15+
ObjDataDirectories.Add(objectDirectory);
16+
}
17+
}
18+
string objectDirectory;
919

10-
public string DataDirectory { get; set; }
20+
public HashSet<string> ObjDataDirectories { get; set; }
21+
22+
public string DataDirectory
23+
{
24+
get => dataDirectory;
25+
set
26+
{
27+
dataDirectory = value;
28+
DataDirectories ??= new();
29+
DataDirectories.Add(dataDirectory);
30+
}
31+
}
32+
string dataDirectory;
33+
34+
public HashSet<string> DataDirectories { get; set; }
1135

1236
public string PaletteFile { get; set; } = "palette.png";
1337

OpenLocoToolGui/MainForm.Designer.cs

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

OpenLocoToolGui/MainForm.cs

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ void InitUI(bool vanillaOnly, string filter)
127127

128128
InitFileTreeView(vanillaOnly, filter);
129129
InitCategoryTreeView(vanillaOnly, filter);
130+
InitToolStripMenuItems();
130131
}
131132

132133
bool LoadObjDataDirectory(string directory, bool useExistingIndex)
@@ -294,6 +295,41 @@ void InitCategoryTreeView(bool vanillaOnly, string fileFilter)
294295
tvObjType.ResumeLayout(true);
295296
}
296297

298+
void InitToolStripMenuItems()
299+
{
300+
// clear dynamic items
301+
while (objectDirectoriesToolStripMenuItem.DropDownItems.Count > 2)
302+
{
303+
objectDirectoriesToolStripMenuItem.DropDownItems.RemoveAt(2);
304+
}
305+
306+
// regenerate them
307+
List<ToolStripMenuItem> newObjDirs = new();
308+
foreach (var objDir in model.Settings.ObjDataDirectories)
309+
{
310+
var tsmi = new ToolStripMenuItem(objDir + (model.Settings.ObjDataDirectory == objDir ? " (Current)" : string.Empty));
311+
tsmi.Click += (sender, e) => setObjectDirectoryToolStripMenuItem_ClickCore(objDir);
312+
newObjDirs.Add(tsmi);
313+
}
314+
objectDirectoriesToolStripMenuItem.DropDownItems.AddRange(newObjDirs.ToArray());
315+
316+
// clear dynamic items
317+
while (dataDirectoriesToolStripMenuItem.DropDownItems.Count > 2)
318+
{
319+
dataDirectoriesToolStripMenuItem.DropDownItems.RemoveAt(2);
320+
}
321+
322+
// regenerate them
323+
List<ToolStripMenuItem> newDataDirs = new();
324+
foreach (var dataDir in model.Settings.DataDirectories)
325+
{
326+
var tsmi = new ToolStripMenuItem(dataDir + (model.Settings.DataDirectory == dataDir ? " (Current)" : string.Empty));
327+
tsmi.Click += (sender, e) => setDataDirectoryToolStripMenuItem_ClickCore(dataDir);
328+
newDataDirs.Add(tsmi);
329+
}
330+
dataDirectoriesToolStripMenuItem.DropDownItems.AddRange(newDataDirs.ToArray());
331+
}
332+
297333
// note: doesn't work atm
298334
private void saveChangesToolStripMenuItem_Click(object sender, EventArgs e)
299335
{
@@ -333,23 +369,33 @@ private void setObjectDirectoryToolStripMenuItem_Click(object sender, EventArgs
333369
{
334370
if (objectDirBrowser.ShowDialog(this) == DialogResult.OK)
335371
{
336-
if (LoadObjDataDirectory(objectDirBrowser.SelectedPath, true))
337-
{
338-
InitUI(cbVanillaObjects.Checked, tbFileFilter.Text);
339-
}
372+
setObjectDirectoryToolStripMenuItem_ClickCore(objectDirBrowser.SelectedPath);
373+
}
374+
}
375+
376+
private void setObjectDirectoryToolStripMenuItem_ClickCore(string path)
377+
{
378+
if (LoadObjDataDirectory(path, true))
379+
{
380+
InitUI(cbVanillaObjects.Checked, tbFileFilter.Text);
340381
}
341382
}
342383

343384
private void setDataDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
344385
{
345386
if (objectDirBrowser.ShowDialog(this) == DialogResult.OK)
346387
{
347-
if (model.LoadDataDirectory(objectDirBrowser.SelectedPath))
348-
{
349-
pgObject.SelectedObject = model.G1;
350-
var images = CreateImages(model.G1.G1Elements, model.Palette);
351-
CurrentUIImages = CreateImageControls(images, model.G1.G1Elements).ToList();
352-
}
388+
setDataDirectoryToolStripMenuItem_ClickCore(objectDirBrowser.SelectedPath);
389+
}
390+
}
391+
392+
private void setDataDirectoryToolStripMenuItem_ClickCore(string path)
393+
{
394+
if (model.LoadDataDirectory(path))
395+
{
396+
pgObject.SelectedObject = model.G1;
397+
var images = CreateImages(model.G1.G1Elements, model.Palette);
398+
CurrentUIImages = CreateImageControls(images, model.G1.G1Elements).ToList();
353399
}
354400
}
355401

OpenLocoToolGui/OpenLocoToolGui.csproj

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,21 @@
2222
<ProjectReference Include="..\OpenLocoTool\OpenLocoTool.csproj" />
2323
</ItemGroup>
2424

25+
<ItemGroup>
26+
<Compile Update="Properties\Resources.Designer.cs">
27+
<DesignTime>True</DesignTime>
28+
<AutoGen>True</AutoGen>
29+
<DependentUpon>Resources.resx</DependentUpon>
30+
</Compile>
31+
</ItemGroup>
32+
33+
<ItemGroup>
34+
<EmbeddedResource Update="Properties\Resources.resx">
35+
<Generator>ResXFileCodeGenerator</Generator>
36+
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
37+
</EmbeddedResource>
38+
</ItemGroup>
39+
2540
<ItemGroup>
2641
<None Update="palette.png">
2742
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

OpenLocoToolGui/Properties/Resources.Designer.cs

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

0 commit comments

Comments
 (0)