BizHawk/BizHawk.Client.EmuHawk/tools/Macros/MacroInput.ButtonSelect.cs

105 lines
2.7 KiB
C#

using System;
using System.Drawing;
using System.Windows.Forms;
using BizHawk.Emulation.Common;
using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk
{
public partial class MacroInputTool
{
private CheckBox[] _buttonBoxes;
private void SetUpButtonBoxes()
{
ControllerDefinition def = Global.Emulator.ControllerDefinition;
int count = def.BoolButtons.Count + def.FloatControls.Count;
_buttonBoxes = new CheckBox[count];
for (int i = 0; i < def.FloatControls.Count; i++)
{
CheckBox box = new CheckBox();
box.Text = def.FloatControls[i];
_buttonBoxes[i] = box;
}
for (int i = 0; i < def.BoolButtons.Count; i++)
{
CheckBox box = new CheckBox();
box.Text = def.BoolButtons[i];
_buttonBoxes[i + def.FloatControls.Count] = box;
}
for (int i = 0; i < _buttonBoxes.Length; i++)
{
_buttonBoxes[i].Parent = this;
_buttonBoxes[i].AutoSize = true;
_buttonBoxes[i].Checked = true;
_buttonBoxes[i].CheckedChanged += ButtonBox_CheckedChanged;
}
PositionBoxes();
}
private bool _setting = false;
private void ButtonBox_CheckedChanged(object sender, EventArgs e)
{
if (selectedZone == null || _setting)
return;
CheckBox s = sender as CheckBox;
s.ForeColor = s.Checked ? SystemColors.ControlText : SystemColors.ButtonShadow;
s.Refresh();
// Update the selected zone's key
var lg = Global.MovieSession.LogGeneratorInstance() as Bk2LogEntryGenerator;
lg.SetSource(Global.MovieSession.MovieControllerAdapter);
string key = lg.GenerateLogKey();
key = key.Replace("LogKey:", "").Replace("#", "");
for (int i = 0; i < _buttonBoxes.Length; i++)
{
if (!_buttonBoxes[i].Checked)
key = key.Replace(_buttonBoxes[i].Text + "|", "");
}
key = key.Substring(0, key.Length - 1);
selectedZone.InputKey = key;
}
private void SetButtonBoxes()
{
if (selectedZone == null)
return;
_setting = true;
for (int i = 0; i < _buttonBoxes.Length; i++)
_buttonBoxes[i].Checked = selectedZone.InputKey.Contains(_buttonBoxes[i].Text);
_setting = false;
}
private void PositionBoxes()
{
int X = this.ClientSize.Width - 3;
int Y = this.ClientSize.Height - _buttonBoxes[0].Height - 3;
for (int i = _buttonBoxes.Length - 1; i >= 0; i--)
{
X -= _buttonBoxes[i].Width;
if (X <= 3)
{
X = this.ClientSize.Width - 3 - _buttonBoxes[i].Width;
Y -= (_buttonBoxes[0].Height + 6);
}
_buttonBoxes[i].Location = new Point(X, Y);
}
}
private void MacroInputTool_Resize(object sender, EventArgs e)
{
if (_initializing)
return;
PositionBoxes();
}
}
}