PCE - add ui for controller config

This commit is contained in:
adelikat 2017-07-18 11:01:50 -05:00
parent d99d2dd3dc
commit 9fc8b8700d
3 changed files with 71 additions and 90 deletions

View File

@ -28,52 +28,63 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PCEControllerConfig));
this.CancelBtn = new System.Windows.Forms.Button();
this.OkBtn = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// CancelBtn
//
this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Location = new System.Drawing.Point(235, 145);
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.Size = new System.Drawing.Size(60, 23);
this.CancelBtn.TabIndex = 3;
this.CancelBtn.Text = "&Cancel";
this.CancelBtn.UseVisualStyleBackColor = true;
this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
//
// OkBtn
//
this.OkBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OkBtn.Location = new System.Drawing.Point(169, 145);
this.OkBtn.Name = "OkBtn";
this.OkBtn.Size = new System.Drawing.Size(60, 23);
this.OkBtn.TabIndex = 2;
this.OkBtn.Text = "&OK";
this.OkBtn.UseVisualStyleBackColor = true;
this.OkBtn.Click += new System.EventHandler(this.OkBtn_Click);
//
// PCEControllerConfig
//
this.AcceptButton = this.OkBtn;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.ClientSize = new System.Drawing.Size(307, 180);
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.OkBtn);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "PCEControllerConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Controller Settings";
this.Load += new System.EventHandler(this.PCEControllerConfig_Load);
this.ResumeLayout(false);
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PCEControllerConfig));
this.CancelBtn = new System.Windows.Forms.Button();
this.OkBtn = new System.Windows.Forms.Button();
this.ControllerPropertyGrid = new System.Windows.Forms.PropertyGrid();
this.SuspendLayout();
//
// CancelBtn
//
this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Location = new System.Drawing.Point(235, 203);
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.Size = new System.Drawing.Size(60, 23);
this.CancelBtn.TabIndex = 3;
this.CancelBtn.Text = "&Cancel";
this.CancelBtn.UseVisualStyleBackColor = true;
this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
//
// OkBtn
//
this.OkBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OkBtn.Location = new System.Drawing.Point(169, 203);
this.OkBtn.Name = "OkBtn";
this.OkBtn.Size = new System.Drawing.Size(60, 23);
this.OkBtn.TabIndex = 2;
this.OkBtn.Text = "&OK";
this.OkBtn.UseVisualStyleBackColor = true;
this.OkBtn.Click += new System.EventHandler(this.OkBtn_Click);
//
// ControllerPropertyGrid
//
this.ControllerPropertyGrid.Location = new System.Drawing.Point(12, 12);
this.ControllerPropertyGrid.Name = "ControllerPropertyGrid";
this.ControllerPropertyGrid.PropertySort = System.Windows.Forms.PropertySort.Alphabetical;
this.ControllerPropertyGrid.Size = new System.Drawing.Size(283, 181);
this.ControllerPropertyGrid.TabIndex = 4;
this.ControllerPropertyGrid.ToolbarVisible = false;
//
// PCEControllerConfig
//
this.AcceptButton = this.OkBtn;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.ClientSize = new System.Drawing.Size(307, 238);
this.Controls.Add(this.ControllerPropertyGrid);
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.OkBtn);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "PCEControllerConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Controller Settings";
this.Load += new System.EventHandler(this.PCEControllerConfig_Load);
this.ResumeLayout(false);
}
@ -81,5 +92,6 @@
private System.Windows.Forms.Button CancelBtn;
private System.Windows.Forms.Button OkBtn;
private System.Windows.Forms.PropertyGrid ControllerPropertyGrid;
}
}

View File

@ -1,6 +1,4 @@
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using BizHawk.Emulation.Cores.PCEngine;
@ -10,6 +8,8 @@ namespace BizHawk.Client.EmuHawk
{
public partial class PCEControllerConfig : Form
{
private PCEngine.PCESyncSettings _controllerSettings;
public PCEControllerConfig()
{
InitializeComponent();
@ -18,36 +18,15 @@ namespace BizHawk.Client.EmuHawk
private void PCEControllerConfig_Load(object sender, EventArgs e)
{
var pceSettings = ((PCEngine)Global.Emulator).GetSyncSettings();
for (int i = 0; i < 5; i++)
{
Controls.Add(new Label
{
Text = "Controller " + (i + 1),
Location = new Point(15, 15 + (i * 25))
});
Controls.Add(new CheckBox
{
Text = "Connected",
Name = "Controller" + i,
Location = new Point(135, 15 + (i * 25)),
Checked = pceSettings.Controllers[i].IsConnected
});
}
_controllerSettings = pceSettings; // Assumes only controller data is in sync settings! If there are ever more sync settings, this dialog should just become a general sync settings dialog (or both settings/sync settings)
ControllerPropertyGrid.SelectedObject = _controllerSettings;
}
private void OkBtn_Click(object sender, EventArgs e)
{
var pceSettings = ((PCEngine)Global.Emulator).GetSyncSettings();
Controls
.OfType<CheckBox>()
.OrderBy(c => c.Name)
.ToList()
.ForEach(c =>
{
var index = int.Parse(c.Name.Replace("Controller", ""));
pceSettings.Controllers[index].IsConnected = c.Checked;
});
pceSettings = _controllerSettings;
GlobalWin.MainForm.PutCoreSyncSettings(pceSettings);
DialogResult = DialogResult.OK;
Close();

View File

@ -69,8 +69,8 @@ namespace BizHawk.Emulation.Cores.PCEngine
[DisplayName("Port 1 Device")]
[Description("The type of controller plugged into the first controller port")]
[TypeConverter(typeof(DescribableEnumConverter))]
public PceControllerType Port1 { get; set; } = PceControllerType.GamePad;
public PceControllerType Port1 { get; set; } = PceControllerType.GamePad;
[DefaultValue(PceControllerType.Unplugged)]
[DisplayName("Port 2 Device")]
[Description("The type of controller plugged into the second controller port")]
@ -106,13 +106,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
public PCESyncSettings Clone()
{
var ret = new PCESyncSettings();
for (int i = 0; i < Controllers.Length; i++)
{
ret.Controllers[i].IsConnected = Controllers[i].IsConnected;
}
return ret;
return (PCESyncSettings)MemberwiseClone();
}
public class ControllerSetting
@ -122,15 +116,11 @@ namespace BizHawk.Emulation.Cores.PCEngine
public static bool NeedsReboot(PCESyncSettings x, PCESyncSettings y)
{
for (int i = 0; i < x.Controllers.Length; i++)
{
if (x.Controllers[i].IsConnected != y.Controllers[i].IsConnected)
{
return true;
}
}
return false;
return x.Port1 != y.Port1
|| x.Port2 != y.Port2
|| x.Port3 != y.Port3
|| x.Port4 != y.Port4
|| x.Port5 != y.Port5;
}
}
}