Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action

View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
This commit is contained in:
jays2kings 2014-07-07 15:22:42 -04:00
parent 0765b4600e
commit 88cf1bdc5b
21 changed files with 3213 additions and 679 deletions

View File

@ -468,14 +468,427 @@ namespace DS4Control
/** Map DS4 Buttons/Axes to other DS4 Buttons/Axes (largely the same as Xinput ones) and to keyboard and mouse buttons. */
public static async void MapCustom(int device, DS4State cState, DS4State MappedState, DS4StateExposed eState)
{
bool shift;
cState.CopyTo(MappedState);
SyntheticState deviceState = Mapping.deviceState[device];
foreach (KeyValuePair<DS4Controls, string> customKey in Global.getCustomMacros(device)) //with delays
switch (Global.getShiftModifier(device))
{
DS4KeyType keyType = Global.getCustomKeyType(device, customKey.Key);
case 1: shift = getBoolMapping(DS4Controls.Cross, cState, eState); break;
case 2: shift = getBoolMapping(DS4Controls.Circle, cState, eState); break;
case 3: shift = getBoolMapping(DS4Controls.Square, cState, eState); break;
case 4: shift = getBoolMapping(DS4Controls.Triangle, cState, eState); break;
case 5: shift = getBoolMapping(DS4Controls.Options, cState, eState); break;
case 6: shift = getBoolMapping(DS4Controls.Share, cState, eState); break;
case 7: shift = getBoolMapping(DS4Controls.DpadUp, cState, eState); break;
case 8: shift = getBoolMapping(DS4Controls.DpadDown, cState, eState); break;
case 9: shift = getBoolMapping(DS4Controls.DpadLeft, cState, eState); break;
case 10: shift = getBoolMapping(DS4Controls.DpadRight, cState, eState); break;
case 11: shift = getBoolMapping(DS4Controls.PS, cState, eState); break;
case 12: shift = getBoolMapping(DS4Controls.L1, cState, eState); break;
case 13: shift = getBoolMapping(DS4Controls.R1, cState, eState); break;
case 14: shift = getBoolMapping(DS4Controls.L2, cState, eState); break;
case 15: shift = getBoolMapping(DS4Controls.R2, cState, eState); break;
case 16: shift = getBoolMapping(DS4Controls.L3, cState, eState); break;
case 17: shift = getBoolMapping(DS4Controls.R3, cState, eState); break;
case 18: shift = getBoolMapping(DS4Controls.TouchLeft, cState, eState); break;
case 19: shift = getBoolMapping(DS4Controls.TouchUpper, cState, eState); break;
case 20: shift = getBoolMapping(DS4Controls.TouchMulti, cState, eState); break;
case 21: shift = getBoolMapping(DS4Controls.TouchRight, cState, eState); break;
case 22: shift = getBoolMapping(DS4Controls.GyroZNeg, cState, eState); break;
case 23: shift = getBoolMapping(DS4Controls.GyroZPos, cState, eState); break;
case 24: shift = getBoolMapping(DS4Controls.GyroXPos, cState, eState); break;
case 25: shift = getBoolMapping(DS4Controls.GyroXNeg, cState, eState); break;
case 26: shift = cState.Touch1; break;
default: shift = false; break;
}
if (shift)
MapShiftCustom(device, cState, MappedState, eState);
foreach (KeyValuePair<DS4Controls, string> customKey in Global.getCustomMacros(device))
{
if (shift == false ||
(Global.getShiftCustomMacro(device, customKey.Key) == "0" &&
Global.getShiftCustomKey(device, customKey.Key) == 0 &&
(Global.getShiftCustomButton(device, customKey.Key) == X360Controls.None ||
Global.getShiftCustomButton(device, customKey.Key) == X360Controls.Unbound)))
{
DS4KeyType keyType = Global.getCustomKeyType(device, customKey.Key);
if (getBoolMapping(customKey.Key, cState, eState))
{
resetToDefaultValue(customKey.Key, MappedState);
bool LXChanged = (Math.Abs(127 - MappedState.LX) < 5);
bool LYChanged = (Math.Abs(127 - MappedState.LY) < 5);
bool RXChanged = (Math.Abs(127 - MappedState.RX) < 5);
bool RYChanged = (Math.Abs(127 - MappedState.RY) < 5);
string[] skeys;
int[] keys;
if (!string.IsNullOrEmpty(customKey.Value))
{
skeys = customKey.Value.Split('/');
keys = new int[skeys.Length];
}
else
{
skeys = new string[0];
keys = new int[0];
}
for (int i = 0; i < keys.Length; i++)
keys[i] = ushort.Parse(skeys[i]);
bool[] keydown = new bool[261];
if (keys.Length > 0 && keys[0] > 260 && keys[0] < 300)
{
if (keys[0] == 261 && !MappedState.Cross) MappedState.Cross = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 262 && !MappedState.Circle) MappedState.Circle = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 263 && !MappedState.Square) MappedState.Square = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 264 && !MappedState.Triangle) MappedState.Triangle = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 265 && !MappedState.DpadUp) MappedState.DpadUp = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 266 && !MappedState.DpadDown) MappedState.DpadDown = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 267 && !MappedState.DpadLeft) MappedState.DpadLeft = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 268 && !MappedState.DpadRight) MappedState.DpadRight = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 269 && !MappedState.Options) MappedState.Options = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 270 && !MappedState.Share) MappedState.Share = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 271 && !MappedState.PS) MappedState.PS = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 272 && !MappedState.L1) MappedState.L1 = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 273 && !MappedState.R1) MappedState.R1 = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 274 && MappedState.L2 == 0) MappedState.L2 = getByteMapping(device, customKey.Key, cState, eState);
if (keys[0] == 275 && MappedState.R2 == 0) MappedState.R2 = getByteMapping(device, customKey.Key, cState, eState);
if (keys[0] == 276 && !MappedState.L3) MappedState.L3 = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 277 && !MappedState.R3) MappedState.R3 = getBoolMapping(customKey.Key, cState, eState);
if (keys[0] == 278 && LYChanged) MappedState.LY = getXYAxisMapping(device, customKey.Key, cState, eState);
if (keys[0] == 279 && LYChanged) MappedState.LY = getXYAxisMapping(device, customKey.Key, cState, eState, true);
if (keys[0] == 280 && LXChanged) MappedState.LX = getXYAxisMapping(device, customKey.Key, cState, eState);
if (keys[0] == 281 && LXChanged) MappedState.LX = getXYAxisMapping(device, customKey.Key, cState, eState, true);
if (keys[0] == 282 && RYChanged) MappedState.RY = getXYAxisMapping(device, customKey.Key, cState, eState);
if (keys[0] == 283 && RYChanged) MappedState.RY = getXYAxisMapping(device, customKey.Key, cState, eState, true);
if (keys[0] == 284 && RXChanged) MappedState.RX = getXYAxisMapping(device, customKey.Key, cState, eState);
if (keys[0] == 285 && RXChanged) MappedState.RX = getXYAxisMapping(device, customKey.Key, cState, eState, true);
}
if (!macrodone[DS4ControltoInt(customKey.Key)])
{
macrodone[DS4ControltoInt(customKey.Key)] = true;
for (int i = 0; i < keys.Length; i++)
{
if (keys[i] >= 300) //ints over 300 used to delay
await Task.Delay(keys[i] - 300);
else if (keys[i] < 261 && !keydown[keys[i]])
{
if (keys[i] == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTDOWN); //anything above 255 is not a keyvalue
else if (keys[i] == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTDOWN);
else if (keys[i] == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEDOWN);
else if (keys[i] == 259) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONDOWN, 1);
else if (keys[i] == 260) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONDOWN, 2);
else if (keyType.HasFlag(DS4KeyType.ScanCode))
InputMethods.performSCKeyPress((ushort)keys[i]);
else
InputMethods.performKeyPress((ushort)keys[i]);
keydown[keys[i]] = true;
}
else if (keys[i] < 261)
{
if (keys[i] == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP); //anything above 255 is not a keyvalue
else if (keys[i] == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTUP);
else if (keys[i] == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEUP);
else if (keys[i] == 259) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONUP, 1);
else if (keys[i] == 260) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONUP, 2);
else if (keyType.HasFlag(DS4KeyType.ScanCode))
InputMethods.performSCKeyRelease((ushort)keys[i]);
else
InputMethods.performKeyRelease((ushort)keys[i]);
keydown[keys[i]] = false;
}
}
for (ushort i = 0; i < keydown.Length; i++)
{
if (keydown[i])
if (keyType.HasFlag(DS4KeyType.ScanCode))
InputMethods.performSCKeyRelease(i);
else
InputMethods.performKeyRelease(i);
}
if (keyType.HasFlag(DS4KeyType.HoldMacro))
{
await Task.Delay(50);
macrodone[DS4ControltoInt(customKey.Key)] = false;
}
}
}
else if (!getBoolMapping(customKey.Key, cState, eState))
macrodone[DS4ControltoInt(customKey.Key)] = false;
}
}
foreach (KeyValuePair<DS4Controls, ushort> customKey in Global.getCustomKeys(device))
{
if (shift == false ||
(Global.getShiftCustomMacro(device, customKey.Key) == "0" &&
Global.getShiftCustomKey(device, customKey.Key) == 0 &&
(Global.getShiftCustomButton(device, customKey.Key) == X360Controls.None ||
Global.getShiftCustomButton(device, customKey.Key) == X360Controls.Unbound)))
{
DS4KeyType keyType = Global.getCustomKeyType(device, customKey.Key);
if (getBoolMapping(customKey.Key, cState, eState))
{
resetToDefaultValue(customKey.Key, MappedState);
SyntheticState.KeyPresses kp;
if (!deviceState.keyPresses.TryGetValue(customKey.Value, out kp))
deviceState.keyPresses[customKey.Value] = kp = new SyntheticState.KeyPresses();
if (keyType.HasFlag(DS4KeyType.ScanCode))
kp.current.scanCodeCount++;
else
kp.current.vkCount++;
if (keyType.HasFlag(DS4KeyType.Toggle))
{
if (!pressedonce[customKey.Value])
{
kp.current.toggle = !kp.current.toggle;
pressedonce[customKey.Value] = true;
}
kp.current.toggleCount++;
}
kp.current.repeatCount++;
}
else
pressedonce[customKey.Value] = false;
}
}
MappedState.LX = 127;
MappedState.LY = 127;
MappedState.RX = 127;
MappedState.RY = 127;
int MouseDeltaX = 0;
int MouseDeltaY = 0;
Dictionary<DS4Controls, X360Controls> customButtons = Global.getCustomButtons(device);
//foreach (KeyValuePair<DS4Controls, X360Controls> customButton in customButtons)
// resetToDefaultValue(customButton.Key, MappedState); // erase default mappings for things that are remapped
foreach (KeyValuePair<DS4Controls, X360Controls> customButton in customButtons)
{
if (shift == false ||
(Global.getShiftCustomMacro(device, customButton.Key) == "0" &&
Global.getShiftCustomKey(device, customButton.Key) == 0 &&
(Global.getShiftCustomButton(device, customButton.Key) == X360Controls.None ||
Global.getShiftCustomButton(device, customButton.Key) == X360Controls.Unbound)))
{
if (customButton.Key == DS4Controls.Square)
Console.WriteLine("hello");
DS4KeyType keyType = Global.getCustomKeyType(device, customButton.Key);
int keyvalue = 0;
switch (customButton.Value)
{
case X360Controls.LeftMouse: keyvalue = 256; break;
case X360Controls.RightMouse: keyvalue = 257; break;
case X360Controls.MiddleMouse: keyvalue = 258; break;
case X360Controls.FourthMouse: keyvalue = 259; break;
case X360Controls.FifthMouse: keyvalue = 260; break;
}
if (keyType.HasFlag(DS4KeyType.Toggle))
{
if (getBoolMapping(customButton.Key, cState, eState))
{
resetToDefaultValue(customButton.Key, MappedState);
if (!pressedonce[keyvalue])
{
deviceState.currentClicks.toggle = !deviceState.currentClicks.toggle;
test++;
pressedonce[keyvalue] = true;
}
deviceState.currentClicks.toggleCount++;
}
else// if (test = 1)// && pressedonce[keyvalue])
{
pressedonce[keyvalue] = false;
}
}
bool LXChanged = Math.Abs(127 - MappedState.LX) <= 5;
bool LYChanged = Math.Abs(127 - MappedState.LY) <= 5;
bool RXChanged = Math.Abs(127 - MappedState.RX) <= 5;
bool RYChanged = Math.Abs(127 - MappedState.RY) <= 5;
//once++;
resetToDefaultValue(customButton.Key, MappedState); // erase default mappings for things that are remapped
switch (customButton.Value)
{
case X360Controls.A:
if (!MappedState.Cross)
MappedState.Cross = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.B:
if (!MappedState.Circle)
MappedState.Circle = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.X:
if (!MappedState.Square)
MappedState.Square = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.Y:
if (!MappedState.Triangle)
MappedState.Triangle = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.LB:
if (!MappedState.L1)
MappedState.L1 = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.LS:
if (!MappedState.L3)
MappedState.L3 = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.RB:
if (!MappedState.R1)
MappedState.R1 = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.RS:
if (!MappedState.R3)
MappedState.R3 = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.DpadUp:
if (!MappedState.DpadUp)
MappedState.DpadUp = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.DpadDown:
if (!MappedState.DpadDown)
MappedState.DpadDown = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.DpadLeft:
if (!MappedState.DpadLeft)
MappedState.DpadLeft = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.DpadRight:
if (!MappedState.DpadRight)
MappedState.DpadRight = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.Guide:
if (!MappedState.PS)
MappedState.PS = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.Back:
if (!MappedState.Share)
MappedState.Share = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.Start:
if (!MappedState.Options)
MappedState.Options = getBoolMapping(customButton.Key, cState, eState);
break;
case X360Controls.LXNeg:
if (LXChanged)
MappedState.LX = getXYAxisMapping(device, customButton.Key, cState, eState);
break;
case X360Controls.LYNeg:
if (LYChanged)
MappedState.LY = getXYAxisMapping(device, customButton.Key, cState, eState);
break;
case X360Controls.RXNeg:
if (RXChanged)
MappedState.RX = getXYAxisMapping(device, customButton.Key, cState, eState);
break;
case X360Controls.RYNeg:
if (RYChanged)
MappedState.RY = getXYAxisMapping(device, customButton.Key, cState, eState);
break;
case X360Controls.LXPos:
if (LXChanged)
MappedState.LX = getXYAxisMapping(device, customButton.Key, cState, eState, true);
break;
case X360Controls.LYPos:
if (LYChanged)
MappedState.LY = getXYAxisMapping(device, customButton.Key, cState, eState, true);
break;
case X360Controls.RXPos:
if (RXChanged)
MappedState.RX = getXYAxisMapping(device, customButton.Key, cState, eState, true);
break;
case X360Controls.RYPos:
if (RYChanged)
MappedState.RY = getXYAxisMapping(device, customButton.Key, cState, eState, true);
break;
case X360Controls.LT:
if (MappedState.L2 == 0)
MappedState.L2 = getByteMapping(device, customButton.Key, cState, eState);
break;
case X360Controls.RT:
if (MappedState.R2 == 0)
MappedState.R2 = getByteMapping(device, customButton.Key, cState, eState);
break;
case X360Controls.LeftMouse:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.leftCount++;
break;
case X360Controls.RightMouse:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.rightCount++;
break;
case X360Controls.MiddleMouse:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.middleCount++;
break;
case X360Controls.FourthMouse:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.fourthCount++;
break;
case X360Controls.FifthMouse:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.fifthCount++;
break;
case X360Controls.WUP:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.wUpCount++;
break;
case X360Controls.WDOWN:
if (getBoolMapping(customButton.Key, cState, eState))
deviceState.currentClicks.wDownCount++;
break;
case X360Controls.MouseUp:
if (MouseDeltaY == 0)
{
MouseDeltaY = getMouseMapping(device, customButton.Key, cState, eState, 0);
MouseDeltaY = -Math.Abs((MouseDeltaY == -2147483648 ? 0 : MouseDeltaY));
}
break;
case X360Controls.MouseDown:
if (MouseDeltaY == 0)
{
MouseDeltaY = getMouseMapping(device, customButton.Key, cState, eState, 1);
MouseDeltaY = Math.Abs((MouseDeltaY == -2147483648 ? 0 : MouseDeltaY));
}
break;
case X360Controls.MouseLeft:
if (MouseDeltaX == 0)
{
MouseDeltaX = getMouseMapping(device, customButton.Key, cState, eState, 2);
MouseDeltaX = -Math.Abs((MouseDeltaX == -2147483648 ? 0 : MouseDeltaX));
}
break;
case X360Controls.MouseRight:
if (MouseDeltaX == 0)
{
MouseDeltaX = getMouseMapping(device, customButton.Key, cState, eState, 3);
MouseDeltaX = Math.Abs((MouseDeltaX == -2147483648 ? 0 : MouseDeltaX));
}
break;
}
}
}
//if (!LX)
if (Math.Abs(127 - MappedState.LX) <= 5)// || (Math.Abs(127 - cState.LX) > 5))
MappedState.LX = cState.LX;
if (Math.Abs(127 - MappedState.LY) <= 5)
MappedState.LY = cState.LY;
if (Math.Abs(127 - MappedState.RX) <= 5)
MappedState.RX = cState.RX;
if (Math.Abs(127 - MappedState.RY) <= 5)
MappedState.RY = cState.RY;
InputMethods.MoveCursorBy(MouseDeltaX, MouseDeltaY);
}
public static async void MapShiftCustom(int device, DS4State cState, DS4State MappedState, DS4StateExposed eState)
{
cState.CopyTo(MappedState);
SyntheticState deviceState = Mapping.deviceState[device];
foreach (KeyValuePair<DS4Controls, string> customKey in Global.getShiftCustomMacros(device)) //with delays
{
DS4KeyType keyType = Global.getShiftCustomKeyType(device, customKey.Key);
if (getBoolMapping(customKey.Key, cState, eState))
{
resetToDefaultValue(customKey.Key, MappedState);
resetToDefaultValue(customKey.Key, MappedState);
bool LXChanged = (Math.Abs(127 - MappedState.LX) < 5);
bool LYChanged = (Math.Abs(127 - MappedState.LY) < 5);
bool RXChanged = (Math.Abs(127 - MappedState.RX) < 5);
@ -575,9 +988,9 @@ namespace DS4Control
else if (!getBoolMapping(customKey.Key, cState, eState))
macrodone[DS4ControltoInt(customKey.Key)] = false;
}
foreach (KeyValuePair<DS4Controls, ushort> customKey in Global.getCustomKeys(device))
foreach (KeyValuePair<DS4Controls, ushort> customKey in Global.getShiftCustomKeys(device))
{
DS4KeyType keyType = Global.getCustomKeyType(device, customKey.Key);
DS4KeyType keyType = Global.getShiftCustomKeyType(device, customKey.Key);
if (getBoolMapping(customKey.Key, cState, eState))
{
resetToDefaultValue(customKey.Key, MappedState);
@ -595,7 +1008,7 @@ namespace DS4Control
kp.current.toggle = !kp.current.toggle;
pressedonce[customKey.Value] = true;
}
kp.current.toggleCount++;
kp.current.toggleCount++;
}
kp.current.repeatCount++;
}
@ -610,12 +1023,14 @@ namespace DS4Control
int MouseDeltaX = 0;
int MouseDeltaY = 0;
Dictionary<DS4Controls, X360Controls> customButtons = Global.getCustomButtons(device);
Dictionary<DS4Controls, X360Controls> customButtons = Global.getShiftCustomButtons(device);
//foreach (KeyValuePair<DS4Controls, X360Controls> customButton in customButtons)
// resetToDefaultValue(customButton.Key, MappedState); // erase default mappings for things that are remapped
// resetToDefaultValue(customButton.Key, MappedState); // erase default mappings for things that are remapped
foreach (KeyValuePair<DS4Controls, X360Controls> customButton in customButtons)
{
DS4KeyType keyType = Global.getCustomKeyType(device, customButton.Key);
if (customButton.Key == DS4Controls.Square)
Console.WriteLine("Hi");
DS4KeyType keyType = Global.getShiftCustomKeyType(device, customButton.Key);
int keyvalue = 0;
switch (customButton.Value)
{
@ -811,7 +1226,6 @@ namespace DS4Control
break;
}
}
//Console.WriteLine(MappedState.LY + " " + LY);
//if (!LX)
if (Math.Abs(127 - MappedState.LX) <= 5)// || (Math.Abs(127 - cState.LX) > 5))
MappedState.LX = cState.LX;
@ -823,6 +1237,7 @@ namespace DS4Control
MappedState.RY = cState.RY;
InputMethods.MoveCursorBy(MouseDeltaX, MouseDeltaY);
}
public static DateTime[] mousenow = { DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow };
public static double mvalue = 0;
public static int[] mouseaccel = new int[34];
@ -894,13 +1309,13 @@ namespace DS4Control
switch (control)
{
case DS4Controls.GyroXPos: return (byte)(eState.GyroX > SXD * 7500 ?
Math.Pow(root + speed / divide, eState.GyroX / 48) : 0);
Math.Pow(root + speed / divide, eState.GyroX / 62) : 0);
case DS4Controls.GyroXNeg: return (byte)(eState.GyroX < -SXD * 7500 ?
Math.Pow(root + speed / divide, -eState.GyroX / 48) : 0);
case DS4Controls.GyroZPos: return (byte)(eState.GyroZ > SZD * 7500 ?
Math.Pow(root + speed / divide, eState.GyroZ / 48) : 0);
Math.Pow(root + speed / divide, eState.GyroZ / 62) : 0);
case DS4Controls.GyroZNeg: return (byte)(eState.GyroZ < -SZD * 7500 ?
Math.Pow(root + speed / divide, -eState.GyroZ / 48) : 0);
Math.Pow(root + speed / divide, -eState.GyroZ / 62) : 0);
}
bool LXChanged = (Math.Abs(127 - cState.LX) < deadzone);
bool LYChanged = (Math.Abs(127 - cState.LY) < deadzone);
@ -992,10 +1407,10 @@ namespace DS4Control
if (eState != null)
switch (control)
{
case DS4Controls.GyroXPos: return (byte)(eState.GyroX > SXD * 7500 ? Math.Min(255, eState.GyroX / 24) : 0);
case DS4Controls.GyroXNeg: return (byte)(eState.GyroX < -SXD * 7500 ? Math.Min(255, -eState.GyroX / 24) : 0);
case DS4Controls.GyroZPos: return (byte)(eState.GyroZ > SZD * 7500 ? Math.Min(255, eState.GyroZ / 24) : 0);
case DS4Controls.GyroZNeg: return (byte)(eState.GyroZ < -SZD * 7500 ? Math.Min(255, -eState.GyroZ / 24) : 0);
case DS4Controls.GyroXPos: return (byte)(eState.GyroX > SXD * 7500 ? Math.Min(255, eState.GyroX / 31) : 0);
case DS4Controls.GyroXNeg: return (byte)(eState.GyroX < -SXD * 7500 ? Math.Min(255, -eState.GyroX / 31) : 0);
case DS4Controls.GyroZPos: return (byte)(eState.GyroZ > SZD * 7500 ? Math.Min(255, eState.GyroZ / 31) : 0);
case DS4Controls.GyroZNeg: return (byte)(eState.GyroZ < -SZD * 7500 ? Math.Min(255, -eState.GyroZ / 31) : 0);
}
if (cState.TouchButton)
{
@ -1131,19 +1546,18 @@ namespace DS4Control
switch (control)
{
case DS4Controls.GyroXPos: if (eState.GyroX > SXD * 7500)
if (alt) return (byte)Math.Min(255, 127 + eState.GyroX / 48); else return (byte)Math.Max(0, 127 - eState.GyroX / 48);
if (alt) return (byte)Math.Min(255, 127 + eState.GyroX / 62); else return (byte)Math.Max(0, 127 - eState.GyroX / 62);
else return falseVal;
case DS4Controls.GyroXNeg: if (eState.GyroX < -SXD * 7500)
if (alt) return (byte)Math.Min(255, 127 + -eState.GyroX / 48); else return (byte)Math.Max(0, 127 - -eState.GyroX / 48);
if (alt) return (byte)Math.Min(255, 127 + -eState.GyroX / 62); else return (byte)Math.Max(0, 127 - -eState.GyroX / 62);
else return falseVal;
case DS4Controls.GyroZPos: if (eState.GyroZ > SZD * 7500)
if (alt) return (byte)Math.Min(255, 127 + eState.GyroZ / 48); else return (byte)Math.Max(0, 127 - eState.GyroZ / 48);
if (alt) return (byte)Math.Min(255, 127 + eState.GyroZ / 62); else return (byte)Math.Max(0, 127 - eState.GyroZ / 62);
else return falseVal;
case DS4Controls.GyroZNeg: if (eState.GyroZ < -SZD * 7500)
if (alt) return (byte)Math.Min(255, 127 + -eState.GyroZ / 48); else return (byte)Math.Max(0, 127 - -eState.GyroZ / 48);
if (alt) return (byte)Math.Min(255, 127 + -eState.GyroZ / 62); else return (byte)Math.Max(0, 127 - -eState.GyroZ / 62);
else return falseVal;
}
//Console.Write(eState.GyroX.ToString());
}
if (!alt)
{

View File

@ -115,7 +115,7 @@ namespace DS4Control
private DS4State remapped = new DS4State();
private void synthesizeMouseButtons()
{
Mapping.MapCustom(deviceNum, s, remapped, null);
//Mapping.MapCustom(deviceNum, s, remapped, null);
if (leftDown)
Mapping.MapTouchpadButton(deviceNum, DS4Controls.TouchLeft, Mapping.Click.Left, remapped);
if (upperDown)

View File

@ -240,16 +240,6 @@ namespace DS4Control
return m_Config.useExclusiveMode;
}
public static void setVersion(double data)
{
m_Config.version = data;
}
public static double getVersion()
{
return m_Config.version;
}
public static void setLastChecked(DateTime data)
{
m_Config.lastChecked = data;
@ -456,6 +446,14 @@ namespace DS4Control
{
m_Config.mouseAccel[device] = value;
}
public static int getShiftModifier (int device)
{
return m_Config.shiftModifier[device];
}
public static void setShiftModifier(int device, int value)
{
m_Config.shiftModifier[device] = value;
}
public static void setAProfile(int device, string filepath)
{
m_Config.profilePath[device] = appdatapath + @"\Profiles\" + filepath + ".xml";
@ -501,30 +499,68 @@ namespace DS4Control
{
return m_Config.customMapKeyTypes[device];
}
public static X360Controls getShiftCustomButton(int device, DS4Controls controlName)
{
return m_Config.GetShiftCustomButton(device, controlName);
}
public static ushort getShiftCustomKey(int device, DS4Controls controlName)
{
return m_Config.GetShiftCustomKey(device, controlName);
}
public static string getShiftCustomMacro(int device, DS4Controls controlName)
{
return m_Config.GetShiftCustomMacro(device, controlName);
}
public static DS4KeyType getShiftCustomKeyType(int device, DS4Controls controlName)
{
return m_Config.GetShiftCustomKeyType(device, controlName);
}
public static bool getHasShiftCustomKeysorButtons(int device)
{
return m_Config.shiftCustomMapButtons[device].Count > 0
|| m_Config.shiftCustomMapKeys[device].Count > 0;
}
public static Dictionary<DS4Controls, X360Controls> getShiftCustomButtons(int device)
{
return m_Config.shiftCustomMapButtons[device];
}
public static Dictionary<DS4Controls, ushort> getShiftCustomKeys(int device)
{
return m_Config.shiftCustomMapKeys[device];
}
public static Dictionary<DS4Controls, string> getShiftCustomMacros(int device)
{
return m_Config.shiftCustomMapMacros[device];
}
public static Dictionary<DS4Controls, DS4KeyType> getShiftCustomKeyTypes(int device)
{
return m_Config.shiftCustomMapKeyTypes[device];
}
public static bool Load()
{
return m_Config.Load();
}
public static void LoadProfile(int device, System.Windows.Forms.Control[] buttons)
public static void LoadProfile(int device, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons)
{
m_Config.LoadProfile(device, buttons);
m_Config.LoadProfile(device, buttons, shiftbuttons);
}
public static void LoadProfile(int device)
{
m_Config.LoadProfile(device, null);
m_Config.LoadProfile(device, null, null);
}
public static void LoadTempProfile(int device, string name)
{
m_Config.LoadProfile(device, null, appdatapath + @"\Profiles\" + name + ".xml");
m_Config.LoadProfile(device, null, null, appdatapath + @"\Profiles\" + name + ".xml");
}
public static bool Save()
{
return m_Config.Save();
}
public static void SaveProfile(int device, string propath, System.Windows.Forms.Control[] buttons)
public static void SaveProfile(int device, string propath, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons)
{
m_Config.SaveProfile(device, propath, buttons);
m_Config.SaveProfile(device, propath, buttons, shiftbuttons);
}
private static byte applyRatio(byte b1, byte b2, double r)
@ -623,6 +659,7 @@ namespace DS4Control
public int[] scrollSensitivity = { 0, 0, 0, 0, 0 };
public double[] rainbow = { 0, 0, 0, 0, 0 };
public int[] flashAt = { 30, 30, 30, 30, 30 };
public int[] shiftModifier = { 0, 0, 0, 0, 0 };
public bool[] mouseAccel = { true, true, true, true, true };
public Byte[][] m_LowLeds = new Byte[][]
{
@ -656,7 +693,6 @@ namespace DS4Control
public Int32 formWidth = 782;
public Int32 formHeight = 550;
public Boolean startMinimized = false;
public double version;
public DateTime lastChecked;
public int CheckWhen = 1;
public bool notifications = true;
@ -666,6 +702,12 @@ namespace DS4Control
public Dictionary<DS4Controls, UInt16>[] customMapKeys = { null, null, null, null, null };
public Dictionary<DS4Controls, String>[] customMapMacros = { null, null, null, null, null };
public Dictionary<DS4Controls, X360Controls>[] customMapButtons = { null, null, null, null, null };
public Dictionary<DS4Controls, DS4KeyType>[] shiftCustomMapKeyTypes = { null, null, null, null, null };
public Dictionary<DS4Controls, UInt16>[] shiftCustomMapKeys = { null, null, null, null, null };
public Dictionary<DS4Controls, String>[] shiftCustomMapMacros = { null, null, null, null, null };
public Dictionary<DS4Controls, X360Controls>[] shiftCustomMapButtons = { null, null, null, null, null };
public BackingStore()
{
for (int i = 0; i < 5; i++)
@ -674,6 +716,11 @@ namespace DS4Control
customMapKeys[i] = new Dictionary<DS4Controls, UInt16>();
customMapMacros[i] = new Dictionary<DS4Controls, String>();
customMapButtons[i] = new Dictionary<DS4Controls, X360Controls>();
shiftCustomMapKeyTypes[i] = new Dictionary<DS4Controls, DS4KeyType>();
shiftCustomMapKeys[i] = new Dictionary<DS4Controls, UInt16>();
shiftCustomMapMacros[i] = new Dictionary<DS4Controls, String>();
shiftCustomMapButtons[i] = new Dictionary<DS4Controls, X360Controls>();
}
}
@ -706,15 +753,44 @@ namespace DS4Control
catch { return 0; }
}
public X360Controls GetShiftCustomButton(int device, DS4Controls controlName)
{
if (shiftCustomMapButtons[device].ContainsKey(controlName))
return shiftCustomMapButtons[device][controlName];
else return X360Controls.None;
}
public UInt16 GetShiftCustomKey(int device, DS4Controls controlName)
{
if (shiftCustomMapKeys[device].ContainsKey(controlName))
return shiftCustomMapKeys[device][controlName];
else return 0;
}
public string GetShiftCustomMacro(int device, DS4Controls controlName)
{
if (shiftCustomMapMacros[device].ContainsKey(controlName))
return shiftCustomMapMacros[device][controlName];
else return "0";
}
public DS4KeyType GetShiftCustomKeyType(int device, DS4Controls controlName)
{
try
{
if (shiftCustomMapKeyTypes[device].ContainsKey(controlName))
return shiftCustomMapKeyTypes[device][controlName];
else return 0;
}
catch { return 0; }
}
public Boolean SaveProfile(int device, String propath, System.Windows.Forms.Control[] buttons)
public Boolean SaveProfile(int device, String propath, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons)
{
Boolean Saved = true;
String path = Global.appdatapath + @"\Profiles\" + propath + ".xml";
String path = Global.appdatapath + @"\Profiles\" + Path.GetFileNameWithoutExtension(propath) + ".xml";
try
{
XmlNode Node;
XmlNode xmlControls = m_Xdoc.SelectSingleNode("/ScpControl/Control");
XmlNode xmlShiftControls = m_Xdoc.SelectSingleNode("/ScpControl/ShiftControl");
m_Xdoc.RemoveAll();
Node = m_Xdoc.CreateXmlDeclaration("1.0", "utf-8", String.Empty);
@ -759,14 +835,16 @@ namespace DS4Control
XmlNode xmlSZD = m_Xdoc.CreateNode(XmlNodeType.Element, "SZDeadZone", null); xmlSZD.InnerText = SZDeadzone[device].ToString(); Node.AppendChild(xmlSZD);
XmlNode xmlChargingType = m_Xdoc.CreateNode(XmlNodeType.Element, "ChargingType", null); xmlChargingType.InnerText = chargingType[device].ToString(); Node.AppendChild(xmlChargingType);
XmlNode xmlMouseAccel = m_Xdoc.CreateNode(XmlNodeType.Element, "MouseAcceleration", null); xmlMouseAccel.InnerText = mouseAccel[device].ToString(); Node.AppendChild(xmlMouseAccel);
XmlNode xmlShiftMod = m_Xdoc.CreateNode(XmlNodeType.Element, "ShiftModifier", null); xmlShiftMod.InnerText = shiftModifier[device].ToString(); Node.AppendChild(xmlShiftMod);
XmlNode NodeControl = m_Xdoc.CreateNode(XmlNodeType.Element, "Control", null);
XmlNode Key = m_Xdoc.CreateNode(XmlNodeType.Element, "Key", null);
XmlNode Macro = m_Xdoc.CreateNode(XmlNodeType.Element, "Macro", null);
XmlNode KeyType = m_Xdoc.CreateNode(XmlNodeType.Element, "KeyType", null);
XmlNode Button = m_Xdoc.CreateNode(XmlNodeType.Element, "Button", null);
foreach (var button in buttons)
if (buttons != null)
{
foreach (var button in buttons)
{
// Save even if string (for xbox controller buttons)
if (button.Tag != null)
@ -805,15 +883,80 @@ namespace DS4Control
else Button.AppendChild(buttonNode);
}
}
Node.AppendChild(NodeControl);
if (Button.HasChildNodes)
NodeControl.AppendChild(Button);
if (Macro.HasChildNodes)
NodeControl.AppendChild(Macro);
if (Key.HasChildNodes)
NodeControl.AppendChild(Key);
if (KeyType.HasChildNodes)
NodeControl.AppendChild(KeyType);
Node.AppendChild(NodeControl);
if (Button.HasChildNodes)
NodeControl.AppendChild(Button);
if (Macro.HasChildNodes)
NodeControl.AppendChild(Macro);
if (Key.HasChildNodes)
NodeControl.AppendChild(Key);
if (KeyType.HasChildNodes)
NodeControl.AppendChild(KeyType);
}
else if (xmlControls != null)
Node.AppendChild(xmlControls);
if (shiftModifier[device] > 0)
{
XmlNode NodeShiftControl = m_Xdoc.CreateNode(XmlNodeType.Element, "ShiftControl", null);
XmlNode ShiftKey = m_Xdoc.CreateNode(XmlNodeType.Element, "Key", null);
XmlNode ShiftMacro = m_Xdoc.CreateNode(XmlNodeType.Element, "Macro", null);
XmlNode ShiftKeyType = m_Xdoc.CreateNode(XmlNodeType.Element, "KeyType", null);
XmlNode ShiftButton = m_Xdoc.CreateNode(XmlNodeType.Element, "Button", null);
if (shiftbuttons != null)
{
foreach (var button in shiftbuttons)
{
// Save even if string (for xbox controller buttons)
if (button.Tag != null)
{
XmlNode buttonNode;
string keyType = String.Empty;
if (button.Tag is String && (String)button.Tag == "Unbound")
{
keyType += DS4KeyType.Unbound;
}
{
if (button.Font.Strikeout)
keyType += DS4KeyType.HoldMacro;
if (button.Font.Underline)
keyType += DS4KeyType.Macro;
if (button.Font.Italic)
keyType += DS4KeyType.Toggle;
if (button.Font.Bold)
keyType += DS4KeyType.ScanCode;
}
if (keyType != String.Empty)
{
buttonNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
buttonNode.InnerText = keyType;
ShiftKeyType.AppendChild(buttonNode);
}
buttonNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
buttonNode.InnerText = button.Tag.ToString();
if (button.Tag is IEnumerable<int> || button.Tag is Int32[] || button.Tag is UInt16[])
{
buttonNode.InnerText = string.Join("/", (int[])button.Tag);
ShiftMacro.AppendChild(buttonNode);
}
else if (button.Tag is Int32 || button.Tag is UInt16)
ShiftKey.AppendChild(buttonNode);
else ShiftButton.AppendChild(buttonNode);
}
}
Node.AppendChild(NodeShiftControl);
if (ShiftButton.HasChildNodes)
NodeShiftControl.AppendChild(ShiftButton);
if (ShiftMacro.HasChildNodes)
NodeShiftControl.AppendChild(ShiftMacro);
if (ShiftKey.HasChildNodes)
NodeShiftControl.AppendChild(ShiftKey);
if (ShiftKeyType.HasChildNodes)
NodeShiftControl.AppendChild(ShiftKeyType);
}
else if (xmlShiftControls != null)
Node.AppendChild(xmlShiftControls);
}
m_Xdoc.AppendChild(Node);
if (NodeControl.HasChildNodes)
Node.AppendChild(NodeControl);
@ -863,9 +1006,49 @@ namespace DS4Control
case "bnGyroXN": return DS4Controls.GyroXNeg;
case "bnGyroZP": return DS4Controls.GyroZPos;
case "bnGyroZN": return DS4Controls.GyroZNeg;
case "sbnShare": return DS4Controls.Share;
case "sbnL3": return DS4Controls.L3;
case "sbnR3": return DS4Controls.R3;
case "sbnOptions": return DS4Controls.Options;
case "sbnUp": return DS4Controls.DpadUp;
case "sbnRight": return DS4Controls.DpadRight;
case "sbnDown": return DS4Controls.DpadDown;
case "sbnLeft": return DS4Controls.DpadLeft;
case "sbnL1": return DS4Controls.L1;
case "sbnR1": return DS4Controls.R1;
case "sbnTriangle": return DS4Controls.Triangle;
case "sbnCircle": return DS4Controls.Circle;
case "sbnCross": return DS4Controls.Cross;
case "sbnSquare": return DS4Controls.Square;
case "sbnPS": return DS4Controls.PS;
case "sbnLSLeft": return DS4Controls.LXNeg;
case "sbnLSUp": return DS4Controls.LYNeg;
case "sbnRSLeft": return DS4Controls.RXNeg;
case "sbnRSUp": return DS4Controls.RYNeg;
case "sbnLSRight": return DS4Controls.LXPos;
case "sbnLSDown": return DS4Controls.LYPos;
case "sbnRSRight": return DS4Controls.RXPos;
case "sbnRSDown": return DS4Controls.RYPos;
case "sbnL2": return DS4Controls.L2;
case "sbnR2": return DS4Controls.R2;
case "sbnTouchLeft": return DS4Controls.TouchLeft;
case "sbnTouchMulti": return DS4Controls.TouchMulti;
case "sbnTouchUpper": return DS4Controls.TouchUpper;
case "sbnTouchRight": return DS4Controls.TouchRight;
case "sbnGsyroXP": return DS4Controls.GyroXPos;
case "sbnGyroXN": return DS4Controls.GyroXNeg;
case "sbnGyroZP": return DS4Controls.GyroZPos;
case "sbnGyroZN": return DS4Controls.GyroZNeg;
}
return 0;
}
private X360Controls getX360ControlsByName(string key)
{
switch (key)
@ -916,13 +1099,17 @@ namespace DS4Control
return X360Controls.Unbound;
}
public Boolean LoadProfile(int device, System.Windows.Forms.Control[] buttons, string propath = "")
public Boolean LoadProfile(int device, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons, string propath = "")
{
Boolean Loaded = true;
Dictionary<DS4Controls, DS4KeyType> customMapKeyTypes = new Dictionary<DS4Controls, DS4KeyType>();
Dictionary<DS4Controls, UInt16> customMapKeys = new Dictionary<DS4Controls, UInt16>();
Dictionary<DS4Controls, X360Controls> customMapButtons = new Dictionary<DS4Controls, X360Controls>();
Dictionary<DS4Controls, String> customMapMacros = new Dictionary<DS4Controls, String>();
Dictionary<DS4Controls, DS4KeyType> shiftCustomMapKeyTypes = new Dictionary<DS4Controls, DS4KeyType>();
Dictionary<DS4Controls, UInt16> shiftCustomMapKeys = new Dictionary<DS4Controls, UInt16>();
Dictionary<DS4Controls, X360Controls> shiftCustomMapButtons = new Dictionary<DS4Controls, X360Controls>();
Dictionary<DS4Controls, String> shiftCustomMapMacros = new Dictionary<DS4Controls, String>();
Boolean missingSetting = false;
string profilepath;
if (propath == "")
@ -1053,7 +1240,8 @@ namespace DS4Control
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/ScpControl/MouseAcceleration"); Boolean.TryParse(Item.InnerText, out mouseAccel[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/ScpControl/ShiftModifier"); Int32.TryParse(Item.InnerText, out shiftModifier[device]); }
catch { shiftModifier[device] = 0; missingSetting = true; }
DS4KeyType keyType;
UInt16 wvk;
if (buttons == null)
@ -1090,109 +1278,157 @@ namespace DS4Control
if (keyType != DS4KeyType.None)
customMapKeyTypes.Add(getDS4ControlsByName(item.Name), keyType);
}
if (shiftModifier[device] > 0)
{
ParentItem = m_Xdoc.SelectSingleNode("/ScpControl/ShiftControl/Button");
if (ParentItem != null)
foreach (XmlNode item in ParentItem.ChildNodes)
shiftCustomMapButtons.Add(getDS4ControlsByName(item.Name), getX360ControlsByName(item.InnerText));
ParentItem = m_Xdoc.SelectSingleNode("/ScpControl/ShiftControl/Macro");
if (ParentItem != null)
foreach (XmlNode item in ParentItem.ChildNodes)
shiftCustomMapMacros.Add(getDS4ControlsByName(item.Name), item.InnerText);
ParentItem = m_Xdoc.SelectSingleNode("/ScpControl/ShiftControl/Key");
if (ParentItem != null)
foreach (XmlNode item in ParentItem.ChildNodes)
if (UInt16.TryParse(item.InnerText, out wvk))
shiftCustomMapKeys.Add(getDS4ControlsByName(item.Name), wvk);
ParentItem = m_Xdoc.SelectSingleNode("/ScpControl/ShiftControl/KeyType");
if (ParentItem != null)
foreach (XmlNode item in ParentItem.ChildNodes)
if (item != null)
{
keyType = DS4KeyType.None;
if (item.InnerText.Contains(DS4KeyType.ScanCode.ToString()))
keyType |= DS4KeyType.ScanCode;
if (item.InnerText.Contains(DS4KeyType.Toggle.ToString()))
keyType |= DS4KeyType.Toggle;
if (item.InnerText.Contains(DS4KeyType.Macro.ToString()))
keyType |= DS4KeyType.Macro;
if (item.InnerText.Contains(DS4KeyType.HoldMacro.ToString()))
keyType |= DS4KeyType.HoldMacro;
if (item.InnerText.Contains(DS4KeyType.Unbound.ToString()))
keyType |= DS4KeyType.Unbound;
if (keyType != DS4KeyType.None)
shiftCustomMapKeyTypes.Add(getDS4ControlsByName(item.Name), keyType);
}
}
}
else
{
foreach (var button in buttons)
try
{
//bool foundBinding = false;
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/Control/KeyType/{0}", button.Name));
if (Item != null)
{
//foundBinding = true;
keyType = DS4KeyType.None;
if (Item.InnerText.Contains(DS4KeyType.Unbound.ToString()))
{
keyType = DS4KeyType.Unbound;
button.Tag = "Unbound";
button.Text = "Unbound";
}
else
{
bool SC = Item.InnerText.Contains(DS4KeyType.ScanCode.ToString());
bool TG = Item.InnerText.Contains(DS4KeyType.Toggle.ToString());
bool MC = Item.InnerText.Contains(DS4KeyType.Macro.ToString());
bool MR = Item.InnerText.Contains(DS4KeyType.HoldMacro.ToString());
button.Font = new Font(button.Font,
(SC ? FontStyle.Bold : FontStyle.Regular) | (TG ? FontStyle.Italic : FontStyle.Regular) |
(MC ? FontStyle.Underline : FontStyle.Regular) | (MR ? FontStyle.Strikeout : FontStyle.Regular));
if (Item.InnerText.Contains(DS4KeyType.ScanCode.ToString()))
keyType |= DS4KeyType.ScanCode;
if (Item.InnerText.Contains(DS4KeyType.Toggle.ToString()))
keyType |= DS4KeyType.Toggle;
if (Item.InnerText.Contains(DS4KeyType.Macro.ToString()))
keyType |= DS4KeyType.Macro;
}
if (keyType != DS4KeyType.None)
customMapKeyTypes.Add(getDS4ControlsByName(Item.Name), keyType);
}
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/Control/Macro/{0}", button.Name));
if (Item != null)
{
string[] splitter = Item.InnerText.Split('/');
int[] keys = new int[splitter.Length];
for (int i = 0; i < keys.Length; i++)
{
keys[i] = int.Parse(splitter[i]);
if (keys[i] < 255) splitter[i] = ((System.Windows.Forms.Keys)keys[i]).ToString();
else if (keys[i] == 256) splitter[i] = "Left Mouse Button";
else if (keys[i] == 257) splitter[i] = "Right Mouse Button";
else if (keys[i] == 258) splitter[i] = "Middle Mouse Button";
else if (keys[i] == 259) splitter[i] = "4th Mouse Button";
else if (keys[i] == 260) splitter[i] = "5th Mouse Button";
else if (keys[i] > 300) splitter[i] = "Wait " + (keys[i] - 300) + "ms";
}
button.Text = "Macro";
button.Tag = keys;
customMapMacros.Add(getDS4ControlsByName(button.Name), Item.InnerText);
}
else if (m_Xdoc.SelectSingleNode(String.Format("/ScpControl/Control/Key/{0}", button.Name)) != null)
{
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/Control/Key/{0}", button.Name));
if (UInt16.TryParse(Item.InnerText, out wvk))
{
//foundBinding = true;
customMapKeys.Add(getDS4ControlsByName(Item.Name), wvk);
button.Tag = wvk;
button.Text = ((System.Windows.Forms.Keys)wvk).ToString();
}
}
else
{
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/Control/Button/{0}", button.Name));
if (Item != null)
{
//foundBinding = true;
button.Tag = Item.InnerText;
button.Text = Item.InnerText;
customMapButtons.Add(getDS4ControlsByName(button.Name), getX360ControlsByName(Item.InnerText));
}
}
}
catch
{
}
LoadButtons(buttons, "Control", customMapKeyTypes, customMapKeys, customMapButtons, customMapMacros);
LoadButtons(shiftbuttons, "ShiftControl", shiftCustomMapKeyTypes, shiftCustomMapKeys, shiftCustomMapButtons, shiftCustomMapMacros);
}
}
//catch { Loaded = false; }
if (Loaded)
{
this.customMapButtons[device] = customMapButtons;
this.customMapKeys[device] = customMapKeys;
this.customMapKeyTypes[device] = customMapKeyTypes;
this.customMapMacros[device] = customMapMacros;
this.shiftCustomMapButtons[device] = shiftCustomMapButtons;
this.shiftCustomMapKeys[device] = shiftCustomMapKeys;
this.shiftCustomMapKeyTypes[device] = shiftCustomMapKeyTypes;
this.shiftCustomMapMacros[device] = shiftCustomMapMacros;
}
// Only add missing settings if the actual load was graceful
if (missingSetting && Loaded)
SaveProfile(device, profilepath, buttons);
if (missingSetting && Loaded)// && buttons != null)
SaveProfile(device, profilepath, buttons, shiftbuttons);
return Loaded;
}
public void LoadButtons(System.Windows.Forms.Control[] buttons, string control, Dictionary<DS4Controls, DS4KeyType> customMapKeyTypes,
Dictionary<DS4Controls, UInt16> customMapKeys, Dictionary<DS4Controls, X360Controls> customMapButtons, Dictionary<DS4Controls, String> customMapMacros)
{
XmlNode Item;
DS4KeyType keyType;
UInt16 wvk;
foreach (var button in buttons)
try
{
//bool foundBinding = false;
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/" + control + "/KeyType/{0}", button.Name));
if (Item != null)
{
//foundBinding = true;
keyType = DS4KeyType.None;
if (Item.InnerText.Contains(DS4KeyType.Unbound.ToString()))
{
keyType = DS4KeyType.Unbound;
button.Tag = "Unbound";
button.Text = "Unbound";
}
else
{
bool SC = Item.InnerText.Contains(DS4KeyType.ScanCode.ToString());
bool TG = Item.InnerText.Contains(DS4KeyType.Toggle.ToString());
bool MC = Item.InnerText.Contains(DS4KeyType.Macro.ToString());
bool MR = Item.InnerText.Contains(DS4KeyType.HoldMacro.ToString());
button.Font = new Font(button.Font,
(SC ? FontStyle.Bold : FontStyle.Regular) | (TG ? FontStyle.Italic : FontStyle.Regular) |
(MC ? FontStyle.Underline : FontStyle.Regular) | (MR ? FontStyle.Strikeout : FontStyle.Regular));
if (Item.InnerText.Contains(DS4KeyType.ScanCode.ToString()))
keyType |= DS4KeyType.ScanCode;
if (Item.InnerText.Contains(DS4KeyType.Toggle.ToString()))
keyType |= DS4KeyType.Toggle;
if (Item.InnerText.Contains(DS4KeyType.Macro.ToString()))
keyType |= DS4KeyType.Macro;
}
if (keyType != DS4KeyType.None)
customMapKeyTypes.Add(getDS4ControlsByName(Item.Name), keyType);
}
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/" + control + "/Macro/{0}", button.Name));
if (Item != null)
{
string[] splitter = Item.InnerText.Split('/');
int[] keys = new int[splitter.Length];
for (int i = 0; i < keys.Length; i++)
{
keys[i] = int.Parse(splitter[i]);
if (keys[i] < 255) splitter[i] = ((System.Windows.Forms.Keys)keys[i]).ToString();
else if (keys[i] == 256) splitter[i] = "Left Mouse Button";
else if (keys[i] == 257) splitter[i] = "Right Mouse Button";
else if (keys[i] == 258) splitter[i] = "Middle Mouse Button";
else if (keys[i] == 259) splitter[i] = "4th Mouse Button";
else if (keys[i] == 260) splitter[i] = "5th Mouse Button";
else if (keys[i] > 300) splitter[i] = "Wait " + (keys[i] - 300) + "ms";
}
button.Text = "Macro";
button.Tag = keys;
customMapMacros.Add(getDS4ControlsByName(button.Name), Item.InnerText);
}
else if (m_Xdoc.SelectSingleNode(String.Format("/ScpControl/" + control + "/Key/{0}", button.Name)) != null)
{
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/" + control + "/Key/{0}", button.Name));
if (UInt16.TryParse(Item.InnerText, out wvk))
{
//foundBinding = true;
customMapKeys.Add(getDS4ControlsByName(Item.Name), wvk);
button.Tag = wvk;
button.Text = ((System.Windows.Forms.Keys)wvk).ToString();
}
}
else
{
Item = m_Xdoc.SelectSingleNode(String.Format("/ScpControl/" + control + "/Button/{0}", button.Name));
if (Item != null)
{
//foundBinding = true;
button.Tag = Item.InnerText;
button.Text = Item.InnerText;
customMapButtons.Add(getDS4ControlsByName(button.Name), getX360ControlsByName(Item.InnerText));
}
}
}
catch
{
}
}
public bool Load()
{
Boolean Loaded = true;
@ -1223,16 +1459,12 @@ namespace DS4Control
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller4"); profilePath[3] = Item.InnerText; }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/DS4Version"); Double.TryParse(Item.InnerText, out version); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/LastChecked"); DateTime.TryParse(Item.InnerText, out lastChecked); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/CheckWhen"); Int32.TryParse(Item.InnerText, out CheckWhen); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/Notifications"); Boolean.TryParse(Item.InnerText, out notifications); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/Notifications"); Boolean.TryParse(Item.InnerText, out notifications); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/DisconnectBTAtStop"); Boolean.TryParse(Item.InnerText, out disconnectBTAtStop); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/SwipeProfiles"); Boolean.TryParse(Item.InnerText, out swipeProfiles); }
@ -1274,7 +1506,6 @@ namespace DS4Control
XmlNode xmlController3 = m_Xdoc.CreateNode(XmlNodeType.Element, "Controller3", null); xmlController3.InnerText = profilePath[2]; Node.AppendChild(xmlController3);
XmlNode xmlController4 = m_Xdoc.CreateNode(XmlNodeType.Element, "Controller4", null); xmlController4.InnerText = profilePath[3]; Node.AppendChild(xmlController4);
XmlNode xmlVersion = m_Xdoc.CreateNode(XmlNodeType.Element, "DS4Version", null); xmlVersion.InnerText = version.ToString(); Node.AppendChild(xmlVersion);
XmlNode xmlLastChecked = m_Xdoc.CreateNode(XmlNodeType.Element, "LastChecked", null); xmlLastChecked.InnerText = lastChecked.ToString(); Node.AppendChild(xmlLastChecked);
XmlNode xmlCheckWhen = m_Xdoc.CreateNode(XmlNodeType.Element, "CheckWhen", null); xmlCheckWhen.InnerText = CheckWhen.ToString(); Node.AppendChild(xmlCheckWhen);
XmlNode xmlNotifications = m_Xdoc.CreateNode(XmlNodeType.Element, "Notifications", null); xmlNotifications.InnerText = notifications.ToString(); Node.AppendChild(xmlNotifications);

