UI: Allow player 1's controls to be used to navigate the recent game selection screen

This commit is contained in:
Souryo 2017-06-08 20:53:01 -04:00
parent fcd09ebdd9
commit 147fcbfcf7
4 changed files with 59 additions and 3 deletions

View file

@ -27,6 +27,7 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container();
this.tlpPreviousState = new Mesen.GUI.Controls.DBTableLayoutPanel(); this.tlpPreviousState = new Mesen.GUI.Controls.DBTableLayoutPanel();
this.pnlPreviousState = new System.Windows.Forms.Panel(); this.pnlPreviousState = new System.Windows.Forms.Panel();
this.picPreviousState = new Mesen.GUI.Controls.GamePreviewBox(); this.picPreviousState = new Mesen.GUI.Controls.GamePreviewBox();
@ -34,6 +35,7 @@
this.lblSaveDate = new System.Windows.Forms.Label(); this.lblSaveDate = new System.Windows.Forms.Label();
this.picNextGame = new System.Windows.Forms.PictureBox(); this.picNextGame = new System.Windows.Forms.PictureBox();
this.picPrevGame = new System.Windows.Forms.PictureBox(); this.picPrevGame = new System.Windows.Forms.PictureBox();
this.tmrInput = new System.Windows.Forms.Timer(this.components);
this.tlpPreviousState.SuspendLayout(); this.tlpPreviousState.SuspendLayout();
this.pnlPreviousState.SuspendLayout(); this.pnlPreviousState.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picPreviousState)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.picPreviousState)).BeginInit();
@ -144,6 +146,11 @@
this.picPrevGame.TabStop = false; this.picPrevGame.TabStop = false;
this.picPrevGame.MouseDown += new System.Windows.Forms.MouseEventHandler(this.picPrevGame_MouseDown); this.picPrevGame.MouseDown += new System.Windows.Forms.MouseEventHandler(this.picPrevGame_MouseDown);
// //
// tmrInput
//
this.tmrInput.Interval = 50;
this.tmrInput.Tick += new System.EventHandler(this.tmrInput_Tick);
//
// ctrlRecentGames // ctrlRecentGames
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -171,5 +178,6 @@
private System.Windows.Forms.Label lblSaveDate; private System.Windows.Forms.Label lblSaveDate;
private System.Windows.Forms.PictureBox picNextGame; private System.Windows.Forms.PictureBox picNextGame;
private System.Windows.Forms.PictureBox picPrevGame; private System.Windows.Forms.PictureBox picPrevGame;
private System.Windows.Forms.Timer tmrInput;
} }
} }

View file

@ -54,6 +54,7 @@ namespace Mesen.GUI.Controls
lblSaveDate.Font = new Font(_fonts.Families[0], 10); lblSaveDate.Font = new Font(_fonts.Families[0], 10);
picPrevGame.Image.RotateFlip(RotateFlipType.RotateNoneFlipX); picPrevGame.Image.RotateFlip(RotateFlipType.RotateNoneFlipX);
tmrInput.Enabled = true;
Initialize(); Initialize();
} }
} }
@ -159,16 +160,20 @@ namespace Mesen.GUI.Controls
private void picPreviousState_Click(object sender, EventArgs e) private void picPreviousState_Click(object sender, EventArgs e)
{ {
InteropEmu.LoadRecentGame(_recentGames[_currentIndex].FileName); LoadSelectedGame();
} }
private void picNextGame_MouseDown(object sender, MouseEventArgs e) private void picNextGame_MouseDown(object sender, MouseEventArgs e)
{ {
_currentIndex = (_currentIndex + 1) % _recentGames.Count; GoToNextGame();
UpdateGameInfo();
} }
private void picPrevGame_MouseDown(object sender, MouseEventArgs e) private void picPrevGame_MouseDown(object sender, MouseEventArgs e)
{
GoToPreviousGame();
}
private void GoToPreviousGame()
{ {
if(_currentIndex == 0) { if(_currentIndex == 0) {
_currentIndex = _recentGames.Count - 1; _currentIndex = _recentGames.Count - 1;
@ -177,6 +182,45 @@ namespace Mesen.GUI.Controls
} }
UpdateGameInfo(); UpdateGameInfo();
} }
private void GoToNextGame()
{
_currentIndex = (_currentIndex + 1) % _recentGames.Count;
UpdateGameInfo();
}
private void LoadSelectedGame()
{
InteropEmu.LoadRecentGame(_recentGames[_currentIndex].FileName);
}
private bool _waitForRelease = false;
private void tmrInput_Tick(object sender, EventArgs e)
{
//Use player 1's controls to navigate the recent game selection screen
if(!InteropEmu.IsRunning()) {
uint keyCode = InteropEmu.GetPressedKey();
if(keyCode > 0) {
if(!_waitForRelease) {
foreach(KeyMappings mapping in ConfigManager.Config.InputInfo.Controllers[0].Keys) {
if(mapping.Left == keyCode) {
_waitForRelease = true;
GoToPreviousGame();
} else if(mapping.Right == keyCode) {
_waitForRelease = true;
GoToNextGame();
} else if(mapping.A == keyCode || mapping.B == keyCode) {
_waitForRelease = true;
LoadSelectedGame();
}
}
}
} else {
_waitForRelease = false;
}
}
}
} }
public class DBTableLayoutPanel : TableLayoutPanel public class DBTableLayoutPanel : TableLayoutPanel

View file

@ -117,4 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="tmrInput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root> </root>

View file

@ -830,6 +830,7 @@ namespace Mesen.GUI.Forms.Config
// chkAdaptiveSpriteLimit // chkAdaptiveSpriteLimit
// //
this.chkAdaptiveSpriteLimit.AutoSize = true; this.chkAdaptiveSpriteLimit.AutoSize = true;
this.chkAdaptiveSpriteLimit.Enabled = false;
this.chkAdaptiveSpriteLimit.Location = new System.Drawing.Point(18, 26); this.chkAdaptiveSpriteLimit.Location = new System.Drawing.Point(18, 26);
this.chkAdaptiveSpriteLimit.Margin = new System.Windows.Forms.Padding(18, 3, 3, 3); this.chkAdaptiveSpriteLimit.Margin = new System.Windows.Forms.Padding(18, 3, 3, 3);
this.chkAdaptiveSpriteLimit.Name = "chkAdaptiveSpriteLimit"; this.chkAdaptiveSpriteLimit.Name = "chkAdaptiveSpriteLimit";