Refactor AutofireConfig

much the same as the DisplayConfigLite and SoundConfig refactorings
This commit is contained in:
YoshiRulz 2019-10-31 05:07:22 +10:00
parent f11966b1de
commit b521897fab
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
6 changed files with 142 additions and 260 deletions

View File

@ -242,9 +242,6 @@
<Compile Include="config\AutofireConfig.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="config\AutofireConfig.Designer.cs">
<DependentUpon>AutofireConfig.cs</DependentUpon>
</Compile>
<Compile Include="config\ControllerConfig.cs">
<SubType>Form</SubType>
</Compile>
@ -561,6 +558,7 @@
<Compile Include="CoreFeatureAnalysis.Designer.cs">
<DependentUpon>CoreFeatureAnalysis.cs</DependentUpon>
</Compile>
<Compile Include="CustomControls\AutosizedLabel.cs" />
<Compile Include="CustomControls\ControlRenderer\GdiPlusRenderer.cs" />
<Compile Include="CustomControls\ControlRenderer\IControlRenderer.cs" />
<Compile Include="CustomControls\ExceptionBox.cs">

View File

@ -0,0 +1,13 @@
using System.Windows.Forms;
namespace BizHawk.Client.EmuHawk.CustomControls
{
public sealed class AutosizedLabel : Label
{
public AutosizedLabel(string labelText)
{
AutoSize = true;
Text = labelText;
}
}
}

View File

@ -1,192 +0,0 @@
namespace BizHawk.Client.EmuHawk
{
partial class AutofireConfig
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AutofireConfig));
this.Ok = new System.Windows.Forms.Button();
this.Cancel = new System.Windows.Forms.Button();
this.OnNumeric = new System.Windows.Forms.NumericUpDown();
this.OffNumeric = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.LagFrameCheck = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)(this.OnNumeric)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.OffNumeric)).BeginInit();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// Ok
//
this.Ok.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.Ok.Location = new System.Drawing.Point(108, 140);
this.Ok.Name = "Ok";
this.Ok.Size = new System.Drawing.Size(75, 23);
this.Ok.TabIndex = 5;
this.Ok.Text = "&OK";
this.Ok.UseVisualStyleBackColor = true;
this.Ok.Click += new System.EventHandler(this.Ok_Click);
//
// Cancel
//
this.Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.Cancel.Location = new System.Drawing.Point(189, 140);
this.Cancel.Name = "Cancel";
this.Cancel.Size = new System.Drawing.Size(75, 23);
this.Cancel.TabIndex = 7;
this.Cancel.Text = "&Cancel";
this.Cancel.UseVisualStyleBackColor = true;
this.Cancel.Click += new System.EventHandler(this.Cancel_Click);
//
// OnNumeric
//
this.OnNumeric.Location = new System.Drawing.Point(10, 32);
this.OnNumeric.Maximum = new decimal(new int[] {
512,
0,
0,
0});
this.OnNumeric.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.OnNumeric.Name = "OnNumeric";
this.OnNumeric.Size = new System.Drawing.Size(74, 20);
this.OnNumeric.TabIndex = 2;
this.OnNumeric.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// OffNumeric
//
this.OffNumeric.Location = new System.Drawing.Point(101, 32);
this.OffNumeric.Maximum = new decimal(new int[] {
512,
0,
0,
0});
this.OffNumeric.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.OffNumeric.Name = "OffNumeric";
this.OffNumeric.Size = new System.Drawing.Size(74, 20);
this.OffNumeric.TabIndex = 3;
this.OffNumeric.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(10, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(21, 13);
this.label1.TabIndex = 4;
this.label1.Text = "On";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(101, 16);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(21, 13);
this.label2.TabIndex = 5;
this.label2.Text = "Off";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.OnNumeric);
this.groupBox1.Controls.Add(this.OffNumeric);
this.groupBox1.Location = new System.Drawing.Point(13, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(184, 70);
this.groupBox1.TabIndex = 6;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Autofire Pattern";
//
// LagFrameCheck
//
this.LagFrameCheck.AutoSize = true;
this.LagFrameCheck.Location = new System.Drawing.Point(13, 100);
this.LagFrameCheck.Name = "LagFrameCheck";
this.LagFrameCheck.Size = new System.Drawing.Size(164, 17);
this.LagFrameCheck.TabIndex = 8;
this.LagFrameCheck.Text = "Take lag frames into account";
this.LagFrameCheck.UseVisualStyleBackColor = true;
//
// AutofireConfig
//
this.AcceptButton = this.Ok;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.Cancel;
this.ClientSize = new System.Drawing.Size(276, 175);
this.Controls.Add(this.LagFrameCheck);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.Cancel);
this.Controls.Add(this.Ok);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(512, 512);
this.MinimumSize = new System.Drawing.Size(218, 179);
this.Name = "AutofireConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Autofire Configuration";
this.Load += new System.EventHandler(this.AutofireConfig_Load);
((System.ComponentModel.ISupportInitialize)(this.OnNumeric)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.OffNumeric)).EndInit();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button Ok;
private System.Windows.Forms.Button Cancel;
private System.Windows.Forms.NumericUpDown OffNumeric;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.GroupBox groupBox1;
public System.Windows.Forms.NumericUpDown OnNumeric;
private System.Windows.Forms.CheckBox LagFrameCheck;
}
}