View File

@ -264,18 +264,33 @@ namespace DS4Library
return priorInputReport30 != 0xff;
}
private byte priorInputReport30 = 0xff;
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public void ReleaseKeys(ushort key)
{
keybd_event((byte)key, 0, 2, 0);
}
public double Latency = 0;
bool warn;
private void performDs4Input()
{
System.Timers.Timer readTimeout = new System.Timers.Timer(); // Await 30 seconds for the initial packet, then 3 seconds thereafter.
readTimeout.Elapsed += delegate { HidDevice.CancelIO(); };
List<long> Latency = new List<long>();
long oldtime = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
while (true)
{
Latency.Add(sw.ElapsedMilliseconds - oldtime);
oldtime = sw.ElapsedMilliseconds;
if (Latency.Count > 100)
Latency.RemoveAt(0);
this.Latency = Latency.Average();
if (this.Latency > 10 && !warn && sw.ElapsedMilliseconds > 4000)
{
warn = true;
//System.Diagnostics.Trace.WriteLine(System.DateTime.UtcNow.ToString("o") + "> " + "Controller " + /*this.DeviceNum*/ + 1 + " (" + this.MacAddress + ") is experiencing latency issues. Currently at " + Math.Round(this.Latency, 2).ToString() + "ms of recomended maximum 10ms");
}
else if (this.Latency <= 10 && warn) warn = false;
if (readTimeout.Interval != 3000.0)
{
if (readTimeout.Interval != 30000.0)

View File

@ -220,6 +220,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Resources\size.png" />
<None Include="Resources\xbox_360_controller.png" />
<None Include="Resources\Y.png" />
<None Include="Resources\X.png" />
@ -248,6 +249,7 @@
<None Include="Resources\BACK.png" />
<None Include="Resources\DOWN.png" />
<None Include="Resources\360 fades.png" />
<None Include="Resources\checked.png" />
<Content Include="Resources\DS4.ico" />
<None Include="Resources\mouse.png" />
<None Include="Resources\rainbow.png" />
@ -277,6 +279,7 @@
<None Include="Resources\RSR.png" />
<None Include="Resources\RSU.png" />
<None Include="Resources\RT.png" />
<None Include="Resources\Red Circle.png" />
<Content Include="Resources\Scp_All.ico" />
</ItemGroup>
<ItemGroup>

View File

@ -68,6 +68,8 @@
this.label31 = new System.Windows.Forms.Label();
this.lLChangelog = new System.Windows.Forms.LinkLabel();
this.linkDonate = new System.Windows.Forms.LinkLabel();
this.label32 = new System.Windows.Forms.Label();
this.label33 = new System.Windows.Forms.Label();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
@ -75,7 +77,7 @@
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.button1.Location = new System.Drawing.Point(215, 386);
this.button1.Location = new System.Drawing.Point(215, 407);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 8;
@ -87,7 +89,7 @@
//
this.linkElectro.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.linkElectro.AutoSize = true;
this.linkElectro.Location = new System.Drawing.Point(272, 361);
this.linkElectro.Location = new System.Drawing.Point(272, 382);
this.linkElectro.Name = "linkElectro";
this.linkElectro.Size = new System.Drawing.Size(149, 13);
this.linkElectro.TabIndex = 18;
@ -99,7 +101,7 @@
//
this.linkJays2Kings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.linkJays2Kings.AutoSize = true;
this.linkJays2Kings.Location = new System.Drawing.Point(17, 361);
this.linkJays2Kings.Location = new System.Drawing.Point(17, 382);
this.linkJays2Kings.Name = "linkJays2Kings";
this.linkJays2Kings.Size = new System.Drawing.Size(60, 13);
this.linkJays2Kings.TabIndex = 18;
@ -111,7 +113,7 @@
//
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(203, 339);
this.label2.Location = new System.Drawing.Point(203, 360);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(109, 13);
this.label2.TabIndex = 13;
@ -131,7 +133,7 @@
//
this.linkInhexSTER.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.linkInhexSTER.AutoSize = true;
this.linkInhexSTER.Location = new System.Drawing.Point(95, 361);
this.linkInhexSTER.Location = new System.Drawing.Point(95, 382);
this.linkInhexSTER.Name = "linkInhexSTER";
this.linkInhexSTER.Size = new System.Drawing.Size(159, 13);
this.linkInhexSTER.TabIndex = 18;
@ -143,7 +145,7 @@
//
this.linkJhebbel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.linkJhebbel.AutoSize = true;
this.linkJhebbel.Location = new System.Drawing.Point(429, 361);
this.linkJhebbel.Location = new System.Drawing.Point(429, 382);
this.linkJhebbel.Name = "linkJhebbel";
this.linkJhebbel.Size = new System.Drawing.Size(87, 13);
this.linkJhebbel.TabIndex = 18;
@ -154,7 +156,7 @@
// label23
//
this.label23.AutoSize = true;
this.label23.Location = new System.Drawing.Point(6, 333);
this.label23.Location = new System.Drawing.Point(6, 352);
this.label23.Name = "label23";
this.label23.Size = new System.Drawing.Size(58, 13);
this.label23.TabIndex = 3;
@ -164,7 +166,7 @@
//
this.label26.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label26.AutoSize = true;
this.label26.Location = new System.Drawing.Point(3, 282);
this.label26.Location = new System.Drawing.Point(3, 301);
this.label26.Name = "label26";
this.label26.Size = new System.Drawing.Size(60, 13);
this.label26.TabIndex = 14;
@ -174,7 +176,7 @@
//
this.label27.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label27.AutoSize = true;
this.label27.Location = new System.Drawing.Point(193, 244);
this.label27.Location = new System.Drawing.Point(193, 263);
this.label27.Name = "label27";
this.label27.Size = new System.Drawing.Size(296, 13);
this.label27.TabIndex = 14;
@ -184,7 +186,7 @@
//
this.label25.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label25.AutoSize = true;
this.label25.Location = new System.Drawing.Point(3, 263);
this.label25.Location = new System.Drawing.Point(3, 282);
this.label25.Name = "label25";
this.label25.Size = new System.Drawing.Size(37, 13);
this.label25.TabIndex = 14;
@ -194,7 +196,7 @@
//
this.label29.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label29.AutoSize = true;
this.label29.Location = new System.Drawing.Point(193, 282);
this.label29.Location = new System.Drawing.Point(193, 301);
this.label29.Name = "label29";
this.label29.Size = new System.Drawing.Size(313, 13);
this.label29.TabIndex = 14;
@ -204,7 +206,7 @@
//
this.label28.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label28.AutoSize = true;
this.label28.Location = new System.Drawing.Point(193, 263);
this.label28.Location = new System.Drawing.Point(193, 282);
this.label28.Name = "label28";
this.label28.Size = new System.Drawing.Size(160, 13);
this.label28.TabIndex = 14;
@ -277,7 +279,7 @@
//
this.label13.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(3, 225);
this.label13.Location = new System.Drawing.Point(3, 244);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(184, 13);
this.label13.TabIndex = 14;
@ -405,7 +407,7 @@
//
this.label24.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label24.AutoSize = true;
this.label24.Location = new System.Drawing.Point(3, 244);
this.label24.Location = new System.Drawing.Point(3, 263);
this.label24.Name = "label24";
this.label24.Size = new System.Drawing.Size(40, 13);
this.label24.TabIndex = 14;
@ -416,7 +418,6 @@
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.label24, 0, 12);
this.tableLayoutPanel1.Controls.Add(this.label20, 0, 10);
this.tableLayoutPanel1.Controls.Add(this.label22, 1, 10);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 6);
@ -430,7 +431,6 @@
this.tableLayoutPanel1.Controls.Add(this.label9, 1, 8);
this.tableLayoutPanel1.Controls.Add(this.label12, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 9);
this.tableLayoutPanel1.Controls.Add(this.label13, 0, 11);
this.tableLayoutPanel1.Controls.Add(this.label21, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.label7, 1, 9);
this.tableLayoutPanel1.Controls.Add(this.label4, 0, 7);
@ -438,32 +438,37 @@
this.tableLayoutPanel1.Controls.Add(this.label16, 1, 4);
this.tableLayoutPanel1.Controls.Add(this.label8, 1, 7);
this.tableLayoutPanel1.Controls.Add(this.label14, 1, 5);
this.tableLayoutPanel1.Controls.Add(this.label28, 1, 13);
this.tableLayoutPanel1.Controls.Add(this.label25, 0, 13);
this.tableLayoutPanel1.Controls.Add(this.label26, 0, 14);
this.tableLayoutPanel1.Controls.Add(this.label30, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.label31, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.label27, 1, 12);
this.tableLayoutPanel1.Controls.Add(this.label29, 1, 14);
this.tableLayoutPanel1.Controls.Add(this.label32, 0, 11);
this.tableLayoutPanel1.Controls.Add(this.label13, 0, 12);
this.tableLayoutPanel1.Controls.Add(this.label24, 0, 13);
this.tableLayoutPanel1.Controls.Add(this.label26, 0, 15);
this.tableLayoutPanel1.Controls.Add(this.label25, 0, 14);
this.tableLayoutPanel1.Controls.Add(this.label29, 1, 15);
this.tableLayoutPanel1.Controls.Add(this.label28, 1, 14);
this.tableLayoutPanel1.Controls.Add(this.label27, 1, 13);
this.tableLayoutPanel1.Controls.Add(this.label33, 1, 11);
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 31);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 15;
this.tableLayoutPanel1.RowCount = 16;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.142857F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(513, 299);
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.666667F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(513, 318);
this.tableLayoutPanel1.TabIndex = 19;
//
// label30
@ -509,13 +514,33 @@
this.linkDonate.Text = "Donate via Paypal";
this.linkDonate.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDonate_LinkClicked);
//
// label32
//
this.label32.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label32.AutoSize = true;
this.label32.Location = new System.Drawing.Point(3, 225);
this.label32.Name = "label32";
this.label32.Size = new System.Drawing.Size(66, 13);
this.label32.TabIndex = 14;
this.label32.Text = "Shift Modifer";
//
// label33
//
this.label33.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label33.AutoSize = true;
this.label33.Location = new System.Drawing.Point(193, 225);
this.label33.Name = "label33";
this.label33.Size = new System.Drawing.Size(216, 13);
this.label33.TabIndex = 14;
this.label33.Text = "Hold an action to use another set of controls";
//
// Hotkeys
//
this.AcceptButton = this.button1;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.button1;
this.ClientSize = new System.Drawing.Size(520, 413);
this.ClientSize = new System.Drawing.Size(520, 434);
this.Controls.Add(this.linkDonate);
this.Controls.Add(this.lLChangelog);
this.Controls.Add(this.tableLayoutPanel1);
@ -581,5 +606,7 @@
private System.Windows.Forms.Label label31;
private System.Windows.Forms.LinkLabel lLChangelog;
private System.Windows.Forms.LinkLabel linkDonate;
private System.Windows.Forms.Label label32;
private System.Windows.Forms.Label label33;
}
}

