Mesen-SX/UI/Forms/frmMain.cs

195 lines
4.7 KiB
C#
Raw Normal View History

using Mesen.GUI.Config;
using Mesen.GUI.Debugger;
using Mesen.GUI.Forms.Config;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
2019-02-15 21:33:13 -05:00
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Mesen.GUI.Forms
{
2019-02-17 19:54:29 -05:00
public partial class frmMain : BaseInputForm
{
private NotificationListener _notifListener;
public frmMain(string[] args)
{
InitializeComponent();
ResourceHelper.LoadResources(Language.English);
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
EmuApi.InitDll();
EmuApi.InitializeEmu(ConfigManager.HomeFolder, Handle, ctrlRenderer.Handle, false, false, false);
ConfigManager.Config.ApplyConfig();
_notifListener = new NotificationListener();
_notifListener.OnNotification += OnNotificationReceived;
new frmLogWindow().Show();
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if(_notifListener != null) {
_notifListener.Dispose();
_notifListener = null;
}
ConfigManager.ApplyChanges();
DebugApi.ResumeExecution();
EmuApi.Stop();
EmuApi.Release();
}
private void OnNotificationReceived(NotificationEventArgs e)
{
switch(e.NotificationType) {
case ConsoleNotificationType.ResolutionChanged:
ScreenSize size = EmuApi.GetScreenSize(false);
this.BeginInvoke((Action)(() => {
UpdateViewerSize(size);
}));
break;
}
}
private void UpdateViewerSize(ScreenSize screenSize)
{
//this.Resize -= frmMain_Resize;
//if(forceUpdate || (!_customSize && this.WindowState != FormWindowState.Maximized)) {
Size newSize = new Size(screenSize.Width, screenSize.Height);
//UpdateScaleMenu(size.Scale);
this.ClientSize = new Size(newSize.Width, newSize.Height + pnlRenderer.Top);
//}
ctrlRenderer.Size = new Size(screenSize.Width, screenSize.Height);
ctrlRenderer.Top = (pnlRenderer.Height - ctrlRenderer.Height) / 2;
ctrlRenderer.Left = (pnlRenderer.Width - ctrlRenderer.Width) / 2;
//this.Resize += frmMain_Resize;
}
private void mnuVideoConfig_Click(object sender, EventArgs e)
{
using(frmVideoConfig frm = new frmVideoConfig()) {
frm.ShowDialog(sender, this);
}
ConfigManager.Config.Video.ApplyConfig();
}
private void mnuAudioConfig_Click(object sender, EventArgs e)
{
using(frmAudioConfig frm = new frmAudioConfig()) {
frm.ShowDialog(sender, this);
}
ConfigManager.Config.Audio.ApplyConfig();
}
private void mnuDebugger_Click(object sender, EventArgs e)
{
DebugWindowManager.OpenDebugWindow(DebugWindow.Debugger);
}
private void mnuTraceLogger_Click(object sender, EventArgs e)
{
DebugWindowManager.OpenDebugWindow(DebugWindow.TraceLogger);
}
2019-02-15 21:33:13 -05:00
private void mnuMemoryTools_Click(object sender, EventArgs e)
{
DebugWindowManager.OpenDebugWindow(DebugWindow.MemoryTools);
2019-02-15 21:33:13 -05:00
}
2019-03-03 16:34:23 -05:00
private void mnuTilemapViewer_Click(object sender, EventArgs e)
{
DebugWindowManager.OpenDebugWindow(DebugWindow.TilemapViewer);
}
2019-03-07 20:12:32 -05:00
private void mnuEventViewer_Click(object sender, EventArgs e)
{
DebugWindowManager.OpenDebugWindow(DebugWindow.EventViewer);
}
private void mnuStep_Click(object sender, EventArgs e)
{
DebugApi.Step(1);
}
private void mnuOpen_Click(object sender, EventArgs e)
{
using(OpenFileDialog ofd = new OpenFileDialog()) {
ofd.Filter = ResourceHelper.GetMessage("FilterRom");
if(ofd.ShowDialog() == DialogResult.OK) {
2019-02-15 21:33:13 -05:00
LoadFile(ofd.FileName);
}
}
}
private void mnuRun_Click(object sender, EventArgs e)
{
DebugApi.ResumeExecution();
}
private void mnuRun100Instructions_Click(object sender, EventArgs e)
{
DebugApi.Step(1000);
}
2019-02-15 21:33:13 -05:00
private void LoadFile(string filepath)
{
EmuApi.LoadRom(filepath);
Task.Run(() => {
EmuApi.Run();
});
}
protected override void OnDragDrop(DragEventArgs e)
{
base.OnDragDrop(e);
try {
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if(File.Exists(files[0])) {
LoadFile(files[0]);
this.Activate();
} else {
//InteropEmu.DisplayMessage("Error", "File not found: " + files[0]);
}
} catch(Exception ex) {
MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
}
}
protected override void OnDragEnter(DragEventArgs e)
{
base.OnDragEnter(e);
try {
if(e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) {
e.Effect = DragDropEffects.Copy;
} else {
//InteropEmu.DisplayMessage("Error", "Unsupported operation.");
}
} catch(Exception ex) {
MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
}
}
}
}