Skip to content

Commit

Permalink
add support for multiple directories and easily switch between them
Browse files Browse the repository at this point in the history
  • Loading branch information
LeftofZen committed Nov 7, 2023
1 parent f8a34f5 commit 3d5b291
Show file tree
Hide file tree
Showing 6 changed files with 319 additions and 19 deletions.
28 changes: 26 additions & 2 deletions OpenLocoToolGui/GuiSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,33 @@ namespace OpenLocoToolGui
{
public class GuiSettings
{
public string ObjDataDirectory { get; set; }
public string ObjDataDirectory
{
get => objectDirectory;
set
{
objectDirectory = value;
ObjDataDirectories ??= new();
ObjDataDirectories.Add(objectDirectory);
}
}
string objectDirectory;

public string DataDirectory { get; set; }
public HashSet<string> ObjDataDirectories { get; set; }

public string DataDirectory
{
get => dataDirectory;
set
{
dataDirectory = value;
DataDirectories ??= new();
DataDirectories.Add(dataDirectory);
}
}
string dataDirectory;

public HashSet<string> DataDirectories { get; set; }

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

Expand Down
46 changes: 39 additions & 7 deletions OpenLocoToolGui/MainForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 56 additions & 10 deletions OpenLocoToolGui/MainForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ void InitUI(bool vanillaOnly, string filter)

InitFileTreeView(vanillaOnly, filter);
InitCategoryTreeView(vanillaOnly, filter);
InitToolStripMenuItems();
}

bool LoadObjDataDirectory(string directory, bool useExistingIndex)
Expand Down Expand Up @@ -294,6 +295,41 @@ void InitCategoryTreeView(bool vanillaOnly, string fileFilter)
tvObjType.ResumeLayout(true);
}

void InitToolStripMenuItems()
{
// clear dynamic items
while (objectDirectoriesToolStripMenuItem.DropDownItems.Count > 2)
{
objectDirectoriesToolStripMenuItem.DropDownItems.RemoveAt(2);
}

// regenerate them
List<ToolStripMenuItem> newObjDirs = new();
foreach (var objDir in model.Settings.ObjDataDirectories)
{
var tsmi = new ToolStripMenuItem(objDir + (model.Settings.ObjDataDirectory == objDir ? " (Current)" : string.Empty));
tsmi.Click += (sender, e) => setObjectDirectoryToolStripMenuItem_ClickCore(objDir);
newObjDirs.Add(tsmi);
}
objectDirectoriesToolStripMenuItem.DropDownItems.AddRange(newObjDirs.ToArray());

// clear dynamic items
while (dataDirectoriesToolStripMenuItem.DropDownItems.Count > 2)
{
dataDirectoriesToolStripMenuItem.DropDownItems.RemoveAt(2);
}

// regenerate them
List<ToolStripMenuItem> newDataDirs = new();
foreach (var dataDir in model.Settings.DataDirectories)
{
var tsmi = new ToolStripMenuItem(dataDir + (model.Settings.DataDirectory == dataDir ? " (Current)" : string.Empty));
tsmi.Click += (sender, e) => setDataDirectoryToolStripMenuItem_ClickCore(dataDir);
newDataDirs.Add(tsmi);
}
dataDirectoriesToolStripMenuItem.DropDownItems.AddRange(newDataDirs.ToArray());
}

// note: doesn't work atm
private void saveChangesToolStripMenuItem_Click(object sender, EventArgs e)
{
Expand Down Expand Up @@ -333,23 +369,33 @@ private void setObjectDirectoryToolStripMenuItem_Click(object sender, EventArgs
{
if (objectDirBrowser.ShowDialog(this) == DialogResult.OK)
{
if (LoadObjDataDirectory(objectDirBrowser.SelectedPath, true))
{
InitUI(cbVanillaObjects.Checked, tbFileFilter.Text);
}
setObjectDirectoryToolStripMenuItem_ClickCore(objectDirBrowser.SelectedPath);
}
}

private void setObjectDirectoryToolStripMenuItem_ClickCore(string path)
{
if (LoadObjDataDirectory(path, true))
{
InitUI(cbVanillaObjects.Checked, tbFileFilter.Text);
}
}

private void setDataDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
{
if (objectDirBrowser.ShowDialog(this) == DialogResult.OK)
{
if (model.LoadDataDirectory(objectDirBrowser.SelectedPath))
{
pgObject.SelectedObject = model.G1;
var images = CreateImages(model.G1.G1Elements, model.Palette);
CurrentUIImages = CreateImageControls(images, model.G1.G1Elements).ToList();
}
setDataDirectoryToolStripMenuItem_ClickCore(objectDirBrowser.SelectedPath);
}
}

private void setDataDirectoryToolStripMenuItem_ClickCore(string path)
{
if (model.LoadDataDirectory(path))
{
pgObject.SelectedObject = model.G1;
var images = CreateImages(model.G1.G1Elements, model.Palette);
CurrentUIImages = CreateImageControls(images, model.G1.G1Elements).ToList();
}
}

Expand Down
15 changes: 15 additions & 0 deletions OpenLocoToolGui/OpenLocoToolGui.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@
<ProjectReference Include="..\OpenLocoTool\OpenLocoTool.csproj" />
</ItemGroup>

<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>

<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>

<ItemGroup>
<None Update="palette.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
Expand Down
63 changes: 63 additions & 0 deletions OpenLocoToolGui/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 3d5b291

Please sign in to comment.