View File

@ -9,17 +9,20 @@ using System.Windows.Forms;
using DS4Control;
using System.Net;
using System.IO;
using System.Reflection;
using System.Diagnostics;
namespace ScpServer
{
public partial class Hotkeys : Form
{
ScpForm form;
public Hotkeys(ScpForm main)
public Hotkeys()
{
form = main;
InitializeComponent();
lbAbout.Text += Global.getVersion().ToString() + ")";
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
string version = fvi.FileVersion;
lbAbout.Text += version + ")";
//lbAbout.Text += Global.getVersion().ToString() + ")";
}
private void button1_Click(object sender, EventArgs e)

View File

@ -1256,7 +1256,7 @@
this.btnSEMICOLON.Size = new System.Drawing.Size(24, 24);
this.btnSEMICOLON.TabIndex = 200;
this.btnSEMICOLON.TabStop = false;
this.btnSEMICOLON.Tag = "59";
this.btnSEMICOLON.Tag = "186";
this.btnSEMICOLON.Text = ";";
this.btnSEMICOLON.UseVisualStyleBackColor = true;
//
@ -2195,7 +2195,6 @@
this.Text = "Keybaord";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.finalMeasure);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Key_Down_Action);
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Key_Up_Action);
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);

View File

@ -29,7 +29,14 @@ namespace ScpServer
cbScanCode.Checked = button.Font.Bold;
//cBMacro.Checked = button.Font.Underline;
lBMacroOn.Visible = button.Font.Underline;
Text = "Select an action for " + button.Name.Substring(2);
if (button.Name.StartsWith("bn"))
Text = "Select an action for " + button.Name.Substring(2);
else if (button.Name.StartsWith("sbn"))
{
Text = "Select an action for " + button.Name.Substring(3);
btnUNBOUND2.Text = "Fall Back";
btnUNBOUND2.Tag = null;
}
foreach (System.Windows.Forms.Control control in this.Controls)
if (control is Button)
((Button)control).Click += anybtn_Click;
@ -64,13 +71,15 @@ namespace ScpServer
else
keyname = "How did you get here?";
}
else if (((Button)sender).Tag == null)
keyname = "Fall back";
else if (((Button)sender).Tag.ToString().Contains("X360"))
keyname = ((Button)sender).Tag.ToString().Substring(4);
else
keyname = ((Button)sender).Text;
object keytag;
if (((Button)sender).Tag.ToString().Contains("X360"))
if (((Button)sender).Tag != null && ((Button)sender).Tag.ToString().Contains("X360"))
keytag = ((Button)sender).Tag.ToString().Substring(4);
else
keytag = ((Button)sender).Tag;
@ -95,13 +104,6 @@ namespace ScpServer
this.Close();
}
private void Key_Up_Action(object sender, KeyEventArgs e)
{
lBMacroOn.Visible = false;
ops.ChangeButtonText(e.KeyCode.ToString(), e.KeyValue);
this.Close();
}
private void Key_Press_Action(object sender, KeyEventArgs e)
{
lBMacroOn.Visible = false;

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,7 @@ namespace ScpServer
public string filename;
Byte[] oldLedColor, oldLowLedColor, oldChargingColor;
public Timer inputtimer = new Timer(), sixaxisTimer = new Timer();
public List<Button> buttons = new List<Button>();
public List<Button> buttons = new List<Button>(), subbuttons = new List<Button>();
private Button lastSelected;
private int alphacolor;
private Color reg, full;
@ -33,12 +33,39 @@ namespace ScpServer
root = rt;
g = CreateGraphics();
greyscale = GreyscaleImage((Bitmap)pBRainbow.Image);
if (deviceNum < 4)
foreach (System.Windows.Forms.Control control in MainPanel.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("btn"))
buttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in SticksPanel.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("btn"))
buttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in fLPTiltControls.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("btn"))
buttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in ShiftMainPanel.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("sbtn"))
subbuttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in ShiftSticksPanel.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("sbtn"))
subbuttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in sfLPTiltControls.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("sbtn"))
subbuttons.Add((Button)control);
if (device < 4)
nUDSixaxis.Value = deviceNum + 1;
if (filename != "")
{
Global.setAProfile(4, name);
Global.LoadProfile(deviceNum);
if (device == 4)
{
Global.setAProfile(4, name);
}
Global.LoadProfile(device, buttons.ToArray(), subbuttons.ToArray());
DS4Color color = Global.loadColor(device);
redBar.Value = color.red;
greenBar.Value = color.green;
@ -105,25 +132,15 @@ namespace ScpServer
nUDRS.Value = Math.Round((decimal)(Global.getRSDeadzone(device) / 127d ), 3);
nUDSX.Value = (decimal)Global.getSXDeadzone(device);
nUDSZ.Value = (decimal)Global.getSZDeadzone(device);
cBShiftControl.SelectedIndex = Global.getShiftModifier(device);
}
else
Set();
foreach (System.Windows.Forms.Control control in MainPanel.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("btn"))
buttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in SticksPanel.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("btn"))
buttons.Add((Button)control);
foreach (System.Windows.Forms.Control control in fLPTiltControls.Controls)
if (control is Button)
if (!((Button)control).Name.Contains("btn"))
buttons.Add((Button)control);
foreach (Button b in buttons)
b.MouseHover += button_MouseHover;
if (filename != "" && filename != "New Profile")
Global.LoadProfile(device, buttons.ToArray());
foreach (Button b in subbuttons)
b.MouseHover += button_MouseHover;
tp.SetToolTip(cBlowerRCOn, "Best used with right side as a mouse function");
tp.SetToolTip(cBDoubleTap, "Tap and hold to drag, slight delay with single taps");
tp.SetToolTip(lBControlTip, "You can also use your controller to change controls");
@ -131,39 +148,87 @@ namespace ScpServer
tp.SetToolTip(pBRainbow, "Always on Rainbow Mode");
tp.SetToolTip(cBFlushHIDQueue, "Flush HID Queue after each reading");
tp.SetToolTip(cBLightbyBattery, "Also dim light by idle timeout if on");
tp.SetToolTip(lB6Gryo, "Click to see readout of Sixaxis Gyro");
tp.SetToolTip(lBGryo, "Click to see readout of Sixaxis Gyro");
tp.SetToolTip(tBsixaxisGyroX, "GyroX, Left and Right Tilt");
tp.SetToolTip(tBsixaxisGyroY, "GyroY, Forward and Back Tilt");
tp.SetToolTip(tBsixaxisGyroZ, "GyroZ, Up and Down Tilt");
tp.SetToolTip(tBsixaxisAccelX, "AccelX");
tp.SetToolTip(tBsixaxisAccelY, "AccelY");
tp.SetToolTip(tBsixaxisAccelZ, "AccelZ");
tp.SetToolTip(lBEmpty, "Click to copy the full color");
tp.SetToolTip(lBSATip, "Click for advanced Sixaxis reading");
advColorDialog.OnUpdateColor += advColorDialog_OnUpdateColor;
btnLeftStick.Enter += btnSticks_Enter;
btnRightStick.Enter += btnSticks_Enter;
sbtnLeftStick.Enter += sbtnSticks_Enter;
sbtnRightStick.Enter += sbtnSticks_Enter;
UpdateLists();
inputtimer.Start();
inputtimer.Tick += InputDS4;
sixaxisTimer.Tick += sixaxisTimer_Tick;
sixaxisTimer.Interval = 1000 / 60;
}
void sixaxisTimer_Tick(object sender, EventArgs e)
{
{
// MEMS gyro data is all calibrated to roughly -1G..1G for values -0x2000..0x1fff
// Enough additional acceleration and we are no longer mostly measuring Earth's gravity...
// We should try to indicate setpoints of the calibration when exposing this measurement....
SetDynamicTrackBarValue(tBsixaxisGyroX, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroX + tBsixaxisGyroX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroY, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroY + tBsixaxisGyroY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroZ, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroZ + tBsixaxisGyroZ.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelX, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].AccelX + tBsixaxisAccelX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelY, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].AccelY + tBsixaxisAccelY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelZ, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].AccelZ + tBsixaxisAccelZ.Value * 2) / 3);
if (scpDevice.DS4Controllers[(int)nUDSixaxis.Value - 1] == null)
{
tPController.Enabled = false;
lBInputDelay.Text = "Input Delay: N/Ams";
pBDelayTracker.BackColor = Color.Transparent;
}
else
{
tPController.Enabled = true;
SetDynamicTrackBarValue(tBsixaxisGyroX, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroX + tBsixaxisGyroX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroY, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroY + tBsixaxisGyroY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroZ, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroZ + tBsixaxisGyroZ.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelX, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].AccelX + tBsixaxisAccelX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelY, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].AccelY + tBsixaxisAccelY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelZ, (scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].AccelZ + tBsixaxisAccelZ.Value * 2) / 3);
int x = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).LX;
int y = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).LY;
btnLSTrack.Location = new Point((int)(x / 2.09 + lBLSTrack.Location.X), (int)(y / 2.09 + lBLSTrack.Location.Y));
x = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).RX;
y = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).RY;
btnRSTrack.Location = new Point((int)(x / 2.09 + lBRSTrack.Location.X), (int)(y / 2.09 + lBRSTrack.Location.Y));
x = -scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroX / 62 + 127;
y = scpDevice.ExposedState[(int)nUDSixaxis.Value - 1].GyroZ / 62 + 127;
btnSATrack.Location = new Point((int)(x / 2.09 + lBSATrack.Location.X), (int)(y / 2.09 + lBSATrack.Location.Y));
tBL2.Value = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).L2;
lBL2Track.Location = new Point(tBL2.Location.X - 15, (int)(24 - tBL2.Value / 10.625) + 10);
if (tBL2.Value == 255)
lBL2Track.ForeColor = Color.Green;
else if (tBL2.Value < (double)nUDL2.Value * 255)
lBL2Track.ForeColor = Color.Red;
else
lBL2Track.ForeColor = Color.Black;
tBR2.Value = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).R2;
lBR2Track.Location = new Point(tBR2.Location.X + 20, (int)(24 - tBR2.Value / 10.625) + 10);
if (tBR2.Value == 255)
lBR2Track.ForeColor = Color.Green;
else if (tBR2.Value < (double)nUDR2.Value * 255)
lBR2Track.ForeColor = Color.Red;
else
lBR2Track.ForeColor = Color.Black;
double latency = scpDevice.DS4Controllers[(int)nUDSixaxis.Value - 1].Latency;
lBInputDelay.Text = "Input Delay: " + latency + "ms";
if (latency > 10)
pBDelayTracker.BackColor = Color.Red;
else if (latency > 5)
pBDelayTracker.BackColor = Color.Yellow;
else
pBDelayTracker.BackColor = Color.Green;
}
}
private void InputDS4(object sender, EventArgs e)
{
#region DS4Input
if (Form.ActiveForm == root && cBControllerInput.Checked)
if (Form.ActiveForm == root && cBControllerInput.Checked && tabControls.SelectedIndex != 2)
switch (scpDevice.GetInputkeys((int)nUDSixaxis.Value - 1))
{
case ("Cross"): Show_ControlsBn(bnCross, e); break;
@ -241,6 +306,39 @@ namespace ScpServer
case ("bnGyroXP"): lBControls.SelectedIndex = 31; break;
case ("bnGyroXN"): lBControls.SelectedIndex = 32; break;
case ("sbnCross"): lBShiftControls.SelectedIndex = 0; break;
case ("sbnCircle"): lBShiftControls.SelectedIndex = 1; break;
case ("sbnSquare"): lBShiftControls.SelectedIndex = 2; break;
case ("sbnTriangle"): lBShiftControls.SelectedIndex = 3; break;
case ("sbnOptions"): lBShiftControls.SelectedIndex = 4; break;
case ("sbnShare"): lBShiftControls.SelectedIndex = 5; break;
case ("sbnUp"): lBShiftControls.SelectedIndex = 6; break;
case ("sbnDown"): lBShiftControls.SelectedIndex = 7; break;
case ("sbnLeft"): lBShiftControls.SelectedIndex = 8; break;
case ("sbnRight"): lBShiftControls.SelectedIndex = 9; break;
case ("sbnPS"): lBShiftControls.SelectedIndex = 10; break;
case ("sbnL1"): lBShiftControls.SelectedIndex = 11; break;
case ("sbnR1"): lBShiftControls.SelectedIndex = 12; break;
case ("sbnL2"): lBShiftControls.SelectedIndex = 13; break;
case ("sbnR2"): lBShiftControls.SelectedIndex = 14; break;
case ("sbnL3"): lBShiftControls.SelectedIndex = 15; break;
case ("sbnR3"): lBShiftControls.SelectedIndex = 16; break;
case ("sbnTouchLeft"): lBShiftControls.SelectedIndex = 17; break;
case ("sbnTouchRight"): lBShiftControls.SelectedIndex = 18; break;
case ("sbnTouchMulti"): lBShiftControls.SelectedIndex = 19; break;
case ("sbnTouchUpper"): lBShiftControls.SelectedIndex = 20; break;
case ("sbnLSUp"): lBShiftControls.SelectedIndex = 21; break;
case ("sbnLSDown"): lBShiftControls.SelectedIndex = 22; break;
case ("sbnLSLeft"): lBShiftControls.SelectedIndex = 23; break;
case ("sbnLSRight"): lBShiftControls.SelectedIndex = 24; break;
case ("sbnRSUp"): lBShiftControls.SelectedIndex = 25; break;
case ("sbnRSDown"): lBShiftControls.SelectedIndex = 26; break;
case ("sbnRSLeft"): lBShiftControls.SelectedIndex = 27; break;
case ("sbnRSRight"): lBShiftControls.SelectedIndex = 28; break;
case ("sbnGyroZN"): lBShiftControls.SelectedIndex = 29; break;
case ("sbnGyroZP"): lBShiftControls.SelectedIndex = 30; break;
case ("sbnGyroXP"): lBShiftControls.SelectedIndex = 31; break;
case ("sbnGyroXN"): lBShiftControls.SelectedIndex = 32; break;
#endregion
}
}
@ -279,6 +377,7 @@ namespace ScpServer
Global.setSXDeadzone(device, (double)nUDSX.Value);
Global.setSZDeadzone(device, (double)nUDSZ.Value);
Global.setMouseAccel(device, cBMouseAccel.Checked);
Global.setShiftModifier(device, cBShiftControl.SelectedIndex);
if (nUDRainbow.Value == 0) pBRainbow.Image = greyscale;
else pBRainbow.Image = colored;
}
@ -297,7 +396,9 @@ namespace ScpServer
{
lastSelected.Text = controlname;
int value;
if (Int32.TryParse(tag.ToString(), out value))
if (tag == null)
lastSelected.Tag = tag;
else if (Int32.TryParse(tag.ToString(), out value))
lastSelected.Tag = value;
else if (tag is Int32[])
lastSelected.Tag = tag;
@ -332,6 +433,18 @@ namespace ScpServer
SticksPanel.Visible = false;
MainPanel.Visible = true;
}
private void sbtnSticks_Enter(object sender, EventArgs e)
{
ShiftSticksPanel.Visible = true;
ShiftMainPanel.Visible = false;
}
private void sbtnFullView_Click(object sender, EventArgs e)
{
ShiftSticksPanel.Visible = false;
ShiftMainPanel.Visible = true;
}
private void btnLightbar_Click(object sender, EventArgs e)
{
advColorDialog.Color = Color.FromArgb(redBar.Value, greenBar.Value, blueBar.Value);
@ -525,19 +638,8 @@ namespace ScpServer
private void rumbleBoostBar_ValueChanged(object sender, EventArgs e)
{
Global.saveRumbleBoost(device, (byte)nUDRumbleBoost.Value);
scpDevice.setRumble((byte)nUDHeavyRumble.Value, (byte)nUDLightRumble.Value, device);
}
private void numUDLightRumble_ValueChanged(object sender, EventArgs e)
{
if (btnRumbleTest.Text == "Stop")
scpDevice.setRumble((byte)nUDHeavyRumble.Value, (byte)nUDLightRumble.Value, device);
}
private void numUDHeavyRumble_ValueChanged(object sender, EventArgs e)
{
if (btnRumbleTest.Text == "Stop")
scpDevice.setRumble((byte)nUDHeavyRumble.Value, (byte)nUDLightRumble.Value, device);
scpDevice.setRumble(255, 255, device);
}
private void btnRumbleTest_Click(object sender, EventArgs e)
@ -609,8 +711,6 @@ namespace ScpServer
private void Options_Closed(object sender, FormClosedEventArgs e)
{
if (sixaxisTimer.Enabled)
sixaxisTimer.Stop();
for (int i = 0; i < 4; i++)
Global.LoadProfile(i); //Refreshes all profiles in case other controllers are using the same profile
inputtimer.Stop();
@ -689,6 +789,47 @@ namespace ScpServer
bnGyroZP.Text = "Tilt Down";
bnGyroXP.Text = "Tilt Left";
bnGyroXN.Text = "Tilt Right";
foreach (Button b in subbuttons)
if (b.Tag == null)
b.Text = "Fall Back to " + buttons[subbuttons.IndexOf(b)].Text;
lBShiftControls.Items[0] = "Cross : " + sbnCross.Text;
lBShiftControls.Items[1] = "Circle : " + sbnCircle.Text;
lBShiftControls.Items[2] = "Sqaure : " + sbnSquare.Text;
lBShiftControls.Items[3] = "Triangle : " + sbnTriangle.Text;
lBShiftControls.Items[4] = "Options : " + sbnOptions.Text;
lBShiftControls.Items[5] = "Share : " + sbnShare.Text;
lBShiftControls.Items[6] = "Up : " + sbnUp.Text;
lBShiftControls.Items[7] = "Down : " + sbnDown.Text;
lBShiftControls.Items[8] = "Left : " + sbnLeft.Text;
lBShiftControls.Items[9] = "Right : " + sbnRight.Text;
lBShiftControls.Items[10] = "PS : " + sbnPS.Text;
lBShiftControls.Items[11] = "L1 : " + sbnL1.Text;
lBShiftControls.Items[12] = "R1 : " + sbnR1.Text;
lBShiftControls.Items[13] = "L2 : " + sbnL2.Text;
lBShiftControls.Items[14] = "R2 : " + sbnR2.Text;
lBShiftControls.Items[15] = "L3 : " + sbnL3.Text;
lBShiftControls.Items[16] = "R3 : " + sbnR3.Text;
lBShiftControls.Items[17] = "Left Touch : " + sbnTouchLeft.Text;
lBShiftControls.Items[18] = "Right Touch : " + sbnTouchRight.Text;
lBShiftControls.Items[19] = "Multitouch : " + sbnTouchMulti.Text;
lBShiftControls.Items[20] = "Upper Touch : " + sbnTouchUpper.Text;
lBShiftControls.Items[21] = "LS Up : " + sbnLSUp.Text;
lBShiftControls.Items[22] = "LS Down : " + sbnLSDown.Text;
lBShiftControls.Items[23] = "LS Left : " + sbnLSLeft.Text;
lBShiftControls.Items[24] = "LS Right : " + sbnLSRight.Text;
lBShiftControls.Items[25] = "RS Up : " + sbnRSUp.Text;
lBShiftControls.Items[26] = "RS Down : " + sbnRSDown.Text;
lBShiftControls.Items[27] = "RS Left : " + sbnRSLeft.Text;
lBShiftControls.Items[28] = "RS Right : " + sbnRSRight.Text;
lBShiftControls.Items[29] = "Tilt Up : " + UpdateGyroList(sbnGyroZN);
lBShiftControls.Items[30] = "Tilt Down : " + UpdateGyroList(sbnGyroZP);
lBShiftControls.Items[31] = "Tilt Left : " + UpdateGyroList(sbnGyroXP);
lBShiftControls.Items[32] = "Tilt Right : " + UpdateGyroList(sbnGyroXN);
sbnGyroZN.Text = "Tilt Up";
sbnGyroZP.Text = "Tilt Down";
sbnGyroXP.Text = "Tilt Left";
sbnGyroXN.Text = "Tilt Right";
}
private string UpdateGyroList(Button button)
@ -697,10 +838,14 @@ namespace ScpServer
return "Unbound";
else if (button.Tag is IEnumerable<int> || button.Tag is Int32[] || button.Tag is UInt16[])
return "Macro";
else if (button.Tag is Int32 || button.Tag is UInt16)
return ((Keys)(ushort)button.Tag).ToString();
else if (button.Tag is Int32)
return ((Keys)(Int32)button.Tag).ToString();
else if (button.Tag is UInt16)
return ((Keys)(UInt16)button.Tag).ToString();
else if (button.Tag is string)
return button.Tag.ToString();
else if (button.Name.StartsWith("s") && buttons[subbuttons.IndexOf(button)].Tag != null && button.Tag == null)
return "Fall Back to " + UpdateGyroList(buttons[subbuttons.IndexOf(button)]);
else
return string.Empty;
}
@ -744,15 +889,61 @@ namespace ScpServer
if (lBControls.SelectedIndex == 32) Show_ControlsBn(bnGyroXN, e);
}
private void Show_ShiftControlsList(object sender, EventArgs e)
{
if (lBShiftControls.SelectedIndex == 0) Show_ControlsBn(sbnCross, e);
if (lBShiftControls.SelectedIndex == 1) Show_ControlsBn(sbnCircle, e);
if (lBShiftControls.SelectedIndex == 2) Show_ControlsBn(sbnSquare, e);
if (lBShiftControls.SelectedIndex == 3) Show_ControlsBn(sbnTriangle, e);
if (lBShiftControls.SelectedIndex == 4) Show_ControlsBn(sbnOptions, e);
if (lBShiftControls.SelectedIndex == 5) Show_ControlsBn(sbnShare, e);
if (lBShiftControls.SelectedIndex == 6) Show_ControlsBn(sbnUp, e);
if (lBShiftControls.SelectedIndex == 7) Show_ControlsBn(sbnDown, e);
if (lBShiftControls.SelectedIndex == 8) Show_ControlsBn(sbnLeft, e);
if (lBShiftControls.SelectedIndex == 9) Show_ControlsBn(sbnRight, e);
if (lBShiftControls.SelectedIndex == 10) Show_ControlsBn(sbnPS, e);
if (lBShiftControls.SelectedIndex == 11) Show_ControlsBn(sbnL1, e);
if (lBShiftControls.SelectedIndex == 12) Show_ControlsBn(sbnR1, e);
if (lBShiftControls.SelectedIndex == 13) Show_ControlsBn(sbnL2, e);
if (lBShiftControls.SelectedIndex == 14) Show_ControlsBn(sbnR2, e);
if (lBShiftControls.SelectedIndex == 15) Show_ControlsBn(sbnL3, e);
if (lBShiftControls.SelectedIndex == 16) Show_ControlsBn(sbnR3, e);
if (lBShiftControls.SelectedIndex == 17) Show_ControlsBn(sbnTouchLeft, e);
if (lBShiftControls.SelectedIndex == 18) Show_ControlsBn(sbnTouchRight, e);
if (lBShiftControls.SelectedIndex == 19) Show_ControlsBn(sbnTouchMulti, e);
if (lBShiftControls.SelectedIndex == 20) Show_ControlsBn(sbnTouchUpper, e);
if (lBShiftControls.SelectedIndex == 21) Show_ControlsBn(sbnLSUp, e);
if (lBShiftControls.SelectedIndex == 22) Show_ControlsBn(sbnLSDown, e);
if (lBShiftControls.SelectedIndex == 23) Show_ControlsBn(sbnLSLeft, e);
if (lBShiftControls.SelectedIndex == 24) Show_ControlsBn(sbnLSRight, e);
if (lBShiftControls.SelectedIndex == 25) Show_ControlsBn(sbnRSUp, e);
if (lBShiftControls.SelectedIndex == 26) Show_ControlsBn(sbnRSDown, e);
if (lBShiftControls.SelectedIndex == 27) Show_ControlsBn(sbnRSLeft, e);
if (lBShiftControls.SelectedIndex == 28) Show_ControlsBn(sbnRSRight, e);
if (lBShiftControls.SelectedIndex == 29) Show_ControlsBn(sbnGyroZN, e);
if (lBShiftControls.SelectedIndex == 30) Show_ControlsBn(sbnGyroZP, e);
if (lBShiftControls.SelectedIndex == 31) Show_ControlsBn(sbnGyroXP, e);
if (lBShiftControls.SelectedIndex == 32) Show_ControlsBn(sbnGyroXN, e);
}
private void List_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (((ListBox)sender).Name.Contains("Shift"))
Show_ShiftControlsList(sender, e);
else
Show_ControlsList(sender, e);
}
private void List_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
Show_ControlsList(sender, e);
if (((ListBox)sender).Name.Contains("Shift"))
Show_ShiftControlsList(sender, e);
else
Show_ControlsList(sender, e);
}
private void numUDRainbow_ValueChanged(object sender, EventArgs e)
@ -834,11 +1025,27 @@ namespace ScpServer
private void nUDSX_ValueChanged(object sender, EventArgs e)
{
Global.setSXDeadzone(device, (double)nUDSX.Value);
if (nUDSX.Value <= 0 && nUDSZ.Value <= 0)
pBSADeadzone.Visible = false;
else
{
pBSADeadzone.Visible = true;
pBSADeadzone.Size = new Size((int)(nUDSX.Value * 125), (int)(nUDSZ.Value * 125));
pBSADeadzone.Location = new Point(lBSATrack.Location.X + 63 - pBSADeadzone.Size.Width / 2, lBSATrack.Location.Y + 63 - pBSADeadzone.Size.Height / 2);
}
}
private void nUDSZ_ValueChanged(object sender, EventArgs e)
{
Global.setSZDeadzone(device, (double)nUDSZ.Value);
if (nUDSX.Value <= 0 && nUDSZ.Value <= 0)
pBSADeadzone.Visible = false;
else
{
pBSADeadzone.Visible = true;
pBSADeadzone.Size = new Size((int)(nUDSX.Value * 125), (int)(nUDSZ.Value * 125));
pBSADeadzone.Location = new Point(lBSATrack.Location.X + 63 - pBSADeadzone.Size.Width / 2, lBSATrack.Location.Y + 63 - pBSADeadzone.Size.Height / 2);
}
}
Image L = Properties.Resources.LeftTouch;
@ -873,11 +1080,27 @@ namespace ScpServer
private void numUDRS_ValueChanged(object sender, EventArgs e)
{
Global.setRSDeadzone(device, (byte)Math.Round((nUDRS.Value * 127),0));
if (nUDRS.Value <= 0)
pBRSDeadzone.Visible = false;
else
{
pBRSDeadzone.Visible = true;
pBRSDeadzone.Size = new Size((int)(nUDRS.Value * 125), (int)(nUDRS.Value * 125));
pBRSDeadzone.Location = new Point(lBRSTrack.Location.X + 63 - pBRSDeadzone.Size.Width / 2, lBRSTrack.Location.Y + 63 - pBRSDeadzone.Size.Width / 2);
}
}
private void numUDLS_ValueChanged(object sender, EventArgs e)
{
Global.setLSDeadzone(device, (byte)Math.Round((nUDLS.Value * 127),0));
if (nUDLS.Value <= 0)
pBLSDeadzone.Visible = false;
else
{
pBLSDeadzone.Visible = true;
pBLSDeadzone.Size = new Size((int)(nUDLS.Value*125), (int)(nUDLS.Value*125));
pBLSDeadzone.Location = new Point(lBLSTrack.Location.X + 63 - pBLSDeadzone.Size.Width / 2, lBLSTrack.Location.Y + 63 - pBLSDeadzone.Size.Width / 2);
}
}
private void numUDMouseSens_ValueChanged(object sender, EventArgs e)
@ -934,19 +1157,68 @@ namespace ScpServer
btnChargingColor.Visible = true;
}
private void lB6Gryo_MouseClick(object sender, MouseEventArgs e)
private void cBMouseAccel_CheckedChanged(object sender, EventArgs e)
{
fLPTiltControls.Visible = !fLPTiltControls.Visible;
SixaxisPanel.Visible = !SixaxisPanel.Visible;
if (SixaxisPanel.Visible)
Global.setMouseAccel(device, cBMouseAccel.Checked);
}
private void cBShiftControl_SelectedIndexChanged(object sender, EventArgs e)
{
Global.setShiftModifier(device, cBShiftControl.SelectedIndex);
}
private void pBController_BackColorChanged(object sender, EventArgs e)
{
spBController.BackColor = pBController.BackColor;
}
private void pBController_BackgroundImageChanged(object sender, EventArgs e)
{
spBController.BackgroundImage = pBController.BackgroundImage;
}
private void tabControls_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControls.SelectedIndex == 2)
sixaxisTimer.Start();
else
sixaxisTimer.Stop();
}
private void cBMouseAccel_CheckedChanged(object sender, EventArgs e)
private void DrawCircle(object sender, PaintEventArgs e)
{
Global.setMouseAccel(device, cBMouseAccel.Checked);
// Create pen.
Pen blackPen = new Pen(Color.Red);
// Create rectangle for ellipse.
Rectangle rect = new Rectangle(0, 0, ((PictureBox)sender).Size.Width, ((PictureBox)sender).Size.Height);
// Draw ellipse to screen.
e.Graphics.DrawEllipse(blackPen, rect);
}
private void lBEmpty_Click(object sender, EventArgs e)
{
lowRedBar.Value = redBar.Value;
lowGreenBar.Value = greenBar.Value;
lowBlueBar.Value = blueBar.Value;
}
private void lBSATip_Click(object sender, EventArgs e)
{
SixaxisPanel.Visible = !SixaxisPanel.Visible;
pBSADeadzone.Visible = !pBSADeadzone.Visible;
btnSATrack.Visible = !btnSATrack.Visible;
}
private void SixaxisPanel_Click(object sender, EventArgs e)
{
lBSATip_Click(sender, e);
}
private void lBSATrack_Click(object sender, EventArgs e)
{
lBSATip_Click(sender, e);
}
}
}

