UI: Added recent files menu
This commit is contained in:
parent
2893664d0f
commit
9188baf7f1
7 changed files with 164 additions and 59 deletions
|
@ -87,7 +87,7 @@ extern "C" {
|
|||
}
|
||||
}
|
||||
|
||||
DllExport void __stdcall LoadRom(char* filename, char* patchFile) { _console->LoadRom((VirtualFile)filename, (VirtualFile)patchFile); }
|
||||
DllExport void __stdcall LoadRom(char* filename, char* patchFile) { _console->LoadRom((VirtualFile)filename, patchFile ? (VirtualFile)patchFile : VirtualFile()); }
|
||||
//DllExport void __stdcall AddKnownGameFolder(char* folder) { FolderUtilities::AddKnownGameFolder(folder); }
|
||||
//DllExport void __stdcall SetFolderOverrides(char* saveFolder, char* saveStateFolder, char* screenshotFolder) { FolderUtilities::SetFolderOverrides(saveFolder, saveStateFolder, screenshotFolder); }
|
||||
|
||||
|
|
|
@ -12,11 +12,10 @@ namespace Mesen.GUI.Config
|
|||
{
|
||||
public class Configuration
|
||||
{
|
||||
private const int MaxRecentFiles = 10;
|
||||
private bool _needToSave = false;
|
||||
|
||||
public string Version = "0.1.0";
|
||||
public List<RecentItem> RecentFiles;
|
||||
public RecentItems RecentFiles;
|
||||
public VideoConfig Video;
|
||||
public AudioConfig Audio;
|
||||
public DebugInfo Debug;
|
||||
|
@ -25,7 +24,7 @@ namespace Mesen.GUI.Config
|
|||
|
||||
public Configuration()
|
||||
{
|
||||
RecentFiles = new List<RecentItem>();
|
||||
RecentFiles = new RecentItems();
|
||||
Debug = new DebugInfo();
|
||||
Video = new VideoConfig();
|
||||
Audio = new AudioConfig();
|
||||
|
@ -61,21 +60,6 @@ namespace Mesen.GUI.Config
|
|||
public void InitializeDefaults()
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRecentFile(ResourcePath romFile, ResourcePath? patchFile)
|
||||
{
|
||||
RecentItem existingItem = RecentFiles.Where((item) => item.RomFile == romFile && item.PatchFile == patchFile).FirstOrDefault();
|
||||
if(existingItem != null) {
|
||||
RecentFiles.Remove(existingItem);
|
||||
}
|
||||
RecentItem recentItem = new RecentItem { RomFile = romFile, PatchFile = patchFile };
|
||||
|
||||
RecentFiles.Insert(0, recentItem);
|
||||
if(RecentFiles.Count > Configuration.MaxRecentFiles) {
|
||||
RecentFiles.RemoveAt(Configuration.MaxRecentFiles);
|
||||
}
|
||||
ConfigManager.ApplyChanges();
|
||||
}
|
||||
|
||||
public static Configuration Deserialize(string configFile)
|
||||
{
|
||||
|
@ -122,27 +106,6 @@ namespace Mesen.GUI.Config
|
|||
}
|
||||
}
|
||||
|
||||
public class RecentItem
|
||||
{
|
||||
public ResourcePath RomFile;
|
||||
public ResourcePath? PatchFile;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string text;
|
||||
/*if(ConfigManager.Config.PreferenceInfo.ShowFullPathInRecents) {
|
||||
text = RomFile.ReadablePath.Replace("&", "&&");
|
||||
} else {*/
|
||||
text = Path.GetFileName(RomFile.FileName).Replace("&", "&&");
|
||||
//}
|
||||
|
||||
if(PatchFile.HasValue) {
|
||||
text += " [" + Path.GetFileName(PatchFile.Value) + "]";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum DefaultKeyMappingType
|
||||
{
|
||||
|
|
71
UI/Config/RecentItems.cs
Normal file
71
UI/Config/RecentItems.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
using Mesen.GUI.Forms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Config
|
||||
{
|
||||
public class RecentItems
|
||||
{
|
||||
private const int MaxRecentFiles = 10;
|
||||
public List<RecentItem> Items;
|
||||
|
||||
public void AddRecentFile(ResourcePath romFile, ResourcePath? patchFile)
|
||||
{
|
||||
if(patchFile.HasValue && string.IsNullOrWhiteSpace(patchFile)) {
|
||||
patchFile = null;
|
||||
}
|
||||
|
||||
RecentItem existingItem = Items.Where((item) => item.RomFile == romFile && item.PatchFile == patchFile).FirstOrDefault();
|
||||
if(existingItem != null) {
|
||||
Items.Remove(existingItem);
|
||||
}
|
||||
RecentItem recentItem = new RecentItem { RomFile = romFile, PatchFile = patchFile };
|
||||
|
||||
Items.Insert(0, recentItem);
|
||||
if(Items.Count > RecentItems.MaxRecentFiles) {
|
||||
Items.RemoveAt(RecentItems.MaxRecentFiles);
|
||||
}
|
||||
ConfigManager.ApplyChanges();
|
||||
}
|
||||
|
||||
public List<ToolStripItem> GetMenuItems()
|
||||
{
|
||||
List<ToolStripItem> menuItems = new List<ToolStripItem>();
|
||||
foreach(RecentItem recentItem in Items) {
|
||||
ToolStripMenuItem tsmi = new ToolStripMenuItem();
|
||||
tsmi.Text = recentItem.ToString();
|
||||
tsmi.Click += (object sender, EventArgs args) => {
|
||||
EmuRunner.LoadRom(recentItem.RomFile, recentItem.PatchFile);
|
||||
};
|
||||
menuItems.Add(tsmi);
|
||||
}
|
||||
return menuItems;
|
||||
}
|
||||
}
|
||||
|
||||
public class RecentItem
|
||||
{
|
||||
public ResourcePath RomFile;
|
||||
public ResourcePath? PatchFile;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string text;
|
||||
/*if(ConfigManager.Config.PreferenceInfo.ShowFullPathInRecents) {
|
||||
text = RomFile.ReadablePath.Replace("&", "&&");
|
||||
} else {*/
|
||||
text = Path.GetFileName(RomFile.FileName).Replace("&", "&&");
|
||||
//}
|
||||
|
||||
if(PatchFile.HasValue) {
|
||||
text += " [" + Path.GetFileName(PatchFile.Value) + "]";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
}
|
||||
}
|
28
UI/EmuRunner.cs
Normal file
28
UI/EmuRunner.cs
Normal file
|
@ -0,0 +1,28 @@
|
|||
using Mesen.GUI.Config;
|
||||
using Mesen.GUI.Forms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Mesen.GUI
|
||||
{
|
||||
public static class EmuRunner
|
||||
{
|
||||
private static Thread _emuThread = null;
|
||||
|
||||
public static void LoadRom(ResourcePath romPath, ResourcePath? patchPath = null)
|
||||
{
|
||||
EmuApi.LoadRom(romPath, patchPath);
|
||||
|
||||
ConfigManager.Config.RecentFiles.AddRecentFile(romPath, patchPath);
|
||||
|
||||
_emuThread = new Thread(() => {
|
||||
EmuApi.Run();
|
||||
});
|
||||
_emuThread.Start();
|
||||
}
|
||||
}
|
||||
}
|
55
UI/Forms/frmMain.Designer.cs
generated
55
UI/Forms/frmMain.Designer.cs
generated
|
@ -32,6 +32,7 @@
|
|||
this.mnuFile = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuOpen = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuAudioConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuVideoConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRun = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -44,7 +45,10 @@
|
|||
this.mnuTilemapViewer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuEventViewer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.pnlRenderer = new System.Windows.Forms.Panel();
|
||||
this.mnuAudioConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRecentFiles = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuMain.SuspendLayout();
|
||||
this.pnlRenderer.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
@ -71,17 +75,22 @@
|
|||
// mnuFile
|
||||
//
|
||||
this.mnuFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuOpen});
|
||||
this.mnuOpen,
|
||||
this.toolStripMenuItem2,
|
||||
this.mnuRecentFiles,
|
||||
this.toolStripMenuItem6,
|
||||
this.mnuExit});
|
||||
this.mnuFile.Name = "mnuFile";
|
||||
this.mnuFile.Size = new System.Drawing.Size(37, 20);
|
||||
this.mnuFile.Text = "File";
|
||||
this.mnuFile.DropDownOpening += new System.EventHandler(this.mnuFile_DropDownOpening);
|
||||
//
|
||||
// mnuOpen
|
||||
//
|
||||
this.mnuOpen.Image = global::Mesen.GUI.Properties.Resources.Folder;
|
||||
this.mnuOpen.Name = "mnuOpen";
|
||||
this.mnuOpen.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
|
||||
this.mnuOpen.Size = new System.Drawing.Size(146, 22);
|
||||
this.mnuOpen.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuOpen.Text = "Open";
|
||||
this.mnuOpen.Click += new System.EventHandler(this.mnuOpen_Click);
|
||||
//
|
||||
|
@ -94,6 +103,14 @@
|
|||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
|
||||
this.optionsToolStripMenuItem.Text = "Options";
|
||||
//
|
||||
// mnuAudioConfig
|
||||
//
|
||||
this.mnuAudioConfig.Image = global::Mesen.GUI.Properties.Resources.Audio;
|
||||
this.mnuAudioConfig.Name = "mnuAudioConfig";
|
||||
this.mnuAudioConfig.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuAudioConfig.Text = "Audio";
|
||||
this.mnuAudioConfig.Click += new System.EventHandler(this.mnuAudioConfig_Click);
|
||||
//
|
||||
// mnuVideoConfig
|
||||
//
|
||||
this.mnuVideoConfig.Image = global::Mesen.GUI.Properties.Resources.VideoOptions;
|
||||
|
@ -197,13 +214,29 @@
|
|||
this.pnlRenderer.Size = new System.Drawing.Size(512, 448);
|
||||
this.pnlRenderer.TabIndex = 2;
|
||||
//
|
||||
// mnuAudioConfig
|
||||
// mnuRecentFiles
|
||||
//
|
||||
this.mnuAudioConfig.Image = global::Mesen.GUI.Properties.Resources.Audio;
|
||||
this.mnuAudioConfig.Name = "mnuAudioConfig";
|
||||
this.mnuAudioConfig.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuAudioConfig.Text = "Audio";
|
||||
this.mnuAudioConfig.Click += new System.EventHandler(this.mnuAudioConfig_Click);
|
||||
this.mnuRecentFiles.Name = "mnuRecentFiles";
|
||||
this.mnuRecentFiles.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuRecentFiles.Text = "Recent Files";
|
||||
//
|
||||
// toolStripMenuItem6
|
||||
//
|
||||
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
|
||||
this.toolStripMenuItem6.Size = new System.Drawing.Size(149, 6);
|
||||
//
|
||||
// mnuExit
|
||||
//
|
||||
this.mnuExit.Image = global::Mesen.GUI.Properties.Resources.Exit;
|
||||
this.mnuExit.Name = "mnuExit";
|
||||
this.mnuExit.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuExit.Text = "Exit";
|
||||
this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6);
|
||||
//
|
||||
// frmMain
|
||||
//
|
||||
|
@ -244,5 +277,9 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem mnuVideoConfig;
|
||||
private System.Windows.Forms.Panel pnlRenderer;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuAudioConfig;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRecentFiles;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem6;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuExit;
|
||||
}
|
||||
}
|
|
@ -136,7 +136,7 @@ namespace Mesen.GUI.Forms
|
|||
using(OpenFileDialog ofd = new OpenFileDialog()) {
|
||||
ofd.Filter = ResourceHelper.GetMessage("FilterRom");
|
||||
if(ofd.ShowDialog() == DialogResult.OK) {
|
||||
LoadFile(ofd.FileName);
|
||||
EmuRunner.LoadRom(ofd.FileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -151,14 +151,6 @@ namespace Mesen.GUI.Forms
|
|||
DebugApi.Step(1000);
|
||||
}
|
||||
|
||||
private void LoadFile(string filepath)
|
||||
{
|
||||
EmuApi.LoadRom(filepath);
|
||||
Task.Run(() => {
|
||||
EmuApi.Run();
|
||||
});
|
||||
}
|
||||
|
||||
protected override void OnDragDrop(DragEventArgs e)
|
||||
{
|
||||
base.OnDragDrop(e);
|
||||
|
@ -166,7 +158,7 @@ namespace Mesen.GUI.Forms
|
|||
try {
|
||||
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
if(File.Exists(files[0])) {
|
||||
LoadFile(files[0]);
|
||||
EmuRunner.LoadRom(files[0]);
|
||||
this.Activate();
|
||||
} else {
|
||||
//InteropEmu.DisplayMessage("Error", "File not found: " + files[0]);
|
||||
|
@ -190,5 +182,17 @@ namespace Mesen.GUI.Forms
|
|||
MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void mnuFile_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
mnuRecentFiles.DropDownItems.Clear();
|
||||
mnuRecentFiles.DropDownItems.AddRange(ConfigManager.Config.RecentFiles.GetMenuItems().ToArray());
|
||||
mnuRecentFiles.Enabled = ConfigManager.Config.RecentFiles.Items.Count > 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -233,6 +233,7 @@
|
|||
<Compile Include="Debugger\Config\DebuggerShortcutsConfig.cs" />
|
||||
<Compile Include="Debugger\Config\EventViewerInfo.cs" />
|
||||
<Compile Include="Debugger\Config\HexEditorInfo.cs" />
|
||||
<Compile Include="Config\RecentItems.cs" />
|
||||
<Compile Include="Debugger\Config\TraceLoggerInfo.cs" />
|
||||
<Compile Include="Debugger\Config\DebugInfo.cs" />
|
||||
<Compile Include="Controls\BaseControl.cs">
|
||||
|
@ -502,6 +503,7 @@
|
|||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ResourceExtractor.cs" />
|
||||
<Compile Include="EmuRunner.cs" />
|
||||
<Compile Include="RuntimeChecker.cs" />
|
||||
<Compile Include="SingleInstance.cs" />
|
||||
<Compile Include="Utilities\HexConverter.cs" />
|
||||
|
|
Loading…
Add table
Reference in a new issue