View File

@ -1,63 +1,115 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using BizHawk.Client.Common;
using BizHawk.Client.EmuHawk.CustomControls;
namespace BizHawk.Client.EmuHawk
{
public partial class AutofireConfig : Form
public sealed class AutofireConfig : Form
{
private const decimal nudMaximum = 512.0M;
private const decimal nudMinimum = 1.0M;
private readonly NumericUpDown nudPatternOn;
private readonly NumericUpDown nudPatternOff;
private readonly CheckBox cbConsiderLagFrames;
public AutofireConfig()
{
InitializeComponent();
static decimal ConstrainToNUDRange(decimal d) => d < nudMinimum ? nudMinimum : nudMaximum < d ? nudMaximum : d;
var nudSize = new Size(48, 19);
nudPatternOn = new NumericUpDown
{
Maximum = nudMaximum,
Minimum = nudMinimum,
Size = nudSize,
Value = ConstrainToNUDRange(Global.Config.AutofireOn)
};
nudPatternOff = new NumericUpDown
{
Maximum = nudMaximum,
Minimum = nudMinimum,
Size = nudSize,
Value = ConstrainToNUDRange(Global.Config.AutofireOff)
};
cbConsiderLagFrames = new CheckBox
{
AutoSize = true,
Checked = Global.Config.AutofireLagFrames,
Text = "Take lag frames into account",
UseVisualStyleBackColor = true
};
var labelAlignment = new Padding(0, 5, 0, 0);
var flpMain = new SingleColumnFLP
{
Anchor = AnchorStyles.Top | AnchorStyles.Left,
Controls =
{
new SingleRowFLP
{
Controls =
{
new AutosizedLabel("Pattern:") { Margin = labelAlignment },
nudPatternOn,
new AutosizedLabel("on,") { Margin = labelAlignment },
nudPatternOff,
new AutosizedLabel("off") { Margin = labelAlignment }
}
},
cbConsiderLagFrames
},
Location = new Point(12, 12)
};
var btnOk = new Button { Text = "&OK", UseVisualStyleBackColor = true };
btnOk.Click += (sender, e) =>
{
SaveControlsTo(Global.Config);
GlobalWin.OSD.AddMessage("Autofire settings saved");
Close();
};
var btnCancel = new Button { Text = "&Cancel", UseVisualStyleBackColor = true };
btnCancel.Click += (sender, e) =>
{
GlobalWin.OSD.AddMessage("Autofire config aborted");
Close();
};
SuspendLayout();
AcceptButton = btnOk;
AutoScaleDimensions = new SizeF(6F, 13F);
AutoScaleMode = AutoScaleMode.Font;
CancelButton = btnCancel;
ClientSize = new Size(276, 175);
Controls.AddRange(new Control[]
{
new SingleRowFLP
{
Anchor = AnchorStyles.Bottom | AnchorStyles.Right,
Controls = { btnOk, btnCancel },
Location = new Point(108, 140)
},
flpMain
});
Icon = (Icon) new ComponentResourceManager(typeof(AutofireConfig)).GetObject("$this.Icon");
MaximizeBox = false;
MaximumSize = new Size(512, 512);
MinimumSize = new Size(218, 179);
Name = "AutofireConfig";
StartPosition = FormStartPosition.CenterParent;
Text = "Autofire Configuration";
ResumeLayout();
}
private void AutofireConfig_Load(object sender, EventArgs e)
private void SaveControlsTo(Config config)
{
if (Global.Config.AutofireOn < OnNumeric.Minimum)
{
OnNumeric.Value = OnNumeric.Minimum;
}
else if (Global.Config.AutofireOn > OnNumeric.Maximum)
{
OnNumeric.Value = OnNumeric.Maximum;
}
else
{
OnNumeric.Value = Global.Config.AutofireOn;
}
if (Global.Config.AutofireOff < OffNumeric.Minimum)
{
OffNumeric.Value = OffNumeric.Minimum;
}
else if (Global.Config.AutofireOff > OffNumeric.Maximum)
{
OffNumeric.Value = OffNumeric.Maximum;
}
else
{
OffNumeric.Value = Global.Config.AutofireOff;
}
LagFrameCheck.Checked = Global.Config.AutofireLagFrames;
}
private void Ok_Click(object sender, EventArgs e)
{
Global.AutoFireController.On = Global.Config.AutofireOn = (int)OnNumeric.Value;
Global.AutoFireController.Off = Global.Config.AutofireOff = (int)OffNumeric.Value;
Global.Config.AutofireLagFrames = LagFrameCheck.Checked;
Global.AutoFireController.On = config.AutofireOn = (int) nudPatternOn.Value;
Global.AutoFireController.Off = config.AutofireOff = (int) nudPatternOff.Value;
config.AutofireLagFrames = cbConsiderLagFrames.Checked;
Global.AutofireStickyXORAdapter.SetOnOffPatternFromConfig();
GlobalWin.OSD.AddMessage("Autofire settings saved");
Close();
}
private void Cancel_Click(object sender, EventArgs e)
{
GlobalWin.OSD.AddMessage("Autofire config aborted");
Close();
}
}
}