View File

@ -117,6 +117,271 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pBSADeadzone.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AElFTkSuQmCC
</value>
</data>
<data name="pBRSDeadzone.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AElFTkSuQmCC
</value>
</data>
<data name="pBLSDeadzone.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AElFTkSuQmCC
</value>
</data>
<metadata name="advColorDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>

View File

@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DS4 Tool")]
[assembly: AssemblyTitle("DS4Windows")]
[assembly: AssemblyDescription("Sony DualShock 4 to Microsoft Xinput controller mapper")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DS4 Tool")]
[assembly: AssemblyCopyright("Copyright © Scarlet.Crush Productions 2012, 2013; Copyright © InhexSTER, HecticSeptic, electrobrains 2013, 2014")]
[assembly: AssemblyProduct("DS4Windows")]
[assembly: AssemblyCopyright("Copyright © Scarlet.Crush Productions 2012, 2013; Copyright © InhexSTER, HecticSeptic, electrobrains, Jays2Kings 2013, 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3")]
[assembly: AssemblyFileVersion("1.3")]
[assembly: AssemblyVersion("1.4")]
[assembly: AssemblyFileVersion("1.4")]

View File

@ -265,4 +265,13 @@
<data name="StopText" xml:space="preserve">
<value>Stop</value>
</data>
<data name="Red_Circle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Red Circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="size" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\size.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="_checked" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\checked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -70,6 +70,16 @@ namespace ScpServer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap _checked {
get {
object obj = ResourceManager.GetObject("_checked", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -369,6 +379,16 @@ namespace ScpServer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Red_Circle {
get {
object obj = ResourceManager.GetObject("Red_Circle", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -459,6 +479,16 @@ namespace ScpServer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap size {
get {
object obj = ResourceManager.GetObject("size", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
DS4Tool/Resources/size.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -100,6 +100,8 @@
this.tSTBProfile = new System.Windows.Forms.ToolStripTextBox();
this.tSBSaveProfile = new System.Windows.Forms.ToolStripButton();
this.tSBCancel = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.tSBKeepSize = new System.Windows.Forms.ToolStripButton();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.tsBNewProfle = new System.Windows.Forms.ToolStripButton();
this.tsBEditProfile = new System.Windows.Forms.ToolStripButton();
@ -107,7 +109,6 @@
this.tSBDupProfile = new System.Windows.Forms.ToolStripButton();
this.tSBImportProfile = new System.Windows.Forms.ToolStripButton();
this.tSBExportProfile = new System.Windows.Forms.ToolStripButton();
this.tabLog = new System.Windows.Forms.TabPage();
this.tabAutoProfiles = new System.Windows.Forms.TabPage();
this.tabSettings = new System.Windows.Forms.TabPage();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
@ -123,6 +124,7 @@
this.lLBUpdate = new System.Windows.Forms.LinkLabel();
this.linkUninstall = new System.Windows.Forms.LinkLabel();
this.lLSetup = new System.Windows.Forms.LinkLabel();
this.tabLog = new System.Windows.Forms.TabPage();
this.saveProfiles = new System.Windows.Forms.SaveFileDialog();
this.pnlButton.SuspendLayout();
this.cMTaskbar.SuspendLayout();
@ -137,11 +139,11 @@
this.cMProfile.SuspendLayout();
this.tSOptions.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.tabLog.SuspendLayout();
this.tabSettings.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.pNUpdate.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDUpdateTime)).BeginInit();
this.tabLog.SuspendLayout();
this.SuspendLayout();
//
// lvDebug
@ -624,9 +626,12 @@
this.toolStripLabel1,
this.tSTBProfile,
this.tSBSaveProfile,
this.tSBCancel});
this.tSBCancel,
this.toolStripSeparator3,
this.tSBKeepSize});
resources.ApplyResources(this.tSOptions, "tSOptions");
this.tSOptions.Name = "tSOptions";
this.tSOptions.ShowItemToolTips = false;
//
// toolStripLabel1
//
@ -658,6 +663,18 @@
this.tSBCancel.Name = "tSBCancel";
this.tSBCancel.Click += new System.EventHandler(this.tSBCancel_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
//
// tSBKeepSize
//
this.tSBKeepSize.Image = global::ScpServer.Properties.Resources.size;
resources.ApplyResources(this.tSBKeepSize, "tSBKeepSize");
this.tSBKeepSize.Name = "tSBKeepSize";
this.tSBKeepSize.Click += new System.EventHandler(this.tSBKeepSize_Click);
//
// toolStrip1
//
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
@ -710,14 +727,6 @@
this.tSBExportProfile.Name = "tSBExportProfile";
this.tSBExportProfile.Click += new System.EventHandler(this.tSBExportProfile_Click);
//
// tabLog
//
this.tabLog.Controls.Add(this.lvDebug);
this.tabLog.Controls.Add(this.btnClear);
resources.ApplyResources(this.tabLog, "tabLog");
this.tabLog.Name = "tabLog";
this.tabLog.UseVisualStyleBackColor = true;
//
// tabAutoProfiles
//
resources.ApplyResources(this.tabAutoProfiles, "tabAutoProfiles");
@ -842,6 +851,14 @@
this.lLSetup.TabStop = true;
this.lLSetup.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lLSetup_LinkClicked);
//
// tabLog
//
this.tabLog.Controls.Add(this.lvDebug);
this.tabLog.Controls.Add(this.btnClear);
resources.ApplyResources(this.tabLog, "tabLog");
this.tabLog.Name = "tabLog";
this.tabLog.UseVisualStyleBackColor = true;
//
// saveProfiles
//
resources.ApplyResources(this.saveProfiles, "saveProfiles");
@ -878,13 +895,13 @@
this.tSOptions.PerformLayout();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.tabLog.ResumeLayout(false);
this.tabSettings.ResumeLayout(false);
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.pNUpdate.ResumeLayout(false);
this.pNUpdate.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDUpdateTime)).EndInit();
this.tabLog.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -985,6 +1002,8 @@
private System.Windows.Forms.LinkLabel lLSetup;
private System.Windows.Forms.CheckBox cBDisconnectBT;
private System.Windows.Forms.CheckBox cBSwipeProfiles;
private System.Windows.Forms.ToolStripButton tSBKeepSize;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
//private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
}
}

