diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs index a44467f161..56a5f1b080 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs @@ -51,7 +51,8 @@ namespace BizHawk.Client.EmuHawk Name = button.Name, Text = button.DisplayName, Location = button.Location, - Image = button.Icon + Image = button.Icon, + ReadOnly = true }); break; case PadSchema.PadInputType.AnalogStick: @@ -88,7 +89,12 @@ namespace BizHawk.Client.EmuHawk public void Clear() { - Pads.ForEach(c => c.Clear()); + Pads.ForEach(p => p.Clear()); + } + + public void ToggleReadOnly() + { + Pads.ForEach(p => p.ReadOnly ^= true); } public void Set(IController controller) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs index 2678022ad6..c3bde9b354 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs @@ -45,6 +45,7 @@ this.PadsSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ClearAllMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.StickyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DebugReadonlyButton = new System.Windows.Forms.Button(); this.PadMenu.SuspendLayout(); this.SuspendLayout(); // @@ -188,11 +189,22 @@ this.StickyMenuItem.Text = "Sticky"; this.StickyMenuItem.Click += new System.EventHandler(this.StickyMenuItem_Click); // + // DebugReadonlyButton + // + this.DebugReadonlyButton.Location = new System.Drawing.Point(265, 26); + this.DebugReadonlyButton.Name = "DebugReadonlyButton"; + this.DebugReadonlyButton.Size = new System.Drawing.Size(175, 23); + this.DebugReadonlyButton.TabIndex = 12; + this.DebugReadonlyButton.Text = "ReadOnlyToggle delete me"; + this.DebugReadonlyButton.UseVisualStyleBackColor = true; + this.DebugReadonlyButton.Click += new System.EventHandler(this.DebugReadonlyButton_Click); + // // VirtualpadTool // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(452, 312); + this.Controls.Add(this.DebugReadonlyButton); this.Controls.Add(this.ControllerBox); this.Controls.Add(this.StickyBox); this.Controls.Add(this.ClearButton); @@ -226,5 +238,6 @@ private System.Windows.Forms.ToolStripMenuItem ClearAllMenuItem; private System.Windows.Forms.GroupBox ControllerBox; private System.Windows.Forms.ToolStripMenuItem StickyMenuItem; + private System.Windows.Forms.Button DebugReadonlyButton; } } \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs index 21ee51779e..99295e8fc9 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs @@ -200,6 +200,11 @@ namespace BizHawk.Client.EmuHawk #endregion + private void DebugReadonlyButton_Click(object sender, EventArgs e) + { + Pads.ForEach(p => p.ToggleReadOnly()); + } + #endregion } } diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs index 8db42d7c74..90c19de9ae 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadButton.cs @@ -10,6 +10,7 @@ namespace BizHawk.Client.EmuHawk public class VirtualPadButton : CheckBox, IVirtualPadControl { private bool _rightClicked = false; + private bool _readonly = false; public VirtualPadButton() { @@ -26,10 +27,13 @@ namespace BizHawk.Client.EmuHawk public void Clear() { - RightClicked = false; - Checked = false; - Global.AutofireStickyXORAdapter.SetSticky(Name, false); - Global.StickyXORAdapter.SetSticky(Name, false); + if (!ReadOnly) + { + RightClicked = false; + Checked = false; + Global.AutofireStickyXORAdapter.SetSticky(Name, false); + Global.StickyXORAdapter.SetSticky(Name, false); + } } public void Set(IController controller) @@ -46,7 +50,22 @@ namespace BizHawk.Client.EmuHawk public bool ReadOnly { - get; set; // TODO + get + { + return _readonly; + } + + set + { + var changed = _readonly != value; + RightClicked = false; + Checked = false; + _readonly = value; + if (changed) + { + Refresh(); + } + } } #endregion @@ -56,8 +75,11 @@ namespace BizHawk.Client.EmuHawk switch (m.Msg) { case 0x0204: // WM_RBUTTONDOWN - RightClicked = true; - Checked ^= true; + if (!ReadOnly) + { + RightClicked = true; + Checked ^= true; + } return; case 0x0205: // WM_RBUTTONUP return; @@ -71,7 +93,15 @@ namespace BizHawk.Client.EmuHawk protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); - if (RightClicked) + if (ReadOnly) + { + ControlPaint.DrawBorder(e.Graphics, ClientRectangle, + SystemColors.ControlDark, 1, ButtonBorderStyle.Inset, + SystemColors.ControlDark, 1, ButtonBorderStyle.Inset, + SystemColors.ControlDark, 1, ButtonBorderStyle.Inset, + SystemColors.ControlDark, 1, ButtonBorderStyle.Inset); + } + else if (RightClicked) { ControlPaint.DrawBorder(e.Graphics, ClientRectangle, SystemColors.HotTrack, 1, ButtonBorderStyle.Inset, @@ -85,40 +115,23 @@ namespace BizHawk.Client.EmuHawk { get { - return _rightClicked; + return !ReadOnly && _rightClicked; } set { - _rightClicked = value; - if (_rightClicked) + if (!ReadOnly) { - ForeColor = SystemColors.HotTrack; + _rightClicked = value; + if (_rightClicked) + { + ForeColor = SystemColors.HotTrack; + } + else + { + ForeColor = SystemColors.ControlText; + } } - else - { - ForeColor = SystemColors.ControlText; - } - } - } - - private void SetSticky() - { - Global.StickyXORAdapter.SetSticky(Name, Checked); - - if (Checked == false) - { - Clear(); - } - } - - private void SetAutofireSticky() - { - Global.AutofireStickyXORAdapter.SetSticky(Name, Checked); - - if (Checked == false) - { - Clear(); } } @@ -126,11 +139,21 @@ namespace BizHawk.Client.EmuHawk { if (RightClicked) { - SetAutofireSticky(); + Global.AutofireStickyXORAdapter.SetSticky(Name, Checked); + + if (Checked == false) + { + Clear(); + } } else { - SetSticky(); + Global.StickyXORAdapter.SetSticky(Name, Checked); + + if (Checked == false) + { + Clear(); + } } base.OnCheckedChanged(e); @@ -138,12 +161,23 @@ namespace BizHawk.Client.EmuHawk protected override void OnMouseClick(MouseEventArgs e) { - if (e.Button == MouseButtons.Left) + if (!ReadOnly) { - RightClicked = false; - } + if (e.Button == MouseButtons.Left) + { + RightClicked = false; + } - base.OnMouseClick(e); + base.OnMouseClick(e); + } + } + + protected override void OnClick(EventArgs e) + { + if (!ReadOnly) + { + base.OnClick(e); + } } } } diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs index 01b3082444..a82de1ed77 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs @@ -17,7 +17,7 @@ namespace BizHawk.Client.EmuHawk { if (ss.Controllers[i].IsConnected) { - yield return new VirtualPad(StandardController(i)); + yield return new VirtualPad(StandardController(i + 1)); } } }