ScpMonitor/ProfilesForm.cs (136 lines of code) (raw):
using System;
using System.Linq;
using System.Windows.Forms;
using ScpControl.Shared.Core;
using ScpMonitor.Properties;
namespace ScpMonitor
{
public partial class ProfilesForm : Form
{
private const String Default = "Default";
protected Boolean m_CanEdit, m_Editing, m_CanSave = true, m_PropsActive;
protected DualShockPadMeta m_Detail;
protected Int32 m_SelectedPad;
protected String m_SelectedProfile = Default, m_Active = Default;
public ProfilesForm()
{
InitializeComponent();
scpProxy.Start();
}
private void ResetControls()
{
foreach (var child in Controls.OfType<AxisControl>())
{
child.Value = 0;
}
}
public void Request()
{
cbPad.SelectedIndex = m_SelectedPad = 0;
m_Detail = scpProxy.Detail((DsPadId)m_SelectedPad);
ResetControls();
m_Editing = false;
m_CanSave = true;
}
public void Reset()
{
CenterToScreen();
}
private void Parse(object sender, ScpHidReport e)
{
lock (this)
{
if (e.PadId == (DsPadId)m_SelectedPad)
{
if (e.PadState != DsState.Connected)
{
ResetControls();
return;
}
switch (e.Model)
{
case DsModel.DS3:
{
axLX.Value = e[Ds3Axis.Lx].Value;
axLY.Value = e[Ds3Axis.Ly].Value;
axRX.Value = e[Ds3Axis.Rx].Value;
axRY.Value = e[Ds3Axis.Ry].Value;
axL1.Value = e[Ds3Axis.L1].Value;
axR1.Value = e[Ds3Axis.R1].Value;
axL2.Value = e[Ds3Axis.L2].Value;
axR2.Value = e[Ds3Axis.R2].Value;
axL3.Value = (Byte)(e[Ds3Button.L3].IsPressed ? 255 : 0);
axR3.Value = (Byte)(e[Ds3Button.R3].IsPressed ? 255 : 0);
axSH.Value = (Byte)(e[Ds3Button.Select].IsPressed ? 255 : 0);
axOP.Value = (Byte)(e[Ds3Button.Start].IsPressed ? 255 : 0);
axT.Value = e[Ds3Axis.Triangle].Value;
axC.Value = e[Ds3Axis.Circle].Value;
axX.Value = e[Ds3Axis.Cross].Value;
axS.Value = e[Ds3Axis.Square].Value;
axU.Value = e[Ds3Axis.Up].Value;
axR.Value = e[Ds3Axis.Right].Value;
axD.Value = e[Ds3Axis.Down].Value;
axL.Value = e[Ds3Axis.Left].Value;
axPS.Value = (Byte)(e[Ds3Button.Ps].IsPressed ? 255 : 0);
}
break;
case DsModel.DS4:
{
axLX.Value = e[Ds4Axis.Lx].Value;
axLY.Value = e[Ds4Axis.Ly].Value;
axRX.Value = e[Ds4Axis.Rx].Value;
axRY.Value = e[Ds4Axis.Ry].Value;
axL2.Value = e[Ds4Axis.L2].Value;
axR2.Value = e[Ds4Axis.R2].Value;
axL1.Value = (Byte)(e[Ds4Button.L1].IsPressed ? 255 : 0);
axR1.Value = (Byte)(e[Ds4Button.R1].IsPressed ? 255 : 0);
axL3.Value = (Byte)(e[Ds4Button.L3].IsPressed ? 255 : 0);
axR3.Value = (Byte)(e[Ds4Button.R3].IsPressed ? 255 : 0);
axSH.Value = (Byte)(e[Ds4Button.Share].IsPressed ? 255 : 0);
axOP.Value = (Byte)(e[Ds4Button.Options].IsPressed ? 255 : 0);
axT.Value = (Byte)(e[Ds4Button.Triangle].IsPressed ? 255 : 0);
axC.Value = (Byte)(e[Ds4Button.Circle].IsPressed ? 255 : 0);
axX.Value = (Byte)(e[Ds4Button.Cross].IsPressed ? 255 : 0);
axS.Value = (Byte)(e[Ds4Button.Square].IsPressed ? 255 : 0);
axU.Value = (Byte)(e[Ds4Button.Up].IsPressed ? 255 : 0);
axR.Value = (Byte)(e[Ds4Button.Right].IsPressed ? 255 : 0);
axD.Value = (Byte)(e[Ds4Button.Down].IsPressed ? 255 : 0);
axL.Value = (Byte)(e[Ds4Button.Left].IsPressed ? 255 : 0);
axPS.Value = (Byte)(e[Ds4Button.Ps].IsPressed ? 255 : 0);
axTP.Value = (Byte)(e[Ds4Button.TouchPad].IsPressed ? 255 : 0);
}
break;
}
}
}
}
private void Form_Load(object sender, EventArgs e)
{
Icon = Resources.Scp_All;
}
private void Form_Close(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
Hide();
}
}
private void Form_Visible(object sender, EventArgs e)
{
if (!Visible)
{
scpProxy.Stop();
}
}
private void Pad_Selected(object sender, EventArgs e)
{
lock (this)
{
m_SelectedPad = cbPad.SelectedIndex;
m_Detail = scpProxy.Detail((DsPadId)m_SelectedPad);
ResetControls();
}
}
}
}