View File

@ -116,7 +116,7 @@ namespace BizHawk.Client.EmuHawk
{
Controls =
{
new Label { AutoSize = true, Text = "• Probably the best for older graphics cards\n• May cause issues with OpenGL-based cores (i.e. Mupen64Plus)" },
new AutosizedLabel("• Probably the best for older graphics cards\n• May cause issues with OpenGL-based cores (i.e. Mupen64Plus)"),
cbAlternateVsync,
new Label { Margin = indent, Size = new Size(320, 40), Text = Resources.GetString("lblD3DAltVSync.Text") }
},
@ -125,9 +125,15 @@ namespace BizHawk.Client.EmuHawk
Size = new Size(392, 76)
},
rbOpenGL,
new Label { AutoSize = true, Margin = indent, Text = "• May have reduced performance or even malfunction on some systems\n• May have increased performance with OpenGL-based emulation cores (i.e. Mupen64Plus)" },
new AutosizedLabel("• May have reduced performance or even malfunction on some systems\n• May have increased performance with OpenGL-based emulation cores (i.e. Mupen64Plus)")
{
Margin = indent
},
rbGDIPlus,
new Label { AutoSize = true, Margin = indent, Text = "• Slow and missing features, kept in to maximise compatibility\n• Works better over MS' Remote Desktop Protocol" }
new AutosizedLabel("• Slow and missing features, kept in to maximise compatibility\n• Works better over MS' Remote Desktop Protocol")
{
Margin = indent
}
},
InnerFLP = { AutoSize = true, Padding = new Padding(3, 0, 3, 0) },
Size = new Size(480, 230)
@ -151,7 +157,7 @@ namespace BizHawk.Client.EmuHawk
Controls =
{
grpDispMethodRadios,
new Label { AutoSize = true, Text = "Changes require restart of program to take effect.\n\nPlease note that, for now, Mupen64Plus will use OpenGL regardless of this setting." }
new AutosizedLabel("Changes require restart of program to take effect.\n\nPlease note that, for now, Mupen64Plus will use OpenGL regardless of this setting.")
},
Size = new Size(416, 304)
}
@ -202,7 +208,7 @@ namespace BizHawk.Client.EmuHawk
return new FLPInGroupBox
{
Controls = {
new SingleRowFLP { Controls = { new Label { AutoSize = true, Text = "Frame:" }, lblFrameTypeWindowed } },
new SingleRowFLP { Controls = { new AutosizedLabel("Frame:"), lblFrameTypeWindowed } },
tbFrameSizeWindowed,
cbStatusBarWindowed,
cbCaptionWindowed,
@ -424,7 +430,7 @@ namespace BizHawk.Client.EmuHawk
{
rbUseRaw = new RadioButton { AutoSize = true, Text = "Use 1:1 pixel size (for crispness or debugging)", UseVisualStyleBackColor = true };
var lblNonSquareAR = new Label { AutoSize = true, Text = "Allowing pixel distortion (e.g. 2x1 pixels, for better AR fit):" };
var lblNonSquareAR = new AutosizedLabel("Allowing pixel distortion (e.g. 2x1 pixels, for better AR fit):");
rbUseSystem = new RadioButton { AutoSize = true, Text = "Use system's recommendation", UseVisualStyleBackColor = true };
@ -433,7 +439,8 @@ namespace BizHawk.Client.EmuHawk
var textBoxSize = new Size(48, 19);
txtCustomARWidth = new TextBox { Size = textBoxSize };
var lblWHSeparator = new Label { AutoSize = true, Margin = new Padding(0, 5, 0, 0), Text = "x" };
var labelAlignment = new Padding(0, 5, 0, 0);
var lblWHSeparator = new AutosizedLabel("x") { Margin = labelAlignment };
txtCustomARHeight = new TextBox { Size = textBoxSize };
@ -441,7 +448,7 @@ namespace BizHawk.Client.EmuHawk
txtCustomARX = new TextBox { Size = textBoxSize };
var lblXYSeparator = new Label { AutoSize = true, Margin = new Padding(0, 5, 0, 0), Text = ":" };
var lblXYSeparator = new AutosizedLabel(":") { Margin = labelAlignment };
txtCustomARY = new TextBox { Size = textBoxSize };
@ -494,7 +501,7 @@ namespace BizHawk.Client.EmuHawk
SingleRowFLP CreateCropFLP(string labelText, Control textBox) => new SingleRowFLP
{
Controls = { new Label { Anchor = AnchorStyles.None, AutoSize = true, Text = labelText }, textBox },
Controls = { new AutosizedLabel(labelText) { Anchor = AnchorStyles.None }, textBox },
Margin = Padding.Empty
};
return new FLPInGroupBox
@ -607,9 +614,9 @@ namespace BizHawk.Client.EmuHawk
{
Controls =
{
new Label { Anchor = AnchorStyles.None, AutoSize = true, Text = "User Prescale:" },
new AutosizedLabel("User Prescale:") { Anchor = AnchorStyles.None },
nudPrescale,
new Label { Anchor = AnchorStyles.None, AutoSize = true, Text = "X" }
new AutosizedLabel("x") { Anchor = AnchorStyles.None }
},
Margin = new Padding(3, 0, 3, 0)
},
@ -686,7 +693,10 @@ namespace BizHawk.Client.EmuHawk
Controls = {
grpDispFeatures,
cbNullHawkWhiteNoise,
new Label { AutoSize = true, Margin = new Padding(24, 0, 0, 0), Text = "Some people think the white noise is a great idea, and some people don't.\nDisabling this displays black instead." }
new AutosizedLabel("Some people think the white noise is a great idea, and some people don't.\nDisabling this displays black instead.")
{
Margin = new Padding(24, 0, 0, 0)
}
}
}
},

View File

@ -55,7 +55,7 @@ namespace BizHawk.Client.EmuHawk
var flpRWFFW = new SingleColumnFLP
{
Controls = { new Label { AutoSize = true, Text = "RW/FFW" }, cbEnableRWFFW, tbRWFFW, nudRWFFW },
Controls = { new AutosizedLabel("RW/FFW"), cbEnableRWFFW, tbRWFFW, nudRWFFW },
Margin = Padding.Empty
};
cbEnableNormal.CheckedChanged += (sender, e) => flpRWFFW.Enabled = ((CheckBox) sender).Checked;
@ -66,7 +66,7 @@ namespace BizHawk.Client.EmuHawk
Controls = {
new SingleColumnFLP
{
Controls = { new Label { AutoSize = true, Text = "Normal" }, cbEnableNormal, tbNormal, nudNormal },
Controls = { new AutosizedLabel("Normal"), cbEnableNormal, tbNormal, nudNormal },
Margin = Padding.Empty
},
flpRWFFW
@ -140,12 +140,13 @@ namespace BizHawk.Client.EmuHawk
var flpDeviceSelector = new SingleColumnFLP
{
AutoSize = false,
Controls = { new Label { AutoSize = true, Text = "Sound Device:" }, lbSoundDevices },
Controls = { new AutosizedLabel("Sound Device:"), lbSoundDevices },
Size = new Size(254, 112)
};
nudBufferSize = new NumericUpDown { Maximum = 250.0M, Minimum = 30.0M, Size = nudSize, Value = Global.Config.SoundBufferSizeMs };
var labelAlignment = new Padding(0, 5, 0, 0);
var flpRHS = new FlowLayoutPanel
{
AutoSize = true,
@ -156,7 +157,7 @@ namespace BizHawk.Client.EmuHawk
Controls =
{
cbEnableMaster,
new Label { AutoSize = true, Margin = new Padding(24, 0, 0, 16), Text = "Controls whether cores\neven generate audio." },
new AutosizedLabel("Controls whether cores\neven generate audio.") { Margin = new Padding(24, 0, 0, 16) },
cbMuteFrameAdvance
}
},
@ -166,9 +167,9 @@ namespace BizHawk.Client.EmuHawk
{
Controls =
{
new Label { AutoSize = true, Margin = new Padding(0, 4, 0, 0), Text = "Buffer Size:" },
new AutosizedLabel("Buffer Size:") { Margin = labelAlignment },
nudBufferSize,
new Label { AutoSize = true, Margin = new Padding(0, 4, 0, 0), Text = "milliseconds" }
new AutosizedLabel("milliseconds") { Margin = labelAlignment }
}
}
}