View File

@ -18,7 +18,6 @@ namespace ScpServer
{
public partial class ScpForm : Form
{
double version = 10.651;
private DS4Control.Control rootHub;
delegate void LogDebugDelegate(DateTime Time, String Data);
@ -166,7 +165,6 @@ namespace ScpServer
Directory.CreateDirectory(Global.appdatapath);
Global.Load();
Global.setVersion(version);
if (!Global.Save()) //if can't write to file
if (MessageBox.Show("Cannot write at current locataion\nCopy Settings to appdata?", "DS4Windows",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
@ -199,7 +197,8 @@ namespace ScpServer
t.DropDownItemClicked += Profile_Changed_Menu;
hideDS4CheckBox.CheckedChanged -= hideDS4CheckBox_CheckedChanged;
hideDS4CheckBox.Checked = Global.getUseExclusiveMode();
hideDS4CheckBox.CheckedChanged += hideDS4CheckBox_CheckedChanged;
hideDS4CheckBox.CheckedChanged += hideDS4CheckBox_CheckedChanged;
cBDisconnectBT.Checked = Global.getDCBTatStop();
// New settings
this.Width = Global.getFormWidth();
this.Height = Global.getFormHeight();
@ -231,7 +230,7 @@ namespace ScpServer
cBUpdateTime.SelectedIndex = 0;
nUDUpdateTime.Value = checkwhen;
}
Uri url = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Tool/newest%20version.txt"); //Sorry other devs, gonna have to find your own server
Uri url = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Windows/newest%20version.txt"); //Sorry other devs, gonna have to find your own server
if (checkwhen > 0 && DateTime.Now >= Global.getLastChecked() + TimeSpan.FromHours(checkwhen))
@ -258,7 +257,7 @@ namespace ScpServer
private void test_Tick(object sender, EventArgs e)
{
lBTest.Visible = true;
lBTest.Text = Mapping.mouseaccel[18]+"";
lBTest.Text = rootHub.DS4Controllers[0].Latency.ToString();
}
void Hotkeys(object sender, EventArgs e)
{
@ -309,41 +308,6 @@ namespace ScpServer
ShowInTaskbar = true;
Focus();
}
#region Old Process check
/*DateTime now = DateTime.UtcNow;
if (now >= oldnow + TimeSpan.FromSeconds(2))
{
oldnow = now;
if (tempprofile == "null")
{
for (int i = 0; i < programpaths.Count; i++)
{
string name = Path.GetFileNameWithoutExtension(programpaths[i]);
if (Process.GetProcessesByName(name).Length > 0)
{
if (programpaths[i].ToLower() == Process.GetProcessesByName(name)[0].Modules[0].FileName.ToLower())
{
for (int j = 0; j < 4; j++)
if (proprofiles[j][i] != "(none)")
Global.LoadTempProfile(j, proprofiles[j][i]); //j is filename, i is controller index
tempprofile = name;
filename = Process.GetProcessesByName(name)[0].Modules[0].FileName;
break;
}
}
}
}
else if (Process.GetProcessesByName(tempprofile).Length <= 0)
{
for (int j = 0; j < 4; j++)
Global.LoadProfile(j);
tempprofile = "null";
}
PerformanceCounter.CloseSharedResources();
}
else
PerformanceCounter.CloseSharedResources();*/
#endregion
GC.Collect();
}
@ -392,43 +356,39 @@ namespace ScpServer
private void Check_Version(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
double newversion;
try
{
if (double.TryParse(File.ReadAllText(Global.appdatapath + "\\version.txt"), NumberStyles.Any, CultureInfo.InvariantCulture, out newversion))
if (newversion > version)
if (MessageBox.Show("Download Version " + newversion + " now?", "DS4Windows Update Available!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
if (!File.Exists(exepath + "\\DS4Updater.exe"))
{
Uri url2 = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Tool/DS4Updater.exe");
WebClient wc2 = new WebClient();
if (Global.appdatapath == exepath)
wc2.DownloadFile(url2, exepath + "\\DS4Updater.exe");
else
{
MessageBox.Show("Please Download the Updater now, and place it in the programs folder, then check for update again");
Process.Start("https://www.dropbox.com/s/tlqtdkdumdo0yir/DS4Updater.exe");
}
}
if (Global.appdatapath == exepath)
{
Process p = new Process();
p.StartInfo.FileName = exepath + "\\DS4Updater.exe";
if (Global.AdminNeeded())
p.StartInfo.Verb = "runas";
p.Start();
Close();
}
}
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
string version = fvi.FileVersion;
string newversion = File.ReadAllText(Global.appdatapath + "\\version.txt");
if (version.Replace(',', '.').CompareTo(File.ReadAllText(Global.appdatapath + "\\version.txt")) == -1)//CompareVersions();
if (MessageBox.Show("Download Version " + newversion + " now?", "DS4Windows Update Available!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
if (!File.Exists(exepath + "\\DS4Updater.exe") || (File.Exists(exepath + "\\DS4Updater.exe")
&& (FileVersionInfo.GetVersionInfo(exepath + "\\DS4Updater.exe").FileVersion.CompareTo("1.1.0.0") == -1)))
{
Uri url2 = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Windows/DS4Updater.exe");
WebClient wc2 = new WebClient();
if (Global.appdatapath == exepath)
wc2.DownloadFile(url2, exepath + "\\DS4Updater.exe");
else
File.Delete(Global.appdatapath + "\\version.txt");
else
File.Delete(Global.appdatapath + "\\version.txt");
{
MessageBox.Show("Please Download the new Updater, and (re)place it in the programs folder, then check for update again");
Process.Start("https://www.dropbox.com/s/tlqtdkdumdo0yir/DS4Updater.exe");
}
}
if (Global.appdatapath == exepath)
{
Process p = new Process();
p.StartInfo.FileName = exepath + "\\DS4Updater.exe";
if (Global.AdminNeeded())
p.StartInfo.Verb = "runas";
p.Start();
Close();
}
}
else
File.Delete(Global.appdatapath + "\\version.txt");
}
catch { };
else
File.Delete(Global.appdatapath + "\\version.txt");
}
public void RefreshProfiles()
@ -572,6 +532,7 @@ namespace ScpServer
this.Show();
this.ShowInTaskbar = true;
}
chData.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
}
protected void btnStartStop_Click(object sender, EventArgs e)
@ -634,7 +595,7 @@ namespace ScpServer
}
protected void ControllerStatusChanged()
{
String tooltip = "DS4Windows v" + version;
String tooltip = "DS4Windows v" + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
for (Int32 Index = 0; Index < Pads.Length; Index++)
{
Pads[Index].Text = rootHub.getDS4MacAddress(Index);
@ -840,6 +801,9 @@ namespace ScpServer
RefreshProfiles();
this.Size = oldsize;
oldsize = new System.Drawing.Size(0, 0);
tSBKeepSize.Text = "Keep this window size after closing";
tSBKeepSize.Image = Properties.Resources.size;
tSBKeepSize.Enabled = true;
tSOptions.Visible = false;
toolStrip1.Visible = true;
toolStrip1.Enabled = true;
@ -847,17 +811,17 @@ namespace ScpServer
oldsize = this.Size;
if (dpix == 120)
{
if (this.Size.Height < 518)
this.Size = new System.Drawing.Size(this.Size.Width, 518);
if (this.Size.Width < 1125)
this.Size = new System.Drawing.Size(1125, this.Size.Height);
if (this.Size.Height < 90 + opt.MaximumSize.Height * 1.25)
this.Size = new System.Drawing.Size(this.Size.Width, (int)(90 + opt.MaximumSize.Height * 1.25));
if (this.Size.Width < 20 + opt.MaximumSize.Width * 1.25)
this.Size = new System.Drawing.Size((int)(20 + opt.Size.Width * 1.25), this.Size.Height);
}
else
{
if (this.Size.Height < 418)
this.Size = new System.Drawing.Size(this.Size.Width, 418);
if (this.Size.Width < 910)
this.Size = new System.Drawing.Size(910, this.Size.Height);
if (this.Size.Height < 90 + opt.MaximumSize.Height)
this.Size = new System.Drawing.Size(this.Size.Width, 90 + opt.MaximumSize.Height);
if (this.Size.Width < 20 + opt.MaximumSize.Width)
this.Size = new System.Drawing.Size(20 + opt.MaximumSize.Width, this.Size.Height);
}
tabMain.SelectedIndex = 1;
}
@ -983,7 +947,7 @@ namespace ScpServer
private void llbHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Hotkeys hotkeysForm = new Hotkeys(this);
Hotkeys hotkeysForm = new Hotkeys();
hotkeysForm.Icon = this.Icon;
hotkeysForm.ShowDialog();
}
@ -1026,11 +990,13 @@ namespace ScpServer
private void tabMain_SelectedIndexChanged(object sender, EventArgs e)
{
lbLastMessage.Visible = tabMain.SelectedIndex != 4;
if (tabMain.SelectedIndex == 4)
chData.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
if (opt != null)
if (tabMain.SelectedIndex != 1)
opt.inputtimer.Stop();
else
opt.inputtimer.Start();
opt.inputtimer.Start();
}
private void lBProfiles_MouseDown(object sender, MouseEventArgs e)
@ -1136,7 +1102,7 @@ namespace ScpServer
{
System.IO.File.Delete(Global.appdatapath + @"\Profiles\" + opt.filename + ".xml");
Global.setAProfile(opt.device, tSTBProfile.Text);
Global.SaveProfile(opt.device, tSTBProfile.Text, opt.buttons.ToArray());
Global.SaveProfile(opt.device, tSTBProfile.Text, opt.buttons.ToArray(), opt.subbuttons.ToArray());
Global.Save();
opt.Close();
}
@ -1145,6 +1111,14 @@ namespace ScpServer
}
}
private void tSBKeepSize_Click(object sender, EventArgs e)
{
oldsize = Size;
tSBKeepSize.Text = "Will keep";
tSBKeepSize.Image = Properties.Resources._checked;
tSBKeepSize.Enabled = false;
}
private void cBUpdate_CheckedChanged(object sender, EventArgs e)
{
if (!cBUpdate.Checked)
@ -1196,7 +1170,7 @@ namespace ScpServer
private void lLBUpdate_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Uri url = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Tool/newest%20version.txt"); //Sorry other devs, gonna have to find your own server
Uri url = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Windows/newest%20version.txt"); //Sorry other devs, gonna have to find your own server
WebClient wct = new WebClient();
wct.DownloadFileAsync(url, Global.appdatapath + "\\version.txt");
wct.DownloadFileCompleted += wct_DownloadFileCompleted;
@ -1210,46 +1184,42 @@ namespace ScpServer
void wct_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Global.setLastChecked(DateTime.Now);
double newversion;
try
{
if (double.TryParse(File.ReadAllText(Global.appdatapath + "\\version.txt"), NumberStyles.Any, CultureInfo.InvariantCulture, out newversion))
if (newversion > Global.getVersion())
if (MessageBox.Show("Download Version " + newversion + " now?", "DS4Windows Update Available!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
if (!File.Exists(exepath + "\\DS4Updater.exe"))
{
Uri url2 = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Tool/DS4Updater.exe");
WebClient wc2 = new WebClient();
if (Global.appdatapath == exepath)
wc2.DownloadFile(url2, exepath + "\\DS4Updater.exe");
else
{
MessageBox.Show("Please Download the Updater now, and place it in the programs folder, then check for update again");
Process.Start("https://www.dropbox.com/s/tlqtdkdumdo0yir/DS4Updater.exe");
}
}
if (Global.appdatapath == exepath)
{
Process p = new Process();
p.StartInfo.FileName = exepath + "\\DS4Updater.exe";
if (Global.AdminNeeded())
p.StartInfo.Verb = "runas";
p.Start();
Close();
}
}
else
File.Delete(Global.appdatapath + "\\version.txt");
else
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
string version2 = fvi.FileVersion;
string newversion2 = File.ReadAllText(Global.appdatapath + "\\version.txt");
if (version2.Replace(',', '.').CompareTo(File.ReadAllText(Global.appdatapath + "\\version.txt")) == -1)//CompareVersions();
if (MessageBox.Show("Download Version " + newversion2 + " now?", "DS4Windows Update Available!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
if (!File.Exists(exepath + "\\DS4Updater.exe") || (File.Exists(exepath + "\\DS4Updater.exe")
&& (FileVersionInfo.GetVersionInfo(exepath + "\\DS4Updater.exe").FileVersion.CompareTo("1.1.0.0") == -1)))
{
File.Delete(Global.appdatapath + "\\version.txt");
MessageBox.Show("You are up to date", "DS4 Updater");
Uri url2 = new Uri("https://dl.dropboxusercontent.com/u/16364552/DS4Windows/DS4Updater.exe");
WebClient wc2 = new WebClient();
if (Global.appdatapath == exepath)
wc2.DownloadFile(url2, exepath + "\\DS4Updater.exe");
else
{
MessageBox.Show("Please Download the new Updater, and (re)place it in the programs folder, then check for update again");
Process.Start("https://www.dropbox.com/s/tlqtdkdumdo0yir/DS4Updater.exe");
}
}
if (Global.appdatapath == exepath)
{
Process p = new Process();
p.StartInfo.FileName = exepath + "\\DS4Updater.exe";
if (Global.AdminNeeded())
p.StartInfo.Verb = "runas";
p.Start();
Close();
}
}
else
File.Delete(Global.appdatapath + "\\version.txt");
else
{
File.Delete(Global.appdatapath + "\\version.txt");
MessageBox.Show("You are up to date", "DS4Windows Updater");
}
catch { };
}
private void linkProfiles_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

View File

@ -122,13 +122,13 @@
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="chTime.Width" type="System.Int32, mscorlib">
<value>147</value>
<value>167</value>
</data>
<data name="chData.Text" xml:space="preserve">
<value>Data</value>
</data>
<data name="chData.Width" type="System.Int32, mscorlib">
<value>145</value>
<value>84</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lvDebug.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
@ -142,7 +142,7 @@
<value>3, 3</value>
</data>
<data name="lvDebug.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 250</value>
<value>851, 310</value>
</data>
<data name="lvDebug.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -169,7 +169,7 @@
<value>True</value>
</data>
<data name="lBTest.Location" type="System.Drawing.Point, System.Drawing">
<value>420, 9</value>
<value>611, 9</value>
</data>
<data name="lBTest.Size" type="System.Drawing.Size, System.Drawing">
<value>98, 13</value>
@ -199,7 +199,7 @@
<value>Bottom, Right</value>
</data>
<data name="btnStartStop.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 4</value>
<value>800, 4</value>
</data>
<data name="btnStartStop.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 23</value>
@ -229,7 +229,7 @@
<value>4, 9</value>
</data>
<data name="lbLastMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>514, 18</value>
<value>705, 18</value>
</data>
<data name="lbLastMessage.TabIndex" type="System.Int32, mscorlib">
<value>41</value>
@ -253,7 +253,7 @@
<value>True</value>
</data>
<data name="llbHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>524, 9</value>
<value>715, 9</value>
</data>
<data name="llbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 13</value>
@ -280,10 +280,10 @@
<value>Bottom</value>
</data>
<data name="pnlButton.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 305</value>
<value>0, 365</value>
</data>
<data name="pnlButton.Size" type="System.Drawing.Size, System.Drawing">
<value>674, 30</value>
<value>865, 30</value>
</data>
<data name="pnlButton.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
@ -307,7 +307,7 @@
<value>True</value>
</data>
<data name="lnkControllers.Location" type="System.Drawing.Point, System.Drawing">
<value>74, 56</value>
<value>474, 33</value>
</data>
<data name="lnkControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 13</value>
@ -337,7 +337,7 @@
<value>True</value>
</data>
<data name="StartWindowsCheckBox.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
<value>3, 5</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 17</value>
@ -367,7 +367,7 @@
<value>True</value>
</data>
<data name="startMinimizedCheckBox.Location" type="System.Drawing.Point, System.Drawing">
<value>104, 3</value>
<value>104, 5</value>
</data>
<data name="startMinimizedCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 17</value>
@ -397,7 +397,7 @@
<value>True</value>
</data>
<data name="hideDS4CheckBox.Location" type="System.Drawing.Point, System.Drawing">
<value>207, 3</value>
<value>207, 5</value>
</data>
<data name="hideDS4CheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 17</value>
@ -427,10 +427,10 @@
<value>False</value>
</data>
<data name="btnClear.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 253</value>
<value>3, 313</value>
</data>
<data name="btnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 23</value>
<value>851, 23</value>
</data>
<data name="btnClear.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@ -6760,7 +6760,7 @@
</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>285, 19</value>
<value>400, 19</value>
</data>
<data name="pBStatus1.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 20</value>
@ -6853,7 +6853,7 @@
<value>Left</value>
</data>
<data name="bnEditC3.Location" type="System.Drawing.Point, System.Drawing">
<value>624, 76</value>
<value>815, 76</value>
</data>
<data name="bnEditC3.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 23</value>
@ -6880,7 +6880,7 @@
<value>Left</value>
</data>
<data name="bnEditC4.Location" type="System.Drawing.Point, System.Drawing">
<value>624, 105</value>
<value>815, 105</value>
</data>
<data name="bnEditC4.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 23</value>
@ -6973,7 +6973,7 @@
<value>None</value>
</data>
<data name="cBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>507, 19</value>
<value>698, 19</value>
</data>
<data name="cBController1.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 21</value>
@ -6997,7 +6997,7 @@
<value>Left</value>
</data>
<data name="bnEditC2.Location" type="System.Drawing.Point, System.Drawing">
<value>624, 47</value>
<value>815, 47</value>
</data>
<data name="bnEditC2.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 23</value>
@ -7024,7 +7024,7 @@
<value>None</value>
</data>
<data name="cBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>507, 48</value>
<value>698, 48</value>
</data>
<data name="cBController2.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 21</value>
@ -7048,7 +7048,7 @@
<value>None</value>
</data>
<data name="cBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>507, 77</value>
<value>698, 77</value>
</data>
<data name="cBController3.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 21</value>
@ -7072,7 +7072,7 @@
<value>Left</value>
</data>
<data name="bnEditC1.Location" type="System.Drawing.Point, System.Drawing">
<value>624, 18</value>
<value>815, 18</value>
</data>
<data name="bnEditC1.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 23</value>
@ -7099,7 +7099,7 @@
<value>None</value>
</data>
<data name="cBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>507, 106</value>
<value>698, 106</value>
</data>
<data name="cBController4.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 21</value>
@ -7129,7 +7129,7 @@
<value>Microsoft Sans Serif, 9pt, style=Bold</value>
</data>
<data name="lBSelectedProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>508, 0</value>
<value>699, 0</value>
</data>
<data name="lBSelectedProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 15</value>
@ -7195,7 +7195,7 @@
<value>Microsoft Sans Serif, 9pt, style=Bold</value>
</data>
<data name="lBStatus.Location" type="System.Drawing.Point, System.Drawing">
<value>281, 0</value>
<value>396, 0</value>
</data>
<data name="lBStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 15</value>
@ -7228,7 +7228,7 @@
<value>Microsoft Sans Serif, 9pt, style=Bold</value>
</data>
<data name="lBBattery.Location" type="System.Drawing.Point, System.Drawing">
<value>414, 0</value>
<value>581, 0</value>
</data>
<data name="lBBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 15</value>
@ -7261,7 +7261,7 @@
<value>Microsoft Sans Serif, 9pt</value>
</data>
<data name="lBBatt1.Location" type="System.Drawing.Point, System.Drawing">
<value>420, 22</value>
<value>587, 22</value>
</data>
<data name="lBBatt1.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 15</value>
@ -7294,7 +7294,7 @@
<value>Microsoft Sans Serif, 9pt</value>
</data>
<data name="lBBatt2.Location" type="System.Drawing.Point, System.Drawing">
<value>420, 51</value>
<value>587, 51</value>
</data>
<data name="lBBatt2.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 15</value>
@ -7327,7 +7327,7 @@
<value>Microsoft Sans Serif, 9pt</value>
</data>
<data name="lBBatt3.Location" type="System.Drawing.Point, System.Drawing">
<value>420, 80</value>
<value>587, 80</value>
</data>
<data name="lBBatt3.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 15</value>
@ -7360,7 +7360,7 @@
<value>Microsoft Sans Serif, 9pt</value>
</data>
<data name="lBBatt4.Location" type="System.Drawing.Point, System.Drawing">
<value>420, 109</value>
<value>587, 109</value>
</data>
<data name="lBBatt4.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 15</value>
@ -7443,7 +7443,7 @@
</value>
</data>
<data name="pBStatus2.Location" type="System.Drawing.Point, System.Drawing">
<value>285, 48</value>
<value>400, 48</value>
</data>
<data name="pBStatus2.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 20</value>
@ -7526,7 +7526,7 @@
</value>
</data>
<data name="pBStatus3.Location" type="System.Drawing.Point, System.Drawing">
<value>285, 77</value>
<value>400, 77</value>
</data>
<data name="pBStatus3.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 20</value>
@ -7609,7 +7609,7 @@
</value>
</data>
<data name="pBStatus4.Location" type="System.Drawing.Point, System.Drawing">
<value>285, 106</value>
<value>400, 106</value>
</data>
<data name="pBStatus4.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 20</value>
@ -7642,7 +7642,7 @@
<value>5</value>
</data>
<data name="tLPControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>666, 130</value>
<value>857, 130</value>
</data>
<data name="tLPControllers.TabIndex" type="System.Int32, mscorlib">
<value>46</value>
@ -7666,7 +7666,7 @@
<value>4, 22</value>
</data>
<data name="tabControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>666, 279</value>
<value>857, 339</value>
</data>
<data name="tabControllers.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -7774,7 +7774,7 @@
<value>3, 53</value>
</data>
<data name="lBProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 223</value>
<value>851, 283</value>
</data>
<data name="lBProfiles.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -7801,7 +7801,7 @@
<value>Profile Name: </value>
</data>
<data name="tSTBProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>185, 25</value>
<value>150, 25</value>
</data>
<data name="tSTBProfile.Text" xml:space="preserve">
<value>&lt;type profile name here&gt;</value>
@ -7824,11 +7824,23 @@
<data name="tSBCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>6, 25</value>
</data>
<data name="tSBKeepSize.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tSBKeepSize.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 22</value>
</data>
<data name="tSBKeepSize.Text" xml:space="preserve">
<value>Keep this window size after closing</value>
</data>
<data name="tSOptions.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 28</value>
</data>
<data name="tSOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 25</value>
<value>851, 25</value>
</data>
<data name="tSOptions.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -7864,7 +7876,7 @@
<value>TopLeft</value>
</data>
<data name="tsBNewProfle.ToolTipText" xml:space="preserve">
<value>Make New Profile</value>
<value>Make a New Profile</value>
</data>
<data name="tsBEditProfile.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
@ -7974,7 +7986,7 @@
<value>3, 3</value>
</data>
<data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 25</value>
<value>851, 25</value>
</data>
<data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -8001,7 +8013,7 @@
<value>3, 3, 3, 3</value>
</data>
<data name="tabProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>666, 279</value>
<value>857, 339</value>
</data>
<data name="tabProfiles.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -8025,7 +8037,7 @@
<value>4, 22</value>
</data>
<data name="tabAutoProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>666, 279</value>
<value>857, 339</value>
</data>
<data name="tabAutoProfiles.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -8082,7 +8094,7 @@
<value>True</value>
</data>
<data name="cBUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>452, 3</value>
<value>452, 5</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 17</value>
@ -8190,7 +8202,7 @@
<value>False</value>
</data>
<data name="pNUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 26</value>
<value>622, 3</value>
</data>
<data name="pNUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 22</value>
@ -8217,7 +8229,7 @@
<value>True</value>
</data>
<data name="cBSwipeProfiles.Location" type="System.Drawing.Point, System.Drawing">
<value>198, 28</value>
<value>3, 31</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>194, 17</value>
@ -8247,7 +8259,7 @@
<value>True</value>
</data>
<data name="cBDisconnectBT.Location" type="System.Drawing.Point, System.Drawing">
<value>398, 28</value>
<value>203, 31</value>
</data>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>194, 17</value>
@ -8277,7 +8289,7 @@
<value>True</value>
</data>
<data name="linkProfiles.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 56</value>
<value>403, 33</value>
</data>
<data name="linkProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 13</value>
@ -8304,7 +8316,7 @@
<value>None</value>
</data>
<data name="lLBUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>153, 51</value>
<value>553, 28</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 23</value>
@ -8334,7 +8346,7 @@
<value>None</value>
</data>
<data name="linkUninstall.Location" type="System.Drawing.Point, System.Drawing">
<value>275, 51</value>
<value>675, 28</value>
</data>
<data name="linkUninstall.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 23</value>
@ -8367,7 +8379,7 @@
<value>True</value>
</data>
<data name="lLSetup.Location" type="System.Drawing.Point, System.Drawing">
<value>387, 56</value>
<value>3, 51</value>
</data>
<data name="lLSetup.Size" type="System.Drawing.Size, System.Drawing">
<value>82, 13</value>
@ -8397,7 +8409,7 @@
<value>3, 3</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 273</value>
<value>851, 333</value>
</data>
<data name="flowLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -8421,7 +8433,7 @@
<value>3, 3, 3, 3</value>
</data>
<data name="tabSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>666, 279</value>
<value>857, 339</value>
</data>
<data name="tabSettings.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
@ -8448,7 +8460,7 @@
<value>3, 3, 3, 3</value>
</data>
<data name="tabLog.Size" type="System.Drawing.Size, System.Drawing">
<value>666, 279</value>
<value>857, 339</value>
</data>
<data name="tabLog.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -8475,7 +8487,7 @@
<value>0, 0</value>
</data>
<data name="tabMain.Size" type="System.Drawing.Size, System.Drawing">
<value>674, 305</value>
<value>865, 365</value>
</data>
<data name="tabMain.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
@ -8505,7 +8517,7 @@
<value>96, 96</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>674, 335</value>
<value>865, 395</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>440, 231</value>
@ -8675,6 +8687,18 @@
<data name="&gt;&gt;tSBCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Name" xml:space="preserve">
<value>toolStripSeparator3</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tSBKeepSize.Name" xml:space="preserve">
<value>tSBKeepSize</value>
</data>
<data name="&gt;&gt;tSBKeepSize.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsBNewProfle.Name" xml:space="preserve">
<value>tsBNewProfle</value>
</data>