clean up recent roms contextmenu processing, and add support for launching the whole shell contextmenu.. its kind of cruddy though.

This commit is contained in:
zeromus 2014-09-30 08:51:48 +00:00
parent adf07367ad
commit 5ebb1b1e2e
5 changed files with 1870 additions and 19 deletions

View File

@ -66,6 +66,9 @@
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="GongShell">
<HintPath>..\References\GongShell.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib">
<HintPath>..\References\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>

View File

@ -37,7 +37,8 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions
};
//TODO - use standard methods to split filename (hawkfile acquire?)
var hf = new HawkFile(temp);
var hf = new HawkFile();
hf.Parse(temp);
bool canExplore = true;
if (!File.Exists(hf.FullPathWithoutMember))
canExplore = false;
@ -50,31 +51,56 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions
var timestamp = File.GetLastWriteTime(hf.FullPathWithoutMember);
var tsmiTimestamp = new ToolStripLabel { Text = timestamp.ToString() };
//make a menuitem to let you explore to it
var tsmiExplore = new ToolStripMenuItem { Text = "&Explore" };
tsmiExplore.Click += (o, ev) => { System.Diagnostics.Process.Start("explorer.exe", "/select, " + hf.FullPathWithoutMember); };
//make a menuitem to let you copy the path
var tsmiCopyPath = new ToolStripMenuItem { Text = "&Copy Canonical Path" };
tsmiCopyPath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(temp); };
tsdd.Items.Add(tsmiTimestamp);
var sep = new ToolStripSeparator();
tsdd.Items.Add(sep);
tsdd.Items.Add(tsmiExplore);
tsdd.Items.Add(tsmiCopyPath);
//make a special action to open archive in default archiver
tsdd.Items.Add(new ToolStripSeparator());
if (hf.IsArchive)
{
var tsmiOpenArchive = new ToolStripMenuItem { Text = "Open &Archive" };
tsmiOpenArchive.Click += (o, ev) => { System.Diagnostics.Process.Start(hf.FullPathWithoutMember); };
tsdd.Items.Add(tsmiOpenArchive);
//make a menuitem to let you copy the path
var tsmiCopyCanonicalPath = new ToolStripMenuItem { Text = "&Copy Canonical Path" };
tsmiCopyCanonicalPath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(temp); };
tsdd.Items.Add(tsmiCopyCanonicalPath);
var tsmiCopyArchivePath = new ToolStripMenuItem { Text = "Copy Archive Path" };
tsmiCopyArchivePath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(hf.FullPathWithoutMember); };
tsdd.Items.Add(tsmiCopyArchivePath);
var tsmiOpenArchive = new ToolStripMenuItem { Text = "Open &Archive" };
tsmiOpenArchive.Click += (o, ev) => { System.Diagnostics.Process.Start(hf.FullPathWithoutMember); };
tsdd.Items.Add(tsmiOpenArchive);
}
else
{
//make a menuitem to let you copy the path
var tsmiCopyPath = new ToolStripMenuItem { Text = "&Copy Path" };
tsmiCopyPath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(temp); };
tsdd.Items.Add(tsmiCopyPath);
}
tsdd.Items.Add(new ToolStripSeparator());
//make a menuitem to let you explore to it
var tsmiExplore = new ToolStripMenuItem { Text = "&Explore" };
tsmiExplore.Click += (o, ev) => { System.Diagnostics.Process.Start("explorer.exe", "/select, " + hf.FullPathWithoutMember); };
tsdd.Items.Add(tsmiExplore);
var tsmiCopyFile = new ToolStripMenuItem { Text = "Copy &File" };
var lame = new System.Collections.Specialized.StringCollection();
lame.Add(hf.FullPathWithoutMember);
tsmiCopyFile.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetFileDropList(lame); };
tsdd.Items.Add(tsmiCopyFile);
var tsmiTest = new ToolStripMenuItem { Text = "&Shell Context Menu" };
tsmiTest.Click += (o, ev) => {
var si = new GongSolutions.Shell.ShellItem(hf.FullPathWithoutMember);
var scm = new GongSolutions.Shell.ShellContextMenu(si);
var tsddi = o as ToolStripDropDownItem;
tsddi.Owner.Update();
scm.ShowContextMenu(tsddi.Owner, new System.Drawing.Point(0, 0));
};
tsdd.Items.Add(tsmiTest);
tsdd.Items.Add(new ToolStripSeparator());
}

View File

@ -43,6 +43,7 @@ namespace BizHawk.Common
private string _memberPath;
private Stream _rootStream, _boundStream;
private IHawkFileArchiveHandler _extractor;
private bool _isArchive;
private List<HawkFileArchiveItem> _archiveItems;
private int? _boundIndex;
@ -89,6 +90,11 @@ namespace BizHawk.Common
/// </summary>
public string FullPathWithoutMember { get { return _rootPath; } }
/// <summary>
/// returns the member path part of the bound file
/// </summary>
public string ArchiveMemberPath { get { return _memberPath; } }
/// <summary>
/// returns the extension of Name
/// </summary>
@ -97,7 +103,7 @@ namespace BizHawk.Common
/// <summary>
/// Indicates whether this file is an archive
/// </summary>
public bool IsArchive { get { return _extractor != null; } }
public bool IsArchive { get { return _isArchive; } }
public IList<HawkFileArchiveItem> ArchiveItems
{
@ -167,6 +173,26 @@ namespace BizHawk.Common
/// </summary>
public string[] NonArchiveExtensions = { };
/// <summary>
/// Parses the given filename to create an un-opened HawkFile with some information available about its path constitution
/// </summary>
public void Parse(string path)
{
bool isArchivePath = IsCanonicalArchivePath(path);
if (isArchivePath)
{
var parts = path.Split('|');
path = parts[0];
_memberPath = parts[1];
//we're gonna assume, on parsing, that this is
_isArchive = true;
}
_rootPath = path;
}
/// <summary>
/// Parses the given filename and then opens it. This may take a while (the archive may be accessed and scanned).
/// </summary>
public void Open(string path)
{
if (_rootPath != null)
@ -419,6 +445,7 @@ namespace BizHawk.Common
try
{
ScanArchive();
_isArchive = true;
}
catch
{

1795
References/GongShell.XML Normal file

File diff suppressed because it is too large Load Diff

BIN
References/GongShell.dll Normal file

Binary file not shown.