diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj
index ee47e2e9ac..b1370a24cd 100644
--- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj
+++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj
@@ -576,6 +576,9 @@
VirtualPadA78Control.cs
+
+ Component
+
UserControl
diff --git a/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj b/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj
index 0d1102e08e..ccb181941d 100644
--- a/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj
+++ b/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj
@@ -572,6 +572,7 @@
VirtualPadA78Control.cs
+
UserControl
diff --git a/BizHawk.MultiClient/tools/VirtualPads/VirtualPadButton.cs b/BizHawk.MultiClient/tools/VirtualPads/VirtualPadButton.cs
new file mode 100644
index 0000000000..4c57f6d612
--- /dev/null
+++ b/BizHawk.MultiClient/tools/VirtualPads/VirtualPadButton.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+
+namespace BizHawk.MultiClient
+{
+ public class VirtualPadButton : CheckBox
+ {
+ public string ControllerButton = "";
+ private bool _rightClicked = false;
+
+ public VirtualPadButton()
+ {
+ SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ SetStyle(ControlStyles.UserPaint, true);
+ SetStyle(ControlStyles.DoubleBuffer, true);
+
+ Appearance = System.Windows.Forms.Appearance.Button;
+
+ ForeColor = Color.Black;
+ }
+
+ protected override void WndProc(ref Message m)
+ {
+ switch (m.Msg)
+ {
+ case 0x0204://WM_RBUTTONDOWN
+ _rightClicked = true;
+ ForeColor = Color.Red;
+ Checked ^= true;
+ return;
+ case 0x0205://WM_RBUTTONUP
+ return;
+ case 0x0206://WM_RBUTTONDBLCLK
+ return;
+ }
+
+ base.WndProc(ref m);
+ }
+
+ protected void SetSticky()
+ {
+ Global.StickyXORAdapter.SetSticky(ControllerButton, Checked);
+
+ if (Checked == false)
+ {
+ Clear();
+ }
+ }
+
+ protected void SetAutofireSticky()
+ {
+ Global.AutofireStickyXORAdapter.SetSticky(ControllerButton, Checked);
+
+ if (Checked == false)
+ {
+ Clear();
+ }
+ }
+
+ protected override void OnCheckedChanged(EventArgs e)
+ {
+ if (_rightClicked)
+ {
+ SetAutofireSticky();
+ }
+ else
+ {
+ SetSticky();
+ }
+
+ base.OnCheckedChanged(e);
+ }
+
+ protected override void OnMouseClick(MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ _rightClicked = false;
+ ForeColor = Color.Black;
+ }
+ base.OnMouseClick(e);
+ }
+
+ public void Clear()
+ {
+ _rightClicked = false;
+ ForeColor = Color.Black;
+ Checked = false;
+ Global.AutofireStickyXORAdapter.SetSticky(ControllerButton, false);
+ Global.StickyXORAdapter.SetSticky(ControllerButton, false);
+ }
+ }
+}
diff --git a/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.Designer.cs b/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.Designer.cs
index 02e34b050e..9157981d5a 100644
--- a/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.Designer.cs
+++ b/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.Designer.cs
@@ -28,20 +28,20 @@
///
private void InitializeComponent()
{
- this.PL = new System.Windows.Forms.CheckBox();
- this.PD = new System.Windows.Forms.CheckBox();
- this.PR = new System.Windows.Forms.CheckBox();
- this.PU = new System.Windows.Forms.CheckBox();
- this.BL = new System.Windows.Forms.CheckBox();
- this.BR = new System.Windows.Forms.CheckBox();
- this.BS = new System.Windows.Forms.CheckBox();
- this.BZ = new System.Windows.Forms.CheckBox();
- this.BB = new System.Windows.Forms.CheckBox();
- this.BA = new System.Windows.Forms.CheckBox();
- this.CU = new System.Windows.Forms.CheckBox();
- this.CL = new System.Windows.Forms.CheckBox();
- this.CR = new System.Windows.Forms.CheckBox();
- this.CD = new System.Windows.Forms.CheckBox();
+ this.PL = new VirtualPadButton();
+ this.PD = new VirtualPadButton();
+ this.PR = new VirtualPadButton();
+ this.PU = new VirtualPadButton();
+ this.BL = new VirtualPadButton();
+ this.BR = new VirtualPadButton();
+ this.BS = new VirtualPadButton();
+ this.BZ = new VirtualPadButton();
+ this.BB = new VirtualPadButton();
+ this.BA = new VirtualPadButton();
+ this.CU = new VirtualPadButton();
+ this.CL = new VirtualPadButton();
+ this.CR = new VirtualPadButton();
+ this.CD = new VirtualPadButton();
this.ManualX = new System.Windows.Forms.NumericUpDown();
this.ManualY = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
@@ -53,7 +53,6 @@
//
// PL
//
- this.PL.Appearance = System.Windows.Forms.Appearance.Button;
this.PL.AutoSize = true;
this.PL.Image = global::BizHawk.MultiClient.Properties.Resources.Back;
this.PL.Location = new System.Drawing.Point(3, 207);
@@ -61,11 +60,9 @@
this.PL.Size = new System.Drawing.Size(22, 22);
this.PL.TabIndex = 7;
this.PL.UseVisualStyleBackColor = true;
- this.PL.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// PD
//
- this.PD.Appearance = System.Windows.Forms.Appearance.Button;
this.PD.AutoSize = true;
this.PD.Image = global::BizHawk.MultiClient.Properties.Resources.BlueDown;
this.PD.Location = new System.Drawing.Point(24, 216);
@@ -73,11 +70,9 @@
this.PD.Size = new System.Drawing.Size(22, 22);
this.PD.TabIndex = 6;
this.PD.UseVisualStyleBackColor = true;
- this.PD.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// PR
//
- this.PR.Appearance = System.Windows.Forms.Appearance.Button;
this.PR.AutoSize = true;
this.PR.Image = global::BizHawk.MultiClient.Properties.Resources.Forward;
this.PR.Location = new System.Drawing.Point(45, 207);
@@ -85,11 +80,9 @@
this.PR.Size = new System.Drawing.Size(22, 22);
this.PR.TabIndex = 5;
this.PR.UseVisualStyleBackColor = true;
- this.PR.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// PU
//
- this.PU.Appearance = System.Windows.Forms.Appearance.Button;
this.PU.AutoSize = true;
this.PU.Image = global::BizHawk.MultiClient.Properties.Resources.BlueUp;
this.PU.Location = new System.Drawing.Point(24, 195);
@@ -97,11 +90,9 @@
this.PU.Size = new System.Drawing.Size(22, 22);
this.PU.TabIndex = 4;
this.PU.UseVisualStyleBackColor = true;
- this.PU.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// BL
//
- this.BL.Appearance = System.Windows.Forms.Appearance.Button;
this.BL.AutoSize = true;
this.BL.Location = new System.Drawing.Point(3, 148);
this.BL.Name = "BL";
@@ -109,11 +100,9 @@
this.BL.TabIndex = 8;
this.BL.Text = "L";
this.BL.UseVisualStyleBackColor = true;
- this.BL.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// BR
//
- this.BR.Appearance = System.Windows.Forms.Appearance.Button;
this.BR.AutoSize = true;
this.BR.Location = new System.Drawing.Point(172, 148);
this.BR.Name = "BR";
@@ -121,11 +110,9 @@
this.BR.TabIndex = 9;
this.BR.Text = "R";
this.BR.UseVisualStyleBackColor = true;
- this.BR.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// BS
//
- this.BS.Appearance = System.Windows.Forms.Appearance.Button;
this.BS.AutoSize = true;
this.BS.Location = new System.Drawing.Point(87, 157);
this.BS.Name = "BS";
@@ -133,11 +120,9 @@
this.BS.TabIndex = 10;
this.BS.Text = "S";
this.BS.UseVisualStyleBackColor = true;
- this.BS.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// BZ
//
- this.BZ.Appearance = System.Windows.Forms.Appearance.Button;
this.BZ.AutoSize = true;
this.BZ.Location = new System.Drawing.Point(74, 245);
this.BZ.Name = "BZ";
@@ -145,11 +130,9 @@
this.BZ.TabIndex = 11;
this.BZ.Text = "Z";
this.BZ.UseVisualStyleBackColor = true;
- this.BZ.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// BB
//
- this.BB.Appearance = System.Windows.Forms.Appearance.Button;
this.BB.AutoSize = true;
this.BB.Location = new System.Drawing.Point(83, 195);
this.BB.Name = "BB";
@@ -157,11 +140,9 @@
this.BB.TabIndex = 12;
this.BB.Text = "B";
this.BB.UseVisualStyleBackColor = true;
- this.BB.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// BA
//
- this.BA.Appearance = System.Windows.Forms.Appearance.Button;
this.BA.AutoSize = true;
this.BA.Location = new System.Drawing.Point(113, 206);
this.BA.Name = "BA";
@@ -169,11 +150,9 @@
this.BA.TabIndex = 13;
this.BA.Text = "A";
this.BA.UseVisualStyleBackColor = true;
- this.BA.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// CU
//
- this.CU.Appearance = System.Windows.Forms.Appearance.Button;
this.CU.AutoSize = true;
this.CU.Location = new System.Drawing.Point(147, 235);
this.CU.Name = "CU";
@@ -181,11 +160,9 @@
this.CU.TabIndex = 14;
this.CU.Text = "cU";
this.CU.UseVisualStyleBackColor = true;
- this.CU.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// CL
//
- this.CL.Appearance = System.Windows.Forms.Appearance.Button;
this.CL.AutoSize = true;
this.CL.Location = new System.Drawing.Point(129, 258);
this.CL.Name = "CL";
@@ -193,11 +170,9 @@
this.CL.TabIndex = 15;
this.CL.Text = "cL";
this.CL.UseVisualStyleBackColor = true;
- this.CL.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// CR
//
- this.CR.Appearance = System.Windows.Forms.Appearance.Button;
this.CR.AutoSize = true;
this.CR.Location = new System.Drawing.Point(164, 258);
this.CR.Name = "CR";
@@ -205,11 +180,9 @@
this.CR.TabIndex = 16;
this.CR.Text = "cR";
this.CR.UseVisualStyleBackColor = true;
- this.CR.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// CD
//
- this.CD.Appearance = System.Windows.Forms.Appearance.Button;
this.CD.AutoSize = true;
this.CD.Location = new System.Drawing.Point(147, 281);
this.CD.Name = "CD";
@@ -217,7 +190,6 @@
this.CD.TabIndex = 17;
this.CD.Text = "cD";
this.CD.UseVisualStyleBackColor = true;
- this.CD.CheckedChanged += new System.EventHandler(this.Buttons_CheckedChanged);
//
// ManualX
//
@@ -321,20 +293,20 @@
#endregion
private AnalogControlPanel AnalogControl1;
- private System.Windows.Forms.CheckBox PL;
- private System.Windows.Forms.CheckBox PD;
- private System.Windows.Forms.CheckBox PR;
- private System.Windows.Forms.CheckBox PU;
- private System.Windows.Forms.CheckBox BL;
- private System.Windows.Forms.CheckBox BR;
- private System.Windows.Forms.CheckBox BS;
- private System.Windows.Forms.CheckBox BZ;
- private System.Windows.Forms.CheckBox BB;
- private System.Windows.Forms.CheckBox BA;
- private System.Windows.Forms.CheckBox CU;
- private System.Windows.Forms.CheckBox CL;
- private System.Windows.Forms.CheckBox CR;
- private System.Windows.Forms.CheckBox CD;
+ private VirtualPadButton PL;
+ private VirtualPadButton PD;
+ private VirtualPadButton PR;
+ private VirtualPadButton PU;
+ private VirtualPadButton BL;
+ private VirtualPadButton BR;
+ private VirtualPadButton BS;
+ private VirtualPadButton BZ;
+ private VirtualPadButton BB;
+ private VirtualPadButton BA;
+ private VirtualPadButton CU;
+ private VirtualPadButton CL;
+ private VirtualPadButton CR;
+ private VirtualPadButton CD;
private System.Windows.Forms.NumericUpDown ManualY;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
diff --git a/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.cs b/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.cs
index fb79447da2..e3a617d588 100644
--- a/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.cs
+++ b/BizHawk.MultiClient/tools/VirtualPads/VirtualPadN64.cs
@@ -1,6 +1,8 @@
using System;
using System.Text;
using System.Windows.Forms;
+using System.Collections.Generic;
+using System.Linq;
namespace BizHawk.MultiClient
{
@@ -22,7 +24,24 @@ namespace BizHawk.MultiClient
private void UserControl1_Load(object sender, EventArgs e)
{
+ PU.ControllerButton = Controller + " Up";
+ PD.ControllerButton = Controller + " Down";
+ PL.ControllerButton = Controller + " Left";
+ PR.ControllerButton = Controller + " Right";
+ BA.ControllerButton = Controller + " A";
+ BB.ControllerButton = Controller + " B";
+ BZ.ControllerButton = Controller + " Z";
+
+ BS.ControllerButton = Controller + " Start";
+
+ BL.ControllerButton = Controller + " L";
+ BR.ControllerButton = Controller + " R";
+
+ CU.ControllerButton = Controller + " C Up";
+ CD.ControllerButton = Controller + " C Down";
+ CL.ControllerButton = Controller + " C Left";
+ CR.ControllerButton = Controller + " C Right";
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
@@ -55,41 +74,10 @@ namespace BizHawk.MultiClient
{
if (Global.Emulator.SystemId != "N64") return;
-
- if (PU.Checked) Global.StickyXORAdapter.SetSticky(Controller + " Up", false);
- if (PD.Checked) Global.StickyXORAdapter.SetSticky(Controller + " Down", false);
- if (PL.Checked) Global.StickyXORAdapter.SetSticky(Controller + " Left", false);
- if (PR.Checked) Global.StickyXORAdapter.SetSticky(Controller + " Right", false);
-
- if (BB.Checked) Global.StickyXORAdapter.SetSticky(Controller + " B", false);
- if (BA.Checked) Global.StickyXORAdapter.SetSticky(Controller + " A", false);
- if (BZ.Checked) Global.StickyXORAdapter.SetSticky(Controller + " Z", false);
- if (BS.Checked) Global.StickyXORAdapter.SetSticky(Controller + " Start", false);
-
- if (BL.Checked) Global.StickyXORAdapter.SetSticky(Controller + " L", false);
- if (BR.Checked) Global.StickyXORAdapter.SetSticky(Controller + " R", false);
-
- if (CU.Checked) Global.StickyXORAdapter.SetSticky(Controller + " C Up", false);
- if (CD.Checked) Global.StickyXORAdapter.SetSticky(Controller + " C Down", false);
- if (CL.Checked) Global.StickyXORAdapter.SetSticky(Controller + " C Left", false);
- if (CR.Checked) Global.StickyXORAdapter.SetSticky(Controller + " C Right", false);
-
- PU.Checked = false;
- PD.Checked = false;
- PL.Checked = false;
- PR.Checked = false;
-
- BB.Checked = false;
- BA.Checked = false;
- BZ.Checked = false;
- BS.Checked = false;
- BL.Checked = false;
- BR.Checked = false;
-
- CU.Checked = false;
- CD.Checked = false;
- CL.Checked = false;
- CR.Checked = false;
+ foreach (var button in Buttons)
+ {
+ button.Clear();
+ }
}
public void SetButtons(string buttons)
@@ -151,70 +139,6 @@ namespace BizHawk.MultiClient
return input.ToString();
}
- private void Buttons_CheckedChanged(object sender, EventArgs e)
- {
- if (Global.Emulator.SystemId != "N64")
- {
- return;
- }
- else if (sender == PU)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " DPad U", PU.Checked);
- }
- else if (sender == PD)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " DPad D", PD.Checked);
- }
- else if (sender == PL)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " DPad L", PL.Checked);
- }
- else if (sender == PR)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " DPad R", PR.Checked);
- }
- else if (sender == CR)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " C Right", CR.Checked);
- }
- else if (sender == CL)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " C Left", CL.Checked);
- }
- else if (sender == CU)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " C Up", CU.Checked);
- }
- else if (sender == CD)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " C Down", CD.Checked);
- }
- else if (sender == BR)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " R", BR.Checked);
- }
- else if (sender == BL)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " L", BL.Checked);
- }
- else if (sender == BS)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " Start", BS.Checked);
- }
- else if (sender == BA)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " A", BA.Checked);
- }
- else if (sender == BB)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " B", BB.Checked);
- }
- else if (sender == BZ)
- {
- Global.StickyXORAdapter.SetSticky(Controller + " Z", BZ.Checked);
- }
- }
-
private void AnalogControl1_MouseClick(object sender, MouseEventArgs e)
{
set_analog(AnalogControl1.HasValue, AnalogControl1.X, AnalogControl1.Y);
@@ -280,5 +204,21 @@ namespace BizHawk.MultiClient
ManualY.Value = newy;
Refresh();
}
+
+ public List Buttons
+ {
+ get
+ {
+ List _list = new List();
+ foreach(Control c in this.Controls)
+ {
+ if (c is VirtualPadButton)
+ {
+ _list.Add((c as VirtualPadButton));
+ }
+ }
+ return _list;
+ }
+ }
}
}