BizHawk/BizHawk.MultiClient/config/InputConfig.cs

420 lines
19 KiB
C#
Raw Normal View History

2011-01-29 00:10:08 +00:00
using System;
using System.Collections.Generic;
using System.Collections;
2011-01-29 00:10:08 +00:00
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace BizHawk.MultiClient
{
public partial class InputConfig : Form
{
const string ControllerStr = "Configure Controllers - ";
public static string[] SMSControlList = new string[] { "Up", "Down", "Left", "Right", "B1", "B2", "Pause", "Reset" };
public static string[] PCEControlList = new string[] { "Up", "Down", "Left", "Right", "I", "II","Run","Select"};
public static string[] GenesisControlList = new string[] { "Up", "Down", "Left", "Right", "A", "B", "C", "Start", "X", "Y", "Z" };
2011-02-19 22:07:52 +00:00
public static string[] NESControlList = new string[] { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select" };
private ArrayList Labels;
private ArrayList TextBoxes;
private string CurSelectConsole;
private int CurSelectController;
private bool Changed;
2011-01-29 00:10:08 +00:00
public InputConfig()
{
InitializeComponent();
Labels = new ArrayList();
TextBoxes = new ArrayList();
Changed = false;
2011-01-29 00:10:08 +00:00
}
private string TruncateButtonMapping(string button)
{
//all config button mappings have the name followed by a comma & space, then key mapping, remove up through the space
int x = button.LastIndexOf(',');
if (x != -1)
return button.Substring(x + 2, button.Length - (x + 2));
else
return "";
}
private string AppendButtonMapping(string button, string oldmap)
{
int x = oldmap.LastIndexOf(',');
if (x != -1)
return oldmap.Substring(0, x + 2) + button;
else
return oldmap + ", " + button;
}
private void DoSMS()
{
Label TempLabel;
InputWidget TempTextBox;
this.Text = ControllerStr + "SMS / GG / SG-1000";
ControllerImage.Image = BizHawk.MultiClient.Properties.Resources.SMSController;
this.SystemComboBox.SelectedIndex = 0;
int jpad = this.ControllComboBox.SelectedIndex;
string[] ButtonMappings = new string[SMSControlList.Length];
ButtonMappings[0] = TruncateButtonMapping(Global.Config.SMSController[jpad].Up);
ButtonMappings[1] = TruncateButtonMapping(Global.Config.SMSController[jpad].Down);
ButtonMappings[2] = TruncateButtonMapping(Global.Config.SMSController[jpad].Left);
ButtonMappings[3] = TruncateButtonMapping(Global.Config.SMSController[jpad].Right);
ButtonMappings[4] = TruncateButtonMapping(Global.Config.SMSController[jpad].B1);
ButtonMappings[5] = TruncateButtonMapping(Global.Config.SMSController[jpad].B2);
ButtonMappings[6] = TruncateButtonMapping(Global.Config.SmsPause);
ButtonMappings[7] = TruncateButtonMapping(Global.Config.SmsReset);
Changed = true;
Labels.Clear();
TextBoxes.Clear();
for (int i = 0; i < SMSControlList.Length; i++)
{
TempLabel = new Label();
TempLabel.Text = SMSControlList[i];
TempLabel.Location = new Point(8, 20 + (i * 24));
Labels.Add(TempLabel);
TempTextBox = new InputWidget();
TempTextBox.Location = new Point(48, 20 + (i * 24));
TextBoxes.Add(TempTextBox);
TempTextBox.Text = ButtonMappings[i];
ButtonsGroupBox.Controls.Add(TempTextBox);
ButtonsGroupBox.Controls.Add(TempLabel);
}
Changed = true;
}
private void UpdateSMS(int prev)
{
InputWidget TempBox;
Label TempLabel;
TempBox = TextBoxes[0] as InputWidget;
Global.Config.SMSController[prev].Up = AppendButtonMapping(TempBox.Text, Global.Config.SMSController[prev].Up);
TempBox.Dispose();
TempBox = TextBoxes[1] as InputWidget;
Global.Config.SMSController[prev].Down = AppendButtonMapping(TempBox.Text, Global.Config.SMSController[prev].Down);
TempBox.Dispose();
TempBox = TextBoxes[2] as InputWidget;
Global.Config.SMSController[prev].Left = AppendButtonMapping(TempBox.Text, Global.Config.SMSController[prev].Left);
TempBox.Dispose();
TempBox = TextBoxes[3] as InputWidget;
Global.Config.SMSController[prev].Right = AppendButtonMapping(TempBox.Text, Global.Config.SMSController[prev].Right);
TempBox.Dispose();
TempBox = TextBoxes[4] as InputWidget;
Global.Config.SMSController[prev].B1 = AppendButtonMapping(TempBox.Text, Global.Config.SMSController[prev].B1);
TempBox.Dispose();
TempBox = TextBoxes[5] as InputWidget;
Global.Config.SMSController[prev].B2 = AppendButtonMapping(TempBox.Text, Global.Config.SMSController[prev].B2);
TempBox.Dispose();
TempBox = TextBoxes[6] as InputWidget;
Global.Config.SmsPause = AppendButtonMapping(TempBox.Text, Global.Config.SmsPause);
TempBox.Dispose();
TempBox = TextBoxes[7] as InputWidget;
Global.Config.SmsReset = AppendButtonMapping(TempBox.Text, Global.Config.SmsReset);
TempBox.Dispose();
2011-02-19 22:07:52 +00:00
for (int i = 0; i < SMSControlList.Length; i++)
{
TempLabel = Labels[i] as Label;
TempLabel.Dispose();
}
}
private void DoPCE()
{
Label TempLabel;
InputWidget TempTextBox;
this.Text = ControllerStr + "PCEjin / SGX";
ControllerImage.Image = BizHawk.MultiClient.Properties.Resources.PCEngineController;
int jpad = this.ControllComboBox.SelectedIndex;
string[] ButtonMappings = new string[PCEControlList.Length];
ButtonMappings[0] = TruncateButtonMapping(Global.Config.PCEController[jpad].Up);
ButtonMappings[1] = TruncateButtonMapping(Global.Config.PCEController[jpad].Down);
ButtonMappings[2] = TruncateButtonMapping(Global.Config.PCEController[jpad].Left);
ButtonMappings[3] = TruncateButtonMapping(Global.Config.PCEController[jpad].Right);
ButtonMappings[4] = TruncateButtonMapping(Global.Config.PCEController[jpad].I);
ButtonMappings[5] = TruncateButtonMapping(Global.Config.PCEController[jpad].II);
ButtonMappings[6] = TruncateButtonMapping(Global.Config.PCEController[jpad].Run);
ButtonMappings[7] = TruncateButtonMapping(Global.Config.PCEController[jpad].Select);
Changed = true;
Labels.Clear();
TextBoxes.Clear();
for (int i = 0; i < PCEControlList.Length; i++)
{
TempLabel = new Label();
TempLabel.Text = PCEControlList[i];
TempLabel.Location = new Point(8, 20 + (i * 24));
Labels.Add(TempLabel);
TempTextBox = new InputWidget();
TempTextBox.Location = new Point(48, 20 + (i * 24));
TextBoxes.Add(TempTextBox);
TempTextBox.Text = ButtonMappings[i];
ButtonsGroupBox.Controls.Add(TempTextBox);
ButtonsGroupBox.Controls.Add(TempLabel);
}
Changed = true;
}
private void UpdatePCE(int prev)
{
InputWidget TempBox;
Label TempLabel;
TempBox = TextBoxes[0] as InputWidget;
Global.Config.PCEController[prev].Up = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].Up);
TempBox.Dispose();
TempBox = TextBoxes[1] as InputWidget;
Global.Config.PCEController[prev].Down = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].Down);
TempBox.Dispose();
TempBox = TextBoxes[2] as InputWidget;
Global.Config.PCEController[prev].Left = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].Left);
TempBox.Dispose();
TempBox = TextBoxes[3] as InputWidget;
Global.Config.PCEController[prev].Right = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].Right);
TempBox.Dispose();
TempBox = TextBoxes[4] as InputWidget;
Global.Config.PCEController[prev].I = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].I);
TempBox.Dispose();
TempBox = TextBoxes[5] as InputWidget;
Global.Config.PCEController[prev].II = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].II);
TempBox.Dispose();
TempBox = TextBoxes[6] as InputWidget;
Global.Config.PCEController[prev].Run = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].Run);
TempBox.Dispose();
TempBox = TextBoxes[7] as InputWidget;
Global.Config.PCEController[prev].Select = AppendButtonMapping(TempBox.Text, Global.Config.PCEController[prev].Select);
TempBox.Dispose();
2011-02-19 22:07:52 +00:00
for (int i = 0; i < PCEControlList.Length; i++)
{
TempLabel = Labels[i] as Label;
TempLabel.Dispose();
}
}
private void DoGen()
{
this.Text = ControllerStr + "Sega Genesis";
ControllerImage.Image = BizHawk.MultiClient.Properties.Resources.GENController;
}
private void DoTI83()
{
this.Text = ControllerStr + "TI-83";
}
private void DoGameBoy()
{
2011-02-19 22:07:52 +00:00
Label TempLabel;
InputWidget TempTextBox;
this.Text = ControllerStr + "Gameboy";
ControllerImage.Image = BizHawk.MultiClient.Properties.Resources.GBController;
2011-02-19 22:07:52 +00:00
string[] ButtonMappings = new string[NESControlList.Length];
ButtonMappings[0] = TruncateButtonMapping(Global.Config.GameBoyController.Up);
ButtonMappings[1] = TruncateButtonMapping(Global.Config.GameBoyController.Down);
ButtonMappings[2] = TruncateButtonMapping(Global.Config.GameBoyController.Left);
ButtonMappings[3] = TruncateButtonMapping(Global.Config.GameBoyController.Right);
ButtonMappings[4] = TruncateButtonMapping(Global.Config.GameBoyController.A);
ButtonMappings[5] = TruncateButtonMapping(Global.Config.GameBoyController.B);
ButtonMappings[6] = TruncateButtonMapping(Global.Config.GameBoyController.Start);
ButtonMappings[7] = TruncateButtonMapping(Global.Config.GameBoyController.Select);
Changed = true;
Labels.Clear();
TextBoxes.Clear();
for (int i = 0; i < NESControlList.Length; i++)
{
TempLabel = new Label();
TempLabel.Text = NESControlList[i];
TempLabel.Location = new Point(8, 20 + (i * 24));
Labels.Add(TempLabel);
TempTextBox = new InputWidget();
TempTextBox.Location = new Point(48, 20 + (i * 24));
TextBoxes.Add(TempTextBox);
TempTextBox.Text = ButtonMappings[i];
ButtonsGroupBox.Controls.Add(TempTextBox);
ButtonsGroupBox.Controls.Add(TempLabel);
}
Changed = true;
}
private void UpdateGameBoy()
{
InputWidget TempBox;
Label TempLabel;
TempBox = TextBoxes[0] as InputWidget;
Global.Config.GameBoyController.Up = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.Up);
TempBox.Dispose();
TempBox = TextBoxes[1] as InputWidget;
Global.Config.GameBoyController.Down = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.Down);
TempBox.Dispose();
TempBox = TextBoxes[2] as InputWidget;
Global.Config.GameBoyController.Left = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.Left);
TempBox.Dispose();
TempBox = TextBoxes[3] as InputWidget;
Global.Config.GameBoyController.Right = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.Right);
TempBox.Dispose();
TempBox = TextBoxes[4] as InputWidget;
Global.Config.GameBoyController.A = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.A);
TempBox.Dispose();
TempBox = TextBoxes[5] as InputWidget;
Global.Config.GameBoyController.B = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.B);
TempBox.Dispose();
TempBox = TextBoxes[6] as InputWidget;
Global.Config.GameBoyController.Start = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.Start);
TempBox.Dispose();
TempBox = TextBoxes[7] as InputWidget;
Global.Config.GameBoyController.Select = AppendButtonMapping(TempBox.Text, Global.Config.GameBoyController.Select);
TempBox.Dispose();
for (int i = 0; i < NESControlList.Length; i++)
{
TempLabel = Labels[i] as Label;
TempLabel.Dispose();
}
}
2011-01-29 00:10:08 +00:00
private void InputConfig_Load(object sender, EventArgs e)
{
//SystemComboBox = new ComboBox();
//Determine the System currently loaded, and set that one up first, if null emulator set, what is the default?
/*
if (!(Global.Emulator is NullEmulator))
{
switch (Global.Game.System)
{
case "SMS":
case "SG":
case "GG":
joypads = 2;
break;
case "PCE":
case "SGX":
joypads = 5;
break;
case "GEN":
joypads = 8;
break;
case "TI83":
joypads = 1;
break;
case "GB":
joypads = 1;
break;
default:
joypads = 2;
break;
}
}
else
{
joypads = 2;
}
ControllComboBox.Items.Clear();
for (int i = 0; i < joypads; i++)
{
ControllComboBox.Items.Add(string.Format("Joypad {0}", i + 1));
}
ControllComboBox.SelectedIndex = 0;*/
2011-01-29 00:10:08 +00:00
}
private void OK_Click(object sender, EventArgs e)
{
this.Close();
}
private void Cancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void SystemComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (Changed)
{
switch (CurSelectConsole)
{
case "SMS / GG / SG-1000":
UpdateSMS(CurSelectController);
break;
case "PC Engine / SGX":
UpdatePCE(CurSelectController);
break;
case "Gameboy":
//UpdateGB();
break;
case "Sega Genesis":
//UpdateGenesis();
break;
case "TI-83":
//Update TI-83();
break;
}
Changed = false;
}
int joypads = 0;
switch (this.SystemComboBox.SelectedItem.ToString())
{
case "SMS / GG / SG-1000":
joypads = 2;
break;
case "PC Engine / SGX":
joypads = 5;
break;
case "Gameboy":
joypads = 1;
break;
case "Sega Genesis":
joypads = 8;
break;
case "TI-83":
joypads = 1;
break;
}
ControllComboBox.Items.Clear();
for (int i = 0; i < joypads; i++)
{
ControllComboBox.Items.Add(string.Format("Joypad {0}", i + 1));
}
ControllComboBox.SelectedIndex = 0;
CurSelectConsole = this.SystemComboBox.SelectedItem.ToString();
CurSelectController = 0;
}
private void ControllComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (Changed)
{
switch (CurSelectConsole)
{
case "SMS / GG / SG-1000":
UpdateSMS(CurSelectController);
break;
case "PC Engine / SGX":
//UpdatePCE(CurSelectController);
break;
case "Gameboy":
//UpdateGB();
break;
case "Sega Genesis":
//UpdateGenesis();
break;
case "TI-83":
//Update TI-83();
break;
}
Changed = false;
}
switch (SystemComboBox.SelectedItem.ToString())
{
case "SMS / GG / SG-1000":
DoSMS();
break;
case "PC Engine / SGX":
DoPCE();
break;
case "Gameboy":
DoGameBoy();
break;
case "Sega Genesis":
DoGen();
break;
case "TI-83":
DoTI83();
break;
}
CurSelectController = ControllComboBox.SelectedIndex;
}
}
2011-01-29 00:10:08 +00:00
}