BizHawk/BizHawk.Client.EmuHawk/MainForm.Events.cs

3181 lines
95 KiB
C#
Raw Normal View History

using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Common.IEmulatorExtensions;
using BizHawk.Emulation.Cores.Atari.A7800Hawk;
using BizHawk.Emulation.Cores.Calculators;
using BizHawk.Emulation.Cores.ColecoVision;
using BizHawk.Emulation.Cores.Nintendo.NES;
using BizHawk.Emulation.Cores.Nintendo.N64;
using BizHawk.Emulation.Cores.Nintendo.SNES;
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
2013-12-22 20:41:21 +00:00
using BizHawk.Emulation.Cores.PCEngine;
using BizHawk.Emulation.Cores.Sega.MasterSystem;
using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES;
using BizHawk.Client.Common;
using BizHawk.Client.EmuHawk.CustomControls;
using BizHawk.Client.EmuHawk.WinFormExtensions;
using BizHawk.Client.EmuHawk.ToolExtensions;
2015-04-13 00:46:11 +00:00
using BizHawk.Emulation.Cores.Computers.AppleII;
using BizHawk.Client.ApiHawk;
2017-05-16 00:52:05 +00:00
using BizHawk.Emulation.Cores.Computers.Commodore64;
2017-07-20 00:18:13 +00:00
using BizHawk.Emulation.Cores.Nintendo.Gameboy;
using BizHawk.Emulation.Cores.Computers.SinclairSpectrum;
namespace BizHawk.Client.EmuHawk
{
2017-05-22 16:14:38 +00:00
public partial class MainForm
{
2013-10-27 07:54:00 +00:00
#region File Menu
private void FileSubMenu_DropDownOpened(object sender, EventArgs e)
{
SaveStateSubMenu.Enabled =
LoadStateSubMenu.Enabled =
SaveSlotSubMenu.Enabled =
Emulator.HasSavestates();
2013-10-27 07:54:00 +00:00
OpenRomMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Open ROM"].Bindings;
CloseRomMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Close ROM"].Bindings;
MovieSubMenu.Enabled =
CloseRomMenuItem.Enabled =
!Emulator.IsNull();
var hasSaveRam = Emulator.HasSaveRam();
bool needBold = hasSaveRam && Emulator.AsSaveRam().SaveRamModified;
SaveRAMSubMenu.Enabled = hasSaveRam;
if (SaveRAMSubMenu.Font.Bold != needBold)
{
2017-05-22 16:14:38 +00:00
var font = new Font(SaveRAMSubMenu.Font, needBold ? FontStyle.Bold : FontStyle.Regular);
SaveRAMSubMenu.Font = font;
}
AVSubMenu.Enabled =
ScreenshotSubMenu.Enabled =
Emulator.HasVideoProvider();
2013-10-27 07:54:00 +00:00
}
private void RecentRomMenuItem_DropDownOpened(object sender, EventArgs e)
{
RecentRomSubMenu.DropDownItems.Clear();
RecentRomSubMenu.DropDownItems.AddRange(
2015-11-06 14:31:50 +00:00
Global.Config.RecentRoms.RecentMenu(LoadRomFromRecent, true, true));
2013-10-27 07:54:00 +00:00
}
private void SaveStateSubMenu_DropDownOpened(object sender, EventArgs e)
{
SaveState0MenuItem.Font = new Font(
SaveState0MenuItem.Font.FontFamily,
SaveState0MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(0) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState1MenuItem.Font = new Font(
SaveState1MenuItem.Font.FontFamily,
SaveState1MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(1) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState2MenuItem.Font = new Font(
SaveState2MenuItem.Font.FontFamily,
SaveState2MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(2) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState3MenuItem.Font = new Font(
SaveState3MenuItem.Font.FontFamily,
SaveState3MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(3) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState4MenuItem.Font = new Font(
SaveState4MenuItem.Font.FontFamily,
SaveState4MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(4) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState5MenuItem.Font = new Font(
SaveState5MenuItem.Font.FontFamily,
SaveState5MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(5) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState6MenuItem.Font = new Font(
SaveState6MenuItem.Font.FontFamily,
SaveState6MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(6) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState7MenuItem.Font = new Font(
SaveState7MenuItem.Font.FontFamily,
SaveState7MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(7) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState8MenuItem.Font = new Font(
SaveState8MenuItem.Font.FontFamily,
SaveState8MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(8) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState9MenuItem.Font = new Font(
SaveState9MenuItem.Font.FontFamily,
SaveState9MenuItem.Font.Size,
2017-05-22 16:14:38 +00:00
_stateSlots.HasSlot(9) ? (FontStyle.Italic | FontStyle.Bold) : FontStyle.Regular);
2013-10-27 07:54:00 +00:00
SaveState1MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 1"].Bindings;
SaveState2MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 2"].Bindings;
SaveState3MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 3"].Bindings;
SaveState4MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 4"].Bindings;
SaveState5MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 5"].Bindings;
SaveState6MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 6"].Bindings;
SaveState7MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 7"].Bindings;
SaveState8MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 8"].Bindings;
SaveState9MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 9"].Bindings;
SaveState0MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 0"].Bindings;
SaveNamedStateMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save Named State"].Bindings;
}
private void LoadStateSubMenu_DropDownOpened(object sender, EventArgs e)
{
LoadState1MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 1"].Bindings;
LoadState2MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 2"].Bindings;
LoadState3MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 3"].Bindings;
LoadState4MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 4"].Bindings;
LoadState5MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 5"].Bindings;
LoadState6MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 6"].Bindings;
LoadState7MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 7"].Bindings;
LoadState8MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 8"].Bindings;
LoadState9MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 9"].Bindings;
LoadState0MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 0"].Bindings;
LoadNamedStateMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load Named State"].Bindings;
AutoloadLastSlotMenuItem.Checked = Global.Config.AutoLoadLastSaveSlot;
LoadState1MenuItem.Enabled = _stateSlots.HasSlot(1);
LoadState2MenuItem.Enabled = _stateSlots.HasSlot(2);
LoadState3MenuItem.Enabled = _stateSlots.HasSlot(3);
LoadState4MenuItem.Enabled = _stateSlots.HasSlot(4);
LoadState5MenuItem.Enabled = _stateSlots.HasSlot(5);
LoadState6MenuItem.Enabled = _stateSlots.HasSlot(6);
LoadState7MenuItem.Enabled = _stateSlots.HasSlot(7);
LoadState8MenuItem.Enabled = _stateSlots.HasSlot(8);
LoadState9MenuItem.Enabled = _stateSlots.HasSlot(9);
LoadState0MenuItem.Enabled = _stateSlots.HasSlot(0);
2013-10-27 07:54:00 +00:00
}
private void SaveSlotSubMenu_DropDownOpened(object sender, EventArgs e)
{
SelectSlot0MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 0"].Bindings;
SelectSlot1MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 1"].Bindings;
SelectSlot2MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 2"].Bindings;
SelectSlot3MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 3"].Bindings;
SelectSlot4MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 4"].Bindings;
SelectSlot5MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 5"].Bindings;
SelectSlot6MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 6"].Bindings;
SelectSlot7MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 7"].Bindings;
SelectSlot8MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 8"].Bindings;
SelectSlot9MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 9"].Bindings;
PreviousSlotMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Previous Slot"].Bindings;
NextSlotMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Next Slot"].Bindings;
SaveToCurrentSlotMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Quick Save"].Bindings;
LoadCurrentSlotMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Quick Load"].Bindings;
SelectSlot0MenuItem.Checked = false;
SelectSlot1MenuItem.Checked = false;
SelectSlot2MenuItem.Checked = false;
SelectSlot3MenuItem.Checked = false;
SelectSlot4MenuItem.Checked = false;
SelectSlot5MenuItem.Checked = false;
SelectSlot6MenuItem.Checked = false;
SelectSlot7MenuItem.Checked = false;
SelectSlot8MenuItem.Checked = false;
SelectSlot9MenuItem.Checked = false;
SelectSlot1MenuItem.Checked = false;
switch (Global.Config.SaveSlot)
{
case 0:
SelectSlot0MenuItem.Checked = true;
break;
case 1:
SelectSlot1MenuItem.Checked = true;
break;
case 2:
SelectSlot2MenuItem.Checked = true;
break;
case 3:
SelectSlot3MenuItem.Checked = true;
break;
case 4:
SelectSlot4MenuItem.Checked = true;
break;
case 5:
SelectSlot5MenuItem.Checked = true;
break;
case 6:
SelectSlot6MenuItem.Checked = true;
break;
case 7:
SelectSlot7MenuItem.Checked = true;
break;
case 8:
SelectSlot8MenuItem.Checked = true;
break;
case 9:
SelectSlot9MenuItem.Checked = true;
break;
}
}
private void SaveRAMSubMenu_DropDownOpened(object sender, EventArgs e)
{
FlushSaveRAMMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Flush SaveRAM"].Bindings;
}
2013-10-27 07:54:00 +00:00
private void MovieSubMenu_DropDownOpened(object sender, EventArgs e)
{
FullMovieLoadstatesMenuItem.Enabled = !Global.MovieSession.MultiTrack.IsActive;
StopMovieWithoutSavingMenuItem.Enabled = Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.Changes;
2013-10-27 07:54:00 +00:00
StopMovieMenuItem.Enabled
= PlayFromBeginningMenuItem.Enabled
= SaveMovieMenuItem.Enabled
2016-01-28 13:11:05 +00:00
= SaveMovieAsMenuItem.Enabled
2013-10-27 07:54:00 +00:00
= Global.MovieSession.Movie.IsActive;
ReadonlyMenuItem.Checked = Global.MovieSession.ReadOnly;
2013-10-27 07:54:00 +00:00
AutomaticallyBackupMoviesMenuItem.Checked = Global.Config.EnableBackupMovies;
FullMovieLoadstatesMenuItem.Checked = Global.Config.VBAStyleMovieLoadState;
ReadonlyMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle read-only"].Bindings;
RecordMovieMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Record Movie"].Bindings;
PlayMovieMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Play Movie"].Bindings;
StopMovieMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Stop Movie"].Bindings;
PlayFromBeginningMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Play from beginning"].Bindings;
SaveMovieMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save Movie"].Bindings;
}
private void RecentMovieSubMenu_DropDownOpened(object sender, EventArgs e)
{
RecentMovieSubMenu.DropDownItems.Clear();
RecentMovieSubMenu.DropDownItems.AddRange(
Global.Config.RecentMovies.RecentMenu(LoadMoviesFromRecent, true));
2013-10-27 07:54:00 +00:00
}
private void MovieEndSubMenu_DropDownOpened(object sender, EventArgs e)
{
MovieEndFinishMenuItem.Checked = Global.Config.MovieEndAction == MovieEndAction.Finish;
MovieEndRecordMenuItem.Checked = Global.Config.MovieEndAction == MovieEndAction.Record;
MovieEndStopMenuItem.Checked = Global.Config.MovieEndAction == MovieEndAction.Stop;
MovieEndPauseMenuItem.Checked = Global.Config.MovieEndAction == MovieEndAction.Pause;
// Arguably an IControlMainForm property should be set here, but in reality only Tastudio is ever going to interfere with this logic
MovieEndFinishMenuItem.Enabled =
MovieEndRecordMenuItem.Enabled =
MovieEndStopMenuItem.Enabled =
MovieEndPauseMenuItem.Enabled =
!GlobalWin.Tools.Has<TAStudio>();
}
2013-10-27 07:54:00 +00:00
private void AVSubMenu_DropDownOpened(object sender, EventArgs e)
{
2015-12-16 18:13:15 +00:00
ConfigAndRecordAVMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Record A/V"].Bindings;
2013-10-27 07:54:00 +00:00
StopAVIMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Stop A/V"].Bindings;
CaptureOSDMenuItem.Checked = Global.Config.AVI_CaptureOSD;
2015-12-16 18:13:15 +00:00
RecordAVMenuItem.Enabled = !string.IsNullOrEmpty(Global.Config.VideoWriter) && _currAviWriter == null;
if (_currAviWriter == null)
2013-10-27 07:54:00 +00:00
{
2015-12-16 18:13:15 +00:00
ConfigAndRecordAVMenuItem.Enabled = true;
2013-10-27 07:54:00 +00:00
StopAVIMenuItem.Enabled = false;
}
else
{
2015-12-16 18:13:15 +00:00
ConfigAndRecordAVMenuItem.Enabled = false;
2013-10-27 07:54:00 +00:00
StopAVIMenuItem.Enabled = true;
}
}
private void ScreenshotSubMenu_DropDownOpening(object sender, EventArgs e)
{
ScreenshotCaptureOSDMenuItem1.Checked = Global.Config.Screenshot_CaptureOSD;
ScreenshotMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Screenshot"].Bindings;
ScreenshotClipboardMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["ScreenshotToClipboard"].Bindings;
ScreenshotClientClipboardMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Screen Client to Clipboard"].Bindings;
2013-10-27 07:54:00 +00:00
}
private void OpenRomMenuItem_Click(object sender, EventArgs e)
{
OpenRom();
}
2015-11-06 14:31:50 +00:00
private void OpenAdvancedMenuItem_Click(object sender, EventArgs e)
{
var oac = new OpenAdvancedChooser(this);
if (oac.ShowHawkDialog() == DialogResult.Cancel)
2017-05-22 16:14:38 +00:00
{
2015-11-06 14:31:50 +00:00
return;
2017-05-22 16:14:38 +00:00
}
2015-11-06 14:31:50 +00:00
if (oac.Result == OpenAdvancedChooser.Command.RetroLaunchNoGame)
{
2017-05-22 16:14:38 +00:00
var argsNoGame = new LoadRomArgs
{
OpenAdvanced = new OpenAdvanced_LibretroNoGame(Global.Config.LibretroCore)
};
2015-11-06 14:31:50 +00:00
LoadRom("", argsNoGame);
return;
}
var args = new LoadRomArgs();
var filter = RomFilter;
2015-11-06 14:31:50 +00:00
if (oac.Result == OpenAdvancedChooser.Command.RetroLaunchGame)
{
2015-11-06 14:31:50 +00:00
args.OpenAdvanced = new OpenAdvanced_Libretro();
filter = oac.SuggestedExtensionFilter;
}
2015-11-06 14:31:50 +00:00
else if (oac.Result == OpenAdvancedChooser.Command.ClassicLaunchGame)
2017-05-22 16:14:38 +00:00
{
2015-11-06 14:31:50 +00:00
args.OpenAdvanced = new OpenAdvanced_OpenRom();
2017-05-22 16:14:38 +00:00
}
else
{
throw new InvalidOperationException("Automatic Alpha Sanitizer");
}
2015-11-06 14:31:50 +00:00
2017-05-22 16:14:38 +00:00
/*************************/
/* CLONE OF CODE FROM OpenRom (mostly) */
2015-11-06 14:31:50 +00:00
var ofd = new OpenFileDialog
{
InitialDirectory = PathManager.GetRomsPath(Emulator.SystemId),
Filter = filter,
2015-11-06 14:31:50 +00:00
RestoreDirectory = false,
FilterIndex = _lastOpenRomFilter,
Title = "Open Advanced"
};
var result = ofd.ShowHawkDialog();
if (result != DialogResult.OK)
{
return;
}
var file = new FileInfo(ofd.FileName);
Global.Config.LastRomPath = file.DirectoryName;
_lastOpenRomFilter = ofd.FilterIndex;
2017-05-22 16:14:38 +00:00
/*************************/
2015-11-06 14:31:50 +00:00
LoadRom(file.FullName, args);
}
2013-10-27 07:54:00 +00:00
private void CloseRomMenuItem_Click(object sender, EventArgs e)
{
CloseRom();
}
private void Savestate1MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave1"); }
private void Savestate2MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave2"); }
private void Savestate3MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave3"); }
private void Savestate4MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave4"); }
private void Savestate5MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave5"); }
private void Savestate6MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave6"); }
private void Savestate7MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave7"); }
private void Savestate8MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave8"); }
private void Savestate9MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave9"); }
private void Savestate0MenuItem_Click(object sender, EventArgs e) { SaveQuickSave("QuickSave0"); }
2013-10-27 07:54:00 +00:00
private void SaveNamedStateMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
SaveStateAs();
}
private void Loadstate1MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave1"); }
private void Loadstate2MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave2"); }
private void Loadstate3MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave3"); }
private void Loadstate4MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave4"); }
private void Loadstate5MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave5"); }
private void Loadstate6MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave6"); }
private void Loadstate7MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave7"); }
private void Loadstate8MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave8"); }
private void Loadstate9MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave9"); }
private void Loadstate0MenuItem_Click(object sender, EventArgs e) { LoadQuickSave("QuickSave0"); }
2013-10-27 07:54:00 +00:00
private void LoadNamedStateMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
LoadStateAs();
}
2013-10-27 07:54:00 +00:00
private void AutoloadLastSlotMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.AutoLoadLastSaveSlot ^= true;
}
2013-10-27 07:54:00 +00:00
private void SelectSlotMenuItems_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
if (sender == SelectSlot0MenuItem) Global.Config.SaveSlot = 0;
else if (sender == SelectSlot1MenuItem) Global.Config.SaveSlot = 1;
else if (sender == SelectSlot2MenuItem) Global.Config.SaveSlot = 2;
else if (sender == SelectSlot3MenuItem) Global.Config.SaveSlot = 3;
else if (sender == SelectSlot4MenuItem) Global.Config.SaveSlot = 4;
else if (sender == SelectSlot5MenuItem) Global.Config.SaveSlot = 5;
else if (sender == SelectSlot6MenuItem) Global.Config.SaveSlot = 6;
else if (sender == SelectSlot7MenuItem) Global.Config.SaveSlot = 7;
else if (sender == SelectSlot8MenuItem) Global.Config.SaveSlot = 8;
else if (sender == SelectSlot9MenuItem) Global.Config.SaveSlot = 9;
UpdateStatusSlots();
SaveSlotSelectedMessage();
}
2013-10-27 07:54:00 +00:00
private void PreviousSlotMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
PreviousSlot();
}
2013-10-27 07:54:00 +00:00
private void NextSlotMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
NextSlot();
}
2013-10-27 07:54:00 +00:00
private void SaveToCurrentSlotMenuItem_Click(object sender, EventArgs e)
{
SaveQuickSave("QuickSave" + Global.Config.SaveSlot);
2013-10-27 07:54:00 +00:00
}
2013-10-27 07:54:00 +00:00
private void LoadCurrentSlotMenuItem_Click(object sender, EventArgs e)
{
LoadQuickSave("QuickSave" + Global.Config.SaveSlot);
}
private void FlushSaveRAMMenuItem_Click(object sender, EventArgs e)
{
FlushSaveRAM();
}
2013-10-27 07:54:00 +00:00
private void ReadonlyMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
ToggleReadOnly();
}
2013-10-27 07:54:00 +00:00
private void RecordMovieMenuItem_Click(object sender, EventArgs e)
{
if (!Emulator.Attributes().Released)
{
2017-05-22 16:14:38 +00:00
var result = MessageBox.Show(
this,
"Thanks for using Bizhawk! The emulation core you have selected " +
"is currently BETA-status. We appreciate your help in testing Bizhawk. " +
"You can record a movie on this core if you'd like to, but expect to " +
"encounter bugs and sync problems. Continue?", "BizHawk", MessageBoxButtons.YesNo);
if (result != DialogResult.Yes)
{
return;
}
}
else if (Emulator is Snes9x)
{
var box = new MsgBox(
"While the Snes9x core is faster, it is not nearly as accurate as bsnes. \nIt is recommended that you switch to the bsnes core for movie recording\nSwitch to bsnes?",
"Accuracy Warning",
MessageBoxIcon.Warning);
box.SetButtons(
new[] { "Switch", "Cancel" },
new[] { DialogResult.Yes, DialogResult.Cancel });
box.MaximumSize = new Size(475, 350);
box.SetMessageToAutoSize();
var result = box.ShowDialog();
if (result == DialogResult.Yes)
{
Global.Config.SNES_InSnes9x = false;
RebootCore();
}
else if (result == DialogResult.Cancel)
{
return;
}
}
new RecordMovie(Emulator).ShowDialog();
}
2013-10-27 07:54:00 +00:00
private void PlayMovieMenuItem_Click(object sender, EventArgs e)
{
new PlayMovie().ShowDialog();
2013-10-27 07:54:00 +00:00
}
private void StopMovieMenuItem_Click(object sender, EventArgs e)
{
StopMovie();
}
private void PlayFromBeginningMenuItem_Click(object sender, EventArgs e)
{
RestartMovie();
2013-10-27 07:54:00 +00:00
}
private void ImportMovieMenuItem_Click(object sender, EventArgs e)
{
var ofd = new OpenFileDialog
{
InitialDirectory = PathManager.GetRomsPath(Emulator.SystemId),
2013-10-27 07:54:00 +00:00
Multiselect = true,
Filter = FormatFilter(
"Movie Files", "*.fm2;*.mc2;*.mcm;*.mmv;*.gmv;*.vbm;*.lsmv;*.fcm;*.fmv;*.vmv;*.nmv;*.smv;*.ymv;*.zmv;*.bkm;*.pjm;*.pxm",
2013-10-27 07:54:00 +00:00
"FCEUX", "*.fm2",
"PCEjin/Mednafen", "*.mc2;*.mcm",
"Dega", "*.mmv",
"Gens", "*.gmv",
"Visual Boy Advance", "*.vbm",
"LSNES", "*.lsmv",
"FCEU", "*.fcm",
"Famtasia", "*.fmv",
"VirtuaNES", "*.vmv",
"Nintendulator", "*.nmv",
"Snes9x", "*.smv",
2014-07-17 00:07:24 +00:00
"Yabause", "*.ymv",
2013-10-27 07:54:00 +00:00
"ZSNES", "*.zmv",
"PSXjin", "*.pjm",
"PCSX", "*.pxm",
2014-07-17 00:07:24 +00:00
"BizHawk Bkm", "*.bkm",
2013-10-27 07:54:00 +00:00
"All Files", "*.*"),
RestoreDirectory = false
};
var result = ofd.ShowHawkDialog();
if (result == DialogResult.OK)
2013-10-27 07:45:59 +00:00
{
foreach (var fn in ofd.FileNames)
2013-10-27 07:54:00 +00:00
{
ProcessMovieImport(fn);
}
}
}
2013-10-27 07:54:00 +00:00
private void SaveMovieMenuItem_Click(object sender, EventArgs e)
{
SaveMovie();
}
private void SaveMovieAsMenuItem_Click(object sender, EventArgs e)
{
var filename = Global.MovieSession.Movie.Filename;
if (string.IsNullOrWhiteSpace(filename))
{
filename = PathManager.FilesystemSafeName(Global.Game);
}
var file = ToolFormBase.SaveFileDialog(
filename,
PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPathFragment, null),
"Movie Files",
Global.MovieSession.Movie.PreferredExtension);
if (file != null)
{
Global.MovieSession.Movie.Filename = file.FullName;
Global.Config.RecentMovies.Add(Global.MovieSession.Movie.Filename);
SaveMovie();
}
}
private void StopMovieWithoutSavingMenuItem_Click(object sender, EventArgs e)
2013-10-27 07:54:00 +00:00
{
if (Global.Config.EnableBackupMovies)
2017-05-22 16:14:38 +00:00
{
Global.MovieSession.Movie.SaveBackup();
2017-05-22 16:14:38 +00:00
}
StopMovie(saveChanges: false);
2013-10-27 07:54:00 +00:00
}
2013-10-26 20:33:25 +00:00
2013-10-27 07:54:00 +00:00
private void AutomaticMovieBackupMenuItem_Click(object sender, EventArgs e)
{
Global.Config.EnableBackupMovies ^= true;
}
private void FullMovieLoadstatesMenuItem_Click(object sender, EventArgs e)
{
Global.Config.VBAStyleMovieLoadState ^= true;
}
private void MovieEndFinishMenuItem_Click(object sender, EventArgs e)
{
Global.Config.MovieEndAction = MovieEndAction.Finish;
}
private void MovieEndRecordMenuItem_Click(object sender, EventArgs e)
{
Global.Config.MovieEndAction = MovieEndAction.Record;
}
private void MovieEndStopMenuItem_Click(object sender, EventArgs e)
{
Global.Config.MovieEndAction = MovieEndAction.Stop;
}
private void MovieEndPauseMenuItem_Click(object sender, EventArgs e)
{
Global.Config.MovieEndAction = MovieEndAction.Pause;
}
2015-12-16 18:13:15 +00:00
private void ConfigAndRecordAVMenuItem_Click(object sender, EventArgs e)
2013-10-27 07:54:00 +00:00
{
RecordAv();
2013-10-27 07:54:00 +00:00
}
2015-12-16 18:13:15 +00:00
private void RecordAVMenuItem_Click(object sender, EventArgs e)
{
RecordAv(null, null); // force unattended, but allow tradtional setup
}
2013-10-27 07:54:00 +00:00
private void StopAVMenuItem_Click(object sender, EventArgs e)
{
StopAv();
2013-10-27 07:54:00 +00:00
}
private void SynclessRecordingMenuItem_Click(object sender, EventArgs e)
{
new SynclessRecordingTools().Run();
}
2013-10-27 07:54:00 +00:00
private void CaptureOSDMenuItem_Click(object sender, EventArgs e)
{
Global.Config.AVI_CaptureOSD ^= true;
}
private void ScreenshotMenuItem_Click(object sender, EventArgs e)
{
TakeScreenshot();
}
private void ScreenshotAsMenuItem_Click(object sender, EventArgs e)
{
var path = string.Format(PathManager.ScreenshotPrefix(Global.Game) + ".{0:yyyy-MM-dd HH.mm.ss}.png", DateTime.Now);
2013-10-27 07:54:00 +00:00
var sfd = new SaveFileDialog
2013-10-27 07:54:00 +00:00
{
InitialDirectory = Path.GetDirectoryName(path),
FileName = Path.GetFileName(path),
Filter = "PNG File (*.png)|*.png"
};
var result = sfd.ShowHawkDialog();
2013-10-27 07:54:00 +00:00
if (result == DialogResult.OK)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
TakeScreenshot(sfd.FileName);
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
}
private void ScreenshotClipboardMenuItem_Click(object sender, EventArgs e)
{
TakeScreenshotToClipboard();
}
private void ScreenshotClientClipboardMenuItem_Click(object sender, EventArgs e)
{
TakeScreenshotClientToClipboard();
}
2013-10-27 07:54:00 +00:00
private void ScreenshotCaptureOSDMenuItem_Click(object sender, EventArgs e)
{
Global.Config.Screenshot_CaptureOSD ^= true;
}
private void ExitMenuItem_Click(object sender, EventArgs e)
{
if (GlobalWin.Tools.AskSave())
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
Close();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:45:59 +00:00
}
2013-10-26 20:33:25 +00:00
2015-08-01 19:38:43 +00:00
public void CloseEmulator()
{
_exitRequestPending = true;
2015-08-01 19:38:43 +00:00
}
public void CloseEmulator(int exitCode)
{
_exitRequestPending = true;
_exitCode = exitCode;
}
2013-10-27 07:54:00 +00:00
#endregion
#region Emulation Menu
2017-05-22 16:14:38 +00:00
private void EmulationMenuItem_DropDownOpened(object sender, EventArgs e)
2013-10-27 07:45:59 +00:00
{
PauseMenuItem.Checked = _didMenuPause ? _wasPaused : EmulatorPaused;
2013-10-27 07:54:00 +00:00
SoftResetMenuItem.Enabled = Emulator.ControllerDefinition.BoolButtons.Contains("Reset") &&
2013-10-27 07:54:00 +00:00
(!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished);
HardResetMenuItem.Enabled = Emulator.ControllerDefinition.BoolButtons.Contains("Power") &&
2013-10-27 07:54:00 +00:00
(!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished);
PauseMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Pause"].Bindings;
RebootCoreMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Reboot Core"].Bindings;
SoftResetMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Soft Reset"].Bindings;
HardResetMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Hard Reset"].Bindings;
}
2013-10-27 07:54:00 +00:00
private void PauseMenuItem_Click(object sender, EventArgs e)
{
if (IsTurboSeeking || IsSeeking)
{
PauseOnFrame = null;
}
else if (EmulatorPaused)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
UnpauseEmulator();
2013-10-26 20:33:25 +00:00
}
else
{
2013-10-27 07:54:00 +00:00
PauseEmulator();
2013-10-26 20:33:25 +00:00
}
}
2013-10-27 07:54:00 +00:00
private void PowerMenuItem_Click(object sender, EventArgs e)
{
RebootCore();
}
private void SoftResetMenuItem_Click(object sender, EventArgs e)
{
SoftReset();
}
2013-10-26 20:33:25 +00:00
2013-10-27 07:54:00 +00:00
private void HardResetMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
HardReset();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
#endregion
#region View
private void ViewSubMenu_DropDownOpened(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
DisplayFPSMenuItem.Checked = Global.Config.DisplayFPS;
DisplayFrameCounterMenuItem.Checked = Global.Config.DisplayFrameCounter;
DisplayLagCounterMenuItem.Checked = Global.Config.DisplayLagCounter;
DisplayInputMenuItem.Checked = Global.Config.DisplayInput;
DisplayRerecordCountMenuItem.Checked = Global.Config.DisplayRerecordCount;
DisplaySubtitlesMenuItem.Checked = Global.Config.DisplaySubtitles;
DisplayFPSMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Display FPS"].Bindings;
DisplayFrameCounterMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Frame Counter"].Bindings;
DisplayLagCounterMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Lag Counter"].Bindings;
DisplayInputMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Input Display"].Bindings;
SwitchToFullscreenMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Full Screen"].Bindings;
DisplayStatusBarMenuItem.Checked = Global.Config.DispChrome_StatusBarWindowed;
2013-10-27 07:54:00 +00:00
DisplayLogWindowMenuItem.Checked = Global.Config.ShowLogWindow;
DisplayLagCounterMenuItem.Enabled = Emulator.CanPollInput();
DisplayMessagesMenuItem.Checked = Global.Config.DisplayMessages;
2015-09-08 20:56:20 +00:00
}
2013-10-26 20:33:25 +00:00
2013-10-27 07:54:00 +00:00
private void WindowSizeSubMenu_DropDownOpened(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
x1MenuItem.Checked =
x2MenuItem.Checked =
x3MenuItem.Checked =
x4MenuItem.Checked =
x5MenuItem.Checked = false;
switch (Global.Config.TargetZoomFactors[Emulator.SystemId])
2013-10-27 07:54:00 +00:00
{
2017-05-22 16:50:40 +00:00
case 1:
x1MenuItem.Checked = true;
break;
case 2:
x2MenuItem.Checked = true;
break;
case 3:
x3MenuItem.Checked = true;
break;
case 4:
x4MenuItem.Checked = true;
break;
case 5:
x5MenuItem.Checked = true;
break;
case 10:
mzMenuItem.Checked = true;
break;
2013-10-27 07:54:00 +00:00
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void WindowSize_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
if (sender == x1MenuItem) Global.Config.TargetZoomFactors[Emulator.SystemId] = 1;
if (sender == x2MenuItem) Global.Config.TargetZoomFactors[Emulator.SystemId] = 2;
if (sender == x3MenuItem) Global.Config.TargetZoomFactors[Emulator.SystemId] = 3;
if (sender == x4MenuItem) Global.Config.TargetZoomFactors[Emulator.SystemId] = 4;
if (sender == x5MenuItem) Global.Config.TargetZoomFactors[Emulator.SystemId] = 5;
if (sender == mzMenuItem) Global.Config.TargetZoomFactors[Emulator.SystemId] = 10;
2013-10-26 20:33:25 +00:00
2013-10-27 07:45:59 +00:00
FrameBufferResized();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void SwitchToFullscreenMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleFullscreen();
}
2013-10-26 20:33:25 +00:00
2017-05-22 16:14:38 +00:00
private void DisplayFpsMenuItem_Click(object sender, EventArgs e)
2013-10-27 07:54:00 +00:00
{
2017-05-22 16:14:38 +00:00
ToggleFps();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayFrameCounterMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleFrameCounter();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayLagCounterMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleLagCounter();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayInputMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
ToggleInputDisplay();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayRerecordsMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
Global.Config.DisplayRerecordCount ^= true;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplaySubtitlesMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
Global.Config.DisplaySubtitles ^= true;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayStatusBarMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
Global.Config.DispChrome_StatusBarWindowed ^= true;
SetStatusBar();
}
private void DisplayMessagesMenuItem_Click(object sender, EventArgs e)
{
Global.Config.DisplayMessages ^= true;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void DisplayLogWindowMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
Global.Config.ShowLogWindow ^= true;
if (Global.Config.ShowLogWindow)
{
LogConsole.ShowConsole();
2013-10-27 07:54:00 +00:00
}
else
{
LogConsole.HideConsole();
2013-10-27 07:54:00 +00:00
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
#endregion
#region Config
private void ConfigSubMenu_DropDownOpened(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
ControllersMenuItem.Enabled = Emulator.ControllerDefinition.Any();
RewindOptionsMenuItem.Enabled = Emulator.HasSavestates();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void FrameSkipMenuItem_DropDownOpened(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
MinimizeSkippingMenuItem.Checked = Global.Config.AutoMinimizeSkipping;
ClockThrottleMenuItem.Checked = Global.Config.ClockThrottle;
2013-10-27 07:54:00 +00:00
VsyncThrottleMenuItem.Checked = Global.Config.VSyncThrottle;
NeverSkipMenuItem.Checked = Global.Config.FrameSkip == 0;
Frameskip1MenuItem.Checked = Global.Config.FrameSkip == 1;
Frameskip2MenuItem.Checked = Global.Config.FrameSkip == 2;
Frameskip3MenuItem.Checked = Global.Config.FrameSkip == 3;
Frameskip4MenuItem.Checked = Global.Config.FrameSkip == 4;
Frameskip5MenuItem.Checked = Global.Config.FrameSkip == 5;
Frameskip6MenuItem.Checked = Global.Config.FrameSkip == 6;
Frameskip7MenuItem.Checked = Global.Config.FrameSkip == 7;
Frameskip8MenuItem.Checked = Global.Config.FrameSkip == 8;
Frameskip9MenuItem.Checked = Global.Config.FrameSkip == 9;
MinimizeSkippingMenuItem.Enabled = !NeverSkipMenuItem.Checked;
2017-05-22 16:14:38 +00:00
if (!MinimizeSkippingMenuItem.Enabled)
{
MinimizeSkippingMenuItem.Checked = true;
}
2013-10-27 07:54:00 +00:00
AudioThrottleMenuItem.Enabled = Global.Config.SoundEnabled;
AudioThrottleMenuItem.Checked = Global.Config.SoundThrottle;
VsyncEnabledMenuItem.Checked = Global.Config.VSync;
Speed100MenuItem.Checked = Global.Config.SpeedPercent == 100;
Speed100MenuItem.Image = (Global.Config.SpeedPercentAlternate == 100) ? Properties.Resources.FastForward : null;
Speed150MenuItem.Checked = Global.Config.SpeedPercent == 150;
Speed150MenuItem.Image = (Global.Config.SpeedPercentAlternate == 150) ? Properties.Resources.FastForward : null;
Speed400MenuItem.Checked = Global.Config.SpeedPercent == 400;
Speed400MenuItem.Image = (Global.Config.SpeedPercentAlternate == 400) ? Properties.Resources.FastForward : null;
2013-10-27 07:54:00 +00:00
Speed200MenuItem.Checked = Global.Config.SpeedPercent == 200;
Speed200MenuItem.Image = (Global.Config.SpeedPercentAlternate == 200) ? Properties.Resources.FastForward : null;
Speed75MenuItem.Checked = Global.Config.SpeedPercent == 75;
Speed75MenuItem.Image = (Global.Config.SpeedPercentAlternate == 75) ? Properties.Resources.FastForward : null;
Speed50MenuItem.Checked = Global.Config.SpeedPercent == 50;
Speed50MenuItem.Image = (Global.Config.SpeedPercentAlternate == 50) ? Properties.Resources.FastForward : null;
Speed50MenuItem.Enabled =
Speed75MenuItem.Enabled =
Speed100MenuItem.Enabled =
Speed150MenuItem.Enabled =
Speed200MenuItem.Enabled =
Speed400MenuItem.Enabled =
Global.Config.ClockThrottle;
miUnthrottled.Checked = _unthrottled;
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void KeyPriorityMenuItem_DropDownOpened(object sender, EventArgs e)
{
switch (Global.Config.Input_Hotkey_OverrideOptions)
{
default:
case 0:
BothHkAndControllerMenuItem.Checked = true;
InputOverHkMenuItem.Checked = false;
HkOverInputMenuItem.Checked = false;
break;
case 1:
BothHkAndControllerMenuItem.Checked = false;
InputOverHkMenuItem.Checked = true;
HkOverInputMenuItem.Checked = false;
break;
case 2:
BothHkAndControllerMenuItem.Checked = false;
InputOverHkMenuItem.Checked = false;
HkOverInputMenuItem.Checked = true;
break;
}
}
2013-10-26 20:33:25 +00:00
private void CoreToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
quickNESToolStripMenuItem.Checked = Global.Config.NES_InQuickNES;
nesHawkToolStripMenuItem.Checked = !Global.Config.NES_InQuickNES;
}
2013-10-27 07:54:00 +00:00
private void ControllersMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
var controller = new ControllerConfig(Emulator.ControllerDefinition);
2013-10-27 07:54:00 +00:00
if (controller.ShowDialog() == DialogResult.OK)
{
InitControls();
InputManager.SyncControls();
2013-10-27 07:54:00 +00:00
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void HotkeysMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2014-05-10 14:50:47 +00:00
if (new HotkeyConfig().ShowDialog() == DialogResult.OK)
2013-10-27 07:54:00 +00:00
{
InitControls();
InputManager.SyncControls();
2013-10-27 07:54:00 +00:00
}
}
2014-05-10 14:50:47 +00:00
private void FirmwaresMenuItem_Click(object sender, EventArgs e)
{
if (e is RomLoader.RomErrorArgs)
{
2017-05-22 16:50:40 +00:00
var args = (RomLoader.RomErrorArgs)e;
var result = new FirmwaresConfig(true, args.RomPath).ShowDialog();
args.Retry = result == DialogResult.Retry;
}
else
{
new FirmwaresConfig().ShowDialog();
}
2014-05-10 14:50:47 +00:00
}
2013-10-27 07:54:00 +00:00
private void MessagesMenuItem_Click(object sender, EventArgs e)
{
new MessageConfig().ShowDialog();
}
private void PathsMenuItem_Click(object sender, EventArgs e)
{
new PathConfig().ShowDialog();
}
private void SoundMenuItem_Click(object sender, EventArgs e)
{
2014-05-10 14:50:47 +00:00
if (new SoundConfig().ShowDialog() == DialogResult.OK)
2013-10-27 07:54:00 +00:00
{
RewireSound();
}
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void AutofireMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
new AutofireConfig().ShowDialog();
2013-10-26 20:33:25 +00:00
}
2013-10-27 07:54:00 +00:00
private void RewindOptionsMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2013-10-27 07:54:00 +00:00
new RewindConfig().ShowDialog();
2013-10-26 20:33:25 +00:00
}
2014-05-10 14:50:47 +00:00
private void FileExtensionsMenuItem_Click(object sender, EventArgs e)
2013-10-26 20:33:25 +00:00
{
2014-05-10 14:50:47 +00:00
new FileExtensionPreferences().ShowDialog();
}
private void CustomizeMenuItem_Click(object sender, EventArgs e)
{
new EmuHawkOptions().ShowDialog();
2013-10-26 20:33:25 +00:00
}
2014-07-29 01:33:54 +00:00
private void ProfilesMenuItem_Click(object sender, EventArgs e)
{
if (new ProfileConfig().ShowDialog() == DialogResult.OK)
{
GlobalWin.OSD.AddMessage("Profile settings saved");
2017-05-22 16:14:38 +00:00
// We hide the FirstBoot items since the user setup a Profile
// Is it a bad thing to do this constantly?
Global.Config.FirstBoot = false;
ProfileFirstBootLabel.Visible = false;
2014-07-29 01:33:54 +00:00
}
else
{
GlobalWin.OSD.AddMessage("Profile config aborted");
}
}
private void ClockThrottleMenuItem_Click(object sender, EventArgs e)
{
Global.Config.ClockThrottle ^= true;
2013-10-27 07:54:00 +00:00
if (Global.Config.ClockThrottle)
{
var old = Global.Config.SoundThrottle;
2013-10-27 07:54:00 +00:00
Global.Config.SoundThrottle = false;
if (old)
{
RewireSound();
}
2017-05-22 16:14:38 +00:00
2013-10-27 07:54:00 +00:00
old = Global.Config.VSyncThrottle;
Global.Config.VSyncThrottle = false;
if (old)
{
PresentationPanel.Resized = true;
2013-10-27 07:54:00 +00:00
}
}
ThrottleMessage();
}
2013-10-27 07:54:00 +00:00
private void AudioThrottleMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.SoundThrottle ^= true;
RewireSound();
if (Global.Config.SoundThrottle)
{
2013-10-27 07:54:00 +00:00
Global.Config.ClockThrottle = false;
var old = Global.Config.VSyncThrottle;
2013-10-27 07:54:00 +00:00
Global.Config.VSyncThrottle = false;
if (old)
{
PresentationPanel.Resized = true;
2013-10-27 07:54:00 +00:00
}
}
ThrottleMessage();
}
2013-10-27 07:54:00 +00:00
private void VsyncThrottleMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.VSyncThrottle ^= true;
PresentationPanel.Resized = true;
2013-10-27 07:54:00 +00:00
if (Global.Config.VSyncThrottle)
{
Global.Config.ClockThrottle = false;
var old = Global.Config.SoundThrottle;
2013-10-27 07:54:00 +00:00
Global.Config.SoundThrottle = false;
if (old)
{
RewireSound();
}
}
2014-05-10 14:50:47 +00:00
if (!Global.Config.VSync)
{
Global.Config.VSync = true;
VsyncMessage();
}
ThrottleMessage();
}
2013-10-27 07:54:00 +00:00
private void VsyncEnabledMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.VSync ^= true;
if (!Global.Config.VSyncThrottle) // when vsync throttle is on, vsync is forced to on, so no change to make here
2013-10-26 20:33:25 +00:00
{
PresentationPanel.Resized = true;
2013-10-26 20:33:25 +00:00
}
VsyncMessage();
}
private void UnthrottledMenuItem_Click(object sender, EventArgs e)
{
_unthrottled ^= true;
ThrottleMessage();
}
2013-10-27 07:54:00 +00:00
private void MinimizeSkippingMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.AutoMinimizeSkipping ^= true;
}
2013-10-27 07:54:00 +00:00
private void NeverSkipMenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 0; FrameSkipMessage(); }
private void Frameskip1MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 1; FrameSkipMessage(); }
private void Frameskip2MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 2; FrameSkipMessage(); }
private void Frameskip3MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 3; FrameSkipMessage(); }
private void Frameskip4MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 4; FrameSkipMessage(); }
private void Frameskip5MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 5; FrameSkipMessage(); }
private void Frameskip6MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 6; FrameSkipMessage(); }
private void Frameskip7MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 7; FrameSkipMessage(); }
private void Frameskip8MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 8; FrameSkipMessage(); }
private void Frameskip9MenuItem_Click(object sender, EventArgs e) { Global.Config.FrameSkip = 9; FrameSkipMessage(); }
private void Speed50MenuItem_Click(object sender, EventArgs e) { ClickSpeedItem(50); }
private void Speed75MenuItem_Click(object sender, EventArgs e) { ClickSpeedItem(75); }
private void Speed100MenuItem_Click(object sender, EventArgs e) { ClickSpeedItem(100); }
private void Speed150MenuItem_Click(object sender, EventArgs e) { ClickSpeedItem(150); }
private void Speed200MenuItem_Click(object sender, EventArgs e) { ClickSpeedItem(200); }
private void Speed400MenuItem_Click(object sender, EventArgs e) { ClickSpeedItem(400); }
2013-10-27 07:54:00 +00:00
private void BothHkAndControllerMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.Input_Hotkey_OverrideOptions = 0;
UpdateKeyPriorityIcon();
}
2013-10-27 07:54:00 +00:00
private void InputOverHkMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
Global.Config.Input_Hotkey_OverrideOptions = 1;
UpdateKeyPriorityIcon();
}
2013-10-27 07:54:00 +00:00
private void HkOverInputMenuItem_Click(object sender, EventArgs e)
2011-06-26 01:22:52 +00:00
{
2013-10-27 07:54:00 +00:00
Global.Config.Input_Hotkey_OverrideOptions = 2;
UpdateKeyPriorityIcon();
2011-06-26 01:22:52 +00:00
}
private void CoresSubMenu_DropDownOpened(object sender, EventArgs e)
2014-05-10 14:50:47 +00:00
{
GBInSGBMenuItem.Checked = Global.Config.GB_AsSGB;
allowGameDBCoreOverridesToolStripMenuItem.Checked = Global.Config.CoreForcingViaGameDB;
}
private void NesCoreSubMenu_DropDownOpened(object sender, EventArgs e)
{
QuicknesCoreMenuItem.Checked = Global.Config.NES_InQuickNES;
NesCoreMenuItem.Checked = !Global.Config.NES_InQuickNES;
2014-05-10 14:50:47 +00:00
}
private void NesCorePick_Click(object sender, EventArgs e)
2014-05-10 14:50:47 +00:00
{
Global.Config.NES_InQuickNES ^= true;
if (Emulator.SystemId == "NES")
{
FlagNeedsReboot();
}
2014-05-10 14:50:47 +00:00
}
private void CoreSNESSubMenu_DropDownOpened(object sender, EventArgs e)
{
Coresnes9xMenuItem.Checked = Global.Config.SNES_InSnes9x;
CorebsnesMenuItem.Checked = !Global.Config.SNES_InSnes9x;
}
private void CoreSnesToggle_Click(object sender, EventArgs e)
{
Global.Config.SNES_InSnes9x ^= true;
if (Emulator.SystemId == "SNES")
{
FlagNeedsReboot();
}
}
private void GbaCoreSubMenu_DropDownOpened(object sender, EventArgs e)
{
2017-06-27 00:19:06 +00:00
VbaNextCoreMenuItem.Checked = !Global.Config.GBA_UsemGBA;
MgbaCoreMenuItem.Checked = Global.Config.GBA_UsemGBA;
}
private void GbaCorePick_Click(object sender, EventArgs e)
{
Global.Config.GBA_UsemGBA ^= true;
if (Emulator.SystemId == "GBA")
{
FlagNeedsReboot();
}
}
private void SGBCoreSubmenu_DropDownOpened(object sender, EventArgs e)
{
SgbBsnesMenuItem.Checked = Global.Config.SGB_UseBsnes;
SgbSameBoyMenuItem.Checked = !Global.Config.SGB_UseBsnes;
}
2017-11-19 15:17:23 +00:00
private void GBCoreSubmenu_DropDownOpened(object sender, EventArgs e)
{
GBGambatteMenuItem.Checked = !Global.Config.GB_UseGBHawk;
GBGBHawkMenuItem.Checked = Global.Config.GB_UseGBHawk;
}
private void SgbCorePick_Click(object sender, EventArgs e)
{
Global.Config.SGB_UseBsnes ^= true;
// TODO: only flag if one of these cores
if (!Emulator.IsNull())
{
FlagNeedsReboot();
}
}
2017-11-19 15:17:23 +00:00
private void GBCorePick_Click(object sender, EventArgs e)
{
Global.Config.GB_UseGBHawk ^= true;
// TODO: only flag if one of these cores
if (!Emulator.IsNull())
{
FlagNeedsReboot();
}
}
private void GbInSgbMenuItem_Click(object sender, EventArgs e)
{
Global.Config.GB_AsSGB ^= true;
if (!Emulator.IsNull())
{
FlagNeedsReboot();
}
}
private void AllowGameDBCoreOverridesToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.Config.CoreForcingViaGameDB ^= true;
}
2014-05-10 14:50:47 +00:00
private void N64VideoPluginSettingsMenuItem_Click(object sender, EventArgs e)
{
N64PluginSettingsMenuItem_Click(sender, e);
}
2013-10-27 07:54:00 +00:00
private void SetLibretroCoreMenuItem_Click(object sender, EventArgs e)
{
RunLibretroCoreChooser();
}
2013-10-27 07:54:00 +00:00
private void SaveConfigMenuItem_Click(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
SaveConfig();
GlobalWin.OSD.AddMessage("Saved settings");
}
private void SaveConfigAsMenuItem_Click(object sender, EventArgs e)
{
var path = PathManager.DefaultIniPath;
var sfd = new SaveFileDialog
{
InitialDirectory = Path.GetDirectoryName(path),
FileName = Path.GetFileName(path),
Filter = "Config File (*.ini)|*.ini"
};
var result = sfd.ShowHawkDialog();
if (result == DialogResult.OK)
{
SaveConfig(sfd.FileName);
GlobalWin.OSD.AddMessage("Copied settings");
}
}
2013-10-27 07:54:00 +00:00
private void LoadConfigMenuItem_Click(object sender, EventArgs e)
{
Global.Config = ConfigService.Load<Config>(PathManager.DefaultIniPath);
2013-10-27 07:54:00 +00:00
Global.Config.ResolveDefaults();
2017-05-31 13:52:55 +00:00
InitControls(); // rebind hotkeys
GlobalWin.OSD.AddMessage("Config file loaded: " + PathManager.DefaultIniPath);
}
private void LoadConfigFromMenuItem_Click(object sender, EventArgs e)
{
var path = PathManager.DefaultIniPath;
var ofd = new OpenFileDialog
{
InitialDirectory = Path.GetDirectoryName(path),
FileName = Path.GetFileName(path),
Filter = "Config File (*.ini)|*.ini"
};
var result = ofd.ShowHawkDialog();
if (result == DialogResult.OK)
{
Global.Config = ConfigService.Load<Config>(ofd.FileName);
Global.Config.ResolveDefaults();
2017-05-31 13:52:55 +00:00
InitControls(); // rebind hotkeys
GlobalWin.OSD.AddMessage("Config file loaded: " + ofd.FileName);
}
}
2013-10-27 07:54:00 +00:00
#endregion
#region Tools
private void ToolsSubMenu_DropDownOpened(object sender, EventArgs e)
{
2013-10-27 07:54:00 +00:00
ToolBoxMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["ToolBox"].Bindings;
2016-07-21 16:02:54 +00:00
RamWatchMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["RAM Watch"].Bindings;
RamSearchMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["RAM Search"].Bindings;
2013-10-27 07:54:00 +00:00
HexEditorMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Hex Editor"].Bindings;
LuaConsoleMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Lua Console"].Bindings;
CheatsMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Cheats"].Bindings;
TAStudioMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["TAStudio"].Bindings;
VirtualPadMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Virtual Pad"].Bindings;
TraceLoggerMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Trace Logger"].Bindings;
2015-01-01 00:06:00 +00:00
TraceLoggerMenuItem.Enabled = GlobalWin.Tools.IsAvailable<TraceLogger>();
2015-10-28 00:49:13 +00:00
CodeDataLoggerMenuItem.Enabled = GlobalWin.Tools.IsAvailable<CDL>();
2015-01-01 00:06:00 +00:00
TAStudioMenuItem.Enabled = GlobalWin.Tools.IsAvailable<TAStudio>();
2015-01-01 00:06:00 +00:00
CheatsMenuItem.Enabled = GlobalWin.Tools.IsAvailable<Cheats>();
HexEditorMenuItem.Enabled = GlobalWin.Tools.IsAvailable<HexEditor>();
RamSearchMenuItem.Enabled = GlobalWin.Tools.IsAvailable<RamSearch>();
RamWatchMenuItem.Enabled = GlobalWin.Tools.IsAvailable<RamWatch>();
2015-01-01 00:06:00 +00:00
DebuggerMenuItem.Enabled = GlobalWin.Tools.IsAvailable<GenericDebugger>();
batchRunnerToolStripMenuItem.Visible = VersionInfo.DeveloperBuild;
BasicBotMenuItem.Enabled = GlobalWin.Tools.IsAvailable<BasicBot>();
gameSharkConverterToolStripMenuItem.Enabled = GlobalWin.Tools.IsAvailable<GameShark>();
ExperimentalToolsSubMenu.Visible = VersionInfo.DeveloperBuild;
}
private void ExternalToolToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
externalToolToolStripMenuItem.DropDownItems.Clear();
2017-05-22 16:14:38 +00:00
foreach (ToolStripMenuItem item in ExternalToolManager.ToolStripMenu)
{
2017-05-22 16:14:38 +00:00
if (item.Enabled)
{
item.Click += delegate
{
GlobalWin.Tools.Load<IExternalToolForm>((string)item.Tag);
};
}
else
{
item.Image = Properties.Resources.ExclamationRed;
2015-11-22 16:56:08 +00:00
}
2017-05-22 16:14:38 +00:00
externalToolToolStripMenuItem.DropDownItems.Add(item);
2015-11-22 16:56:08 +00:00
}
if (externalToolToolStripMenuItem.DropDownItems.Count == 0)
{
externalToolToolStripMenuItem.DropDownItems.Add("None");
}
}
private void ExperimentalToolsSubMenu_DropDownOpened(object sender, EventArgs e)
{
AutoHawkMenuItem.Enabled = GlobalWin.Tools.IsAvailable<AutoHawk>();
NewHexEditorMenuItem.Enabled = GlobalWin.Tools.IsAvailable<NewHexEditor>();
}
2013-10-27 07:54:00 +00:00
private void ToolBoxMenuItem_Click(object sender, EventArgs e)
2013-09-14 02:31:21 +00:00
{
GlobalWin.Tools.Load<ToolBox>();
2013-09-14 02:31:21 +00:00
}
2013-10-27 07:54:00 +00:00
private void RamWatchMenuItem_Click(object sender, EventArgs e)
2013-09-14 02:31:21 +00:00
{
GlobalWin.Tools.LoadRamWatch(true);
2013-09-14 02:31:21 +00:00
}
2013-10-27 07:54:00 +00:00
private void RamSearchMenuItem_Click(object sender, EventArgs e)
2013-09-14 02:31:21 +00:00
{
GlobalWin.Tools.Load<RamSearch>();
2013-09-14 02:31:21 +00:00
}
private void LuaConsoleMenuItem_Click(object sender, EventArgs e)
{
OpenLuaConsole();
}
private void TAStudioMenuItem_Click(object sender, EventArgs e)
{
if (!Emulator.CanPollInput())
{
MessageBox.Show("Current core does not support input polling. TAStudio can't be used.");
return;
}
GlobalWin.Tools.Load<TAStudio>();
}
2013-10-27 07:54:00 +00:00
private void HexEditorMenuItem_Click(object sender, EventArgs e)
2013-09-14 02:31:21 +00:00
{
GlobalWin.Tools.Load<HexEditor>();
2013-09-14 02:31:21 +00:00
}
2013-10-27 07:54:00 +00:00
private void TraceLoggerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<TraceLogger>();
}
private void DebuggerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GenericDebugger>();
}
private void CodeDataLoggerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<CDL>();
}
2015-03-08 20:11:02 +00:00
private void MacroToolMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<MacroInputTool>();
}
2013-10-27 07:54:00 +00:00
private void VirtualPadMenuItem_Click(object sender, EventArgs e)
2012-09-08 19:02:28 +00:00
{
GlobalWin.Tools.Load<VirtualpadTool>();
2012-09-08 19:02:28 +00:00
}
private void BasicBotMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<BasicBot>();
}
2013-10-27 07:54:00 +00:00
private void CheatsMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<Cheats>();
2013-10-27 07:54:00 +00:00
}
private void CheatCodeConverterMenuItem_Click(object sender, EventArgs e)
2013-10-27 07:54:00 +00:00
{
GlobalWin.Tools.Load<GameShark>();
}
private void MultidiskBundlerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<MultiDiskBundler>();
}
private void BatchRunnerToolStripMenuItem_Click(object sender, EventArgs e)
2014-05-10 14:50:47 +00:00
{
new BatchRun().ShowDialog();
}
private void AutoHawkMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<AutoHawk>();
}
private void NewHexEditorMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<NewHexEditor>();
}
2013-10-27 07:54:00 +00:00
#endregion
2013-10-27 13:53:28 +00:00
#region NES
2017-05-22 16:14:38 +00:00
private void QuickNesToolStripMenuItem_Click(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
Global.Config.NES_InQuickNES = true;
FlagNeedsReboot();
}
2017-05-22 16:14:38 +00:00
private void NesHawkToolStripMenuItem_Click(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
Global.Config.NES_InQuickNES = false;
FlagNeedsReboot();
}
private void NESSubMenu_DropDownOpened(object sender, EventArgs e)
{
var boardName = Emulator.HasBoardInfo() ? Emulator.AsBoardInfo().BoardName : null;
FDSControlsMenuItem.Enabled = boardName == "FDS";
VSControlsMenuItem.Enabled =
VSSettingsMenuItem.Enabled =
2017-05-22 16:14:38 +00:00
Emulator is NES && ((NES)Emulator).IsVS;
2016-10-30 02:35:46 +00:00
2015-01-01 00:06:00 +00:00
NESSoundChannelsMenuItem.Enabled = GlobalWin.Tools.IsAvailable<NESSoundConfig>();
MovieSettingsMenuItem.Enabled = Emulator is NES && !Global.MovieSession.Movie.IsActive;
2015-01-01 00:06:00 +00:00
NesControllerSettingsMenuItem.Enabled = GlobalWin.Tools.IsAvailable<NesControllerSettings>()
&& !Global.MovieSession.Movie.IsActive;
barcodeReaderToolStripMenuItem.Enabled = ServiceInjector.IsAvailable(Emulator.ServiceProvider, typeof(BarcodeEntry));
musicRipperToolStripMenuItem.Enabled = GlobalWin.Tools.IsAvailable<NESMusicRipper>();
}
private void FdsControlsMenuItem_DropDownOpened(object sender, EventArgs e)
{
var boardName = Emulator.HasBoardInfo() ? Emulator.AsBoardInfo().BoardName : null;
FdsEjectDiskMenuItem.Enabled = boardName == "FDS";
2014-01-20 17:18:55 +00:00
while (FDSControlsMenuItem.DropDownItems.Count > 1)
{
2014-01-20 17:18:55 +00:00
FDSControlsMenuItem.DropDownItems.RemoveAt(1);
}
for (int i = 0; i < 16; i++)
{
var str = "FDS Insert " + i;
if (Emulator.ControllerDefinition.BoolButtons.Contains(str))
{
FdsInsertDiskMenuAdd("Insert Disk " + i, str, "FDS Disk " + i + " inserted.");
}
}
}
2017-05-22 16:14:38 +00:00
private void NesPPUViewerMenuItem_Click(object sender, EventArgs e)
2013-10-27 13:53:28 +00:00
{
GlobalWin.Tools.Load<NesPPU>();
2013-10-27 13:53:28 +00:00
}
private void NESNametableViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<NESNameTableViewer>();
}
2017-05-22 16:14:38 +00:00
private void MusicRipperMenuItem_Click(object sender, EventArgs e)
2015-05-08 00:56:46 +00:00
{
GlobalWin.Tools.Load<NESMusicRipper>();
}
2013-10-27 13:53:28 +00:00
private void NESGameGenieCodesMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.LoadGameGenieEc();
2013-10-27 13:53:28 +00:00
}
2013-10-27 07:54:00 +00:00
2013-10-27 13:53:28 +00:00
private void NESGraphicSettingsMenuItem_Click(object sender, EventArgs e)
{
if (Emulator is NES)
2017-05-22 16:14:38 +00:00
{
new NESGraphicsConfig().ShowDialog(this);
2017-05-22 16:14:38 +00:00
}
else if (Emulator is QuickNES)
2017-05-22 16:14:38 +00:00
{
new QuickNesConfig().ShowDialog(this);
2017-05-22 16:14:38 +00:00
}
2013-10-27 13:53:28 +00:00
}
private void NESSoundChannelsMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<NESSoundConfig>();
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:14:38 +00:00
private void VsSettingsMenuItem_Click(object sender, EventArgs e)
{
2017-05-22 16:14:38 +00:00
if (Emulator is NES && ((NES)Emulator).IsVS)
{
2017-05-31 14:47:38 +00:00
new NesVsSettings().ShowHawkDialog();
}
}
private void FdsEjectDiskMenuItem_Click(object sender, EventArgs e)
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
Global.ClickyVirtualPadController.Click("FDS Eject");
GlobalWin.OSD.AddMessage("FDS disk ejected.");
}
}
2017-05-22 16:14:38 +00:00
private void VsInsertCoinP1MenuItem_Click(object sender, EventArgs e)
2016-10-30 02:35:46 +00:00
{
2017-05-22 16:14:38 +00:00
if (Emulator is NES && ((NES)Emulator).IsVS)
2016-10-30 02:35:46 +00:00
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
Global.ClickyVirtualPadController.Click("Insert Coin P1");
GlobalWin.OSD.AddMessage("P1 Coin Inserted");
}
}
}
2017-05-22 16:14:38 +00:00
private void VsInsertCoinP2MenuItem_Click(object sender, EventArgs e)
2016-10-30 02:35:46 +00:00
{
2017-05-22 16:14:38 +00:00
if (Emulator is NES && ((NES)Emulator).IsVS)
2016-10-30 02:35:46 +00:00
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
Global.ClickyVirtualPadController.Click("Insert Coin P2");
GlobalWin.OSD.AddMessage("P2 Coin Inserted");
}
}
}
2017-05-22 16:14:38 +00:00
private void VsServiceSwitchMenuItem_Click(object sender, EventArgs e)
2016-10-30 02:35:46 +00:00
{
2017-05-22 16:14:38 +00:00
if (Emulator is NES && ((NES)Emulator).IsVS)
2016-10-30 02:35:46 +00:00
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
{
Global.ClickyVirtualPadController.Click("Service Switch");
GlobalWin.OSD.AddMessage("Service Switch Pressed");
}
}
}
private void NesControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
if (Emulator is NES)
2017-05-22 16:14:38 +00:00
{
new NesControllerSettings().ShowDialog();
2017-05-22 16:14:38 +00:00
}
else if (Emulator is QuickNES)
2017-05-22 16:14:38 +00:00
{
GenericCoreConfig.DoDialog(this, "QuickNES Controller Settings", true, false);
2017-05-22 16:14:38 +00:00
}
}
private void MovieSettingsMenuItem_Click(object sender, EventArgs e)
{
using (var dlg = new NESSyncSettingsForm())
{
dlg.ShowDialog(this);
}
}
2017-05-22 16:14:38 +00:00
private void BarcodeReaderMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<BarcodeEntry>();
}
2013-10-27 13:53:28 +00:00
#endregion
#region PCE
private void PCESubMenu_DropDownOpened(object sender, EventArgs e)
{
var s = ((PCEngine)Emulator).GetSettings();
2013-12-22 20:41:21 +00:00
PceControllerSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
2013-12-22 20:41:21 +00:00
PCEAlwaysPerformSpriteLimitMenuItem.Checked = s.SpriteLimit;
PCEAlwaysEqualizeVolumesMenuItem.Checked = s.EqualizeVolume;
PCEArcadeCardRewindEnableMenuItem.Checked = s.ArcadeCardRewindHack;
2013-10-27 13:53:28 +00:00
}
private void PceControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
2014-08-03 22:05:32 +00:00
using (var dlg = new PCEControllerConfig())
{
2014-08-03 22:05:32 +00:00
dlg.ShowDialog();
}
}
2017-05-22 16:14:38 +00:00
private void PceGraphicsSettingsMenuItem_Click(object sender, EventArgs e)
{
new PCEGraphicsConfig().ShowDialog();
}
2017-05-22 16:14:38 +00:00
private void PceBgViewerMenuItem_Click(object sender, EventArgs e)
2013-10-27 13:53:28 +00:00
{
GlobalWin.Tools.Load<PceBgViewer>();
2013-10-27 13:53:28 +00:00
}
2014-05-10 14:50:47 +00:00
private void PceTileViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<PCETileViewer>();
}
2017-05-22 16:14:38 +00:00
private void PceSoundDebuggerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<PCESoundDebugger>();
}
2013-10-27 13:53:28 +00:00
private void PCEAlwaysPerformSpriteLimitMenuItem_Click(object sender, EventArgs e)
{
var s = ((PCEngine)Emulator).GetSettings();
2013-12-22 20:41:21 +00:00
s.SpriteLimit ^= true;
PutCoreSettings(s);
2013-10-27 13:53:28 +00:00
}
private void PCEAlwaysEqualizeVolumesMenuItem_Click(object sender, EventArgs e)
{
var s = ((PCEngine)Emulator).GetSettings();
2013-12-22 20:41:21 +00:00
s.EqualizeVolume ^= true;
PutCoreSettings(s);
2013-10-27 13:53:28 +00:00
}
private void PCEArcadeCardRewindEnableMenuItem_Click(object sender, EventArgs e)
{
var s = ((PCEngine)Emulator).GetSettings();
2013-12-22 20:41:21 +00:00
s.ArcadeCardRewindHack ^= true;
PutCoreSettings(s);
2013-10-27 13:53:28 +00:00
}
#endregion
#region SMS
private void SMSSubMenu_DropDownOpened(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
var ss = ((SMS)Emulator).GetSyncSettings();
SMSregionExportToolStripMenuItem.Checked = ss.ConsoleRegion == "Export";
SMSregionJapanToolStripMenuItem.Checked = ss.ConsoleRegion == "Japan";
SMSregionKoreaToolStripMenuItem.Checked = ss.ConsoleRegion == "Korea";
SMSregionAutoToolStripMenuItem.Checked = ss.ConsoleRegion == "Auto";
SMSdisplayNtscToolStripMenuItem.Checked = ss.DisplayType == "NTSC";
SMSdisplayPalToolStripMenuItem.Checked = ss.DisplayType == "PAL";
SMSdisplayAutoToolStripMenuItem.Checked = ss.DisplayType == "Auto";
SMSControllerStandardToolStripMenuItem.Checked = ss.ControllerType == "Standard";
SMSControllerPaddleToolStripMenuItem.Checked = ss.ControllerType == "Paddle";
SMSControllerLightPhaserToolStripMenuItem.Checked = ss.ControllerType == "Light Phaser";
SMSControllerSportsPadToolStripMenuItem.Checked = ss.ControllerType == "Sports Pad";
2017-11-23 03:18:14 +00:00
SMSControllerKeyboardToolStripMenuItem.Checked = ss.ControllerType == "Keyboard";
SMSenableBIOSToolStripMenuItem.Checked = ss.UseBIOS;
SMSEnableFMChipMenuItem.Checked = ss.EnableFM;
SMSOverclockMenuItem.Checked = ss.AllowOverlock;
SMSForceStereoMenuItem.Checked = s.ForceStereoSeparation;
SMSSpriteLimitMenuItem.Checked = s.SpriteLimit;
SMSDisplayOverscanMenuItem.Checked = s.DisplayOverscan;
SMSFix3DGameDisplayToolStripMenuItem.Checked = s.Fix3D;
ShowClippedRegionsMenuItem.Checked = s.ShowClippedRegions;
HighlightActiveDisplayRegionMenuItem.Checked = s.HighlightActiveDisplayRegion;
2013-10-27 13:53:28 +00:00
SMSEnableFMChipMenuItem.Visible =
2014-12-17 18:25:54 +00:00
SMSFix3DGameDisplayToolStripMenuItem.Visible =
SMSenableBIOSToolStripMenuItem.Visible =
Global.Game.System == "SMS";
SMSDisplayOverscanMenuItem.Visible =
Global.Game.System == "SMS" || Global.Game.System == "SG";
SMSOverclockMenuItem.Visible =
2013-10-27 13:53:28 +00:00
SMSForceStereoMenuItem.Visible =
2014-12-17 18:25:54 +00:00
SMSdisplayToolStripMenuItem.Visible =
Global.Game.System != "GG";
2013-10-27 13:53:28 +00:00
ShowClippedRegionsMenuItem.Visible =
HighlightActiveDisplayRegionMenuItem.Visible =
GGGameGenieMenuItem.Visible =
Global.Game.System == "GG";
SMSOverclockMenuItem.Visible =
2014-12-17 18:25:54 +00:00
SMSVDPViewerToolStripMenuItem.Visible =
toolStripSeparator24.Visible =
Global.Game.System != "SG";
}
private void SMS_RegionExport_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.ConsoleRegion = "Export";
PutCoreSyncSettings(ss);
2013-10-27 13:53:28 +00:00
}
private void SMS_RegionJapan_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.ConsoleRegion = "Japan";
PutCoreSyncSettings(ss);
}
private void SMS_RegionKorea_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.ConsoleRegion = "Korea";
PutCoreSyncSettings(ss);
}
private void SMS_RegionAuto_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.ConsoleRegion = "Auto";
PutCoreSyncSettings(ss);
}
private void SMS_DisplayNTSC_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.DisplayType = "NTSC";
PutCoreSyncSettings(ss);
}
private void SMS_DisplayPAL_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.DisplayType = "PAL";
PutCoreSyncSettings(ss);
}
private void SMS_DisplayAuto_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.DisplayType = "Auto";
PutCoreSyncSettings(ss);
}
2017-05-22 16:14:38 +00:00
private void SmsBiosMenuItem_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.UseBIOS ^= true;
PutCoreSyncSettings(ss);
}
2017-05-22 16:14:38 +00:00
private void SmsEnableFmChipMenuItem_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.EnableFM ^= true;
PutCoreSyncSettings(ss);
}
2013-10-27 13:53:28 +00:00
private void SMSOverclockMenuItem_Click(object sender, EventArgs e)
{
var ss = ((SMS)Emulator).GetSyncSettings();
ss.AllowOverlock ^= true;
PutCoreSyncSettings(ss);
}
2013-10-27 13:53:28 +00:00
private void SMSForceStereoMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
s.ForceStereoSeparation ^= true;
PutCoreSettings(s);
2013-10-27 07:54:00 +00:00
}
2013-10-27 13:53:28 +00:00
private void SMSSpriteLimitMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
s.SpriteLimit ^= true;
PutCoreSettings(s);
}
private void SMSDisplayOverscanMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
s.DisplayOverscan ^= true;
PutCoreSettings(s);
}
private void SMSFix3DDisplayMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
s.Fix3D ^= true;
PutCoreSettings(s);
}
2013-10-27 13:53:28 +00:00
private void ShowClippedRegionsMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
s.ShowClippedRegions ^= true;
PutCoreSettings(s);
2013-10-27 13:53:28 +00:00
}
private void HighlightActiveDisplayRegionMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSettings();
s.HighlightActiveDisplayRegion ^= true;
PutCoreSettings(s);
2013-10-27 13:53:28 +00:00
}
private void SMSGraphicsSettingsMenuItem_Click(object sender, EventArgs e)
{
new SMSGraphicsConfig().ShowDialog();
}
private void GGGameGenieMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.LoadGameGenieEc();
2013-10-27 13:53:28 +00:00
}
2014-05-10 14:50:47 +00:00
private void SmsVdpViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<SmsVDPViewer>();
}
2017-08-31 03:02:36 +00:00
private void SMSControllerStandardToolStripMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSyncSettings();
2017-08-31 03:02:36 +00:00
s.ControllerType = "Standard";
PutCoreSyncSettings(s);
2017-08-31 03:02:36 +00:00
}
private void SMSControllerPaddleToolStripMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSyncSettings();
2017-08-31 03:02:36 +00:00
s.ControllerType = "Paddle";
PutCoreSyncSettings(s);
2017-08-31 03:02:36 +00:00
}
2017-08-31 16:58:27 +00:00
private void SMSControllerLightPhaserToolStripMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSyncSettings();
2017-08-31 16:58:27 +00:00
s.ControllerType = "Light Phaser";
PutCoreSyncSettings(s);
}
private void SMSControllerSportsPadToolStripMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSyncSettings();
s.ControllerType = "Sports Pad";
PutCoreSyncSettings(s);
2017-08-31 16:58:27 +00:00
}
2017-11-23 03:18:14 +00:00
private void SMSControllerKeyboardToolStripMenuItem_Click(object sender, EventArgs e)
{
var s = ((SMS)Emulator).GetSyncSettings();
s.ControllerType = "Keyboard";
PutCoreSyncSettings(s);
}
2017-08-31 16:58:27 +00:00
2013-10-27 13:53:28 +00:00
#endregion
#region TI83
private void TI83SubMenu_DropDownOpened(object sender, EventArgs e)
{
AutoloadKeypadMenuItem.Checked = Global.Config.TI83autoloadKeyPad;
}
private void KeypadMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<TI83KeyPad>();
2013-10-27 13:53:28 +00:00
}
private void AutoloadKeypadMenuItem_Click(object sender, EventArgs e)
{
Global.Config.TI83autoloadKeyPad ^= true;
}
private void LoadTIFileMenuItem_Click(object sender, EventArgs e)
{
2017-05-22 16:50:40 +00:00
var ti83 = (TI83)Emulator;
var ofd = new OpenFileDialog
{
InitialDirectory = PathManager.GetRomsPath(Emulator.SystemId),
Filter = "TI-83 Program Files (*.83p,*.8xp)|*.83P;*.8xp|All Files|*.*",
RestoreDirectory = true
};
2013-10-27 13:53:28 +00:00
if (ofd.ShowDialog() == DialogResult.OK)
2013-10-27 13:53:28 +00:00
{
try
{
2017-05-22 16:50:40 +00:00
ti83.LinkPort.SendFileToCalc(File.OpenRead(ofd.FileName), true);
2013-10-27 13:53:28 +00:00
}
catch (IOException ex)
{
2017-05-22 16:50:40 +00:00
var message = $"Invalid file format. Reason: {ex.Message} \nForce transfer? This may cause the calculator to crash.";
2013-10-27 13:53:28 +00:00
2017-05-22 16:50:40 +00:00
if (MessageBox.Show(message, "Upload Failed", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
2013-10-27 13:53:28 +00:00
{
2017-05-22 16:50:40 +00:00
ti83.LinkPort.SendFileToCalc(File.OpenRead(ofd.FileName), false);
2013-10-27 13:53:28 +00:00
}
}
}
}
private void TI83PaletteMenuItem_Click(object sender, EventArgs e)
{
2017-05-22 16:50:40 +00:00
GlobalWin.OSD.AddMessage(new TI83PaletteConfig().ShowDialog() == DialogResult.OK
? "Palette settings saved"
: "Palette config aborted");
}
2013-10-27 13:53:28 +00:00
#endregion
#region Atari
private void AtariSettingsToolStripMenuItem_Click(object sender, EventArgs e)
2013-10-27 13:53:28 +00:00
{
GenericCoreConfig.DoDialog(this, "Atari 2600 Settings");
2013-10-27 13:53:28 +00:00
}
#endregion
2017-06-11 22:17:34 +00:00
#region Atari7800
private void A7800SubMenu_DropDownOpened(object sender, EventArgs e)
{
A7800ControllerSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
2017-07-31 16:12:06 +00:00
A7800FilterSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
2017-06-11 22:17:34 +00:00
}
2017-07-31 16:12:06 +00:00
private void A7800ControllerSettingsToolStripMenuItem_Click(object sender, EventArgs e)
2017-06-11 22:17:34 +00:00
{
new A7800ControllerSettings().ShowDialog();
}
2017-07-31 16:12:06 +00:00
private void A7800FilterSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
new A7800FilterSettings().ShowDialog();
}
2017-06-11 22:17:34 +00:00
#endregion
2013-10-27 13:53:28 +00:00
#region GB
private void GBSubMenu_DropDownOpened(object sender, EventArgs e)
{
LoadGBInSGBMenuItem.Checked = Global.Config.GB_AsSGB;
2013-10-27 13:53:28 +00:00
}
2014-07-29 01:33:54 +00:00
private void GBCoreSettingsMenuItem_Click(object sender, EventArgs e)
{
2017-07-20 00:18:13 +00:00
if (Global.Emulator is Gameboy)
{
GBPrefs.DoGBPrefsDialog(this);
}
else // sameboy
{
GenericCoreConfig.DoDialog(this, "Gameboy Settings");
}
2014-07-29 01:33:54 +00:00
}
2017-05-22 16:50:40 +00:00
private void LoadGbInSgbMenuItem_Click(object sender, EventArgs e)
{
2017-05-22 16:50:40 +00:00
SnesGbInSgbMenuItem_Click(sender, e);
}
2017-05-22 16:50:40 +00:00
private void GbGpuViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GBGPUView>();
2013-10-27 13:53:28 +00:00
}
private void GBGameGenieMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.LoadGameGenieEc();
2013-10-27 13:53:28 +00:00
}
2017-08-26 23:35:07 +00:00
private void GBPrinterViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GBPrinterView>();
}
2013-10-27 13:53:28 +00:00
#endregion
#region GBA
private void GbaGpuViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GBAGPUView>();
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:50:40 +00:00
private void UsemGBAMenuItem_Click(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
Global.Config.GBA_UsemGBA = true;
FlagNeedsReboot();
}
2017-05-22 16:50:40 +00:00
private void UseVbaNextMenuItem_Click(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
Global.Config.GBA_UsemGBA = false;
FlagNeedsReboot();
}
private void GBACoreSelectionSubMenu_DropDownOpened(object sender, EventArgs e)
{
GBAmGBAMenuItem.Checked = Global.Config.GBA_UsemGBA == true;
GBAVBANextMenuItem.Checked = Global.Config.GBA_UsemGBA == false;
}
2017-05-22 16:14:38 +00:00
private void GbaWithmGBAMenuItem_Click(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
Global.Config.GBA_UsemGBA ^= true;
FlagNeedsReboot();
}
2013-10-27 13:53:28 +00:00
#endregion
#region PSX
private void PSXSubMenu_DropDownOpened(object sender, EventArgs e)
{
PSXControllerSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
}
private void PSXControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
new PSXControllerConfigNew().ShowDialog();
}
private void PSXOptionsMenuItem_Click(object sender, EventArgs e)
{
var result = PSXOptions.DoSettingsDialog(this);
if (result == DialogResult.OK)
{
FrameBufferResized();
}
}
private void PSXDiscControlsMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<VirtualpadTool>().ScrollToPadSchema("Console");
}
private void PSXHashDiscsToolStripMenuItem_Click(object sender, EventArgs e)
{
new PSXHashDiscs().ShowDialog();
}
#endregion
2013-10-27 13:53:28 +00:00
#region SNES
private void SNESSubMenu_DropDownOpened(object sender, EventArgs e)
{
2017-05-22 16:50:40 +00:00
if (((LibsnesCore)Emulator).IsSGB)
2013-10-27 13:53:28 +00:00
{
SnesGBInSGBMenuItem.Visible = true;
SnesGBInSGBMenuItem.Checked = Global.Config.GB_AsSGB;
}
2013-10-27 07:54:00 +00:00
else
2013-10-27 13:53:28 +00:00
{
SnesGBInSGBMenuItem.Visible = false;
}
SNESControllerConfigurationMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
}
private void SNESControllerConfigurationMenuItem_Click(object sender, EventArgs e)
{
new SNESControllerSettings().ShowDialog();
}
2013-10-27 13:53:28 +00:00
private void SnesGfxDebuggerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<SNESGraphicsDebugger>();
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:50:40 +00:00
private void SnesGbInSgbMenuItem_Click(object sender, EventArgs e)
2013-10-27 13:53:28 +00:00
{
Global.Config.GB_AsSGB ^= true;
FlagNeedsReboot();
}
private void SnesGameGenieMenuItem_Click(object sender, EventArgs e)
2013-10-27 07:54:00 +00:00
{
GlobalWin.Tools.LoadGameGenieEc();
}
2013-10-27 13:53:28 +00:00
private void SnesOptionsMenuItem_Click(object sender, EventArgs e)
2011-06-26 01:22:52 +00:00
{
SNESOptions.DoSettingsDialog(this);
2011-06-26 01:22:52 +00:00
}
2013-10-27 13:53:28 +00:00
#endregion
#region Coleco
private void ColecoSubMenu_DropDownOpened(object sender, EventArgs e)
2011-06-26 01:22:52 +00:00
{
var ss = ((ColecoVision)Emulator).GetSyncSettings();
2013-12-24 23:32:43 +00:00
ColecoSkipBiosMenuItem.Checked = ss.SkipBiosIntro;
ColecoUseSGMMenuItem.Checked = ss.UseSGM;
ColecoControllerSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
2011-06-26 01:22:52 +00:00
}
2013-10-27 13:53:28 +00:00
private void ColecoSkipBiosMenuItem_Click(object sender, EventArgs e)
{
var ss = ((ColecoVision)Emulator).GetSyncSettings();
2013-12-24 23:32:43 +00:00
ss.SkipBiosIntro ^= true;
PutCoreSyncSettings(ss);
}
private void ColecoUseSGMMenuItem_Click(object sender, EventArgs e)
{
var ss = ((ColecoVision)Emulator).GetSyncSettings();
ss.UseSGM ^= true;
PutCoreSyncSettings(ss);
}
2017-03-01 03:07:39 +00:00
private void ColecoControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
new ColecoControllerSettings().ShowDialog();
}
2013-10-27 13:53:28 +00:00
#endregion
#region N64
private void N64SubMenu_DropDownOpened(object sender, EventArgs e)
{
N64PluginSettingsMenuItem.Enabled =
N64ControllerSettingsMenuItem.Enabled =
2014-12-17 18:25:54 +00:00
N64ExpansionSlotMenuItem.Enabled =
!Global.MovieSession.Movie.IsActive;
N64CircularAnalogRangeMenuItem.Checked = Global.Config.N64UseCircularAnalogConstraint;
var s = ((N64)Emulator).GetSettings();
MupenStyleLagMenuItem.Checked = s.UseMupenStyleLag;
2017-05-22 16:50:40 +00:00
N64ExpansionSlotMenuItem.Checked = ((N64)Emulator).UsingExpansionSlot;
N64ExpansionSlotMenuItem.Enabled = !((N64)Emulator).IsOverridingUserExpansionSlotSetting;
}
2013-10-27 13:53:28 +00:00
private void N64PluginSettingsMenuItem_Click(object sender, EventArgs e)
2011-06-26 01:22:52 +00:00
{
if (new N64VideoPluginconfig().ShowDialog() == DialogResult.OK)
{
if (Emulator.IsNull())
{
GlobalWin.OSD.AddMessage("Plugin settings saved");
}
else
{
// Do nothing, Reboot is being flagged already if they chaned anything
}
}
else
{
GlobalWin.OSD.AddMessage("Plugin settings aborted");
}
}
private void N64ControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
if (new N64ControllersSetup().ShowDialog() == DialogResult.OK)
{
FlagNeedsReboot();
GlobalWin.OSD.AddMessage("Controller settings saved but a core reboot is required");
}
else
{
GlobalWin.OSD.AddMessage("Controller settings aborted");
}
}
private void N64CircularAnalogRangeMenuItem_Click(object sender, EventArgs e)
{
Global.Config.N64UseCircularAnalogConstraint ^= true;
}
private void MupenStyleLagMenuItem_Click(object sender, EventArgs e)
{
var n64 = (N64)Emulator;
var s = n64.GetSettings();
s.UseMupenStyleLag ^= true;
n64.PutSettings(s);
}
private void N64ExpansionSlotMenuItem_Click(object sender, EventArgs e)
{
var n64 = (N64)Emulator;
var ss = n64.GetSyncSettings();
ss.DisableExpansionSlot ^= true;
n64.PutSyncSettings(ss);
FlagNeedsReboot();
}
2013-10-27 13:53:28 +00:00
#endregion
#region Saturn
private void SaturnPreferencesMenuItem_Click(object sender, EventArgs e)
2011-06-26 01:22:52 +00:00
{
GenericCoreConfig.DoDialog(this, "Saturn Settings");
2013-10-27 13:53:28 +00:00
}
#endregion
#region DGB
2017-05-22 16:14:38 +00:00
private void DgbSettingsMenuItem_Click(object sender, EventArgs e)
{
2017-05-31 13:52:55 +00:00
DGBPrefs.DoDGBPrefsDialog(this);
}
#endregion
#region GEN
2014-05-10 14:50:47 +00:00
private void GenVdpViewerMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GenVDPViewer>();
}
private void GenesisSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "Genesis Settings");
}
2017-05-22 16:50:40 +00:00
private void GenesisGameGenieEcDc_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<GenGameGenie>();
}
#endregion
2014-07-29 01:33:54 +00:00
#region Wondersawn
private void WondersawnSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "WonderSwan Settings");
}
#endregion
2015-04-13 00:46:11 +00:00
#region Apple II
2017-05-22 16:14:38 +00:00
private void AppleIISettingsMenuItem_Click(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
GenericCoreConfig.DoDialog(this, "Apple II Settings");
}
2015-04-13 00:46:11 +00:00
private void AppleSubMenu_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is AppleII)
2015-04-13 00:46:11 +00:00
{
2017-05-22 16:14:38 +00:00
AppleDisksSubMenu.Enabled = ((AppleII)Emulator).DiskCount > 1;
2015-04-13 00:46:11 +00:00
}
}
private void AppleDisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
AppleDisksSubMenu.DropDownItems.Clear();
if (Emulator is AppleII)
2015-04-13 00:46:11 +00:00
{
2017-05-22 16:50:40 +00:00
var appleII = (AppleII)Emulator;
2015-04-13 00:46:11 +00:00
for (int i = 0; i < appleII.DiskCount; i++)
{
var menuItem = new ToolStripMenuItem
{
Name = "Disk" + (i + 1),
Text = "Disk" + (i + 1),
Checked = appleII.CurrentDisk == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
appleII.SetDisk(dummy);
};
AppleDisksSubMenu.DropDownItems.Add(menuItem);
}
}
}
#endregion
#region C64
2017-05-16 00:52:05 +00:00
private void C64SubMenu_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is C64)
{
2017-05-22 16:50:40 +00:00
C64DisksSubMenu.Enabled = ((C64)Emulator).DiskCount > 1;
2017-05-16 00:52:05 +00:00
}
}
private void C64DisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
C64DisksSubMenu.DropDownItems.Clear();
if (Emulator is C64)
{
2017-05-22 16:50:40 +00:00
var c64 = (C64)Emulator;
2017-05-16 00:52:05 +00:00
for (int i = 0; i < c64.DiskCount; i++)
{
var menuItem = new ToolStripMenuItem
{
Name = "Disk" + (i + 1),
Text = "Disk" + (i + 1),
Checked = c64.CurrentDisk == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
c64.SetDisk(dummy);
};
C64DisksSubMenu.DropDownItems.Add(menuItem);
}
}
}
private void C64SettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "C64 Settings");
}
#endregion
#region Intv
private void IntvSubMenu_DropDownOpened(object sender, EventArgs e)
{
IntVControllerSettingsMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
}
private void IntVControllerSettingsMenuItem_Click(object sender, EventArgs e)
{
new IntvControllerSettings().ShowDialog();
}
#endregion
#region ZXSpectrum
private void zXSpectrumToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
}
2018-03-16 15:16:33 +00:00
private void preferencesToolStripMenuItem4_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "ZXSpectrum Settings");
}
2018-03-16 15:16:33 +00:00
2018-03-16 11:58:02 +00:00
private void ZXSpectrumControllerConfigurationMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumJoystickSettings().ShowDialog();
}
private void ZXSpectrumCoreEmulationSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumCoreEmulationSettings().ShowDialog();
2018-03-16 15:12:55 +00:00
}
private void ZXSpectrumNonSyncSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumNonSyncSettings().ShowDialog();
}
private void ZXSpectrumAudioSettingsMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumAudioSettings().ShowDialog();
2018-03-16 11:58:02 +00:00
}
2018-06-12 09:16:43 +00:00
private void ZXSpectrumPokeMemoryMenuItem_Click(object sender, EventArgs e)
{
new ZXSpectrumPokeMemory().ShowDialog();
}
private void ZXSpectrumMediaMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Emulator is ZXSpectrum)
{
ZXSpectrumTapesSubMenu.Enabled = ((ZXSpectrum)Emulator)._tapeInfo.Count > 0;
ZXSpectrumDisksSubMenu.Enabled = ((ZXSpectrum)Emulator)._diskInfo.Count > 0;
}
}
private void ZXSpectrumTapesSubMenu_DropDownOpened(object sender, EventArgs e)
{
ZXSpectrumTapesSubMenu.DropDownItems.Clear();
if (Emulator is ZXSpectrum)
{
var speccy = (ZXSpectrum)Emulator;
var currSel = speccy._machine.TapeMediaIndex;
for (int i = 0; i < speccy._tapeInfo.Count; i++)
{
string name = speccy._tapeInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = i + "_" + name,
Text = i + ": " + name,
Checked = currSel == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
speccy._machine.TapeMediaIndex = dummy;
};
ZXSpectrumTapesSubMenu.DropDownItems.Add(menuItem);
}
}
}
private void ZXSpectrumDisksSubMenu_DropDownOpened(object sender, EventArgs e)
{
ZXSpectrumDisksSubMenu.DropDownItems.Clear();
if (Emulator is ZXSpectrum)
{
var speccy = (ZXSpectrum)Emulator;
var currSel = speccy._machine.DiskMediaIndex;
for (int i = 0; i < speccy._diskInfo.Count; i++)
{
string name = speccy._diskInfo[i].Name;
var menuItem = new ToolStripMenuItem
{
Name = i + "_" + name,
Text = i + ": " + name,
Checked = currSel == i
};
int dummy = i;
menuItem.Click += (o, ev) =>
{
speccy._machine.DiskMediaIndex = dummy;
};
ZXSpectrumDisksSubMenu.DropDownItems.Add(menuItem);
}
}
}
#endregion
#region Help
2013-10-27 07:54:00 +00:00
private void HelpSubMenu_DropDownOpened(object sender, EventArgs e)
{
FeaturesMenuItem.Visible = VersionInfo.DeveloperBuild;
}
2013-10-27 13:53:28 +00:00
private void OnlineHelpMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://tasvideos.org/BizHawk.html");
2011-06-26 01:22:52 +00:00
}
2011-06-10 23:09:10 +00:00
2013-10-27 13:53:28 +00:00
private void ForumsMenuItem_Click(object sender, EventArgs e)
2011-06-10 23:09:10 +00:00
{
2013-10-27 13:53:28 +00:00
System.Diagnostics.Process.Start("http://tasvideos.org/forum/viewforum.php?f=64");
2011-06-10 23:09:10 +00:00
}
private void FeaturesMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.Tools.Load<CoreFeatureAnalysis>();
}
2013-10-27 13:53:28 +00:00
private void AboutMenuItem_Click(object sender, EventArgs e)
{
if (VersionInfo.DeveloperBuild)
2013-10-27 13:53:28 +00:00
{
new AboutBox().ShowDialog();
}
else
{
new BizBox().ShowDialog();
}
}
2013-10-27 13:53:28 +00:00
#endregion
#region Context Menu
private void MainFormContextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e)
{
_wasPaused = EmulatorPaused;
_didMenuPause = true;
PauseEmulator();
OpenRomContextMenuItem.Visible = Emulator.IsNull() || _inFullscreen;
2013-10-27 13:53:28 +00:00
bool showMenuVisible = _inFullscreen;
2017-05-22 16:14:38 +00:00
if (!MainMenuStrip.Visible)
{
showMenuVisible = true; // need to always be able to restore this as an emergency measure
}
2017-07-16 23:28:22 +00:00
if (argParse._chromeless)
2017-05-22 16:14:38 +00:00
{
showMenuVisible = true; // I decided this was always possible in chromeless mode, we'll see what they think
}
ShowMenuContextMenuItem.Visible =
ShowMenuContextMenuSeparator.Visible =
showMenuVisible;
2013-10-27 13:53:28 +00:00
LoadLastRomContextMenuItem.Visible = Emulator.IsNull();
StopAVContextMenuItem.Visible = _currAviWriter != null;
ContextSeparator_AfterMovie.Visible =
ContextSeparator_AfterUndo.Visible =
ScreenshotContextMenuItem.Visible =
CloseRomContextMenuItem.Visible =
UndoSavestateContextMenuItem.Visible =
!Emulator.IsNull();
RecordMovieContextMenuItem.Visible =
PlayMovieContextMenuItem.Visible =
LoadLastMovieContextMenuItem.Visible =
!Emulator.IsNull() && !Global.MovieSession.Movie.IsActive;
RestartMovieContextMenuItem.Visible =
StopMovieContextMenuItem.Visible =
ViewSubtitlesContextMenuItem.Visible =
ViewCommentsContextMenuItem.Visible =
SaveMovieContextMenuItem.Visible =
2016-01-28 13:11:05 +00:00
SaveMovieAsContextMenuItem.Visible =
Global.MovieSession.Movie.IsActive;
2013-10-27 13:53:28 +00:00
2014-06-12 11:53:25 +00:00
BackupMovieContextMenuItem.Visible = Global.MovieSession.Movie.IsActive;
StopNoSaveContextMenuItem.Visible = Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.Changes;
2013-10-27 13:53:28 +00:00
AddSubtitleContextMenuItem.Visible = !Emulator.IsNull() && Global.MovieSession.Movie.IsActive && !Global.MovieSession.ReadOnly;
2013-10-27 13:53:28 +00:00
ConfigContextMenuItem.Visible = _inFullscreen;
ClearSRAMContextMenuItem.Visible = File.Exists(PathManager.SaveRamPath(Global.Game));
2013-10-27 13:53:28 +00:00
ContextSeparator_AfterROM.Visible = OpenRomContextMenuItem.Visible || LoadLastRomContextMenuItem.Visible;
2013-10-27 13:53:28 +00:00
LoadLastRomContextMenuItem.Enabled = !Global.Config.RecentRoms.Empty;
LoadLastMovieContextMenuItem.Enabled = !Global.Config.RecentMovies.Empty;
2013-10-27 13:53:28 +00:00
if (Global.MovieSession.Movie.IsActive)
{
if (Global.MovieSession.ReadOnly)
{
ViewSubtitlesContextMenuItem.Text = "View Subtitles";
ViewCommentsContextMenuItem.Text = "View Comments";
}
else
{
ViewSubtitlesContextMenuItem.Text = "Edit Subtitles";
ViewCommentsContextMenuItem.Text = "Edit Comments";
}
}
2013-10-27 13:53:28 +00:00
var file = new FileInfo(
PathManager.SaveStatePrefix(Global.Game) +
".QuickSave" +
Global.Config.SaveSlot +
2017-05-22 16:14:38 +00:00
".State.bak");
if (file.Exists)
{
UndoSavestateContextMenuItem.Enabled = true;
if (_stateSlots.IsRedo(Global.Config.SaveSlot))
{
UndoSavestateContextMenuItem.Text = "Redo Save to slot " + Global.Config.SaveSlot;
UndoSavestateContextMenuItem.Image = Properties.Resources.redo;
}
else
{
UndoSavestateContextMenuItem.Text = "Undo Save to slot " + Global.Config.SaveSlot;
UndoSavestateContextMenuItem.Image = Properties.Resources.undo;
}
}
else
{
UndoSavestateContextMenuItem.Enabled = false;
UndoSavestateContextMenuItem.Text = "Undo Savestate";
UndoSavestateContextMenuItem.Image = Properties.Resources.undo;
}
2013-10-27 13:53:28 +00:00
ShowMenuContextMenuItem.Text = MainMenuStrip.Visible ? "Hide Menu" : "Show Menu";
}
private void MainFormContextMenu_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
if (!_wasPaused)
{
UnpauseEmulator();
}
}
2014-05-10 14:50:47 +00:00
private void SavestateTypeContextSubMenu_DropDownOpened(object sender, EventArgs e)
{
SavestateTypeDefaultContextMenuItem.Checked = false;
SavestateBinaryContextMenuItem.Checked = false;
SavestateTextContextMenuItem.Checked = false;
switch (Global.Config.SaveStateType)
{
2017-05-22 16:14:38 +00:00
case Config.SaveStateTypeE.Binary:
SavestateBinaryContextMenuItem.Checked = true;
break;
case Config.SaveStateTypeE.Text:
SavestateTextContextMenuItem.Checked = true;
break;
case Config.SaveStateTypeE.Default:
SavestateTypeDefaultContextMenuItem.Checked = true;
break;
2014-05-10 14:50:47 +00:00
}
}
private void DisplayConfigMenuItem_Click(object sender, EventArgs e)
{
2017-05-31 17:32:07 +00:00
var window = new DisplayConfigLite();
var result = window.ShowDialog();
if (result == DialogResult.OK)
{
FrameBufferResized();
SynchChrome();
if (window.NeedReset)
{
GlobalWin.OSD.AddMessage("Restart program for changed settings");
}
}
2014-05-10 14:50:47 +00:00
}
private void LoadLastRomContextMenuItem_Click(object sender, EventArgs e)
{
LoadRomFromRecent(Global.Config.RecentRoms.MostRecent);
}
private void LoadLastMovieContextMenuItem_Click(object sender, EventArgs e)
{
LoadMoviesFromRecent(Global.Config.RecentMovies.MostRecent);
}
private void BackupMovieContextMenuItem_Click(object sender, EventArgs e)
{
Global.MovieSession.Movie.SaveBackup();
2014-06-12 11:53:25 +00:00
GlobalWin.OSD.AddMessage("Backup movie saved.");
}
private void ViewSubtitlesContextMenuItem_Click(object sender, EventArgs e)
{
if (Global.MovieSession.Movie.IsActive)
{
var form = new EditSubtitlesForm { ReadOnly = Global.MovieSession.ReadOnly };
form.GetMovie(Global.MovieSession.Movie);
form.ShowDialog();
}
}
private void AddSubtitleContextMenuItem_Click(object sender, EventArgs e)
{
2017-05-22 16:14:38 +00:00
// TODO: rethink this?
var subForm = new SubtitleMaker();
subForm.DisableFrame();
int index = -1;
var sub = new Subtitle();
2017-05-22 16:14:38 +00:00
for (int i = 0; i < Global.MovieSession.Movie.Subtitles.Count; i++)
{
2017-05-22 16:14:38 +00:00
sub = Global.MovieSession.Movie.Subtitles[i];
if (Emulator.Frame == sub.Frame)
{
2017-05-22 16:14:38 +00:00
index = i;
break;
}
}
if (index < 0)
{
sub = new Subtitle { Frame = Emulator.Frame };
}
subForm.Sub = sub;
if (subForm.ShowDialog() == DialogResult.OK)
{
if (index >= 0)
2012-09-03 19:42:53 +00:00
{
Global.MovieSession.Movie.Subtitles.RemoveAt(index);
2012-09-03 19:42:53 +00:00
}
Global.MovieSession.Movie.Subtitles.Add(subForm.Sub);
}
}
private void ViewCommentsContextMenuItem_Click(object sender, EventArgs e)
{
if (Global.MovieSession.Movie.IsActive)
{
var form = new EditCommentsForm();
form.GetMovie(Global.MovieSession.Movie);
form.ShowDialog();
}
}
private void UndoSavestateContextMenuItem_Click(object sender, EventArgs e)
{
_stateSlots.SwapBackupSavestate(
PathManager.SaveStatePrefix(Global.Game) +
".QuickSave" +
Global.Config.SaveSlot +
2017-05-22 16:14:38 +00:00
".State");
GlobalWin.OSD.AddMessage("Save slot " + Global.Config.SaveSlot + " restored.");
}
2017-05-22 16:14:38 +00:00
private void ClearSramContextMenuItem_Click(object sender, EventArgs e)
2013-10-27 15:53:37 +00:00
{
CloseRom(clearSram: true);
2013-10-27 15:53:37 +00:00
}
private void ShowMenuContextMenuItem_Click(object sender, EventArgs e)
{
MainMenuStrip.Visible ^= true;
FrameBufferResized();
}
2011-06-26 01:22:52 +00:00
#endregion
2013-10-27 15:53:37 +00:00
#region Status Bar
2013-10-27 15:53:37 +00:00
private void DumpStatusButton_Click(object sender, EventArgs e)
{
string details = Emulator.CoreComm.RomStatusDetails;
2017-05-22 16:14:38 +00:00
if (!string.IsNullOrEmpty(details))
2012-09-03 19:42:53 +00:00
{
GlobalWin.Sound.StopSound();
2013-10-27 15:53:37 +00:00
LogWindow.ShowReport("Dump Status Report", details, this);
GlobalWin.Sound.StartSound();
2012-09-03 19:42:53 +00:00
}
}
2013-10-27 15:53:37 +00:00
private void SlotStatusButtons_MouseUp(object sender, MouseEventArgs e)
{
2013-10-27 15:53:37 +00:00
int slot = 0;
if (sender == Slot1StatusButton) slot = 1;
if (sender == Slot2StatusButton) slot = 2;
if (sender == Slot3StatusButton) slot = 3;
if (sender == Slot4StatusButton) slot = 4;
if (sender == Slot5StatusButton) slot = 5;
if (sender == Slot6StatusButton) slot = 6;
if (sender == Slot7StatusButton) slot = 7;
if (sender == Slot8StatusButton) slot = 8;
if (sender == Slot9StatusButton) slot = 9;
if (sender == Slot0StatusButton) slot = 0;
2013-10-27 15:53:37 +00:00
if (e.Button == MouseButtons.Left)
2013-10-27 07:54:00 +00:00
{
if (_stateSlots.HasSlot(slot))
2013-10-27 07:54:00 +00:00
{
LoadQuickSave("QuickSave" + slot);
2013-10-27 07:54:00 +00:00
}
}
2013-10-27 15:53:37 +00:00
else if (e.Button == MouseButtons.Right)
{
SaveQuickSave("QuickSave" + slot);
}
2013-10-27 13:53:28 +00:00
}
2013-10-27 15:53:37 +00:00
private void KeyPriorityStatusLabel_Click(object sender, EventArgs e)
2013-10-27 13:53:28 +00:00
{
2013-10-27 15:53:37 +00:00
switch (Global.Config.Input_Hotkey_OverrideOptions)
2013-10-27 13:53:28 +00:00
{
2013-10-27 15:53:37 +00:00
default:
case 0:
Global.Config.Input_Hotkey_OverrideOptions = 1;
break;
case 1:
Global.Config.Input_Hotkey_OverrideOptions = 2;
break;
case 2:
Global.Config.Input_Hotkey_OverrideOptions = 0;
break;
2013-10-27 13:53:28 +00:00
}
2017-05-22 16:14:38 +00:00
2013-10-27 15:53:37 +00:00
UpdateKeyPriorityIcon();
}
2011-08-09 23:27:47 +00:00
private void FreezeStatus_Click(object sender, EventArgs e)
{
2013-10-27 15:53:37 +00:00
if (CheatStatusButton.Visible)
{
GlobalWin.Tools.Load<Cheats>();
}
2011-08-09 23:27:47 +00:00
}
2014-07-29 01:33:54 +00:00
private void ProfileFirstBootLabel_Click(object sender, EventArgs e)
{
2017-05-22 16:14:38 +00:00
// We do not check if the user is actually setting a profile here.
// This is intentional.
var profileForm = new ProfileConfig();
profileForm.ShowDialog();
Global.Config.FirstBoot = false;
ProfileFirstBootLabel.Visible = false;
2014-07-29 01:33:54 +00:00
}
private void UpdateNotification_Click(object sender, EventArgs e)
{
GlobalWin.Sound.StopSound();
DialogResult result = MessageBox.Show(this,
"Version " + Global.Config.Update_LatestVersion + " is now available. Would you like to open the BizHawk homepage?\r\n\r\nClick \"No\" to hide the update notification for this version.",
"New Version Available", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
GlobalWin.Sound.StartSound();
if (result == DialogResult.Yes)
{
2017-05-22 16:14:38 +00:00
System.Threading.ThreadPool.QueueUserWorkItem(s =>
{
using (System.Diagnostics.Process.Start(VersionInfo.HomePage))
{
}
});
}
else if (result == DialogResult.No)
{
UpdateChecker.IgnoreNewVersion();
UpdateChecker.BeginCheck(skipCheck: true); // Trigger event to hide new version notification
}
}
2013-10-27 15:53:37 +00:00
#endregion
#region Form Events
private void MainForm_Activated(object sender, EventArgs e)
{
2013-10-27 15:53:37 +00:00
if (!Global.Config.RunInBackground)
{
if (!_wasPaused)
{
2013-10-27 15:53:37 +00:00
UnpauseEmulator();
}
2017-05-22 16:50:40 +00:00
_wasPaused = false;
}
}
2013-10-27 15:53:37 +00:00
private void MainForm_Deactivate(object sender, EventArgs e)
{
2013-10-27 15:53:37 +00:00
if (!Global.Config.RunInBackground)
{
2013-10-27 15:53:37 +00:00
if (EmulatorPaused)
{
_wasPaused = true;
}
2017-05-22 16:14:38 +00:00
2013-10-27 15:53:37 +00:00
PauseEmulator();
}
}
2017-05-22 16:50:40 +00:00
private void TimerMouseIdle_Tick(object sender, EventArgs e)
2015-07-24 20:59:53 +00:00
{
if (_inFullscreen && Global.Config.DispChrome_Fullscreen_AutohideMouse)
2017-05-22 16:14:38 +00:00
{
2015-07-24 20:59:53 +00:00
AutohideCursor(true);
2017-05-22 16:14:38 +00:00
}
2015-07-24 20:59:53 +00:00
}
2013-10-27 15:53:37 +00:00
private void MainForm_Enter(object sender, EventArgs e)
{
2015-07-24 20:59:53 +00:00
AutohideCursor(false);
}
public void MainForm_MouseWheel(object sender, MouseEventArgs e)
{
MouseWheelTracker += e.Delta;
}
2015-07-24 20:59:53 +00:00
public void MainForm_MouseMove(object sender, MouseEventArgs e)
{
AutohideCursor(false);
}
2013-10-27 15:53:37 +00:00
public void MainForm_MouseClick(object sender, MouseEventArgs e)
{
2015-07-24 20:59:53 +00:00
AutohideCursor(false);
2013-10-27 15:53:37 +00:00
if (Global.Config.ShowContextMenu && e.Button == MouseButtons.Right)
{
2013-10-27 15:53:37 +00:00
MainFormContextMenu.Show(
2017-05-22 16:14:38 +00:00
PointToScreen(new Point(e.X, e.Y + MainformMenu.Height)));
}
}
2013-10-27 15:53:37 +00:00
private void MainForm_Resize(object sender, EventArgs e)
{
PresentationPanel.Resized = true;
}
2013-10-27 15:53:37 +00:00
private void MainForm_Shown(object sender, EventArgs e)
{
2013-10-27 15:53:37 +00:00
HandlePlatformMenus();
}
2013-10-27 15:53:37 +00:00
protected override void OnClosed(EventArgs e)
{
_windowClosedAndSafeToExitProcess = true;
2013-10-27 15:53:37 +00:00
base.OnClosed(e);
}
2013-10-27 15:53:37 +00:00
private void MainformMenu_Leave(object sender, EventArgs e)
{
}
2013-10-27 15:53:37 +00:00
private void MainformMenu_MenuActivate(object sender, EventArgs e)
{
2013-10-27 15:53:37 +00:00
HandlePlatformMenus();
if (Global.Config.PauseWhenMenuActivated)
{
_wasPaused = EmulatorPaused;
_didMenuPause = true;
2013-10-27 15:53:37 +00:00
PauseEmulator();
}
}
2013-10-27 15:53:37 +00:00
private void MainformMenu_MenuDeactivate(object sender, EventArgs e)
{
if (!_wasPaused)
{
2013-10-27 15:53:37 +00:00
UnpauseEmulator();
}
}
private static void FormDragEnter(object sender, DragEventArgs e)
{
e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
}
private void FormDragDrop(object sender, DragEventArgs e)
{
2014-05-26 04:50:30 +00:00
try
{
2017-05-22 16:14:38 +00:00
FormDragDrop_Internal(sender, e);
2014-05-26 04:50:30 +00:00
}
catch (Exception ex)
{
MessageBox.Show("Exception on drag and drop:\n" + ex);
2014-05-26 04:50:30 +00:00
}
}
2017-05-22 16:14:38 +00:00
private void FormDragDrop_Internal(object sender, DragEventArgs e)
2014-12-17 18:25:54 +00:00
{
_FormDragDrop_internal(sender, e);
/*
var filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
var isLua = false;
foreach (var path in filePaths)
{
var extension = Path.GetExtension(path);
if (extension != null && extension.ToUpper() == ".LUA")
{
OpenLuaConsole();
if (GlobalWin.Tools.Has<LuaConsole>())
{
GlobalWin.Tools.LuaConsole.LoadLuaFile(path);
}
isLua = true;
}
}
if (isLua)
{
return;
}
2017-05-10 11:45:23 +00:00
var ext = Path.GetExtension(filePaths[0]) ?? "";
if (ext.ToUpper() == ".LUASES")
{
OpenLuaConsole();
if (GlobalWin.Tools.Has<LuaConsole>())
{
GlobalWin.Tools.LuaConsole.LoadLuaSession(filePaths[0]);
}
}
2014-06-14 14:09:55 +00:00
else if (MovieService.IsValidMovieExtension(ext))
{
if (Emulator.IsNull())
{
OpenRom();
}
if (Emulator.IsNull())
{
return;
}
StartNewMovie(MovieService.Get(filePaths[0]), false);
}
else if (ext.ToUpper() == ".STATE")
{
LoadState(filePaths[0], Path.GetFileName(filePaths[0]));
}
else if (ext.ToUpper() == ".CHT")
{
Global.CheatList.Load(filePaths[0], false);
GlobalWin.Tools.Load<Cheats>();
}
else if (ext.ToUpper() == ".WCH")
{
GlobalWin.Tools.LoadRamWatch(true);
(GlobalWin.Tools.Get<RamWatch>() as RamWatch).LoadWatchFile(new FileInfo(filePaths[0]), false);
}
else if (ext.ToUpper() == ".CDL" && Emulator is PCEngine)
{
2015-10-27 00:22:07 +00:00
GlobalWin.Tools.Load<CDL>();
(GlobalWin.Tools.Get<CDL>() as CDL).LoadFile(filePaths[0]);
}
else if (MovieImport.IsValidMovieExtension(Path.GetExtension(filePaths[0])))
{
if (Emulator.IsNull())
2013-09-14 02:31:21 +00:00
{
OpenRom();
}
2014-06-12 11:53:25 +00:00
if (Emulator.IsNull())
{
return;
}
// tries to open a legacy movie format by importing it
string errorMsg;
string warningMsg;
var movie = MovieImport.ImportFile(filePaths[0], out errorMsg, out warningMsg);
if (!string.IsNullOrEmpty(errorMsg))
{
MessageBox.Show(errorMsg, "Conversion error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
// fix movie extension to something palatable for these purposes.
// for instance, something which doesnt clobber movies you already may have had.
// i'm evenly torn between this, and a file in %TEMP%, but since we dont really have a way to clean up this tempfile, i choose this:
StartNewMovie(movie, false);
}
GlobalWin.OSD.AddMessage(warningMsg);
}
else
{
2015-11-08 08:35:44 +00:00
var args = new LoadRomArgs();
args.OpenAdvanced = new OpenAdvanced_OpenRom { Path = filePaths[0] };
LoadRom(filePaths[0], args);
}
*/
}
2013-10-27 15:53:37 +00:00
#endregion
}
}