Version 1.4.2

Special Actions: press a control or a set of controls to perform a
macro, launch a program/file, or load a different profile. Create new
actions in profile options, and check which ones you want the selected
profile to use.
Set an analog curve for the left and right stick, see the changes live
in the controller readout
Option to set the close button to minimize DS4Windows, and truly close
it by the notification icon
Added Spanish Translations (added credits to the translations sheets so
users can be properly thanked if wanted to be)
Sticks Deadzone reworked from being a square to radial as the controller
readout actually shows
Fix pressing keyboard not setting an action for controls
Fix Tilts and Swipes controls not showing text in the control list
Fix program crashing when uses x360 macros with shift controls
Fix for trying to edit a profile from the context menu after never
restoring DS4Windows form start.
Fix for settings low flash color
Now running with startup will always start minimized, even if start
minimized is unchecked
This commit is contained in:
jays2kings 2014-12-13 15:12:03 -05:00
parent 7929e12d84
commit 7673d6351a
45 changed files with 20216 additions and 10384 deletions

View File

@ -407,17 +407,17 @@ namespace DS4Control
Global.ControllerStatusChanged(this);
CheckForHotkeys(ind, cState, pState);
GetInputkeys(ind);
if (Global.getHasCustomKeysorButtons(ind) || Global.getHasShiftCustomKeysorButtons(ind))
if (Global.getLSCurve(ind) + Global.getRSCurve(ind) + Global.getLSDeadzone(ind) + Global.getRSDeadzone(ind) +
Global.getL2Deadzone(ind) + Global.getR2Deadzone(ind) > 0) //if a curve or deadzone is in place
cState = Mapping.SetCurveAndDeadzone(ind, cState);
if (!recordingMacro && (!string.IsNullOrEmpty(Global.tempprofilename[ind]) ||
Global.getHasCustomKeysorButtons(ind) || Global.getHasShiftCustomKeysorButtons(ind)))
{
if (!recordingMacro)
Mapping.MapCustom(ind, cState, MappedState[ind], ExposedState[ind], touchPad[ind]);
Mapping.MapCustom(ind, cState, MappedState[ind], ExposedState[ind], touchPad[ind], this);
cState = MappedState[ind];
}
if (Global.getHasCustomExtras(ind))
{
DoExtras(ind);
}
// Update the GUI/whatever.
DS4LightBar.updateLightBar(device, ind, cState, ExposedState[ind], touchPad[ind]);

View File

@ -91,6 +91,7 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.fr-FR.resx" />
<EmbeddedResource Include="Properties\Resources.es.resx" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -5,6 +5,7 @@ using System.Text;
using DS4Library;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
namespace DS4Control
{
public class Mapping
@ -331,14 +332,112 @@ namespace DS4Control
}
return 0;
}
static double TValue(double value1, double value2, double percent)
{
percent /= 100f;
return value1 * percent + value2 * (1 - percent);
}
public static DS4State SetCurveAndDeadzone(int device, DS4State cState)
{
DS4State dState = new DS4State(cState);
int x;
int y;
int curve;
if (Global.getLSCurve(device) > 0)
{
x = cState.LX;
y = cState.LY;
float max = x + y;
double curvex;
double curvey;
curve = Global.getLSCurve(device);
double multimax = TValue(382.5, max, curve);
double multimin = TValue(127.5, max, curve);
if ((x > 127.5f && y > 127.5f) || (x < 127.5f && y < 127.5f))
{
curvex = (x > 127.5f ? Math.Min(x, (x / max) * multimax) : Math.Max(x, (x / max) * multimin));
curvey = (y > 127.5f ? Math.Min(y, (y / max) * multimax) : Math.Max(y, (y / max) * multimin));
//btnLSTrack.Location = new Point((int)(dpix * curvex / 2.09 + lbLSTrack.Location.X), (int)(dpiy * curvey / 2.09 + lbLSTrack.Location.Y));
}
else
{
if (x < 127.5f)
{
curvex = Math.Min(x, (x / max) * multimax);
curvey = Math.Min(y, (-(y / max) * multimax + 510));
}
else
{
curvex = Math.Min(x, (-(x / max) * multimax + 510));
curvey = Math.Min(y, (y / max) * multimax);
}
}
dState.LX = (byte)Math.Round(curvex, 0);
dState.LY = (byte)Math.Round(curvey, 0);
}
if (Global.getRSCurve(device) > 0)
{
x = cState.RX;
y = cState.RY;
float max = x + y;
double curvex;
double curvey;
curve = Global.getRSCurve(device);
double multimax = TValue(382.5, max, curve);
double multimin = TValue(127.5, max, curve);
if ((x > 127.5f && y > 127.5f) || (x < 127.5f && y < 127.5f))
{
curvex = (x > 127.5f ? Math.Min(x, (x / max) * multimax) : Math.Max(x, (x / max) * multimin));
curvey = (y > 127.5f ? Math.Min(y, (y / max) * multimax) : Math.Max(y, (y / max) * multimin));
}
else
{
if (x < 127.5f)
{
curvex = Math.Min(x, (x / max) * multimax);
curvey = Math.Min(y, (-(y / max) * multimax + 510));
}
else
{
curvex = Math.Min(x, (-(x / max) * multimax + 510));
curvey = Math.Min(y, (y / max) * multimax);
}
}
dState.RX = (byte)Math.Round(curvex, 0);
dState.RY = (byte)Math.Round(curvey, 0);
}
if (Global.getLSDeadzone(device) > 0 &&
Math.Sqrt(Math.Pow(cState.LX - 127.5f, 2) + Math.Pow(cState.LY - 127.5f, 2)) < Global.getLSDeadzone(device))
{
dState.LX = 127;
dState.LY = 127;
}
if (Global.getRSDeadzone(device) > 0
&& Math.Sqrt(Math.Pow(cState.RX - 127.5f, 2) + Math.Pow(cState.RY - 127.5f, 2)) < Global.getLSDeadzone(device))
{
dState.RX = 127;
dState.RY = 127;
}
if (Global.getL2Deadzone(device) > 0 && cState.L2 < Global.getL2Deadzone(device))
dState.L2 = 0;
if (Global.getR2Deadzone(device) > 0 && cState.R2 < Global.getR2Deadzone(device))
dState.R2 = 0;
return dState;
}
public static bool[] pressedonce = new bool[261], macrodone = new bool[34];
public static int test = 0;
static bool[] macroControl = new bool[25];
/** 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, Mouse tp)
public static async void MapCustom(int device, DS4State cState, DS4State MappedState, DS4StateExposed eState, Mouse tp, Control ctrl)
{
bool shift;
SyntheticState deviceState = Mapping.deviceState[device];
if (Global.GetActions().Count > 0 && (Global.GetProfileActions(device).Count > 0 ||
!string.IsNullOrEmpty(Global.tempprofilename[device])))
MapCustomAction(device, cState, MappedState, eState, tp, ctrl);
switch (Global.getShiftModifier(device))
{
case 1: shift = getBoolMapping(DS4Controls.Cross, cState, eState, tp); break;
@ -371,8 +470,7 @@ namespace DS4Control
}
cState.CopyTo(MappedState);
if (shift)
MapShiftCustom(device, cState, MappedState, eState, tp);
MapShiftCustom(device, cState, MappedState, eState, tp);
foreach (KeyValuePair<DS4Controls, string> customKey in Global.getCustomMacros(device))
{
if (shift == false ||
@ -894,7 +992,7 @@ namespace DS4Control
}
for (int i = 0; i < keys.Length; i++)
keys[i] = ushort.Parse(skeys[i]);
bool[] keydown = new bool[278];
bool[] keydown = new bool[286];
if (!macrodone[DS4ControltoInt(customKey.Key)])
{
macrodone[DS4ControltoInt(customKey.Key)] = true;
@ -1346,6 +1444,236 @@ namespace DS4Control
InputMethods.MoveCursorBy(MouseDeltaX, MouseDeltaY);
}
public static bool[,] actionDone = new bool[4,50];
public static SpecialAction[] untriggeraction = new SpecialAction[4];
public static int[] untriggerindex = new int[4];
public static async void MapCustomAction(int device, DS4State cState, DS4State MappedState, DS4StateExposed eState, Mouse tp, Control ctrl)
{
foreach (string actionname in Global.GetProfileActions(device))
{
//DS4KeyType keyType = Global.getShiftCustomKeyType(device, customKey.Key);
SpecialAction action = Global.GetAction(actionname);
int index = Global.GetActionIndexOf(actionname);
if (action.name == "null" || index < 0)
return;
bool triggeractivated = true;
foreach (DS4Controls dc in action.trigger)
{
if (!getBoolMapping(dc, cState, eState, tp))
{
triggeractivated = false;
break;
}
}
//if (triggeractivated)
if (triggeractivated && action.type == "Program")
{
if (!actionDone[device,index])
{
actionDone[device,index] = true;
Process.Start(action.details);
}
}
else if (triggeractivated && action.type == "Profile")
{
if (!actionDone[device,index] && string.IsNullOrEmpty(Global.tempprofilename[device]))
{
actionDone[device, index] = true;
untriggeraction[device] = action;
untriggerindex[device] = index;
foreach (DS4Controls dc in action.trigger)
{
InputMethods.performKeyRelease(Global.getCustomKey(0, dc));
string[] skeys = Global.getCustomMacro(0, dc).Split('/');
ushort[] keys = new ushort[skeys.Length];
for (int i = 0; i < keys.Length; i++)
{
keys[i] = ushort.Parse(skeys[i]);
InputMethods.performKeyRelease(keys[i]);
}
}
Global.LoadTempProfile(device, action.details, true, ctrl);
return;
}
}
else if (triggeractivated && action.type == "Macro")
{
if (!actionDone[device,index])
{
actionDone[device,index] = true;
foreach (DS4Controls dc in action.trigger)
resetToDefaultValue(dc, MappedState);
bool[] keydown = new bool[286];
//for (int i = 0; i < keys.Length; i++)
foreach (int i in action.macro)
{
if (i >= 300) //ints over 300 used to delay
await Task.Delay(i - 300);
else if (!keydown[i])
{
if (i == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTDOWN); //anything above 255 is not a keyvalue
else if (i == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTDOWN);
else if (i == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEDOWN);
else if (i == 259) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONDOWN, 1);
else if (i == 260) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONDOWN, 2);
else if (i == 261) macroControl[0] = true;
else if (i == 262) macroControl[1] = true;
else if (i == 263) macroControl[2] = true;
else if (i == 264) macroControl[3] = true;
else if (i == 265) macroControl[4] = true;
else if (i == 266) macroControl[5] = true;
else if (i == 267) macroControl[6] = true;
else if (i == 268) macroControl[7] = true;
else if (i == 269) macroControl[8] = true;
else if (i == 270) macroControl[9] = true;
else if (i == 271) macroControl[10] = true;
else if (i == 272) macroControl[11] = true;
else if (i == 273) macroControl[12] = true;
else if (i == 274) macroControl[13] = true;
else if (i == 275) macroControl[14] = true;
else if (i == 276) macroControl[15] = true;
else if (i == 277) macroControl[16] = true;
else if (i == 278) macroControl[17] = true;
else if (i == 279) macroControl[18] = true;
else if (i == 280) macroControl[19] = true;
else if (i == 281) macroControl[20] = true;
else if (i == 282) macroControl[21] = true;
else if (i == 283) macroControl[22] = true;
else if (i == 284) macroControl[23] = true;
else if (i == 285) macroControl[24] = true;
//else if (keyType.HasFlag(DS4KeyType.ScanCode))
//InputMethods.performSCKeyPress((ushort)i);
else
InputMethods.performKeyPress((ushort)i);
keydown[i] = true;
}
else
{
if (i == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP); //anything above 255 is not a keyvalue
else if (i == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTUP);
else if (i == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEUP);
else if (i == 259) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONUP, 1);
else if (i == 260) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONUP, 2);
else if (i == 261) macroControl[0] = false;
else if (i == 262) macroControl[1] = false;
else if (i == 263) macroControl[2] = false;
else if (i == 264) macroControl[3] = false;
else if (i == 265) macroControl[4] = false;
else if (i == 266) macroControl[5] = false;
else if (i == 267) macroControl[6] = false;
else if (i == 268) macroControl[7] = false;
else if (i == 269) macroControl[8] = false;
else if (i == 270) macroControl[9] = false;
else if (i == 271) macroControl[10] = false;
else if (i == 272) macroControl[11] = false;
else if (i == 273) macroControl[12] = false;
else if (i == 274) macroControl[13] = false;
else if (i == 275) macroControl[14] = false;
else if (i == 276) macroControl[15] = false;
else if (i == 277) macroControl[16] = false;
else if (i == 278) macroControl[17] = false;
else if (i == 279) macroControl[18] = false;
else if (i == 280) macroControl[19] = false;
else if (i == 281) macroControl[20] = false;
else if (i == 282) macroControl[21] = false;
else if (i == 283) macroControl[22] = false;
else if (i == 284) macroControl[23] = false;
else if (i == 285) macroControl[24] = false;
//else if (keyType.HasFlag(DS4KeyType.ScanCode))
//InputMethods.performSCKeyRelease((ushort)i);
else
InputMethods.performKeyRelease((ushort)i);
keydown[i] = false;
}
}
for (ushort i = 0; i < keydown.Length; i++)
{
if (keydown[i])
if (i == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP); //anything above 255 is not a keyvalue
else if (i == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTUP);
else if (i == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEUP);
else if (i == 259) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONUP, 1);
else if (i == 260) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_XBUTTONUP, 2);
else if (i == 261) macroControl[0] = false;
else if (i == 262) macroControl[1] = false;
else if (i == 263) macroControl[2] = false;
else if (i == 264) macroControl[3] = false;
else if (i == 265) macroControl[4] = false;
else if (i == 266) macroControl[5] = false;
else if (i == 267) macroControl[6] = false;
else if (i == 268) macroControl[7] = false;
else if (i == 269) macroControl[8] = false;
else if (i == 270) macroControl[9] = false;
else if (i == 271) macroControl[10] = false;
else if (i == 272) macroControl[11] = false;
else if (i == 273) macroControl[12] = false;
else if (i == 274) macroControl[13] = false;
else if (i == 275) macroControl[14] = false;
else if (i == 276) macroControl[15] = false;
else if (i == 277) macroControl[16] = false;
else if (i == 278) macroControl[17] = false;
else if (i == 279) macroControl[18] = false;
else if (i == 280) macroControl[19] = false;
else if (i == 281) macroControl[20] = false;
else if (i == 282) macroControl[21] = false;
else if (i == 283) macroControl[22] = false;
else if (i == 284) macroControl[23] = false;
else if (i == 285) macroControl[24] = false;
//else if (keyType.HasFlag(DS4KeyType.ScanCode))
//InputMethods.performSCKeyRelease(i);
else
InputMethods.performKeyRelease(i);
}
/*if (keyType.HasFlag(DS4KeyType.HoldMacro))
{
await Task.Delay(50);
macrodoneA[index] = false;
}*/
}
}
else
actionDone[device,index] = false;
}
if (untriggeraction[device] != null)
{
SpecialAction action = untriggeraction[device];
int index = untriggerindex[device];
bool utriggeractivated = true;
foreach (DS4Controls dc in action.uTrigger)
{
if (!getBoolMapping(dc, cState, eState, tp))
{
utriggeractivated = false;
break;
}
}
if (utriggeractivated && action.type == "Profile")
{
if ((action.controls == action.ucontrols && !actionDone[device, index]) || //if trigger and end trigger are the same
action.controls != action.ucontrols)
if (!string.IsNullOrEmpty(Global.tempprofilename[device]))
{
foreach (DS4Controls dc in action.uTrigger)
{
actionDone[device, index] = true;
InputMethods.performKeyRelease(Global.getCustomKey(0, dc));
string[] skeys = Global.getCustomMacro(0, dc).Split('/');
ushort[] keys = new ushort[skeys.Length];
for (int i = 0; i < keys.Length; i++)
{
keys[i] = ushort.Parse(skeys[i]);
InputMethods.performKeyRelease(keys[i]);
}
}
untriggeraction[device] = null;
Global.LoadProfile(device, false, ctrl);
}
}
else
actionDone[device, index] = false;
}
}
public static DateTime[] mousenow = { DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow };
public static double mvalue = 0;
public static int[] mouseaccel = new int[34];
@ -1355,8 +1683,12 @@ namespace DS4Control
int controlnum = DS4ControltoInt(control);
double SXD = Global.getSXDeadzone(device);
double SZD = Global.getSZDeadzone(device);
int deadzoneL = Math.Max((byte)10, Global.getLSDeadzone(device));
int deadzoneR = Math.Max((byte)10, Global.getRSDeadzone(device));
int deadzoneL = 10;
int deadzoneR = 10;
if (Global.getLSDeadzone(device) >= 10)
deadzoneL = 0;
if (Global.getRSDeadzone(device) >= 10)
deadzoneR = 0;
double value = 0;
int speed = Global.getButtonMouseSensitivity(device)+15;
double root = 1.002;
@ -1413,19 +1745,15 @@ namespace DS4Control
case DS4Controls.Circle: value = (cState.Circle ? Math.Pow(root + speed / divide, 100) - 1 : 0); break;
case DS4Controls.L2: value = Math.Pow(root + speed / divide, cState.L2 / 2d) - 1; break;
case DS4Controls.R2: value = Math.Pow(root + speed / divide, cState.R2 / 2d) - 1; break;
case DS4Controls.GyroXPos: return (byte)(eState.GyroX > SXD * 7500 ?
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 / 62) : 0);
case DS4Controls.GyroZNeg: return (byte)(eState.GyroZ < -SZD * 7500 ?
Math.Pow(root + speed / divide, -eState.GyroZ / 62) : 0);
}
if (eState != null)
switch (control)
{
case DS4Controls.GyroXPos: return (byte)(eState.GyroX > SXD * 7500 ?
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 / 62) : 0);
case DS4Controls.GyroZNeg: return (byte)(eState.GyroZ < -SZD * 7500 ?
Math.Pow(root + speed / divide, -eState.GyroZ / 62) : 0);
}
bool LXChanged = (Math.Abs(127 - cState.LX) < deadzoneL);
bool LYChanged = (Math.Abs(127 - cState.LY) < deadzoneL);
bool RXChanged = (Math.Abs(127 - cState.RX) < deadzoneR);
@ -1678,46 +2006,5 @@ namespace DS4Control
case DS4Controls.R2: cState.R2 = 0; break;
}
}
// Arthritis mode, compensate for cumulative pressure F=kx on the triggers by allowing the user to remap the entire trigger to just the initial portion.
private static byte[,] leftTriggerMap = new byte[4,256], rightTriggerMap = new byte[4,256];
private static double[] leftTriggerMiddle = new double[4], // linear trigger remapping, 0.5 is in the middle of 0 and 255 from the native controller.
oldLeftTriggerMiddle = new double[4],
rightTriggerMiddle = new double[4], oldRightTriggerMiddle = new double[4];
private static void initializeTriggerMap(byte[,] map, double triggerMiddle, int deviceNum)
{
double midpoint = 256.0 * triggerMiddle;
for (uint x = 0; x <= 255; x++)
{
double mapped;
if (x < midpoint) // i.e. with standard 0.5, 0..127->0..127, etc.; with 0.25, 0..63->0..127 and 64..255->128..255\
mapped = (x * 0.5 / triggerMiddle);
else
mapped = 128.0 + 128.0 * (x - midpoint) / (256.0 - midpoint);
map[deviceNum, x] = (byte)mapped;
}
}
public static byte mapLeftTrigger(byte orig, int deviceNum)
{
leftTriggerMiddle[deviceNum] = Global.getLeftTriggerMiddle(deviceNum);
if (leftTriggerMiddle[deviceNum] != oldLeftTriggerMiddle[deviceNum])
{
oldLeftTriggerMiddle[deviceNum] = leftTriggerMiddle[deviceNum];
initializeTriggerMap(leftTriggerMap, leftTriggerMiddle[deviceNum],deviceNum);
}
return leftTriggerMap[deviceNum, orig];
}
public static byte mapRightTrigger(byte orig, int deviceNum)
{
rightTriggerMiddle[deviceNum] = Global.getRightTriggerMiddle(deviceNum);
if (rightTriggerMiddle[deviceNum] != oldRightTriggerMiddle[deviceNum])
{
oldRightTriggerMiddle[deviceNum] = rightTriggerMiddle[deviceNum];
initializeTriggerMap(rightTriggerMap, rightTriggerMiddle[deviceNum], deviceNum);
}
return rightTriggerMap[deviceNum,orig];
}
}
}

View File

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Battery" xml:space="preserve">
<value>Bateria: *number*%</value>
</data>
<data name="Charged" xml:space="preserve">
<value>Cargado</value>
</data>
<data name="Charging" xml:space="preserve">
<value>Cargando: *number*%</value>
</data>
<data name="Connecting" xml:space="preserve">
<value>Conectando...</value>
</data>
<data name="ControllerWasRemoved" xml:space="preserve">
<value>Controlador *Mac address* perdio la conexion o fue desconectado</value>
</data>
<data name="CouldNotOpenDS4" xml:space="preserve">
<value>Advertencia: No se puede abrir DS4 *Mac address* exclusivamente.</value>
</data>
<data name="FoundController" xml:space="preserve">
<value>Controlador Encontrado.</value>
</data>
<data name="Full" xml:space="preserve">
<value>Completo</value>
</data>
<data name="NA" xml:space="preserve">
<value>N/A</value>
</data>
<data name="NoneText" xml:space="preserve">
<value>ninguno</value>
</data>
<data name="QuitOtherPrograms" xml:space="preserve">
<value>Debes de salir de otras aplicaciones como Steam, Uplay antes activando la opcion "Ocultar controlador DS4"</value>
</data>
<data name="SearchingController" xml:space="preserve">
<value>Buscando controladores...</value>
</data>
<data name="Starting" xml:space="preserve">
<value>Iniciando...</value>
</data>
<data name="StoppedDS4Windows" xml:space="preserve">
<value>DS4Windows detenido</value>
</data>
<data name="StoppingDS4" xml:space="preserve">
<value>Deteniendo Controladores DS4</value>
</data>
<data name="StoppingX360" xml:space="preserve">
<value>Deteniendo Controladores X360</value>
</data>
<data name="TouchpadMovementOff" xml:space="preserve">
<value>Movimiento de Touchpad Apagado</value>
</data>
<data name="TouchpadMovementOn" xml:space="preserve">
<value>Movimiento de Touchpad Encendido</value>
</data>
<data name="UsingExclusive" xml:space="preserve">
<value>Usando Modo Exclusivo</value>
</data>
<data name="UsingProfile" xml:space="preserve">
<value>Controlador *number* esta usando perfil "*Profile name*"</value>
</data>
<data name="UsingShared" xml:space="preserve">
<value>Usando Modo Compartido</value>
</data>
</root>

View File

@ -90,6 +90,7 @@ namespace DS4Control
{
appdatapath = path;
m_Config.m_Profile = appdatapath + "\\Profiles.xml";
m_Config.m_Actions = appdatapath + "\\Actions.xml";
}
/// <summary>
/// Check if Admin Rights are needed to write in Appliplation Directory
@ -147,11 +148,11 @@ namespace DS4Control
public static byte loadRumbleBoost(int device)
{
return m_Config.m_Rumble[device];
return m_Config.rumble[device];
}
public static void saveRumbleBoost(int device, byte boost)
{
m_Config.m_Rumble[device] = boost;
m_Config.rumble[device] = boost;
}
public static double getRainbow(int device)
@ -338,7 +339,15 @@ namespace DS4Control
public static int getFirstXinputPort()
{
return m_Config.firstXinputPort;
}
}
public static void setCloseMini(bool data)
{
m_Config.closeMini = data;
}
public static bool getCloseMini()
{
return m_Config.closeMini;
}
public static void saveLowColor(int device, byte red, byte green, byte blue)
{
m_Config.m_LowLeds[device][0] = red;
@ -475,21 +484,21 @@ namespace DS4Control
return m_Config.formHeight;
}
public static double getLeftTriggerMiddle(int device)
public static double getL2Deadzone(int device)
{
return m_Config.m_LeftTriggerMiddle[device];
return m_Config.l2Deadzone[device];
}
public static void setLeftTriggerMiddle(int device, byte value)
public static void setL2Deadzone(int device, byte value)
{
m_Config.m_LeftTriggerMiddle[device] = value;
m_Config.l2Deadzone[device] = value;
}
public static double getRightTriggerMiddle(int device)
public static double getR2Deadzone(int device)
{
return m_Config.m_RightTriggerMiddle[device];
return m_Config.r2Deadzone[device];
}
public static void setRightTriggerMiddle(int device, byte value)
public static void setR2Deadzone(int device, byte value)
{
m_Config.m_RightTriggerMiddle[device] = value;
m_Config.r2Deadzone[device] = value;
}
public static double getSXDeadzone(int device)
{
@ -523,6 +532,22 @@ namespace DS4Control
{
m_Config.RSDeadzone[device] = value;
}
public static int getLSCurve(int device)
{
return m_Config.lsCurve[device];
}
public static void setLSCurve(int device, int value)
{
m_Config.lsCurve[device] = value;
}
public static int getRSCurve(int device)
{
return m_Config.rsCurve[device];
}
public static void setRSCurve(int device, int value)
{
m_Config.rsCurve[device] = value;
}
public static bool getMouseAccel(int device)
{
return m_Config.mouseAccel[device];
@ -753,6 +778,52 @@ namespace DS4Control
R *= 255; G *= 255; B *= 255;
return Color.FromArgb((int)R, (int)G, (int)B);
}
public static List<String> GetProfileActions(int device)
{
return m_Config.profileActions[device];
}
public static void SetProfileAtions(int device, List<String> pactions)
{
m_Config.profileActions[device] = pactions;
}
public static void SaveAction(string name, string controls, int mode, string details, bool edit, string ucontrols = "")
{
m_Config.SaveAction(name, controls, mode, details, edit, ucontrols);
}
public static void RemoveAction(string name)
{
m_Config.RemoveAction(name);
}
public static void LoadActions()
{
m_Config.LoadActions();
}
public static List<SpecialAction> GetActions()
{
return m_Config.actions;
}
public static int GetActionIndexOf(string name)
{
for (int i = 0; i < m_Config.actions.Count; i++)
if (m_Config.actions[i].name == name)
return i;
return -1;
}
public static SpecialAction GetAction(string name)
{
foreach (SpecialAction sA in m_Config.actions)
if (sA.name == name)
return sA;
return new SpecialAction("null", "null", "null", "null");
}
}
@ -761,6 +832,8 @@ namespace DS4Control
{
//public String m_Profile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool" + "\\Profiles.xml";
public String m_Profile = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + "\\Profiles.xml";
public String m_Actions = Global.appdatapath + "\\Actions.xml";
protected XmlDocument m_Xdoc = new XmlDocument();
//fifth value used to for options, not fifth controller
public int[] buttonMouseSensitivity = { 25, 25, 25, 25, 25 };
@ -771,9 +844,9 @@ namespace DS4Control
public Boolean[] lowerRCOn = { false, false, false, false, false };
public Boolean[] ledAsBattery = { false, false, false, false, false };
public Boolean[] flashLedLowBattery = { false, false, false, false, false };
public Byte[] m_LeftTriggerMiddle = { 0, 0, 0, 0, 0}, m_RightTriggerMiddle = { 0, 0, 0, 0, 0};
public Byte[] l2Deadzone = { 0, 0, 0, 0, 0}, r2Deadzone = { 0, 0, 0, 0, 0};
public String[] profilePath = { String.Empty, String.Empty, String.Empty, String.Empty, String.Empty };
public Byte[] m_Rumble = { 100, 100, 100, 100, 100 };
public Byte[] rumble = { 100, 100, 100, 100, 100 };
public Byte[] touchSensitivity = { 100, 100, 100, 100, 100 };
public Byte[] LSDeadzone = { 0, 0, 0, 0, 0 }, RSDeadzone = { 0, 0, 0, 0, 0 };
public double[] SXDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 }, SZDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 };
@ -830,6 +903,8 @@ namespace DS4Control
public bool[] dinputOnly = { false, false, false, false, false };
public bool[] startTouchpadOff = { false, false, false, false, false };
public bool[] useTPforControls = { false, false, false, false, false };
public int[] lsCurve = { 0, 0, 0, 0, 0 };
public int[] rsCurve = { 0, 0, 0, 0, 0 };
public Boolean useExclusiveMode = false;
public Int32 formWidth = 782;
public Int32 formHeight = 550;
@ -842,6 +917,8 @@ namespace DS4Control
public bool ds4Mapping = true;
public bool quickCharge = false;
public int firstXinputPort = 1;
public bool closeMini = false;
public List<SpecialAction> actions = new List<SpecialAction>();
public Dictionary<DS4Controls, DS4KeyType>[] customMapKeyTypes = { null, null, null, null, null };
public Dictionary<DS4Controls, UInt16>[] customMapKeys = { null, null, null, null, null };
public Dictionary<DS4Controls, String>[] customMapMacros = { null, null, null, null, null };
@ -853,7 +930,7 @@ namespace DS4Control
public Dictionary<DS4Controls, String>[] shiftCustomMapMacros = { null, null, null, null, null };
public Dictionary<DS4Controls, X360Controls>[] shiftCustomMapButtons = { null, null, null, null, null };
public Dictionary<DS4Controls, String>[] shiftCustomMapExtras = { null, null, null, null, null };
public List<String>[] profileActions = { null, null, null, null, null };
public BackingStore()
{
for (int i = 0; i < 5; i++)
@ -869,6 +946,7 @@ namespace DS4Control
shiftCustomMapMacros[i] = new Dictionary<DS4Controls, String>();
shiftCustomMapButtons[i] = new Dictionary<DS4Controls, X360Controls>();
shiftCustomMapExtras[i] = new Dictionary<DS4Controls, string>();
profileActions[i] = new List<string>();
}
}
@ -969,7 +1047,7 @@ namespace DS4Control
XmlNode xmlColor = m_Xdoc.CreateNode(XmlNodeType.Element, "Color", null);
xmlColor.InnerText = m_Leds[device][0].ToString() + "," + m_Leds[device][1].ToString() + "," + m_Leds[device][2].ToString();
Node.AppendChild(xmlColor);
XmlNode xmlRumbleBoost = m_Xdoc.CreateNode(XmlNodeType.Element, "RumbleBoost", null); xmlRumbleBoost.InnerText = m_Rumble[device].ToString(); Node.AppendChild(xmlRumbleBoost);
XmlNode xmlRumbleBoost = m_Xdoc.CreateNode(XmlNodeType.Element, "RumbleBoost", null); xmlRumbleBoost.InnerText = rumble[device].ToString(); Node.AppendChild(xmlRumbleBoost);
XmlNode xmlLedAsBatteryIndicator = m_Xdoc.CreateNode(XmlNodeType.Element, "ledAsBatteryIndicator", null); xmlLedAsBatteryIndicator.InnerText = ledAsBattery[device].ToString(); Node.AppendChild(xmlLedAsBatteryIndicator);
XmlNode xmlLowBatteryFlash = m_Xdoc.CreateNode(XmlNodeType.Element, "lowBatteryFlash", null); xmlLowBatteryFlash.InnerText = flashLedLowBattery[device].ToString(); Node.AppendChild(xmlLowBatteryFlash);
XmlNode xmlFlashBatterAt = m_Xdoc.CreateNode(XmlNodeType.Element, "flashBatteryAt", null); xmlFlashBatterAt.InnerText = flashAt[device].ToString(); Node.AppendChild(xmlFlashBatterAt);
@ -992,8 +1070,8 @@ namespace DS4Control
XmlNode xmlTapSensitivity = m_Xdoc.CreateNode(XmlNodeType.Element, "tapSensitivity", null); xmlTapSensitivity.InnerText = tapSensitivity[device].ToString(); Node.AppendChild(xmlTapSensitivity);
XmlNode xmlDouble = m_Xdoc.CreateNode(XmlNodeType.Element, "doubleTap", null); xmlDouble.InnerText = doubleTap[device].ToString(); Node.AppendChild(xmlDouble);
XmlNode xmlScrollSensitivity = m_Xdoc.CreateNode(XmlNodeType.Element, "scrollSensitivity", null); xmlScrollSensitivity.InnerText = scrollSensitivity[device].ToString(); Node.AppendChild(xmlScrollSensitivity);
XmlNode xmlLeftTriggerMiddle = m_Xdoc.CreateNode(XmlNodeType.Element, "LeftTriggerMiddle", null); xmlLeftTriggerMiddle.InnerText = m_LeftTriggerMiddle[device].ToString(); Node.AppendChild(xmlLeftTriggerMiddle);
XmlNode xmlRightTriggerMiddle = m_Xdoc.CreateNode(XmlNodeType.Element, "RightTriggerMiddle", null); xmlRightTriggerMiddle.InnerText = m_RightTriggerMiddle[device].ToString(); Node.AppendChild(xmlRightTriggerMiddle);
XmlNode xmlLeftTriggerMiddle = m_Xdoc.CreateNode(XmlNodeType.Element, "LeftTriggerMiddle", null); xmlLeftTriggerMiddle.InnerText = l2Deadzone[device].ToString(); Node.AppendChild(xmlLeftTriggerMiddle);
XmlNode xmlRightTriggerMiddle = m_Xdoc.CreateNode(XmlNodeType.Element, "RightTriggerMiddle", null); xmlRightTriggerMiddle.InnerText = r2Deadzone[device].ToString(); Node.AppendChild(xmlRightTriggerMiddle);
XmlNode xmlButtonMouseSensitivity = m_Xdoc.CreateNode(XmlNodeType.Element, "ButtonMouseSensitivity", null); xmlButtonMouseSensitivity.InnerText = buttonMouseSensitivity[device].ToString(); Node.AppendChild(xmlButtonMouseSensitivity);
XmlNode xmlRainbow = m_Xdoc.CreateNode(XmlNodeType.Element, "Rainbow", null); xmlRainbow.InnerText = rainbow[device].ToString(); Node.AppendChild(xmlRainbow);
XmlNode xmlLSD = m_Xdoc.CreateNode(XmlNodeType.Element, "LSDeadZone", null); xmlLSD.InnerText = LSDeadzone[device].ToString(); Node.AppendChild(xmlLSD);
@ -1007,6 +1085,9 @@ namespace DS4Control
XmlNode xmlDinput = m_Xdoc.CreateNode(XmlNodeType.Element, "DinputOnly", null); xmlDinput.InnerText = dinputOnly[device].ToString(); Node.AppendChild(xmlDinput);
XmlNode xmlStartTouchpadOff = m_Xdoc.CreateNode(XmlNodeType.Element, "StartTouchpadOff", null); xmlStartTouchpadOff.InnerText = startTouchpadOff[device].ToString(); Node.AppendChild(xmlStartTouchpadOff);
XmlNode xmlUseTPforControls = m_Xdoc.CreateNode(XmlNodeType.Element, "UseTPforControls", null); xmlUseTPforControls.InnerText = useTPforControls[device].ToString(); Node.AppendChild(xmlUseTPforControls);
XmlNode xmlLSC = m_Xdoc.CreateNode(XmlNodeType.Element, "LSCurve", null); xmlLSC.InnerText = lsCurve[device].ToString(); Node.AppendChild(xmlLSC);
XmlNode xmlRSC = m_Xdoc.CreateNode(XmlNodeType.Element, "RSCurve", null); xmlRSC.InnerText = rsCurve[device].ToString(); Node.AppendChild(xmlRSC);
XmlNode xmlProfileActions = m_Xdoc.CreateNode(XmlNodeType.Element, "ProfileActions", null); xmlProfileActions.InnerText = string.Join("/", profileActions[device]); Node.AppendChild(xmlProfileActions);
XmlNode NodeControl = m_Xdoc.CreateNode(XmlNodeType.Element, "Control", null);
XmlNode Key = m_Xdoc.CreateNode(XmlNodeType.Element, "Key", null);
@ -1245,7 +1326,10 @@ namespace DS4Control
case "bnGyroZP": return DS4Controls.GyroZPos;
case "bnGyroZN": return DS4Controls.GyroZNeg;
case "bnSwipeUp": return DS4Controls.SwipeUp;
case "bnSwipeDown": return DS4Controls.SwipeDown;
case "bnSwipeLeft": return DS4Controls.SwipeLeft;
case "bnSwipeRight": return DS4Controls.SwipeRight;
#region OldShiftname
case "sbnShare": return DS4Controls.Share;
@ -1287,11 +1371,6 @@ namespace DS4Control
case "sbnGyroZN": return DS4Controls.GyroZNeg;
#endregion
case "bnSwipeUp": return DS4Controls.SwipeUp;
case "bnSwipeDown": return DS4Controls.SwipeDown;
case "bnSwipeLeft": return DS4Controls.SwipeLeft;
case "bnSwipeRight": return DS4Controls.SwipeRight;
case "bnShiftShare": return DS4Controls.Share;
case "bnShiftL3": return DS4Controls.L3;
case "bnShiftR3": return DS4Controls.R3;
@ -1447,7 +1526,7 @@ namespace DS4Control
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/Blue"); Byte.TryParse(Item.InnerText, out m_Leds[device][2]); }
catch { missingSetting = true; }
}
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RumbleBoost"); Byte.TryParse(Item.InnerText, out m_Rumble[device]); }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RumbleBoost"); Byte.TryParse(Item.InnerText, out rumble[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ledAsBatteryIndicator"); Boolean.TryParse(Item.InnerText, out ledAsBattery[device]); }
@ -1542,9 +1621,9 @@ namespace DS4Control
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/scrollSensitivity"); Int32.TryParse(Item.InnerText, out scrollSensitivity[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LeftTriggerMiddle"); Byte.TryParse(Item.InnerText, out m_LeftTriggerMiddle[device]); }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LeftTriggerMiddle"); Byte.TryParse(Item.InnerText, out l2Deadzone[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RightTriggerMiddle"); Byte.TryParse(Item.InnerText, out m_RightTriggerMiddle[device]); }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RightTriggerMiddle"); Byte.TryParse(Item.InnerText, out r2Deadzone[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ButtonMouseSensitivity"); Int32.TryParse(Item.InnerText, out buttonMouseSensitivity[device]); }
catch { missingSetting = true; }
@ -1592,6 +1671,18 @@ namespace DS4Control
try
{ Item = m_Xdoc.SelectSingleNode("/" + rootname + "/UseTPforControls"); Boolean.TryParse(Item.InnerText, out useTPforControls[device]); }
catch { useTPforControls[device] = false; missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LSCurve"); int.TryParse(Item.InnerText, out lsCurve[device]); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RSCurve"); int.TryParse(Item.InnerText, out rsCurve[device]); }
catch { missingSetting = true; }
try
{
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ProfileActions");
profileActions[device].Clear();
if (!string.IsNullOrEmpty(Item.InnerText))
profileActions[device].AddRange(Item.InnerText.Split('/')); }
catch { profileActions[device].Clear(); missingSetting = true; }
DS4KeyType keyType;
UInt16 wvk;
if (buttons == null)
@ -1848,6 +1939,8 @@ namespace DS4Control
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/FirstXinputPort"); Int32.TryParse(Item.InnerText, out firstXinputPort); }
catch { missingSetting = true; }
try { Item = m_Xdoc.SelectSingleNode("/Profile/CloseMinimizes"); Boolean.TryParse(Item.InnerText, out closeMini); }
catch { missingSetting = true; }
}
}
catch { }
@ -1893,11 +1986,207 @@ namespace DS4Control
XmlNode xmlDS4Mapping = m_Xdoc.CreateNode(XmlNodeType.Element, "UseDS4ForMapping", null); xmlDS4Mapping.InnerText = ds4Mapping.ToString(); Node.AppendChild(xmlDS4Mapping);
XmlNode xmlQuickCharge = m_Xdoc.CreateNode(XmlNodeType.Element, "QuickCharge", null); xmlQuickCharge.InnerText = quickCharge.ToString(); Node.AppendChild(xmlQuickCharge);
XmlNode xmlFirstXinputPort = m_Xdoc.CreateNode(XmlNodeType.Element, "FirstXinputPort", null); xmlFirstXinputPort.InnerText = firstXinputPort.ToString(); Node.AppendChild(xmlFirstXinputPort);
XmlNode xmlCloseMini = m_Xdoc.CreateNode(XmlNodeType.Element, "CloseMinimizes", null); xmlCloseMini.InnerText = closeMini.ToString(); Node.AppendChild(xmlCloseMini);
m_Xdoc.AppendChild(Node);
try { m_Xdoc.Save(m_Profile); }
catch (UnauthorizedAccessException) { Saved = false; }
return Saved;
}
private void CreateAction()
{
XmlDocument m_Xdoc = new XmlDocument();
XmlNode Node;
Node = m_Xdoc.CreateXmlDeclaration("1.0", "utf-8", String.Empty);
m_Xdoc.AppendChild(Node);
Node = m_Xdoc.CreateComment(String.Format(" Special Actions Configuration Data. {0} ", DateTime.Now));
m_Xdoc.AppendChild(Node);
Node = m_Xdoc.CreateWhitespace("\r\n");
m_Xdoc.AppendChild(Node);
Node = m_Xdoc.CreateNode(XmlNodeType.Element, "Actions", "");
m_Xdoc.AppendChild(Node);
m_Xdoc.Save(m_Actions);
}
public bool SaveAction(string name, string controls, int mode, string details, bool edit, string ucontrols = "")
{
bool saved = true;
if (!File.Exists(m_Actions))
CreateAction();
m_Xdoc.Load(m_Actions);
XmlNode Node;
Node = m_Xdoc.CreateComment(String.Format(" Special Actions Configuration Data. {0} ", DateTime.Now));
foreach (XmlNode node in m_Xdoc.SelectNodes("//comment()"))
node.ParentNode.ReplaceChild(Node, node);
Node = m_Xdoc.SelectSingleNode("Actions");
XmlElement el = m_Xdoc.CreateElement("Action");
el.SetAttribute("Name", name);
el.AppendChild(m_Xdoc.CreateElement("Trigger")).InnerText = controls;
switch (mode)
{
case 1:
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "Macro";
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
break;
case 2:
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "Program";
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
break;
case 3:
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "Profile";
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
el.AppendChild(m_Xdoc.CreateElement("UnloadTrigger")).InnerText = ucontrols;
break;
}
if (edit)
{
XmlNode oldxmlprocess = m_Xdoc.SelectSingleNode("/Actions/Action[@Name=\"" + name + "\"]");
Node.ReplaceChild(el, oldxmlprocess);
}
else { Node.AppendChild(el); }
m_Xdoc.AppendChild(Node);
try { m_Xdoc.Save(m_Actions); }
catch { saved = false; }
LoadActions();
return saved;
}
public void RemoveAction(string name)
{
m_Xdoc.Load(m_Actions);
XmlNode Node = m_Xdoc.SelectSingleNode("Actions");
XmlNode Item = m_Xdoc.SelectSingleNode("/Actions/Action[@Name=\"" + name + "\"]");
if (Item != null)
Node.RemoveChild(Item);
m_Xdoc.AppendChild(Node);
m_Xdoc.Save(m_Actions);
LoadActions();
}
public bool LoadActions()
{
bool saved = true;
if (!File.Exists(Global.appdatapath + "\\Actions.xml"))
return false;
try
{
actions.Clear();
XmlDocument doc = new XmlDocument();
doc.Load(Global.appdatapath + "\\Actions.xml");
XmlNodeList actionslist = doc.SelectNodes("Actions/Action");
string name, controls, type, details, ucontrols;
foreach (XmlNode x in actionslist)
{
name = x.Attributes["Name"].Value;
controls = x.ChildNodes[0].InnerText;
type = x.ChildNodes[1].InnerText;
details = x.ChildNodes[2].InnerText;
if (type == "Profile")
{
ucontrols = x.ChildNodes[3].InnerText;
actions.Add(new SpecialAction(name, controls, type, details, ucontrols));
}
else
actions.Add(new SpecialAction(name, controls, type, details));
}
}
catch { saved = false; }
return saved;
}
}
public class SpecialAction
{
public string name;
public List<DS4Controls> trigger = new List<DS4Controls>();
public string type;
public string controls;
public List<int> macro = new List<int>();
public string details;
public List<DS4Controls> uTrigger = new List<DS4Controls>();
public string ucontrols;
public SpecialAction(string name, string controls, string type, string details, string ucontrols = "")
{
this.name = name;
this.type = type;
this.controls = controls;
string[] ctrls = controls.Split('/');
foreach (string s in ctrls)
trigger.Add(getDS4ControlsByName(s));
if (type == "Macro")
{
string[] macs = details.Split('/');
foreach (string s in macs)
{
int v;
if (int.TryParse(s, out v))
macro.Add(v);
}
}
else
this.details = details;
if (!string.IsNullOrEmpty(ucontrols))
{
this.ucontrols = ucontrols;
string[] uctrls = ucontrols.Split('/');
foreach (string s in uctrls)
uTrigger.Add(getDS4ControlsByName(s));
}
}
private DS4Controls getDS4ControlsByName(string key)
{
switch (key)
{
case "Share": return DS4Controls.Share;
case "L3": return DS4Controls.L3;
case "R3": return DS4Controls.R3;
case "Options": return DS4Controls.Options;
case "Up": return DS4Controls.DpadUp;
case "Right": return DS4Controls.DpadRight;
case "Down": return DS4Controls.DpadDown;
case "Left": return DS4Controls.DpadLeft;
case "L1": return DS4Controls.L1;
case "R1": return DS4Controls.R1;
case "Triangle": return DS4Controls.Triangle;
case "Circle": return DS4Controls.Circle;
case "Cross": return DS4Controls.Cross;
case "Square": return DS4Controls.Square;
case "PS": return DS4Controls.PS;
case "Left Stick Left": return DS4Controls.LXNeg;
case "Left Stick Up": return DS4Controls.LYNeg;
case "Right Stick Left": return DS4Controls.RXNeg;
case "Right Stick Up": return DS4Controls.RYNeg;
case "Left Stick Right": return DS4Controls.LXPos;
case "Left Stick Down": return DS4Controls.LYPos;
case "Right Stick Right": return DS4Controls.RXPos;
case "Right Stick Down": return DS4Controls.RYPos;
case "L2": return DS4Controls.L2;
case "R2": return DS4Controls.R2;
case "Left Touch": return DS4Controls.TouchLeft;
case "Multitouch": return DS4Controls.TouchMulti;
case "Upper Touch": return DS4Controls.TouchUpper;
case "Right Touch": return DS4Controls.TouchRight;
case "Swipe Up": return DS4Controls.SwipeUp;
case "Swipe Down": return DS4Controls.SwipeDown;
case "Swipe Left": return DS4Controls.SwipeLeft;
case "Swipe Right": return DS4Controls.SwipeRight;
}
return 0;
}
}
}

View File

@ -129,36 +129,21 @@ namespace DS4Control
if (state.PS) Output[11] |= (Byte)(1 << 2); // Guide
if (state.L2 > Global.getLeftTriggerMiddle(device))
Output[12] = state.L2; // Left Trigger
if (state.R2 > Global.getRightTriggerMiddle(device))
Output[13] = state.R2; // Right Trigger
Output[12] = state.L2; // Left Trigger
Output[13] = state.R2; // Right Trigger
Int32 ThumbLX = Scale(state.LX, false);
Int32 ThumbLY = -Scale(state.LY, false);
Int32 ThumbRX = Scale(state.RX, false);
Int32 ThumbRY = -Scale(state.RY, false);
if (state.LX > 127 + Global.getLSDeadzone(device) || state.LX < 127 - Global.getLSDeadzone(device))
{
Output[14] = (Byte)((ThumbLX >> 0) & 0xFF); // LX
Output[15] = (Byte)((ThumbLX >> 8) & 0xFF);
}
if (state.LY > 127 + Global.getLSDeadzone(device) || state.LY < 127 - Global.getLSDeadzone(device))
{
Output[16] = (Byte)((ThumbLY >> 0) & 0xFF); // LY
Output[17] = (Byte)((ThumbLY >> 8) & 0xFF);
}
if (state.RX > 127 + Global.getRSDeadzone(device) || state.RX < 127 - Global.getRSDeadzone(device))
{
Output[18] = (Byte)((ThumbRX >> 0) & 0xFF); // RX
Output[19] = (Byte)((ThumbRX >> 8) & 0xFF);
}
if (state.RY > 127 + Global.getRSDeadzone(device) || state.RY < 127 - Global.getRSDeadzone(device))
{
Output[20] = (Byte)((ThumbRY >> 0) & 0xFF); // RY
Output[21] = (Byte)((ThumbRY >> 8) & 0xFF);
}
Output[14] = (Byte)((ThumbLX >> 0) & 0xFF); // LX
Output[15] = (Byte)((ThumbLX >> 8) & 0xFF);
Output[16] = (Byte)((ThumbLY >> 0) & 0xFF); // LY
Output[17] = (Byte)((ThumbLY >> 8) & 0xFF);
Output[18] = (Byte)((ThumbRX >> 0) & 0xFF); // RX
Output[19] = (Byte)((ThumbRX >> 8) & 0xFF);
Output[20] = (Byte)((ThumbRY >> 0) & 0xFF); // RY
Output[21] = (Byte)((ThumbRY >> 8) & 0xFF);
}
public Boolean Plugin(Int32 Serial)

View File

@ -121,6 +121,7 @@
this.cBNotifications = new System.Windows.Forms.CheckBox();
this.cBDisconnectBT = new System.Windows.Forms.CheckBox();
this.cBQuickCharge = new System.Windows.Forms.CheckBox();
this.cBCloseMini = new System.Windows.Forms.CheckBox();
this.pnlXIPorts = new System.Windows.Forms.Panel();
this.lbUseXIPorts = new System.Windows.Forms.Label();
this.nUDXIPorts = new System.Windows.Forms.NumericUpDown();
@ -132,6 +133,7 @@
this.lnkControllers = new System.Windows.Forms.LinkLabel();
this.tabLog = new System.Windows.Forms.TabPage();
this.saveProfiles = new System.Windows.Forms.SaveFileDialog();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.pnlButton.SuspendLayout();
this.cMTaskbar.SuspendLayout();
this.tabMain.SuspendLayout();
@ -152,6 +154,7 @@
this.pnlXIPorts.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDXIPorts)).BeginInit();
this.tabLog.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// lvDebug
@ -746,17 +749,14 @@
this.fLPSettings.Controls.Add(this.cBSwipeProfiles);
this.fLPSettings.Controls.Add(this.StartWindowsCheckBox);
this.fLPSettings.Controls.Add(this.startMinimizedCheckBox);
this.fLPSettings.Controls.Add(this.cBUpdate);
this.fLPSettings.Controls.Add(this.pNUpdate);
this.fLPSettings.Controls.Add(this.cBNotifications);
this.fLPSettings.Controls.Add(this.cBDisconnectBT);
this.fLPSettings.Controls.Add(this.cBCloseMini);
this.fLPSettings.Controls.Add(this.cBQuickCharge);
this.fLPSettings.Controls.Add(this.cBUpdate);
this.fLPSettings.Controls.Add(this.pNUpdate);
this.fLPSettings.Controls.Add(this.pnlXIPorts);
this.fLPSettings.Controls.Add(this.linkProfiles);
this.fLPSettings.Controls.Add(this.lLBUpdate);
this.fLPSettings.Controls.Add(this.linkSetup);
this.fLPSettings.Controls.Add(this.linkUninstall);
this.fLPSettings.Controls.Add(this.lnkControllers);
this.fLPSettings.Controls.Add(this.flowLayoutPanel1);
this.fLPSettings.Name = "fLPSettings";
//
// hideDS4CheckBox
@ -852,6 +852,13 @@
this.cBQuickCharge.UseVisualStyleBackColor = true;
this.cBQuickCharge.CheckedChanged += new System.EventHandler(this.cBQuickCharge_CheckedChanged);
//
// cBCloseMini
//
resources.ApplyResources(this.cBCloseMini, "cBCloseMini");
this.cBCloseMini.Name = "cBCloseMini";
this.cBCloseMini.UseVisualStyleBackColor = true;
this.cBCloseMini.CheckedChanged += new System.EventHandler(this.cBCloseMini_CheckedChanged);
//
// pnlXIPorts
//
this.pnlXIPorts.Controls.Add(this.lbUseXIPorts);
@ -942,6 +949,16 @@
//
resources.ApplyResources(this.saveProfiles, "saveProfiles");
//
// flowLayoutPanel1
//
resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1");
this.flowLayoutPanel1.Controls.Add(this.linkProfiles);
this.flowLayoutPanel1.Controls.Add(this.lnkControllers);
this.flowLayoutPanel1.Controls.Add(this.linkUninstall);
this.flowLayoutPanel1.Controls.Add(this.linkSetup);
this.flowLayoutPanel1.Controls.Add(this.lLBUpdate);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
//
// DS4Form
//
this.AllowDrop = true;
@ -983,6 +1000,7 @@
this.pnlXIPorts.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDXIPorts)).EndInit();
this.tabLog.ResumeLayout(false);
this.flowLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -1012,7 +1030,6 @@
private System.Windows.Forms.TabControl tabMain;
private System.Windows.Forms.TabPage tabProfiles;
private System.Windows.Forms.TabPage tabLog;
private System.Windows.Forms.ListBox lBProfiles;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton tsBNewProfle;
private System.Windows.Forms.ToolStripButton tsBEditProfile;
@ -1091,6 +1108,9 @@
private System.Windows.Forms.Label lbUseXIPorts;
private System.Windows.Forms.NumericUpDown nUDXIPorts;
private System.Windows.Forms.Label lbLastXIPort;
public System.Windows.Forms.ListBox lBProfiles;
private System.Windows.Forms.CheckBox cBCloseMini;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
//private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
}
}

View File

@ -20,7 +20,6 @@ namespace DS4Windows
public partial class DS4Form : Form
{
public string[] arguements;
private DS4Control.Control rootHub;
delegate void LogDebugDelegate(DateTime Time, String Data);
protected Label[] Pads, Batteries;
@ -50,7 +49,8 @@ namespace DS4Windows
ToolTip tt = new ToolTip();
public String m_Profile = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + "\\Profiles.xml";
protected XmlDocument m_Xdoc = new XmlDocument();
public bool mAllowVisible;
public bool mAllowVisible;
bool contextclose;
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
@ -147,8 +147,7 @@ namespace DS4Windows
}
Icon = Properties.Resources.DS4W;
notifyIcon1.Icon = Properties.Resources.DS4W;
rootHub = new DS4Control.Control();
rootHub.Debug += On_Debug;
Program.rootHub.Debug += On_Debug;
Log.GuiLog += On_Debug;
Log.TrayIconLog += ShowNotification;
// tmrUpdate.Enabled = true; TODO remove tmrUpdate and leave tick()
@ -191,24 +190,36 @@ namespace DS4Windows
cBDisconnectBT.Checked = Global.getDCBTatStop();
cBQuickCharge.Checked = Global.getQuickCharge();
nUDXIPorts.Value = Global.getFirstXinputPort();
rootHub.x360Bus.FirstController = Global.getFirstXinputPort();
Program.rootHub.x360Bus.FirstController = Global.getFirstXinputPort();
// New settings
this.Width = Global.getFormWidth();
this.Height = Global.getFormHeight();
startMinimizedCheckBox.CheckedChanged -= startMinimizedCheckBox_CheckedChanged;
startMinimizedCheckBox.Checked = Global.getStartMinimized();
startMinimizedCheckBox.CheckedChanged += startMinimizedCheckBox_CheckedChanged;
if (!startMinimizedCheckBox.Checked)
cBCloseMini.Checked = Global.getCloseMini();
Global.LoadActions();
bool start = true;
bool mini = false;
for (int i = 0; i < arguements.Length; i++)
{
if (arguements[i] == "-stop")
start = false;
if (arguements[i] == "-m")
mini = true;
if (mini && start)
break;
}
if (!(startMinimizedCheckBox.Checked || mini))
{
mAllowVisible = true;
Show();
}
//this.WindowState = FormWindowState.Minimized;
Form_Resize(null, null);
RefreshProfiles();
for (int i = 0; i < 4; i++)
{
Global.LoadProfile(i, true, rootHub);
Global.LoadProfile(i, true, Program.rootHub);
}
LoadP();
Global.ControllerStatusChange += ControllerStatusChange;
@ -216,13 +227,6 @@ namespace DS4Windows
Enable_Controls(1, false);
Enable_Controls(2, false);
Enable_Controls(3, false);
bool start = true;
foreach (string s in arguements)
if (s == "stop")
{
start = false;
break;
}
if (btnStartStop.Enabled && start)
btnStartStop_Clicked();
startToolStripMenuItem.Text = btnStartStop.Text;
@ -261,10 +265,18 @@ namespace DS4Windows
test.Tick += test_Tick;
if (!System.IO.Directory.Exists(Global.appdatapath + "\\Virtual Bus Driver"))
linkUninstall.Visible = false;
StartWindowsCheckBox.Checked = File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\DS4Windows.lnk");
if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\DS4Windows.lnk"))
{
StartWindowsCheckBox.Checked = true;
string lnkpath = WinProgs.ResolveShortcutAndArgument(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\DS4Windows.lnk");
if (lnkpath.EndsWith("-m"))
{
File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\DS4Windows.lnk");
appShortcutToStartup();
}
}
}
protected override void SetVisibleCore(bool value)
{
if (!mAllowVisible)
@ -323,14 +335,14 @@ namespace DS4Windows
private void test_Tick(object sender, EventArgs e)
{
lBTest.Visible = true;
lBTest.Text = rootHub.oldtouchvalue[0].ToString();
lBTest.Text = Program.rootHub.oldtouchvalue[0].ToString();
}
void Hotkeys(object sender, EventArgs e)
{
if (Global.getSwipeProfiles())
for (int i = 0; i < 4; i++)
{
string slide = rootHub.TouchpadSlide(i);
string slide = Program.rootHub.TouchpadSlide(i);
if (slide == "left")
if (cbs[i].SelectedIndex <= 0)
cbs[i].SelectedIndex = cbs[i].Items.Count - 2;
@ -355,7 +367,7 @@ namespace DS4Windows
for (int j = 0; j < 4; j++)
if (proprofiles[j][i] != "(none)" && proprofiles[j][i] != Properties.Resources.noneProfile)
{
Global.LoadTempProfile(j, proprofiles[j][i], true, rootHub); //j is controller index, i is filename
Global.LoadTempProfile(j, proprofiles[j][i], true, Program.rootHub); //j is controller index, i is filename
if (Global.getLaunchProgram(j) != string.Empty) Process.Start(Global.getLaunchProgram(j));
}
tempprofile = name;
@ -367,7 +379,7 @@ namespace DS4Windows
{
tempprofile = "null";
for (int j = 0; j < 4; j++)
Global.LoadProfile(j, false, rootHub);
Global.LoadProfile(j, false, Program.rootHub);
}
}
GC.Collect();
@ -621,14 +633,14 @@ namespace DS4Windows
{
if (btnStartStop.Text == Properties.Resources.StartText)
{
rootHub.Start(log);
Program.rootHub.Start(log);
hotkeysTimer.Start();
btnStartStop.Text = Properties.Resources.StopText;
}
else if (btnStartStop.Text == Properties.Resources.StopText)
{
rootHub.Stop(log);
Program.rootHub.Stop(log);
hotkeysTimer.Stop();
btnStartStop.Text = Properties.Resources.StartText;
}
@ -652,7 +664,7 @@ namespace DS4Windows
Int32 Type = m.WParam.ToInt32();
lock (this)
{
rootHub.HotPlug();
Program.rootHub.HotPlug();
}
}
}
@ -677,20 +689,20 @@ namespace DS4Windows
String tooltip = "DS4Windows v" + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
for (Int32 Index = 0; Index < Pads.Length; Index++)
{
Pads[Index].Text = rootHub.getDS4MacAddress(Index);
DS4Device d = rootHub.DS4Controllers[Index];
Pads[Index].Text = Program.rootHub.getDS4MacAddress(Index);
DS4Device d = Program.rootHub.DS4Controllers[Index];
if (d != null && Global.getQuickCharge() && d.ConnectionType == ConnectionType.BT && d.Charging)
{
d.DisconnectBT();
return;
}
switch (rootHub.getDS4Status(Index))
switch (Program.rootHub.getDS4Status(Index))
{
case "USB": statPB[Index].Image = Properties.Resources.USB; tt.SetToolTip(statPB[Index], ""); break;
case "BT": statPB[Index].Image = Properties.Resources.BT; tt.SetToolTip(statPB[Index], "Right click to disconnect"); break;
default: statPB[Index].Image = Properties.Resources.none; tt.SetToolTip(statPB[Index], ""); break;
}
Batteries[Index].Text = rootHub.getDS4Battery(Index);
Batteries[Index].Text = Program.rootHub.getDS4Battery(Index);
if (Pads[Index].Text != String.Empty)
{
Pads[Index].Enabled = true;
@ -710,10 +722,10 @@ namespace DS4Windows
Enable_Controls(Index, false);
shortcuts[Index].Enabled = false;
}
//if (((Index + 1) + ": " + rootHub.getShortDS4ControllerInfo(Index)).Length > 50)
//MessageBox.Show(((Index + 1) + ": " + rootHub.getShortDS4ControllerInfo(Index)).Length.ToString());
if (rootHub.getShortDS4ControllerInfo(Index) != Properties.Resources.NoneText)
tooltip += "\n" + (Index + 1) + ": " + rootHub.getShortDS4ControllerInfo(Index); // Carefully stay under the 63 character limit.
//if (((Index + 1) + ": " + Program.rootHub.getShortDS4ControllerInfo(Index)).Length > 50)
//MessageBox.Show(((Index + 1) + ": " + Program.rootHub.getShortDS4ControllerInfo(Index)).Length.ToString());
if (Program.rootHub.getShortDS4ControllerInfo(Index) != Properties.Resources.NoneText)
tooltip += "\n" + (Index + 1) + ": " + Program.rootHub.getShortDS4ControllerInfo(Index); // Carefully stay under the 63 character limit.
}
btnClear.Enabled = lvDebug.Items.Count > 0;
if (tooltip.Length > 63)
@ -725,8 +737,8 @@ namespace DS4Windows
private void pBStatus_MouseClick(object sender, MouseEventArgs e)
{
int i = Int32.Parse(((PictureBox)sender).Tag.ToString());
if (e.Button == System.Windows.Forms.MouseButtons.Right && rootHub.getDS4Status(i) == "BT" && !rootHub.DS4Controllers[i].Charging)
rootHub.DS4Controllers[i].DisconnectBT();
if (e.Button == System.Windows.Forms.MouseButtons.Right && Program.rootHub.getDS4Status(i) == "BT" && !Program.rootHub.DS4Controllers[i].Charging)
Program.rootHub.DS4Controllers[i].DisconnectBT();
}
private void Enable_Controls(int device, bool on)
@ -884,7 +896,7 @@ namespace DS4Windows
tSTBProfile.Text = profile;
else
tSTBProfile.Text = "<" + Properties.Resources.TypeProfileName + ">";
opt = new Options(rootHub, devID, profile, this);
opt = new Options(devID, profile, this);
opt.Text = "Options for Controller " + (devID + 1);
opt.Icon = this.Icon;
opt.TopLevel = false;
@ -940,6 +952,9 @@ namespace DS4Windows
private void editMenu_Click(object sender, EventArgs e)
{
mAllowVisible = true;
this.Show();
WindowState = FormWindowState.Normal;
ToolStripMenuItem em = (ToolStripMenuItem)sender;
int i = Int32.Parse(em.Tag.ToString());
if (em.Text == Properties.Resources.ContextNew.Replace("*number*", (i + 1).ToString()))
@ -998,7 +1013,7 @@ namespace DS4Windows
shortcuts[tdevice].Text = Properties.Resources.ContextEdit.Replace("*number*", (tdevice + 1).ToString());
Global.setAProfile(tdevice, cb.Items[cb.SelectedIndex].ToString());
Global.Save();
Global.LoadProfile(tdevice, true, rootHub);
Global.LoadProfile(tdevice, true, Program.rootHub);
}
else if (cb.SelectedIndex == cb.Items.Count - 1 && cb.Items.Count > 1) //if +New Profile selected
ShowOptions(tdevice, "");
@ -1023,6 +1038,7 @@ namespace DS4Windows
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
contextclose = true;
this.Close();
}
@ -1046,7 +1062,10 @@ namespace DS4Windows
WindowState = FormWindowState.Normal;
}
else if (e.Button == System.Windows.Forms.MouseButtons.Middle)
{
contextclose = true;
this.Close();
}
}
private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
{
@ -1082,6 +1101,7 @@ namespace DS4Windows
{
string app = Assembly.GetExecutingAssembly().Location;
lnk.TargetPath = Assembly.GetExecutingAssembly().Location;
lnk.Arguments = "-m";
lnk.IconLocation = app.Replace('\\', '/');
lnk.Save();
}
@ -1131,6 +1151,10 @@ namespace DS4Windows
case "cBSwipeProfiles": lbLastMessage.Text = Properties.Resources.TwoFingerSwipe; break;
case "cBQuickCharge": lbLastMessage.Text = Properties.Resources.QuickCharge; break;
case "pnlXIPorts": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "lbUseXIPorts": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "nUDXIPorts": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "lbLastXIPort": lbLastMessage.Text = Properties.Resources.XinputPorts; break;
case "cBCloseMini": lbLastMessage.Text = Properties.Resources.CloseMinimize; break;
default: lbLastMessage.Text = "Hover over items to see description or more about"; break;
}
if (lbLastMessage.Text != "Hover over items to see description or more about")
@ -1236,6 +1260,7 @@ namespace DS4Windows
{
if (opt != null)
{
opt.saving = true;
opt.Set();
if (tSTBProfile.Text != null && tSTBProfile.Text != "" && !tSTBProfile.Text.Contains("\\") && !tSTBProfile.Text.Contains("/") && !tSTBProfile.Text.Contains(":") && !tSTBProfile.Text.Contains("*") && !tSTBProfile.Text.Contains("?") && !tSTBProfile.Text.Contains("\"") && !tSTBProfile.Text.Contains("<") && !tSTBProfile.Text.Contains(">") && !tSTBProfile.Text.Contains("|"))
@ -1380,7 +1405,7 @@ namespace DS4Windows
{
Process p = new Process();
p.StartInfo.FileName = Assembly.GetExecutingAssembly().Location;
p.StartInfo.Arguments = "driverinstall";
p.StartInfo.Arguments = "-driverinstall";
p.StartInfo.Verb = "runas";
try { p.Start(); }
catch { }
@ -1398,6 +1423,12 @@ namespace DS4Windows
e.Cancel = true;
return;
}
if (cBCloseMini.Checked && !contextclose)
{
this.WindowState = FormWindowState.Minimized;
e.Cancel = true;
return;
}
if (systemShutdown)
// Reset the variable because the user might cancel the
// shutdown.
@ -1418,7 +1449,7 @@ namespace DS4Windows
if (!String.IsNullOrEmpty(Global.appdatapath))
{
Global.Save();
rootHub.Stop();
Program.rootHub.Stop();
}
}
@ -1463,7 +1494,7 @@ namespace DS4Windows
{
oldxiport = (int)Math.Round(nUDXIPorts.Value, 0);
Global.setFirstXinputPort(oldxiport);
rootHub.x360Bus.FirstController = oldxiport;
Program.rootHub.x360Bus.FirstController = oldxiport;
btnStartStop_Click(sender, e);
btnStartStop_Click(sender, e);
}
@ -1473,6 +1504,11 @@ namespace DS4Windows
{
oldxiport = (int)Math.Round(nUDXIPorts.Value, 0);
}
private void cBCloseMini_CheckedChanged(object sender, EventArgs e)
{
Global.setCloseMini(cBCloseMini.Checked);
}
}
public class ThemeUtil

View File

@ -117,37 +117,84 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnStartStop.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
<data name="chTime.Text" xml:space="preserve">
<value>Hora</value>
</data>
<data name="chData.Text" xml:space="preserve">
<value>Datos</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnStartStop.Location" type="System.Drawing.Point, System.Drawing">
<value>716, 4</value>
<data name="lBTest.Location" type="System.Drawing.Point, System.Drawing">
<value>506, 9</value>
</data>
<data name="btnStartStop.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 23</value>
<data name="lBTest.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 13</value>
</data>
<data name="lBTest.Text" xml:space="preserve">
<value>Usado para probar valores</value>
</data>
<data name="btnStartStop.Text" xml:space="preserve">
<value>Empiezo</value>
<value>Inicio</value>
</data>
<data name="lbLastMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>621, 18</value>
<value>650, 18</value>
</data>
<data name="llbHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>631, 9</value>
<value>655, 9</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>118, 17</value>
<data name="llbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 13</value>
</data>
<data name="StartWindowsCheckBox.Text" xml:space="preserve">
<value>Ejecutar en el inicio</value>
<data name="llbHelp.Text" xml:space="preserve">
<value>Teclas de acceso rapido/Acerca de</value>
</data>
<data name="startMinimizedCheckBox.Location" type="System.Drawing.Point, System.Drawing">
<value>127, 3</value>
<data name="editProfileForController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="hideDS4CheckBox.Location" type="System.Drawing.Point, System.Drawing">
<value>230, 3</value>
<data name="editProfileForController1ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil de Controlador 1</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil de Controlador 2</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil de Controlador 3</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil de Controlador 4</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>223, 6</value>
</data>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<value>Iniciar</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>Abrir</value>
</data>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 22</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>Salir (Boton Central Mouse)</value>
</data>
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>227, 164</value>
</data>
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -6378,43 +6425,43 @@
</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>360, 19</value>
<value>412, 19</value>
</data>
<data name="bnEditC3.Location" type="System.Drawing.Point, System.Drawing">
<value>744, 76</value>
<data name="bnEditC3.Text" xml:space="preserve">
<value>Editar</value>
</data>
<data name="bnEditC4.Location" type="System.Drawing.Point, System.Drawing">
<value>744, 105</value>
<data name="bnEditC4.Text" xml:space="preserve">
<value>Editar</value>
</data>
<data name="cBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>616, 19</value>
<value>727, 19</value>
</data>
<data name="bnEditC2.Location" type="System.Drawing.Point, System.Drawing">
<value>744, 47</value>
<data name="bnEditC2.Text" xml:space="preserve">
<value>Editar</value>
</data>
<data name="cBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>616, 48</value>
<value>727, 48</value>
</data>
<data name="cBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>616, 77</value>
<value>727, 77</value>
</data>
<data name="bnEditC1.Location" type="System.Drawing.Point, System.Drawing">
<value>744, 18</value>
<data name="bnEditC1.Text" xml:space="preserve">
<value>Editar</value>
</data>
<data name="cBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>616, 106</value>
<value>727, 106</value>
</data>
<data name="lBSelectedProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>605, 0</value>
<value>718, 0</value>
</data>
<data name="lBSelectedProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 15</value>
<value>130, 15</value>
</data>
<data name="lBSelectedProfile.Text" xml:space="preserve">
<value>Perfil Seleccionado</value>
<value>Perfil seleccionado</value>
</data>
<data name="lBStatus.Location" type="System.Drawing.Point, System.Drawing">
<value>354, 0</value>
<value>406, 0</value>
</data>
<data name="lBStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 15</value>
@ -6423,25 +6470,25 @@
<value>Estado</value>
</data>
<data name="lBBattery.Location" type="System.Drawing.Point, System.Drawing">
<value>499, 0</value>
<value>597, 0</value>
</data>
<data name="lBBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 15</value>
</data>
<data name="lBBattery.Text" xml:space="preserve">
<value>Batería</value>
<value>Bateria</value>
</data>
<data name="lBBatt1.Location" type="System.Drawing.Point, System.Drawing">
<value>506, 22</value>
<value>604, 22</value>
</data>
<data name="lBBatt2.Location" type="System.Drawing.Point, System.Drawing">
<value>506, 51</value>
<value>604, 51</value>
</data>
<data name="lBBatt3.Location" type="System.Drawing.Point, System.Drawing">
<value>506, 80</value>
<value>604, 80</value>
</data>
<data name="lBBatt4.Location" type="System.Drawing.Point, System.Drawing">
<value>506, 109</value>
<value>604, 109</value>
</data>
<data name="pBStatus2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -6500,7 +6547,7 @@
</value>
</data>
<data name="pBStatus2.Location" type="System.Drawing.Point, System.Drawing">
<value>360, 48</value>
<value>412, 48</value>
</data>
<data name="pBStatus3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -6559,7 +6606,7 @@
</value>
</data>
<data name="pBStatus3.Location" type="System.Drawing.Point, System.Drawing">
<value>360, 77</value>
<value>412, 77</value>
</data>
<data name="pBStatus4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -6618,11 +6665,122 @@
</value>
</data>
<data name="pBStatus4.Location" type="System.Drawing.Point, System.Drawing">
<value>360, 106</value>
<value>412, 106</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>Controladores</value>
</data>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>Editar</value>
</data>
<data name="assignToController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="assignToController1ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignado al Controlador 1</value>
</data>
<data name="assignToController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="assignToController2ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignado al Controlador 2</value>
</data>
<data name="assignToController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="assignToController3ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignado al Controlador 3</value>
</data>
<data name="assignToController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="assignToController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignado al Controlador 4</value>
</data>
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="deleteToolStripMenuItem.Text" xml:space="preserve">
<value>Borrar (Del)</value>
</data>
<data name="duplicateToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="duplicateToolStripMenuItem.Text" xml:space="preserve">
<value>Duplicar (Ctrl+C)</value>
</data>
<data name="newProfileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="newProfileToolStripMenuItem.Text" xml:space="preserve">
<value>Nuevo perfil</value>
</data>
<data name="importToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="importToolStripMenuItem.Text" xml:space="preserve">
<value>Importar</value>
</data>
<data name="exportToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 22</value>
</data>
<data name="exportToolStripMenuItem.Text" xml:space="preserve">
<value>Exportar</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 224</value>
</data>
<data name="toolStripLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 22</value>
</data>
<data name="toolStripLabel1.Text" xml:space="preserve">
<value>Nombre de Perfil:</value>
</data>
<data name="tSTBProfile.Text" xml:space="preserve">
<value>&lt;escriba nombre de perfil aqui&gt;</value>
</data>
<data name="tSBSaveProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 22</value>
</data>
<data name="tSBSaveProfile.Text" xml:space="preserve">
<value>Guardar perfil</value>
</data>
<data name="tSBCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 22</value>
</data>
<data name="tSBCancel.Text" xml:space="preserve">
<value>Cancelar</value>
</data>
<data name="tSBKeepSize.Size" type="System.Drawing.Size, System.Drawing">
<value>302, 22</value>
</data>
<data name="tSBKeepSize.Text" xml:space="preserve">
<value>Mantener este tamaño de ventana despues de cerrar</value>
</data>
<data name="tSOptions.Text" xml:space="preserve">
<value>Opciones de perfil</value>
</data>
<data name="tsBNewProfle.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 22</value>
</data>
<data name="tsBNewProfle.Text" xml:space="preserve">
<value>Nuevo</value>
</data>
<data name="tsBNewProfle.ToolTipText" xml:space="preserve">
<value>Crear un nuevo perfil</value>
</data>
<data name="tsBEditProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 22</value>
</data>
<data name="tsBEditProfile.Text" xml:space="preserve">
<value>Editar</value>
</data>
<data name="tsBEditProfile.ToolTipText" xml:space="preserve">
<value>Editar perfil seleccionado (Enter)</value>
</data>
<data name="tsBDeleteProfile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@ -6634,6 +6792,15 @@
+fpa2F0B8sI8HTXskkAAksMnPxCAgQEAgp/brMfRrFIAAAAASUVORK5CYII=
</value>
</data>
<data name="tsBDeleteProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 22</value>
</data>
<data name="tsBDeleteProfile.Text" xml:space="preserve">
<value>Borrar</value>
</data>
<data name="tsBDeleteProfile.ToolTipText" xml:space="preserve">
<value>Borrar perfil seleccionado (Delete)</value>
</data>
<data name="tSBDupProfile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@ -6644,6 +6811,24 @@
K643AAAAAElFTkSuQmCC
</value>
</data>
<data name="tSBDupProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 22</value>
</data>
<data name="tSBDupProfile.Text" xml:space="preserve">
<value>Duplicar</value>
</data>
<data name="tSBDupProfile.ToolTipText" xml:space="preserve">
<value>Duplicar perfil seleccionado (Ctrl+C)</value>
</data>
<data name="tSBImportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 22</value>
</data>
<data name="tSBImportProfile.Text" xml:space="preserve">
<value>Importar</value>
</data>
<data name="tSBImportProfile.ToolTipText" xml:space="preserve">
<value>Importar perfil o perfiles</value>
</data>
<data name="tSBExportProfile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@ -6658,22 +6843,118 @@
AABJRU5ErkJggg==
</value>
</data>
<data name="tSBExportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 22</value>
</data>
<data name="tSBExportProfile.Text" xml:space="preserve">
<value>Exportar</value>
</data>
<data name="tSBExportProfile.ToolTipText" xml:space="preserve">
<value>Exportar perfil seleccionado</value>
</data>
<data name="tabProfiles.Text" xml:space="preserve">
<value>Perfiles</value>
</data>
<data name="tabAutoProfiles.Text" xml:space="preserve">
<value>Auto Perfiles</value>
<value>Auto perfiles</value>
</data>
<data name="cBNotifications.Location" type="System.Drawing.Point, System.Drawing">
<value>355, 3</value>
<data name="hideDS4CheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 17</value>
</data>
<data name="cBUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>475, 3</value>
<data name="hideDS4CheckBox.Text" xml:space="preserve">
<value>Ocultar Controlador DS4</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 17</value>
</data>
<data name="cBSwipeProfiles.Text" xml:space="preserve">
<value>Gestos de Touchpad para cambiar perfiles</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 17</value>
</data>
<data name="StartWindowsCheckBox.Text" xml:space="preserve">
<value>Ejecutar al iniciar Windows</value>
</data>
<data name="startMinimizedCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 17</value>
</data>
<data name="startMinimizedCheckBox.Text" xml:space="preserve">
<value>Iniciar minimizado</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>191, 17</value>
</data>
<data name="cBUpdate.Text" xml:space="preserve">
<value>Comprobar actualizaciones al inicio</value>
</data>
<data name="cBUpdateTime.Items" xml:space="preserve">
<value>horas</value>
</data>
<data name="cBUpdateTime.Items1" xml:space="preserve">
<value>dias</value>
</data>
<data name="cBUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>135, 0</value>
</data>
<data name="lBCheckEvery.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 13</value>
</data>
<data name="lBCheckEvery.Text" xml:space="preserve">
<value>Comprobar cada</value>
</data>
<data name="nUDUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>85, 1</value>
</data>
<data name="pNUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>199, 22</value>
</data>
<data name="cBNotifications.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 17</value>
</data>
<data name="cBNotifications.Text" xml:space="preserve">
<value>Mostrar notificaciones</value>
</data>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 17</value>
</data>
<data name="cBDisconnectBT.Text" xml:space="preserve">
<value>Desconectar de BT cuando se detenga</value>
</data>
<data name="linkProfiles.Text" xml:space="preserve">
<value>Carpeta de perfil</value>
</data>
<data name="linkProfiles.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="lLBUpdate.Text" xml:space="preserve">
<value>Comprobar actualizacion ahora</value>
</data>
<data name="lLBUpdate.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="linkSetup.Text" xml:space="preserve">
<value>Controlador/Configuracion de Driver</value>
</data>
<data name="linkSetup.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="linkUninstall.Text" xml:space="preserve">
<value>Desinstalar VBus Driver</value>
</data>
<data name="linkUninstall.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="lnkControllers.Text" xml:space="preserve">
<value>Panel de Control</value>
</data>
<data name="lnkControllers.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tabSettings.Text" xml:space="preserve">
<value>Configuración</value>
<value>Ajustes</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>455, 231</value>
<data name="tabLog.Text" xml:space="preserve">
<value>Registro</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -155,6 +155,12 @@
<DependentUpon>DS4Form.cs</DependentUpon>
</Compile>
<Compile Include="Settings.cs" />
<Compile Include="SpecActions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SpecActions.Designer.cs">
<DependentUpon>SpecActions.cs</DependentUpon>
</Compile>
<Compile Include="WelcomeDialog.cs">
<SubType>Form</SubType>
</Compile>
@ -170,12 +176,21 @@
<EmbeddedResource Include="Alreadyrunning.resx">
<DependentUpon>Alreadyrunning.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Form.es.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Hotkeys.es.resx">
<DependentUpon>Hotkeys.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Hotkeys.fr-FR.resx">
<DependentUpon>Hotkeys.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Hotkeys.resx">
<DependentUpon>Hotkeys.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="KBM360.es.resx">
<DependentUpon>KBM360.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="KBM360.fr-FR.resx">
<DependentUpon>KBM360.cs</DependentUpon>
</EmbeddedResource>
@ -183,6 +198,9 @@
<DependentUpon>KBM360.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="MessageTextBox.es.resx">
<DependentUpon>MessageTextBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MessageTextBox.fr-FR.resx">
<DependentUpon>MessageTextBox.cs</DependentUpon>
</EmbeddedResource>
@ -192,6 +210,9 @@
<EmbeddedResource Include="Options.cs.resx">
<DependentUpon>Options.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Options.es.resx">
<DependentUpon>Options.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Options.fr-FR.resx">
<DependentUpon>Options.cs</DependentUpon>
</EmbeddedResource>
@ -206,6 +227,9 @@
<SubType>Designer</SubType>
<LastGenOutput>Resources1.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="RecordBox.es.resx">
<DependentUpon>RecordBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RecordBox.fr-FR.resx">
<DependentUpon>RecordBox.cs</DependentUpon>
</EmbeddedResource>
@ -214,28 +238,39 @@
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.es.resx" />
<EmbeddedResource Include="Properties\Resources.fr-FR.resx" />
<EmbeddedResource Include="SaveWhere.es.resx">
<DependentUpon>SaveWhere.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SaveWhere.fr-FR.resx">
<DependentUpon>SaveWhere.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SaveWhere.resx">
<DependentUpon>SaveWhere.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Form.es.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Form.fr-FR.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Form.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SpecActions.fr-FR.resx">
<DependentUpon>SpecActions.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SpecActions.resx">
<DependentUpon>SpecActions.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WelcomeDialog.es.resx">
<DependentUpon>WelcomeDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WelcomeDialog.fr-FR.resx">
<DependentUpon>WelcomeDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WelcomeDialog.resx">
<DependentUpon>WelcomeDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WinProgs.es.resx">
<DependentUpon>WinProgs.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WinProgs.fr-FR.resx">
<DependentUpon>WinProgs.cs</DependentUpon>
</EmbeddedResource>

147
DS4Tool/Hotkeys.es.resx Normal file
View File

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnDone.Text" xml:space="preserve">
<value>Hecho</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Tocar Touchpad + PS</value>
</data>
<data name="label14.Text" xml:space="preserve">
<value>Desconectar Controlador (Solo Bluetooth)</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>PS + Options o mantener PS por 10 segundos</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Creditos/Codigo Fuente:</value>
</data>
<data name="label25.Text" xml:space="preserve">
<value>Macro</value>
</data>
<data name="label30.Text" xml:space="preserve">
<value>Ocultar Controlador DS4</value>
</data>
<data name="linkDonate.Text" xml:space="preserve">
<value>Donar via Paypal</value>
</data>
<data name="lLChangelog.Text" xml:space="preserve">
<value>Registro de cambios</value>
</data>
</root>

View File

@ -1312,6 +1312,9 @@ check if you are getting double input in games or R2 pauses games</value>
<data name="&gt;&gt;linkDonate.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>es</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View File

@ -111,7 +111,7 @@
this.btnNUM2 = new System.Windows.Forms.Button();
this.btnAPOSTROPHE = new System.Windows.Forms.Button();
this.btnNUM3 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.lbFlashRate = new System.Windows.Forms.Label();
this.lbRumble = new System.Windows.Forms.Label();
this.lbHeavy = new System.Windows.Forms.Label();
this.lbLight = new System.Windows.Forms.Label();
@ -873,10 +873,10 @@
this.btnNUM3.Tag = "99";
this.btnNUM3.UseVisualStyleBackColor = true;
//
// label1
// lbFlashRate
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
resources.ApplyResources(this.lbFlashRate, "lbFlashRate");
this.lbFlashRate.Name = "lbFlashRate";
//
// lbRumble
//
@ -1621,7 +1621,7 @@
this.gBExtras.Controls.Add(this.cBLightbar);
this.gBExtras.Controls.Add(this.lbRumble);
this.gBExtras.Controls.Add(this.nUDMouse);
this.gBExtras.Controls.Add(this.label1);
this.gBExtras.Controls.Add(this.lbFlashRate);
this.gBExtras.Controls.Add(this.lbHeavy);
this.gBExtras.Controls.Add(this.bnColor);
this.gBExtras.Controls.Add(this.lbBlueV);
@ -1945,7 +1945,7 @@
private System.Windows.Forms.Button btnNUM2;
private System.Windows.Forms.Button btnAPOSTROPHE;
private System.Windows.Forms.Button btnNUM3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label lbFlashRate;
private System.Windows.Forms.Label lbRumble;
private System.Windows.Forms.Label lbHeavy;
private System.Windows.Forms.Label lbLight;

View File

@ -11,7 +11,6 @@ namespace DS4Windows
{
public partial class KBM360 : Form
{
private DS4Control.Control scpDevice;
private int device;
private Button button;
private Options ops;
@ -20,11 +19,10 @@ namespace DS4Windows
public bool macrorepeat, newaction;
RecordBox rb;
object oldtag;
public KBM360(DS4Control.Control bus_device, int deviceNum, Options ooo, Button buton)
public KBM360(int deviceNum, Options ooo, Button buton)
{
InitializeComponent();
device = deviceNum;
scpDevice = bus_device;
ops = ooo;
button = buton;
cbToggle.Checked = button.Font.Italic;
@ -109,7 +107,7 @@ namespace DS4Windows
btnMOUSERIGHT.Visible = false;
btnMOUSEUP.Visible = false;
}
ActiveControl = null;
ActiveControl = lBMacroOn;
}
public void anybtn_Click(object sender, EventArgs e)
@ -220,7 +218,7 @@ namespace DS4Windows
private void btnMacro_Click(object sender, EventArgs e)
{
rb = new RecordBox(this, scpDevice);
rb = new RecordBox(this);
rb.TopLevel = false;
rb.Dock = DockStyle.Fill;
rb.Visible = true;
@ -366,23 +364,23 @@ namespace DS4Windows
if (device < 4)
if (((Button)sender).Text == Properties.Resources.TestText)
{
scpDevice.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, device);
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, device);
((Button)sender).Text = Properties.Resources.StopText;
}
else
{
scpDevice.setRumble(0, 0, device);
Program.rootHub.setRumble(0, 0, device);
((Button)sender).Text = Properties.Resources.TestText;
}
else
if (((Button)sender).Text == Properties.Resources.TestText)
{
scpDevice.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, 0);
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, 0);
((Button)sender).Text = Properties.Resources.StopText;
}
else
{
scpDevice.setRumble(0, 0, 0);
Program.rootHub.setRumble(0, 0, 0);
((Button)sender).Text = Properties.Resources.TestText;
}
}
@ -392,9 +390,9 @@ namespace DS4Windows
if (bnTest.Text != Properties.Resources.TestText)
{
if (device < 4)
scpDevice.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, device);
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, device);
else
scpDevice.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, 0);
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, 0);
}
}

3681
DS4Tool/KBM360.es.resx Normal file

File diff suppressed because it is too large Load Diff

View File

@ -6119,34 +6119,34 @@
<data name="&gt;&gt;btnNUM3.ZOrder" xml:space="preserve">
<value>147</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<data name="lbFlashRate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="lbFlashRate.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<data name="lbFlashRate.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 212</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<data name="lbFlashRate.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<data name="lbFlashRate.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<data name="lbFlashRate.Text" xml:space="preserve">
<value>Flash Rate</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
<data name="&gt;&gt;lbFlashRate.Name" xml:space="preserve">
<value>lbFlashRate</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<data name="&gt;&gt;lbFlashRate.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<data name="&gt;&gt;lbFlashRate.Parent" xml:space="preserve">
<value>gBExtras</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<data name="&gt;&gt;lbFlashRate.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="lbRumble.AutoSize" type="System.Boolean, mscorlib">

View File

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancelar</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Guardar</value>
</data>
<data name="tBProfile.Text" xml:space="preserve">
<value>&lt;Escribe nuevo nombre aqui&gt;</value>
</data>
</root>

View File

@ -117,16 +117,10 @@
<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="button1.Location" type="System.Drawing.Point, System.Drawing">
<value>194, 5</value>
</data>
<data name="button1.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 23</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Sauvegarder</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tBProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>176, 20</value>
</data>

View File

@ -118,111 +118,111 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnSave.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
<data name="tBProfile.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>195, 5</value>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>276, 5</value>
</data>
<data name="btnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
<data name="btnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>195, 5</value>
</data>
<data name="&gt;&gt;tBProfile.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnSave.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnSave.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Save</value>
<data name="tBProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 7</value>
</data>
<data name="&gt;&gt;btnSave.Name" xml:space="preserve">
<value>btnSave</value>
</data>
<data name="&gt;&gt;btnSave.Type" xml:space="preserve">
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tBProfile.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
<data name="&gt;&gt;tBProfile.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>359, 35</value>
</data>
<data name="tBProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 20</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MessageTextBox</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>240</value>
</data>
<data name="&gt;&gt;btnSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnSave.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tBProfile.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
<data name="tBProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 7</value>
</data>
<data name="tBProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 20</value>
</data>
<data name="tBProfile.TabIndex" type="System.Int32, mscorlib">
<value>239</value>
<data name="&gt;&gt;btnSave.Name" xml:space="preserve">
<value>btnSave</value>
</data>
<data name="tBProfile.Text" xml:space="preserve">
<value>&lt;type new name here&gt;</value>
</data>
<data name="tBProfile.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
<data name="btnSave.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
<data name="&gt;&gt;tBProfile.Name" xml:space="preserve">
<value>tBProfile</value>
<data name="tBProfile.TabIndex" type="System.Int32, mscorlib">
<value>239</value>
</data>
<data name="&gt;&gt;tBProfile.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tBProfile.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tBProfile.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>276, 5</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>240</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
</data>
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>fr-FR</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>359, 35</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Type name of New Profile</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MessageTextBox</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;tBProfile.Name" xml:space="preserve">
<value>tBProfile</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>es</value>
</metadata>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -6,14 +6,13 @@ using DS4Control;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Xml;
namespace DS4Windows
{
public partial class Options : Form
{
private DS4Control.Control scpDevice;
public int device;
public string filename;
Byte[] oldLedColor, oldLowLedColor, oldChargingColor;
public Timer inputtimer = new Timer(), sixaxisTimer = new Timer();
public List<Button> buttons = new List<Button>(), subbuttons = new List<Button>();
private Button lastSelected;
@ -21,7 +20,7 @@ namespace DS4Windows
private Color reg, full;
private Image colored, greyscale;
ToolTip tp = new ToolTip();
DS4Form root;
public DS4Form root;
bool olddinputcheck = false;
Image L = Properties.Resources.LeftTouch;
Image R = Properties.Resources.RightTouch;
@ -29,12 +28,11 @@ namespace DS4Windows
Image U = Properties.Resources.UpperTouch;
private float dpix;
private float dpiy;
public Options(DS4Control.Control bus_device, int deviceNum, string name, DS4Form rt)
public bool saving;
public Options(int deviceNum, string name, DS4Form rt)
{
InitializeComponent();
device = deviceNum;
scpDevice = bus_device;
filename = name;
colored = pBRainbow.Image;
root = rt;
@ -105,7 +103,7 @@ namespace DS4Windows
{
if (device == 4) //if temp device is called
Global.setAProfile(4, name);
Global.LoadProfile(device, buttons.ToArray(), subbuttons.ToArray(), false, scpDevice);
Global.LoadProfile(device, buttons.ToArray(), subbuttons.ToArray(), false, Program.rootHub);
DS4Color color = Global.loadColor(device);
tBRedBar.Value = color.red;
tBGreenBar.Value = color.green;
@ -145,8 +143,8 @@ namespace DS4Windows
nUDTap.Value = Global.getTapSensitivity(device);
cBTap.Checked = Global.getTapSensitivity(device) > 0;
cBDoubleTap.Checked = Global.getDoubleTap(device);
nUDL2.Value = (decimal)Global.getLeftTriggerMiddle(device) / 255;
nUDR2.Value = (decimal)Global.getRightTriggerMiddle(device) / 255;
nUDL2.Value = (decimal)Global.getL2Deadzone(device) / 255;
nUDR2.Value = (decimal)Global.getR2Deadzone(device) / 255;
cBTouchpadJitterCompensation.Checked = Global.getTouchpadJitterCompensation(device);
cBlowerRCOn.Checked = Global.getLowerRCOn(device);
cBFlushHIDQueue.Checked = Global.getFlushHIDQueue(device);
@ -197,6 +195,8 @@ namespace DS4Windows
olddinputcheck = cBDinput.Checked;
cbStartTouchpadOff.Checked = Global.getStartTouchpadOff(device);
cBTPforControls.Checked = Global.getUseTPforControls(device);
nUDLSCurve.Value = Global.getLSCurve(device);
nUDRSCurve.Value = Global.getRSCurve(device);
cBControllerInput.Checked = Global.getDS4Mapping();
}
else
@ -225,16 +225,42 @@ namespace DS4Windows
UpdateLists();
inputtimer.Start();
inputtimer.Tick += InputDS4;
sixaxisTimer.Tick += sixaxisTimer_Tick;
sixaxisTimer.Tick += ControllerReadout_Tick;
sixaxisTimer.Interval = 1000 / 60;
LoadActions();
}
void sixaxisTimer_Tick(object sender, EventArgs e)
public void LoadActions()
{
List<string> pactions = Global.GetProfileActions(device);
//Global.LoadActions();
foreach (SpecialAction action in Global.GetActions())
{
ListViewItem lvi = new ListViewItem(action.name);
lvi.SubItems.Add(action.controls.Replace("/", ", "));
string type = action.type;
switch (type)
{
case "Macro": lvi.SubItems.Add("Macro"); break;
case "Program": lvi.SubItems.Add(Properties.Resources.LaunchProgram.Replace("*program*", Path.GetFileNameWithoutExtension(action.details))); break;
case "Profile": lvi.SubItems.Add(Properties.Resources.LoadProfile.Replace("*profile*", action.details)); break;
}
foreach (string s in pactions)
if (s == action.name)
{
lvi.Checked = true;
break;
}
lVActions.Items.Add(lvi);
}
}
void ControllerReadout_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....
if (scpDevice.DS4Controllers[(int)nUDSixaxis.Value - 1] == null)
if (Program.rootHub.DS4Controllers[(int)nUDSixaxis.Value - 1] == null)
{
tPController.Enabled = false;
lbInputDelay.Text = Properties.Resources.InputDelay.Replace("*number*", Properties.Resources.NA).Replace("*ms*", "ms");
@ -243,22 +269,86 @@ namespace DS4Windows
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;
SetDynamicTrackBarValue(tBsixaxisGyroX, (Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].GyroX + tBsixaxisGyroX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroY, (Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].GyroY + tBsixaxisGyroY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisGyroZ, (Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].GyroZ + tBsixaxisGyroZ.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelX, (Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].AccelX + tBsixaxisAccelX.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelY, (Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].AccelY + tBsixaxisAccelY.Value * 2) / 3);
SetDynamicTrackBarValue(tBsixaxisAccelZ, (Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].AccelZ + tBsixaxisAccelZ.Value * 2) / 3);
int x = Program.rootHub.getDS4State((int)nUDSixaxis.Value - 1).LX;
int y = Program.rootHub.getDS4State((int)nUDSixaxis.Value - 1).LY;
//else
//double hypot = Math.Min(127.5f, Math.Sqrt(Math.Pow(x - 127.5f, 2) + Math.Pow(y - 127.5f, 2)));
if (nUDLSCurve.Value > 0)
{
float max = x + y;
double curvex;
double curvey;
double multimax = TValue(382.5, max, (double)nUDLSCurve.Value);
double multimin = TValue(127.5, max, (double)nUDLSCurve.Value);
if ((x > 127.5f && y > 127.5f) || (x < 127.5f && y < 127.5f))
{
curvex = (x > 127.5f ? Math.Min(x, (x / max) * multimax) : Math.Max(x, (x / max) * multimin));
curvey = (y > 127.5f ? Math.Min(y, (y / max) * multimax) : Math.Max(y, (y / max) * multimin));
btnLSTrack.Location = new Point((int)(dpix * curvex / 2.09 + lbLSTrack.Location.X), (int)(dpiy * curvey / 2.09 + lbLSTrack.Location.Y));
}
else
{
if (x < 127.5f)
{
curvex = Math.Min(x, (x / max) * multimax);
curvey = Math.Min(y, (-(y / max) * multimax + 510));
}
else
{
curvex = Math.Min(x, (-(x / max) * multimax + 510));
curvey = Math.Min(y, (y / max) * multimax);
}
btnLSTrack.Location = new Point((int)(dpix * curvex / 2.09 + lbLSTrack.Location.X), (int)(dpiy * curvey / 2.09 + lbLSTrack.Location.Y));
}
}
else
btnLSTrack.Location = new Point((int)(dpix * x / 2.09 + lbLSTrack.Location.X), (int)(dpiy * 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)(dpix * x / 2.09 + lbRSTrack.Location.X), (int)(dpiy * 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;
//*/
x = Program.rootHub.getDS4State((int)nUDSixaxis.Value - 1).RX;
y = Program.rootHub.getDS4State((int)nUDSixaxis.Value - 1).RY;
if (nUDRSCurve.Value > 0)
{
float max = x + y;
double curvex;
double curvey;
double multimax = TValue(382.5, max, (double)nUDRSCurve.Value);
double multimin = TValue(127.5, max, (double)nUDRSCurve.Value);
if ((x > 127.5f && y > 127.5f) || (x < 127.5f && y < 127.5f))
{
curvex = (x > 127.5f ? Math.Min(x, (x / max) * multimax) : Math.Max(x, (x / max) * multimin));
curvey = (y > 127.5f ? Math.Min(y, (y / max) * multimax) : Math.Max(y, (y / max) * multimin));
btnRSTrack.Location = new Point((int)(dpix * curvex / 2.09 + lbRSTrack.Location.X), (int)(dpiy * curvey / 2.09 + lbRSTrack.Location.Y));
}
else
{
if (x < 127.5f)
{
curvex = Math.Min(x, (x / max) * multimax);
curvey = Math.Min(y, (-(y / max) * multimax + 510));
}
else
{
curvex = Math.Min(x, (-(x / max) * multimax + 510));
curvey = Math.Min(y, (y / max) * multimax);
}
btnRSTrack.Location = new Point((int)(dpix * curvex / 2.09 + lbRSTrack.Location.X), (int)(dpiy * curvey / 2.09 + lbRSTrack.Location.Y));
}
}
else
btnRSTrack.Location = new Point((int)(dpix * x / 2.09 + lbRSTrack.Location.X), (int)(dpiy * y / 2.09 + lbRSTrack.Location.Y));
x = -Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].GyroX / 62 + 127;
y = Program.rootHub.ExposedState[(int)nUDSixaxis.Value - 1].GyroZ / 62 + 127;
btnSATrack.Location = new Point((int)(dpix * x / 2.09 + lbSATrack.Location.X), (int)(dpiy * y / 2.09 + lbSATrack.Location.Y));
tBL2.Value = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).L2;
tBL2.Value = Program.rootHub.getDS4State((int)nUDSixaxis.Value - 1).L2;
lbL2Track.Location = new Point(tBL2.Location.X - (int)(dpix * 15), (int)((dpix * (24 - tBL2.Value / 10.625) + 10)));
if (tBL2.Value == 255)
lbL2Track.ForeColor = Color.Green;
@ -266,7 +356,8 @@ namespace DS4Windows
lbL2Track.ForeColor = Color.Red;
else
lbL2Track.ForeColor = Color.Black;
tBR2.Value = scpDevice.getDS4State((int)nUDSixaxis.Value - 1).R2;
tBR2.Value = Program.rootHub.getDS4State((int)nUDSixaxis.Value - 1).R2;
lbR2Track.Location = new Point(tBR2.Location.X + (int)(dpix * 20), (int)((dpix * (24 - tBR2.Value / 10.625) + 10)));
if (tBR2.Value == 255)
lbR2Track.ForeColor = Color.Green;
@ -274,7 +365,9 @@ namespace DS4Windows
lbR2Track.ForeColor = Color.Red;
else
lbR2Track.ForeColor = Color.Black;
double latency = scpDevice.DS4Controllers[(int)nUDSixaxis.Value - 1].Latency;
double latency = Program.rootHub.DS4Controllers[(int)nUDSixaxis.Value - 1].Latency;
lbInputDelay.Text = Properties.Resources.InputDelay.Replace("*number*", latency.ToString()).Replace("*ms*", "ms");
if (latency > 10)
pBDelayTracker.BackColor = Color.Red;
@ -284,11 +377,16 @@ namespace DS4Windows
pBDelayTracker.BackColor = Color.Green;
}
}
double TValue(double value1, double value2, double percent)
{
percent /= 100f;
return value1 * percent + value2 * (1 - percent);
}
private void InputDS4(object sender, EventArgs e)
{
#region DS4Input
if (Form.ActiveForm == root && cBControllerInput.Checked && tabControls.SelectedIndex != 2)
switch (scpDevice.GetInputkeys((int)nUDSixaxis.Value - 1))
if (Form.ActiveForm == root && cBControllerInput.Checked && tabControls.SelectedIndex < 2)
switch (Program.rootHub.GetInputkeys((int)nUDSixaxis.Value - 1))
{
case ("Cross"): Show_ControlsBn(bnCross, e); break;
case ("Circle"): Show_ControlsBn(bnCircle, e); break;
@ -324,7 +422,6 @@ namespace DS4Windows
case ("GyroZP"): Show_ControlsBn(bnGyroZP, e); break;
case ("GyroZN"): Show_ControlsBn(bnGyroZN, e); break;
}
#endregion
}
private void button_MouseHover(object sender, EventArgs e)
{
@ -430,8 +527,8 @@ namespace DS4Windows
Global.saveLowColor(device, (byte)tBLowRedBar.Value, (byte)tBLowGreenBar.Value, (byte)tBLowBlueBar.Value);
Global.saveShiftColor(device, (byte)tBShiftRedBar.Value, (byte)tBShiftGreenBar.Value, (byte)tBShiftBlueBar.Value);
Global.saveFlashColor(device, lbFlashAt.ForeColor.R, lbFlashAt.ForeColor.G, lbFlashAt.ForeColor.B);
Global.setLeftTriggerMiddle(device, (byte)Math.Round((nUDL2.Value * 255), 0));
Global.setRightTriggerMiddle(device, (byte)Math.Round((nUDR2.Value * 255), 0));
Global.setL2Deadzone(device, (byte)Math.Round((nUDL2.Value * 255), 0));
Global.setR2Deadzone(device, (byte)Math.Round((nUDR2.Value * 255), 0));
Global.saveRumbleBoost(device, (byte)nUDRumbleBoost.Value);
Global.setTouchSensitivity(device, (byte)nUDTouch.Value);
Global.setTouchpadJitterCompensation(device, cBTouchpadJitterCompensation.Checked);
@ -453,7 +550,13 @@ namespace DS4Windows
Global.setStartTouchpadOff(device, cbStartTouchpadOff.Checked);
Global.setUseTPforControls(device, cBTPforControls.Checked);
Global.setDS4Mapping(cBControllerInput.Checked);
Global.setLSCurve(device, (int)Math.Round(nUDLSCurve.Value, 0));
Global.setRSCurve(device, (int)Math.Round(nUDRSCurve.Value, 0));
List<string> pactions = new List<string>();
foreach (ListViewItem lvi in lVActions.Items)
if (lvi.Checked)
pactions.Add(lvi.Text);
Global.SetProfileAtions(device, pactions);
gBTouchpad.Enabled = !cBTPforControls.Checked;
if (cBTPforControls.Checked)
tabControls.Size = new Size(tabControls.Size.Width, (int)(282 * dpiy));
@ -468,7 +571,7 @@ namespace DS4Windows
private void Show_ControlsBn(object sender, EventArgs e)
{
lastSelected = (Button)sender;
kbm360 = new KBM360(scpDevice, device, this, lastSelected);
kbm360 = new KBM360(device, this, lastSelected);
kbm360.Icon = this.Icon;
kbm360.ShowDialog();
}
@ -590,9 +693,7 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
pBController.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveColor(device, (byte)tBRedBar.Value, (byte)tBGreenBar.Value, (byte)tBBlueBar.Value);
//if (g.DpiX == 120)
//tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), 125, 0, 2000);
//else
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(dpix * 100), 0, 2000);
}
private void greenBar_ValueChanged(object sender, EventArgs e)
@ -606,9 +707,7 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
pBController.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveColor(device, (byte)tBRedBar.Value, (byte)tBGreenBar.Value, (byte)tBBlueBar.Value);
//if (g.DpiX == 120)
//tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), 125, 0, 2000);
//else
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100*dpix), 0, 2000);
}
private void blueBar_ValueChanged(object sender, EventArgs e)
@ -622,7 +721,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
pBController.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveColor(device, (byte)tBRedBar.Value, (byte)tBGreenBar.Value, (byte)tBBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void lowRedBar_ValueChanged(object sender, EventArgs e)
@ -636,7 +736,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
lowColorChooserButton.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveLowColor(device, (byte)tBLowRedBar.Value, (byte)tBLowGreenBar.Value, (byte)tBLowBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void lowGreenBar_ValueChanged(object sender, EventArgs e)
@ -650,7 +751,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
lowColorChooserButton.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveLowColor(device, (byte)tBLowRedBar.Value, (byte)tBLowGreenBar.Value, (byte)tBLowBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void lowBlueBar_ValueChanged(object sender, EventArgs e)
@ -664,7 +766,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
lowColorChooserButton.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveLowColor(device, (byte)tBLowRedBar.Value, (byte)tBLowGreenBar.Value, (byte)tBLowBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void shiftRedBar_ValueChanged(object sender, EventArgs e)
@ -678,7 +781,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
pBShiftController.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveShiftColor(device, (byte)tBShiftRedBar.Value, (byte)tBShiftGreenBar.Value, (byte)tBShiftBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void shiftGreenBar_ValueChanged(object sender, EventArgs e)
@ -692,7 +796,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
pBShiftController.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveShiftColor(device, (byte)tBShiftRedBar.Value, (byte)tBShiftGreenBar.Value, (byte)tBShiftBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void shiftBlueBar_ValueChanged(object sender, EventArgs e)
@ -706,7 +811,8 @@ namespace DS4Windows
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
pBShiftController.BackColor = Color.FromArgb((alphacolor > 205 ? 255 : (alphacolor + 50)), full);
Global.saveShiftColor(device, (byte)tBShiftRedBar.Value, (byte)tBShiftGreenBar.Value, (byte)tBShiftBlueBar.Value);
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
public Color HuetoRGB(float hue, float light, Color rgb)
@ -716,8 +822,8 @@ namespace DS4Windows
float X = (C * (1 - Math.Abs((hue / 60) % 2 - 1)));
float m = L - C / 2;
float R =0, G=0, B=0;
if (light == 1) return Color.FromName("White");
else if (rgb.R == rgb.G && rgb.G == rgb.B) return Color.FromName("White");
if (light == 1) return Color.White;
else if (rgb.R == rgb.G && rgb.G == rgb.B) return Color.White;
else if (0 <= hue && hue < 60) { R = C; G = X; }
else if (60 <= hue && hue < 120) { R = X; G = C; }
else if (120 <= hue && hue < 180) { G = C; B = X; }
@ -733,35 +839,35 @@ namespace DS4Windows
byte l = (byte)Math.Min(255, (255 * nUDRumbleBoost.Value / 100));
bool hB = btnRumbleHeavyTest.Text == Properties.Resources.TestLText;
bool lB = btnRumbleLightTest.Text == Properties.Resources.TestLText;
scpDevice.setRumble((byte)(hB ? h : 0), (byte)(lB ? l : 0), device);
Program.rootHub.setRumble((byte)(hB ? h : 0), (byte)(lB ? l : 0), device);
}
private void btnRumbleHeavyTest_Click(object sender, EventArgs e)
{
DS4Device d = scpDevice.DS4Controllers[(int)nUDSixaxis.Value - 1];
DS4Device d = Program.rootHub.DS4Controllers[(int)nUDSixaxis.Value - 1];
if (((Button)sender).Text == Properties.Resources.TestHText)
{
scpDevice.setRumble((byte)Math.Min(255, (255 * nUDRumbleBoost.Value / 100)), d.RightLightFastRumble, (int)nUDSixaxis.Value - 1);
Program.rootHub.setRumble((byte)Math.Min(255, (255 * nUDRumbleBoost.Value / 100)), d.RightLightFastRumble, (int)nUDSixaxis.Value - 1);
((Button)sender).Text = Properties.Resources.StopHText;
}
else
{
scpDevice.setRumble(0, d.RightLightFastRumble, (int)nUDSixaxis.Value - 1);
Program.rootHub.setRumble(0, d.RightLightFastRumble, (int)nUDSixaxis.Value - 1);
((Button)sender).Text = Properties.Resources.TestHText;
}
}
private void btnRumbleLightTest_Click(object sender, EventArgs e)
{
DS4Device d = scpDevice.DS4Controllers[(int)nUDSixaxis.Value - 1];
DS4Device d = Program.rootHub.DS4Controllers[(int)nUDSixaxis.Value - 1];
if (((Button)sender).Text == Properties.Resources.TestLText)
{
scpDevice.setRumble(d.LeftHeavySlowRumble, (byte)Math.Min(255, (255 * nUDRumbleBoost.Value / 100)), (int)nUDSixaxis.Value - 1);
Program.rootHub.setRumble(d.LeftHeavySlowRumble, (byte)Math.Min(255, (255 * nUDRumbleBoost.Value / 100)), (int)nUDSixaxis.Value - 1);
((Button)sender).Text = Properties.Resources.StopLText;
}
else
{
scpDevice.setRumble(d.LeftHeavySlowRumble, 0, (int)nUDSixaxis.Value - 1);
Program.rootHub.setRumble(d.LeftHeavySlowRumble, 0, (int)nUDSixaxis.Value - 1);
((Button)sender).Text = Properties.Resources.TestLText;
}
}
@ -822,14 +928,14 @@ namespace DS4Windows
private void Options_Closed(object sender, FormClosedEventArgs e)
{
for (int i = 0; i < 4; i++)
Global.LoadProfile(i, false, scpDevice); //Refreshes all profiles in case other controllers are using the same profile
Global.LoadProfile(i, false, Program.rootHub); //Refreshes all profiles in case other controllers are using the same profile
if (olddinputcheck != cBDinput.Checked)
{
root.btnStartStop_Clicked(false);
root.btnStartStop_Clicked(false);
}
if (btnRumbleHeavyTest.Text == Properties.Resources.StopText)
scpDevice.setRumble(0, 0, (int)nUDSixaxis.Value - 1);
Program.rootHub.setRumble(0, 0, (int)nUDSixaxis.Value - 1);
inputtimer.Stop();
sixaxisTimer.Stop();
}
@ -975,14 +1081,14 @@ namespace DS4Windows
{
if (button.Tag is String && (String)button.Tag == "Unbound")
return "Unbound";
else if (button.Tag is IEnumerable<int> || button.Tag is Int32[] || button.Tag is UInt16[])
else if (button.Tag is KeyValuePair<Int32[], string>)
return "Macro";
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.Tag is KeyValuePair<int, string>)
return ((Keys)((KeyValuePair<int, string>)button.Tag).Key).ToString();
else if (button.Tag is KeyValuePair<UInt16, string>)
return ((Keys)((KeyValuePair<UInt16, string>)button.Tag).Key).ToString();
else if (button.Tag is KeyValuePair<string, string>)
return ((KeyValuePair<string, string>)button.Tag).Key;
else if (button.Name.StartsWith("s") && ((Button)Controls.Find(button.Name.Remove(2, 5), true)[0]).Tag != null && button.Tag == null)
return "Fall Back to " + UpdateRegButtonList(((Button)Controls.Find(button.Name.Remove(2, 5), true)[0]));
else
@ -1164,12 +1270,12 @@ namespace DS4Windows
private void numUDL2_ValueChanged(object sender, EventArgs e)
{
Global.setLeftTriggerMiddle(device, (byte)(nUDL2.Value * 255));
Global.setL2Deadzone(device, (byte)(nUDL2.Value * 255));
}
private void numUDR2_ValueChanged(object sender, EventArgs e)
{
Global.setRightTriggerMiddle(device, (byte)(nUDR2.Value * 255));
Global.setR2Deadzone(device, (byte)(nUDR2.Value * 255));
}
private void nUDSX_ValueChanged(object sender, EventArgs e)
@ -1256,7 +1362,8 @@ namespace DS4Windows
private void LightBar_MouseDown(object sender, MouseEventArgs e)
{
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
if (!saving)
tp.Show(((TrackBar)sender).Value.ToString(), ((TrackBar)sender), (int)(100 * dpix), 0, 2000);
}
private void Lightbar_MouseUp(object sender, MouseEventArgs e)
@ -1314,7 +1421,7 @@ namespace DS4Windows
private void tabControls_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControls.SelectedIndex == 2)
if (tabControls.SelectedIndex == 3)
sixaxisTimer.Start();
else
sixaxisTimer.Stop();
@ -1427,7 +1534,6 @@ namespace DS4Windows
private void lbFlashAt_Click(object sender, EventArgs e)
{
advColorDialog.Color = lbFlashAt.ForeColor;
advColorDialog.Color = lbPercentFlashBar.ForeColor;
advColorDialog_OnUpdateColor(lbPercentFlashBar.ForeColor, e);
if (advColorDialog.ShowDialog() == DialogResult.OK)
{
@ -1435,10 +1541,8 @@ namespace DS4Windows
lbPercentFlashBar.ForeColor = advColorDialog.Color;
Global.saveFlashColor(device, advColorDialog.Color.R, advColorDialog.Color.G, advColorDialog.Color.B);
}
//else Global.saveChargingColor(device, oldChargingColor[0], oldChargingColor[1], oldChargingColor[2]);
//Global.saveLowColor(device, oldLowLedColor[0], oldLowLedColor[1], oldLowLedColor[2]);
Global.saveColor(device, oldLedColor[0], oldLedColor[1], oldLedColor[2]);
oldLedColor = null;
if (device < 4)
DS4Control.DS4LightBar.forcelight[device] = false;
if (lbFlashAt.ForeColor.GetBrightness() > .5f)
{
lbFlashAt.BackColor = Color.Black;
@ -1449,8 +1553,6 @@ namespace DS4Windows
lbFlashAt.BackColor = Color.White;
lbPercentFlashBar.BackColor = Color.White;
}
//oldChargingColor = null;
//oldLowLedColor = null;
}
private void cbStartTouchpadOff_CheckedChanged(object sender, EventArgs e)
@ -1538,5 +1640,60 @@ namespace DS4Windows
{
Global.setDS4Mapping(cBControllerInput.Checked);
}
private void btnAddAction_Click(object sender, EventArgs e)
{
SpecActions sA = new SpecActions(this);
sA.TopLevel = false;
sA.Dock = DockStyle.Fill;
sA.Visible = true;
tPSpecial.Controls.Add(sA);
sA.BringToFront();
}
private void btnEditAction_Click(object sender, EventArgs e)
{
if (lVActions.SelectedIndices.Count > 0 && lVActions.SelectedIndices[0] >= 0)
{
SpecActions sA = new SpecActions(this, lVActions.SelectedItems[0].Text, lVActions.SelectedIndices[0]);
sA.TopLevel = false;
sA.Dock = DockStyle.Fill;
sA.Visible = true;
tPSpecial.Controls.Add(sA);
sA.BringToFront();
}
}
private void btnRemAction_Click(object sender, EventArgs e)
{
if (lVActions.SelectedIndices.Count > 0 && lVActions.SelectedIndices[0] >= 0)
{
Global.RemoveAction(lVActions.SelectedItems[0].Text);
lVActions.Items.Remove(lVActions.SelectedItems[0]);
}
}
private void lVActions_ItemChecked(object sender, ItemCheckedEventArgs e)
{
List<string> pactions = new List<string>();
foreach (ListViewItem lvi in lVActions.Items)
if (lvi.Checked)
pactions.Add(lvi.Text);
Global.SetProfileAtions(device, pactions);
if (lVActions.Items.Count >= 50)
{
btnNewAction.Enabled = false;
}
}
private void nUDLSCurve_ValueChanged(object sender, EventArgs e)
{
Global.setLSCurve(device, (int)Math.Round(nUDLSCurve.Value, 0));
}
private void nUDRSCurve_ValueChanged(object sender, EventArgs e)
{
Global.setRSCurve(device, (int)Math.Round(nUDRSCurve.Value, 0));
}
}
}

561
DS4Tool/Options.es.resx Normal file
View File

@ -0,0 +1,561 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<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="cBLightbyBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 17</value>
</data>
<data name="cBLightbyBattery.Text" xml:space="preserve">
<value>Color por % Bateria</value>
</data>
<data name="lbBlue.Text" xml:space="preserve">
<value>A</value>
</data>
<data name="lbGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>14, 13</value>
</data>
<data name="lbGreen.Text" xml:space="preserve">
<value>V</value>
</data>
<data name="cBDoubleTap.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 17</value>
</data>
<data name="cBDoubleTap.Text" xml:space="preserve">
<value>Toque doble</value>
</data>
<data name="lbButtonMouseSens.Size" type="System.Drawing.Size, System.Drawing">
<value>118, 13</value>
</data>
<data name="lbButtonMouseSens.Text" xml:space="preserve">
<value>Sensibilidad del Mouse:</value>
</data>
<data name="lbIdleMinutes.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 47</value>
</data>
<data name="lbIdleMinutes.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 13</value>
</data>
<data name="lbIdleMinutes.Text" xml:space="preserve">
<value>minutos</value>
</data>
<data name="nUDIdleDisconnect.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 44</value>
</data>
<data name="cBFlushHIDQueue.Location" type="System.Drawing.Point, System.Drawing">
<value>346, 73</value>
</data>
<data name="cBFlushHIDQueue.Size" type="System.Drawing.Size, System.Drawing">
<value>87, 17</value>
</data>
<data name="cBFlushHIDQueue.Text" xml:space="preserve">
<value>Colorear HID</value>
</data>
<data name="lbFull.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 13</value>
</data>
<data name="lbFull.Text" xml:space="preserve">
<value>Lleno:</value>
</data>
<data name="lbLowGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>14, 13</value>
</data>
<data name="lbLowGreen.Text" xml:space="preserve">
<value>V</value>
</data>
<data name="lbLowBlue.Text" xml:space="preserve">
<value>A</value>
</data>
<data name="lbEmpty.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 13</value>
</data>
<data name="lbEmpty.Text" xml:space="preserve">
<value>Vacio:</value>
</data>
<data name="numUDMouseSens.Location" type="System.Drawing.Point, System.Drawing">
<value>124, 15</value>
</data>
<data name="cBTPforControls.Location" type="System.Drawing.Point, System.Drawing">
<value>280, 37</value>
</data>
<data name="cBTPforControls.Size" type="System.Drawing.Size, System.Drawing">
<value>154, 30</value>
</data>
<data name="cBTPforControls.Text" xml:space="preserve">
<value>Usar Gestos de Touchpad
para controles</value>
</data>
<data name="cBDinput.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 17</value>
</data>
<data name="cBDinput.Text" xml:space="preserve">
<value>Usar solo Dinput</value>
</data>
<data name="cBLaunchProgram.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 30</value>
</data>
<data name="cBLaunchProgram.Text" xml:space="preserve">
<value>Lanzar Programa
con perfil</value>
</data>
<data name="btnBrowse.Text" xml:space="preserve">
<value>Explorar...</value>
</data>
<data name="cBMouseAccel.Location" type="System.Drawing.Point, System.Drawing">
<value>184, 16</value>
</data>
<data name="cBMouseAccel.Size" type="System.Drawing.Size, System.Drawing">
<value>131, 17</value>
</data>
<data name="cBMouseAccel.Text" xml:space="preserve">
<value>Aceleracion de mouse</value>
</data>
<data name="cBControllerInput.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 17</value>
</data>
<data name="cBControllerInput.Text" xml:space="preserve">
<value>para Mapeo y lectura</value>
</data>
<data name="cBIdleDisconnect.Size" type="System.Drawing.Size, System.Drawing">
<value>137, 17</value>
</data>
<data name="cBIdleDisconnect.Text" xml:space="preserve">
<value>Desconectado Inactivo</value>
</data>
<data name="gBOther.Text" xml:space="preserve">
<value>Otro</value>
</data>
<data name="lbShiftGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>14, 13</value>
</data>
<data name="lbShiftGreen.Text" xml:space="preserve">
<value>V</value>
</data>
<data name="lbShiftBlue.Text" xml:space="preserve">
<value>A</value>
</data>
<data name="rBRainbow.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 17</value>
</data>
<data name="rBRainbow.Text" xml:space="preserve">
<value>Arcoiris</value>
</data>
<data name="gBLightbar.Text" xml:space="preserve">
<value>Barra de luz</value>
</data>
<data name="gBRumble.Text" xml:space="preserve">
<value>Vibracion</value>
</data>
<data name="lb6Accel.Size" type="System.Drawing.Size, System.Drawing">
<value>69, 13</value>
</data>
<data name="lb6Accel.Text" xml:space="preserve">
<value>Acelerometro</value>
</data>
<data name="lb6Gryo.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 13</value>
</data>
<data name="lb6Gryo.Text" xml:space="preserve">
<value>Giroscopio</value>
</data>
<data name="pBDelayTracker.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 11</value>
</data>
<data name="lbInputDelay.Size" type="System.Drawing.Size, System.Drawing">
<value>137, 13</value>
</data>
<data name="lbInputDelay.Text" xml:space="preserve">
<value>Retraso de entrada: N/Ams</value>
</data>
<data name="pBSADeadzone.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE
sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs
AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4
JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR
3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd
li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF
ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX
wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF
hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55
4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ
VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB
5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC
qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE
j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I
1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9
rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG
fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp
B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ
yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC
YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln
yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v
vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp
vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L
Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA
bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z
llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW
ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s
xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6
eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw
YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR
XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm
WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl
xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2
dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8
V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za
Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v
Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb
PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/
0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h
/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEwAACxMBAJqcGAAACK5JREFUeF7t3T2P1FYU
xvFNlSWpaWkokLamIBISigTN5gPwDdACQqkRJVJICdTbRqKggZY6K0WiodrQIBFp6ZeOFEvO38xOZuzH
M3659tiep/hJy2F2fH3PYRjb92Xn687OttoNe2E/HITH4TC8DkfhOJyE0/AlnM3wMzH+jtfwWn6H3+U9
eC/ek/fmGOrYkyeDE/RD+CncCc/Dm/BP+NoxjsGxOCbHpg20RbVxUmRwAr4LJPHX8Ef4O6jEbwJtoU20
jTbSVnUOoyaDI/Vj+CX8Hv4MKqlDRFtpM23nHNS5jY4MjszP4bfwV1CJGxPOgXPhnNS5joYMjsClcDfw
pfnfoJI0ZpwT58Y5cq6qDwZNBgfsauDK611QCZkizpVz5txVnwySDA7Q9fA09HElN1ScO31AX6g+GhQZ
HJBrgc78FFRnbyP6gj6hb1SfDYIMDsCVwMf/h6A61771DX1EX6k+3CgZ3CBuHt4LU7jC6wt9RZ8N6sar
DG7IrfAiqM6z9eg7+lD1be9ksGcXw6PwMagOs+roQ/qSPlV93RsZ7NHN8DKoTrLm6FP6VvV5L2SwBzwf
exDeB9Ux1h59Sx9v5FmkDHbscngWVGdYevQ1fa5y0RkZ7NCN8CqoDrDu0Of0vcpJJ2SwI7fD26BO3LpH
35MDlZvkZLAD94Ov+jaPHJALlaOkZDCxh+FzUCdq/SMX5ETlKhkZTOT7wCMHdXK2eeSGHKnctSaDCVwI
T4I6IRsOckSuVA5bkcGW+FfgohoPcpX8k0sGW/J/f+NDzlQuG5PBFvhSqBpuw5f0C70MNsRlrK/+xovc
JbsVIYMNcOPN96nGjxwmuYkqgzXxqMB31KeDXLZ+/CODNfBw08/+poectnpwLYMVMRzDoxSmi9w2HnIj
gxUx1kc1yKaDHKvcryWDFTA60YP0po8cNxqJKoNrMJ7aw4m3B7muPYZeBtdgsL5qgE0XOVe1UEoGV2B6
ke9XbR9yXmtqmQyWYEKk5/1tL3JfeVKsDJZgtq06oG0PakDVRoEMCqwP4GnvRg1UWitCBgUPhbFzlYbY
yGAOy+V41Rc7Ry2sXUJJBnNYi0kdwLYXNaFqZU4GF7B6nBc9szxqYuXKgjK4wJ9WVmblp5YMzrCY6jav
+WmrURulC+7K4IyvBG2d0itEGQysLb5NS15bM9SIXIe+EJhh4Xr1RmZ51EqhhgqBGXZFUG9ilketFGqo
EAjs4zLFbUSsG9RKYe+fpT/MsEmQegOzMtTMUh0t/SGwrZkfNltd1MzSlniLRQX2zFO/aLYOtTOvpcWi
Ahsyql8yW4famdfSYlExh2xMO5PasFA783mIi4XF/sTqF8yqooYKhcXm1+rFZlVRQ4XCYmd19WKzqqih
pcJi9gXb9qsXm1VFDWUzec4Ly9+vLJXse9Z5Yd2ZBc3aopbip2+ez4JmbVFL8dM3b2ZBs7aopfhpZ2c3
eAiypUIt7VJYewtBsxT2KKz9XNCsrX0K6yAXNGvrgMLybBxL7TGFdZgLmrV1SGF54oSl9prCOsoFzdo6
orCOc0Gzto4prJNc0KytEwrrNBc0a+uUwvqSC5q19YXCOssFzdo6c2FZF7LC8n+Fllr2X6G/vFtq2Zd3
326w1LLbDb5BaqllN0j9SMdSyx7p+CG0pZY9hPawGUstGzbjgX6WWjbQz0OTLbVsaLInU1hq2WQKT/+y
1LLpX56wainNJ6zCU+wtlfkUe3hREEtlaVEQL2NkqSwtY+SF1yyVpYXXvFSkpVBYKhJe3NbaKixuCy/H
bW3J5bj9Pcvayr5fYbGwvOWJtVG65Qm8SZM1VbpJE7ytnDW1cls5b4RpTazdCBPeutfqWrt1L7zZuNVR
ebNxeIKFVUWtFGqoEJi5G9SbmOVRK4UaKgRmLoV3Qb2R2TlqhFop1FAhsMCzd2wdakTVjg7OXA0esmxl
qA1qRNWODi54GtSbmlEbqmYyMrjgevgU1Bvb9qImqA1VMxkZzPGnluWt/LSCDOZcCx+COoBtH2qBmlC1
MieDgq8Q7VzpleAiGRSuBD+cNmqAWlA1skQGS9wL6mC2PagBVRsFMliC2RcvgjqgTR+5z2bgVCGDK9wK
H4M6sE0XOSf3qiYkGVzjUVAHt+ki56oWSsngGhfDy6AaYNNDrsm5qoVSMljBzfA+qIbYdJBjcq1qYCUZ
rOhBUI2x6SDHKvdryWBFzCF7FlSDbPzI7XyeYF0yWMPl8Cqohtl4kVNyq3JeiQzWdCO8DaqBNj7kkpyq
XFcmgw3cDr6/NX7kkFyqHNcigw3dD5+DarANH7kjhyq3tclgCw+DarQNH7lTOW1EBlvyEJvxqTQUpg4Z
bOn78CSoE7DhIVfkTOWyMRlM4EJwcQ0fOSJXKoetyGAi/Cvwf4vDRW6Sf1Kdk8HE+FLoq8XhIBdJv6gr
MtgBLmN9n2vzyEGyWwqryGBHuPHmO/SbQ98nuflZhQx2iEcFfrbYP/q89WOaOmSwYzzc9KiI/tDXrR4o
NyGDPWA4BmN9PFiwO/Qtfdx46EsbMtgjRid6mHN69GmjkZ+pyGDPGE/NYH1fNbZHH9KXtceopyaDG8L0
Is9bbI6+qzVFq0syuEFMiGS2rafzV0df0WeVJ5P2QQYHgPUBeOTgVW7K0Tf0UaW1FPomgwPCcjmsxeTF
3/5HX9Ana5cS2iQZHCBWj6Mzt3lNVM6dPli5kt5QyOCAsZgqH//btFQ458o5ly4kO0QyOAKsLc7C9eyK
MMXtWTgnzo1zlOuoD50Mjgz7uLBJ0BSuJDkHzqWwN83YyOBIsa0Ze+axIeOYdoqlrbSZti9tzTZmMjgB
PB9jf2I2v2ZndbbtV0ndBNpCm2gbbdzIs7yuyeAEcfOQJN4Jz8Ob0McVJsfgWByTY9OGQd3I7IoMbond
sBf2w0Hgyusw8KX5KByHk3AavoSzGX4mxt/xGl7L7/C7vAfvxXvy3hxDHXvidnb+AyTfWAn9iVGiAAAA
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>
<data name="tPController.Text" xml:space="preserve">
<value>Lecturas del Controlador</value>
</data>
<data name="btnShiftFullView.Text" xml:space="preserve">
<value>&lt;- Regresar a vista completa</value>
</data>
<data name="btnFullView.Text" xml:space="preserve">
<value>&lt;- Regresar a vista completa</value>
</data>
<data name="tPControls.Text" xml:space="preserve">
<value>Controles</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.ComponentModel;
using DS4Control;
namespace DS4Windows
{
@ -23,6 +23,7 @@ namespace DS4Windows
static Mutex mutex = new Mutex(true, "{FI329DM2-DS4W-J2K2-HYES-92H21B3WJARG}");
private static BackgroundWorker singleAppComThread = null;
private static EventWaitHandle threadComEvent = null;
public static DS4Control.Control rootHub;
/// <summary>
/// The main entry point for the application.
@ -32,7 +33,7 @@ namespace DS4Windows
{
foreach(string s in args)
{
if (s == "driverinstall")
if (s == "driverinstall" || s == "-driverinstall")
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
@ -63,6 +64,7 @@ namespace DS4Windows
CreateInterAppComThread();
if (mutex.WaitOne(TimeSpan.Zero, true))
{
rootHub = new DS4Control.Control();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new DS4Form(args));

View File

@ -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.4.161")]
[assembly: AssemblyFileVersion("1.4.161")]
[assembly: AssemblyVersion("1.4.2")]
[assembly: AssemblyFileVersion("1.4.2")]

View File

@ -117,13 +117,274 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AddingToList" xml:space="preserve">
<value>Añadiendo a la lista</value>
</data>
<data name="AddPrograms" xml:space="preserve">
<value>Añadir Programas</value>
</data>
<data name="AlwaysRainbow" xml:space="preserve">
<value>Siempre Modo Multicolor</value>
</data>
<data name="AssignProfile" xml:space="preserve">
<value>Asignar a Controlador *number*</value>
</data>
<data name="Battery" xml:space="preserve">
<value>Bateria: *number*%</value>
</data>
<data name="BestUsedRightSide" xml:space="preserve">
<value>Preferible usar lado derecho como funcion del mouse.</value>
</data>
<data name="Browse" xml:space="preserve">
<value>Buscar...</value>
</data>
<data name="CannotWriteHere" xml:space="preserve">
<value>No se puede modificar este archivo. ¿ Mover preferencias a "appdata" ?</value>
</data>
<data name="Charged" xml:space="preserve">
<value>Cargado</value>
</data>
<data name="Charging" xml:space="preserve">
<value>Cargando: *number*%</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
</data>
<data name="ColorByBattery" xml:space="preserve">
<value>Color por % de Bateria</value>
</data>
<data name="Connecting" xml:space="preserve">
<value>Conectando...</value>
</data>
<data name="ContextEdit" xml:space="preserve">
<value>Editar perfil para controlador *number*</value>
</data>
<data name="ContextNew" xml:space="preserve">
<value>Crear perfil para controlador *number*</value>
</data>
<data name="ControllerWasRemoved" xml:space="preserve">
<value>Controlador *Mac address* perdio la conexion o fue desconectado</value>
</data>
<data name="CopyComplete" xml:space="preserve">
<value>Copia completa, por favor reinicia DS4Windows y elimina preferencias del directorio de programa</value>
</data>
<data name="CopyFullColor" xml:space="preserve">
<value>Haz click para copiar todo el color.</value>
</data>
<data name="CouldNotOpenDS4" xml:space="preserve">
<value>Advertencia: No se puede abrir DS4 *Mac address* exclusivamente.</value>
</data>
<data name="Day" xml:space="preserve">
<value>dia</value>
</data>
<data name="Days" xml:space="preserve">
<value>dias</value>
</data>
<data name="DeleteProfile" xml:space="preserve">
<value>Borrar perfil?</value>
</data>
<data name="DinputOnly" xml:space="preserve">
<value>Apagar entrada X360 y solo usar entrada nativa DS4, ocultar ds4 debe estar apagado</value>
</data>
<data name="Disconnected" xml:space="preserve">
<value>Desconectado</value>
</data>
<data name="Downloading" xml:space="preserve">
<value>Descargando *number*%</value>
</data>
<data name="DownloadVersion" xml:space="preserve">
<value>Descargar version *number* ahora?</value>
</data>
<data name="DownText" xml:space="preserve">
<value>Abajo</value>
</data>
<data name="DS4Update" xml:space="preserve">
<value>DS4Windows tiene nueva version!</value>
</data>
<data name="DS4WindowsCannotEditHere" xml:space="preserve">
<value>DS4Windows no puede editar la configuracion aqui, Esto se cerrara ahora</value>
</data>
<data name="EditProfile" xml:space="preserve">
<value>Editar</value>
</data>
<data name="FlushHID" xml:space="preserve">
<value>Colorizar HID</value>
</data>
<data name="FoundController" xml:space="preserve">
<value>Controlador Encontrado.</value>
</data>
<data name="Full" xml:space="preserve">
<value>Completo</value>
</data>
<data name="Hour" xml:space="preserve">
<value>hora</value>
</data>
<data name="Hours" xml:space="preserve">
<value>horas</value>
</data>
<data name="IfRemovingDS4Windows" xml:space="preserve">
<value>Si borras DS4Windows, elimina la configuracion siguiendo el enlace Carpeta de Perfil</value>
</data>
<data name="InputDelay" xml:space="preserve">
<value>Retraso de entrada: *number**ms*</value>
</data>
<data name="InstallComplete" xml:space="preserve">
<value>Instalacion Completa</value>
</data>
<data name="InstallDriver" xml:space="preserve">
<value>Instalar Drivers aqui</value>
</data>
<data name="Installing" xml:space="preserve">
<value>Instalando...</value>
</data>
<data name="KeepThisSize" xml:space="preserve">
<value>Mantener este tamaño de ventana despues de cerrar</value>
</data>
<data name="Loading" xml:space="preserve">
<value>Cargando...</value>
</data>
<data name="MakeNewProfile" xml:space="preserve">
<value>Crear un nuevo perfil</value>
</data>
<data name="NA" xml:space="preserve">
<value>N/A</value>
</data>
<data name="New" xml:space="preserve">
<value>Nuevo</value>
</data>
<data name="NoMacroRecorded" xml:space="preserve">
<value>Ningun macro fue grabado</value>
</data>
<data name="noneProfile" xml:space="preserve">
<value>(ninguno)</value>
</data>
<data name="NoneText" xml:space="preserve">
<value>ninguno</value>
</data>
<data name="NoProfileLoaded" xml:space="preserve">
<value>Ningun perfil cargado</value>
</data>
<data name="NotValid" xml:space="preserve">
<value>No valido</value>
</data>
<data name="OpeningInstaller" xml:space="preserve">
<value>Abriendo Instalador</value>
</data>
<data name="OpenScpDriver" xml:space="preserve">
<value>Por favor abrir ScpDriver.exe</value>
</data>
<data name="PleaseImport" xml:space="preserve">
<value>Pro favor importa o crea un perfil</value>
</data>
<data name="ProfileCannotRestore" xml:space="preserve">
<value>*Profile name* no puede ser restaurado.</value>
</data>
<data name="ProfileFolderMoved" xml:space="preserve">
<value>Carpeta de Perfil movido a Carpeta de Programa</value>
</data>
<data name="QuitOtherPrograms" xml:space="preserve">
<value>Debes de salir de otras aplicaciones como Steam, Uplay antes activando la opcion "Ocultar controlador DS4"</value>
</data>
<data name="RecordText" xml:space="preserve">
<value>Grabar</value>
</data>
<data name="SaveRecordedMacro" xml:space="preserve">
<value>Guardar Macro grabado?</value>
</data>
<data name="SearchingController" xml:space="preserve">
<value>Buscando controladores...</value>
</data>
<data name="SelectActionTitle" xml:space="preserve">
<value>Seleccione una accion para *action*</value>
</data>
<data name="Starting" xml:space="preserve">
<value>Iniciando...</value>
</data>
<data name="StartText" xml:space="preserve">
<value>Empiezo</value>
<value>Inicio</value>
</data>
<data name="Step1" xml:space="preserve">
<value>Paso 1: Instala el Driver DS4</value>
</data>
<data name="StopHText" xml:space="preserve">
<value>Detener Vib. Pesada</value>
</data>
<data name="StopLText" xml:space="preserve">
<value>Detener Vib. Ligera</value>
</data>
<data name="StoppedDS4Tool" xml:space="preserve">
<value>DS4 Tool detenido</value>
</data>
<data name="StoppingDS4" xml:space="preserve">
<value>Deteniendo Controladores DS4</value>
</data>
<data name="StoppingX360" xml:space="preserve">
<value>Deteniendo Controladores X360</value>
</data>
<data name="StopText" xml:space="preserve">
<value>Deténgase</value>
<value>Detenido</value>
</data>
<data name="SwipeTouchpad" xml:space="preserve">
<value>Gestos de Touchpad para cambiar perfiles</value>
</data>
<data name="TapAndHold" xml:space="preserve">
<value>Mantenga pulsado para arrastrar, ligero retraso con toques simples</value>
</data>
<data name="TestHText" xml:space="preserve">
<value>Prueba Vib. Pesada</value>
</data>
<data name="TestLText" xml:space="preserve">
<value>Prueba Vib. Ligera</value>
</data>
<data name="TiltDown" xml:space="preserve">
<value>Inclinacion Abajo</value>
</data>
<data name="TiltLeft" xml:space="preserve">
<value>Inclinacion Izquierda</value>
</data>
<data name="TiltRight" xml:space="preserve">
<value>Inclinacion Derecha</value>
</data>
<data name="TiltUp" xml:space="preserve">
<value>Inclinacion Arriba</value>
</data>
<data name="TouchpadMovementOff" xml:space="preserve">
<value>Movimiento de Touchpad Apagado</value>
</data>
<data name="TouchpadMovementOn" xml:space="preserve">
<value>Movimiento de Touchpad Encendido</value>
</data>
<data name="TypeNewName" xml:space="preserve">
<value>escriba nuevo nombre aqui</value>
</data>
<data name="TypeProfileName" xml:space="preserve">
<value>escriba nombre de perfil aqui</value>
</data>
<data name="UpText" xml:space="preserve">
<value>Arriba</value>
</data>
<data name="UpToDate" xml:space="preserve">
<value>Actualizado</value>
</data>
<data name="UseControllerForMapping" xml:space="preserve">
<value>Tambien se puede usar tu controlador pata cambiar controles</value>
</data>
<data name="UsingExclusive" xml:space="preserve">
<value>Usando Modo Exclusivo</value>
</data>
<data name="UsingProfile" xml:space="preserve">
<value>Controlador *number* esta usando perfil "*Profile name*"</value>
</data>
<data name="UsingShared" xml:space="preserve">
<value>Usando Modo Compartido</value>
</data>
<data name="ValidName" xml:space="preserve">
<value>Por favor ingrese un nombre valido</value>
</data>
<data name="WaitMS" xml:space="preserve">
<value>Espere *number**ms*</value>
</data>
<data name="WillKeep" xml:space="preserve">
<value>Se mantendrá</value>
</data>
</root>

View File

@ -589,4 +589,22 @@
<data name="XinputPorts" xml:space="preserve">
<value>Use higher ports if you get conflicts in other emulating X360 programs, such as SCP's tool</value>
</data>
<data name="ActionExists" xml:space="preserve">
<value>Name of this action already exists</value>
</data>
<data name="LaunchProgram" xml:space="preserve">
<value>Launch *program*</value>
</data>
<data name="LoadProfile" xml:space="preserve">
<value>Load *profile*</value>
</data>
<data name="SetRegularTrigger" xml:space="preserve">
<value>Set Regular Trigger</value>
</data>
<data name="SetUnloadTrigger" xml:space="preserve">
<value>Set Unload Trigger</value>
</data>
<data name="CloseMinimize" xml:space="preserve">
<value>Close DS4Windows via the notification icon</value>
</data>
</root>

View File

@ -90,6 +90,15 @@ namespace DS4Windows.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Name of this action already exists.
/// </summary>
internal static string ActionExists {
get {
return ResourceManager.GetString("ActionExists", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Adding to list....
/// </summary>
@ -219,6 +228,15 @@ namespace DS4Windows.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Close DS4Windows via the notification icon.
/// </summary>
internal static string CloseMinimize {
get {
return ResourceManager.GetString("CloseMinimize", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Color.
/// </summary>
@ -651,6 +669,15 @@ namespace DS4Windows.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Launch *program*.
/// </summary>
internal static string LaunchProgram {
get {
return ResourceManager.GetString("LaunchProgram", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -690,6 +717,15 @@ namespace DS4Windows.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Load *profile*.
/// </summary>
internal static string LoadProfile {
get {
return ResourceManager.GetString("LoadProfile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -1110,6 +1146,24 @@ namespace DS4Windows.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Set Regular Trigger.
/// </summary>
internal static string SetRegularTrigger {
get {
return ResourceManager.GetString("SetRegularTrigger", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Set Unload Trigger.
/// </summary>
internal static string SetUnloadTrigger {
get {
return ResourceManager.GetString("SetUnloadTrigger", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View File

@ -33,7 +33,7 @@
this.btnRecord = new System.Windows.Forms.Button();
this.cBRecordDelays = new System.Windows.Forms.CheckBox();
this.lVMacros = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.cHMacro = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.iLKeys = new System.Windows.Forms.ImageList(this.components);
this.cBStyle = new System.Windows.Forms.ComboBox();
this.btnSave = new System.Windows.Forms.Button();
@ -76,7 +76,7 @@
//
resources.ApplyResources(this.lVMacros, "lVMacros");
this.lVMacros.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
this.cHMacro});
this.lVMacros.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.lVMacros.LargeImageList = this.iLKeys;
this.lVMacros.MultiSelect = false;
@ -92,9 +92,9 @@
this.lVMacros.MouseHover += new System.EventHandler(this.lVMacros_MouseHover);
this.lVMacros.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp);
//
// columnHeader1
// cHMacro
//
resources.ApplyResources(this.columnHeader1, "columnHeader1");
resources.ApplyResources(this.cHMacro, "cHMacro");
//
// iLKeys
//
@ -218,6 +218,7 @@
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp);
this.Resize += new System.EventHandler(this.RecordBox_Resize);
this.pnlMouseButtons.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -230,7 +231,7 @@
private System.Windows.Forms.CheckBox cBRecordDelays;
private System.Windows.Forms.ListView lVMacros;
private System.Windows.Forms.ImageList iLKeys;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader cHMacro;
private System.Windows.Forms.ComboBox cBStyle;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button btnCancel;

View File

@ -18,18 +18,17 @@ namespace DS4Windows
{
public partial class RecordBox : Form
{
private DS4Control.Control scpDevice;
Stopwatch sw = new Stopwatch();
Timer ds4 = new Timer();
public List<int> macros = new List<int>();
public List<string> macronames = new List<string>();
SpecActions sA;
KBM360 kbm;
DS4State cState;
public bool saved = false;
List<DS4Controls> dcs = new List<DS4Controls>();
public RecordBox(KBM360 op, DS4Control.Control bus_device)
public RecordBox(KBM360 op)
{
scpDevice = bus_device;
kbm = op;
InitializeComponent();
if (op != null)
@ -37,8 +36,39 @@ namespace DS4Windows
cBStyle.SelectedIndex = 1;
else
cBStyle.SelectedIndex = 0;
AddtoDS4List();
ds4.Tick += ds4_Tick;
ds4.Interval = 1;
if (kbm.macrostag.Count > 0)
{
macros.AddRange(kbm.macrostag);
LoadMacro();
saved = true;
}
}
public RecordBox(SpecActions op)
{
sA = op;
InitializeComponent();
if (sA.macrorepeat)
cBStyle.SelectedIndex = 1;
else
cBStyle.SelectedIndex = 0;
AddtoDS4List();
ds4.Tick += ds4_Tick;
ds4.Interval = 1;
lbRecordTip.Visible = false;
if (sA.macrostag.Count > 0)
{
macros.AddRange(sA.macrostag);
LoadMacro();
saved = true;
}
}
void AddtoDS4List()
{
dcs.Add(DS4Controls.Cross);
dcs.Add(DS4Controls.Cross);
dcs.Add(DS4Controls.Circle);
@ -65,19 +95,13 @@ namespace DS4Windows
dcs.Add(DS4Controls.RXNeg);
dcs.Add(DS4Controls.RYPos);
dcs.Add(DS4Controls.RYNeg);
if (kbm.macrostag.Count > 0)
{
macros.AddRange(kbm.macrostag);
LoadMacro();
saved = true;
}
}
void ds4_Tick(object sender, EventArgs e)
{
if (scpDevice.DS4Controllers[0] != null)
if (Program.rootHub.DS4Controllers[0] != null)
{
cState = scpDevice.getDS4State(0);
cState = Program.rootHub.getDS4State(0);
if (btnRecord.Text == Properties.Resources.StopText)
foreach (DS4Controls dc in dcs)
if (Mapping.getBoolMapping(dc, cState, null, null))
@ -217,7 +241,7 @@ namespace DS4Windows
{
if (cBRecordDelays.Checked)
sw.Start();
scpDevice.recordingMacro = true;
Program.rootHub.recordingMacro = true;
saved = false;
ds4.Start();
macros.Clear();
@ -229,7 +253,7 @@ namespace DS4Windows
}
else
{
scpDevice.recordingMacro = false;
Program.rootHub.recordingMacro = false;
ds4.Stop();
if (btn4th.Text.Contains(Properties.Resources.UpText))
btn4th_Click(sender, e);
@ -449,21 +473,38 @@ namespace DS4Windows
{
if (macros.Count > 0)
{
kbm.macrostag = macros;
macronames.Clear();
foreach (ListViewItem lvi in lVMacros.Items)
{
macronames.Add(lvi.Text);
}
kbm.macros = macronames;
string macro = string.Join(", ", macronames.ToArray());
kbm.lBMacroOn.Visible = true;
if (cBStyle.SelectedIndex == 1)
kbm.macrorepeat = true;
saved = true;
if (sender != kbm)
kbm.Close();
//Close();
if (kbm != null)
{
kbm.macrostag = macros;
kbm.macros = macronames;
kbm.lBMacroOn.Visible = true;
if (cBStyle.SelectedIndex == 1)
kbm.macrorepeat = true;
saved = true;
if (sender != kbm)
kbm.Close();
}
else if (sA != null)
{
sA.macrostag = macros;
sA.macros = macronames;
sA.lbMacroRecorded.Text = string.Join(", ", macronames);
//kbm.lBMacroOn.Visible = true;
if (cBStyle.SelectedIndex == 1)
sA.macrorepeat = true;
saved = true;
//if (sender != sA)
// sA.Close();
Close();
}
else
Close();
}
else MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
@ -862,5 +903,10 @@ namespace DS4Windows
}
}
private void RecordBox_Resize(object sender, EventArgs e)
{
cHMacro.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
}
}
}

132
DS4Tool/RecordBox.es.resx Normal file
View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancelar</value>
</data>
<data name="btnRecord.Text" xml:space="preserve">
<value>Grabar</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Guardar</value>
</data>
<data name="cBRecordDelays.Text" xml:space="preserve">
<value>Grabar retrasos</value>
</data>
</root>

View File

@ -183,11 +183,11 @@
<data name="lVMacros.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="columnHeader1.Text" xml:space="preserve">
<data name="cHMacro.Text" xml:space="preserve">
<value>Macro Order</value>
</data>
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
<value>525</value>
<data name="cHMacro.Width" type="System.Int32, mscorlib">
<value>200</value>
</data>
<metadata name="iLKeys.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
@ -197,7 +197,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
CgAAAk1TRnQBSQFMAgEBAwEAAcgBAAHIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CgAAAk1TRnQBSQFMAgEBAwEAAeABAAHgAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -414,54 +414,6 @@
<data name="pnlMouseButtons.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;btn5th.Name" xml:space="preserve">
<value>btn5th</value>
</data>
<data name="&gt;&gt;btn5th.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btn5th.Parent" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="&gt;&gt;btn5th.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btn4th.Name" xml:space="preserve">
<value>btn4th</value>
</data>
<data name="&gt;&gt;btn4th.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btn4th.Parent" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="&gt;&gt;btn4th.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="pnlMouseButtons.Location" type="System.Drawing.Point, System.Drawing">
<value>539, 198</value>
</data>
<data name="pnlMouseButtons.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 74</value>
</data>
<data name="pnlMouseButtons.TabIndex" type="System.Int32, mscorlib">
<value>331</value>
</data>
<data name="pnlMouseButtons.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.Name" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="btn5th.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
@ -516,6 +468,30 @@
<data name="&gt;&gt;btn4th.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="pnlMouseButtons.Location" type="System.Drawing.Point, System.Drawing">
<value>539, 225</value>
</data>
<data name="pnlMouseButtons.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 74</value>
</data>
<data name="pnlMouseButtons.TabIndex" type="System.Int32, mscorlib">
<value>331</value>
</data>
<data name="pnlMouseButtons.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.Name" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pnlMouseButtons.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="btnLoadP.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
@ -621,6 +597,9 @@
<data name="&gt;&gt;lbDelayTip.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>es</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -636,10 +615,10 @@
<data name="$this.Text" xml:space="preserve">
<value>Record a Macro</value>
</data>
<data name="&gt;&gt;columnHeader1.Name" xml:space="preserve">
<value>columnHeader1</value>
<data name="&gt;&gt;cHMacro.Name" xml:space="preserve">
<value>cHMacro</value>
</data>
<data name="&gt;&gt;columnHeader1.Type" xml:space="preserve">
<data name="&gt;&gt;cHMacro.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;iLKeys.Name" xml:space="preserve">

126
DS4Tool/SaveWhere.es.resx Normal file
View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="bnAppdataFolder.Text" xml:space="preserve">
<value>Appdata</value>
</data>
<data name="bnPrgmFolder.Text" xml:space="preserve">
<value>Carpeta de Programa</value>
</data>
</root>

View File

@ -176,8 +176,8 @@
<data name="bnPrgmFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>32, 63</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.ZOrder" xml:space="preserve">
<value>6</value>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbMultiSaves.ZOrder" xml:space="preserve">
<value>2</value>
@ -201,6 +201,9 @@ other settings yet</value>
<data name="&gt;&gt;bnAppdataFolder.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lbPickWhere.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
@ -225,15 +228,15 @@ other settings yet</value>
<data name="label3.Text" xml:space="preserve">
<value>For those who prefer a portable program Note: this option does not work if in an admin folder w/o UAC</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label4.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="bnPrgmFolder.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="cBDeleteOther.Location" type="System.Drawing.Point, System.Drawing">
<value>281, 0</value>
</data>
@ -252,11 +255,14 @@ other settings yet</value>
<data name="cBDeleteOther.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="bnPrgmFolder.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<data name="lbMultiSaves.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;lbPickWhere.ZOrder" xml:space="preserve">
<value>3</value>
<data name="$this.Text" xml:space="preserve">
<value>DS4Windows</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 69</value>
</data>
<data name="bnAppdataFolder.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
@ -267,17 +273,14 @@ other settings yet</value>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="lbMultiSaves.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>206, 89</value>
</data>
<data name="&gt;&gt;lbPickWhere.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 69</value>
<data name="&gt;&gt;bnPrgmFolder.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Parent" xml:space="preserve">
<value>$this</value>
@ -288,9 +291,6 @@ other settings yet</value>
<data name="&gt;&gt;lbPickWhere.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>DS4Windows</value>
</data>
<data name="&gt;&gt;lbMultiSaves.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@ -331,6 +331,6 @@ other settings yet</value>
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>fr-FR</value>
<value>es</value>
</metadata>
</root>

357
DS4Tool/SpecActions.Designer.cs generated Normal file
View File

@ -0,0 +1,357 @@
namespace DS4Windows
{
partial class SpecActions
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpecActions));
this.lVTrigger = new System.Windows.Forms.ListView();
this.cHTrigger = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.btnRecordMacro = new System.Windows.Forms.Button();
this.btnBrowse = new System.Windows.Forms.Button();
this.cBProfiles = new System.Windows.Forms.ComboBox();
this.btnSave = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.lbName = new System.Windows.Forms.Label();
this.tBName = new System.Windows.Forms.TextBox();
this.cBActions = new System.Windows.Forms.ComboBox();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.pBProgram = new System.Windows.Forms.PictureBox();
this.lbProgram = new System.Windows.Forms.Label();
this.btnBorder = new System.Windows.Forms.Button();
this.btnSetUTrigger = new System.Windows.Forms.Button();
this.lVUnloadTrigger = new System.Windows.Forms.ListView();
this.cHUnloadTrigger = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.pnlProgram = new System.Windows.Forms.Panel();
this.pnlMacro = new System.Windows.Forms.Panel();
this.lbMacroRecorded = new System.Windows.Forms.Label();
this.pnlProfile = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pBProgram)).BeginInit();
this.pnlProgram.SuspendLayout();
this.pnlMacro.SuspendLayout();
this.pnlProfile.SuspendLayout();
this.SuspendLayout();
//
// lVTrigger
//
resources.ApplyResources(this.lVTrigger, "lVTrigger");
this.lVTrigger.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lVTrigger.CheckBoxes = true;
this.lVTrigger.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.cHTrigger});
this.lVTrigger.FullRowSelect = true;
this.lVTrigger.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lVTrigger.HideSelection = false;
this.lVTrigger.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items1"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items2"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items3"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items4"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items5"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items6"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items7"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items8"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items9"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items10"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items11"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items12"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items13"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items14"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items15"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items16"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items17"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items18"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items19"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items20"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items21"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items22"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items23"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items24"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items25"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items26"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items27"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items28"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items29"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items30"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items31"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVTrigger.Items32")))});
this.lVTrigger.MultiSelect = false;
this.lVTrigger.Name = "lVTrigger";
this.lVTrigger.ShowGroups = false;
this.lVTrigger.ShowItemToolTips = true;
this.lVTrigger.UseCompatibleStateImageBehavior = false;
this.lVTrigger.View = System.Windows.Forms.View.Details;
this.lVTrigger.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lVTrigger_ItemChecked);
//
// cHTrigger
//
resources.ApplyResources(this.cHTrigger, "cHTrigger");
//
// btnRecordMacro
//
resources.ApplyResources(this.btnRecordMacro, "btnRecordMacro");
this.btnRecordMacro.Name = "btnRecordMacro";
this.btnRecordMacro.UseVisualStyleBackColor = true;
this.btnRecordMacro.Click += new System.EventHandler(this.btnRecordMacro_Click);
//
// btnBrowse
//
resources.ApplyResources(this.btnBrowse, "btnBrowse");
this.btnBrowse.Name = "btnBrowse";
this.btnBrowse.UseVisualStyleBackColor = true;
this.btnBrowse.Click += new System.EventHandler(this.btnBroswe_Click);
//
// cBProfiles
//
resources.ApplyResources(this.cBProfiles, "cBProfiles");
this.cBProfiles.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBProfiles.FormattingEnabled = true;
this.cBProfiles.Name = "cBProfiles";
this.cBProfiles.SelectedIndexChanged += new System.EventHandler(this.lVUnloadTrigger_SelectedIndexChanged);
//
// btnSave
//
resources.ApplyResources(this.btnSave, "btnSave");
this.btnSave.Name = "btnSave";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// btnCancel
//
resources.ApplyResources(this.btnCancel, "btnCancel");
this.btnCancel.Name = "btnCancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// lbName
//
resources.ApplyResources(this.lbName, "lbName");
this.lbName.Name = "lbName";
//
// tBName
//
resources.ApplyResources(this.tBName, "tBName");
this.tBName.Name = "tBName";
this.tBName.TextChanged += new System.EventHandler(this.tBName_TextChanged);
//
// cBActions
//
resources.ApplyResources(this.cBActions, "cBActions");
this.cBActions.Cursor = System.Windows.Forms.Cursors.Default;
this.cBActions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBActions.FormattingEnabled = true;
this.cBActions.Items.AddRange(new object[] {
resources.GetString("cBActions.Items"),
resources.GetString("cBActions.Items1"),
resources.GetString("cBActions.Items2"),
resources.GetString("cBActions.Items3")});
this.cBActions.Name = "cBActions";
this.cBActions.SelectedIndexChanged += new System.EventHandler(this.cBActions_SelectedIndexChanged);
//
// openFileDialog1
//
resources.ApplyResources(this.openFileDialog1, "openFileDialog1");
//
// imageList1
//
this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
resources.ApplyResources(this.imageList1, "imageList1");
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
//
// pBProgram
//
resources.ApplyResources(this.pBProgram, "pBProgram");
this.pBProgram.Name = "pBProgram";
this.pBProgram.TabStop = false;
//
// lbProgram
//
resources.ApplyResources(this.lbProgram, "lbProgram");
this.lbProgram.Name = "lbProgram";
//
// btnBorder
//
resources.ApplyResources(this.btnBorder, "btnBorder");
this.btnBorder.BackColor = System.Drawing.SystemColors.ControlDark;
this.btnBorder.ForeColor = System.Drawing.Color.WhiteSmoke;
this.btnBorder.Name = "btnBorder";
this.btnBorder.UseVisualStyleBackColor = false;
//
// btnSetUTrigger
//
resources.ApplyResources(this.btnSetUTrigger, "btnSetUTrigger");
this.btnSetUTrigger.Name = "btnSetUTrigger";
this.btnSetUTrigger.UseVisualStyleBackColor = true;
this.btnSetUTrigger.Click += new System.EventHandler(this.btnSetUTrigger_Click);
//
// lVUnloadTrigger
//
resources.ApplyResources(this.lVUnloadTrigger, "lVUnloadTrigger");
this.lVUnloadTrigger.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lVUnloadTrigger.CheckBoxes = true;
this.lVUnloadTrigger.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.cHUnloadTrigger});
this.lVUnloadTrigger.FullRowSelect = true;
this.lVUnloadTrigger.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lVUnloadTrigger.HideSelection = false;
this.lVUnloadTrigger.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items1"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items2"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items3"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items4"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items5"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items6"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items7"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items8"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items9"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items10"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items11"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items12"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items13"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items14"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items15"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items16"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items17"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items18"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items19"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items20"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items21"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items22"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items23"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items24"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items25"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items26"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items27"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items28"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items29"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items30"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items31"))),
((System.Windows.Forms.ListViewItem)(resources.GetObject("lVUnloadTrigger.Items32")))});
this.lVUnloadTrigger.MultiSelect = false;
this.lVUnloadTrigger.Name = "lVUnloadTrigger";
this.lVUnloadTrigger.ShowGroups = false;
this.lVUnloadTrigger.ShowItemToolTips = true;
this.lVUnloadTrigger.UseCompatibleStateImageBehavior = false;
this.lVUnloadTrigger.View = System.Windows.Forms.View.Details;
this.lVUnloadTrigger.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.lVUnloadTrigger_ItemChecked);
//
// cHUnloadTrigger
//
resources.ApplyResources(this.cHUnloadTrigger, "cHUnloadTrigger");
//
// pnlProgram
//
resources.ApplyResources(this.pnlProgram, "pnlProgram");
this.pnlProgram.Controls.Add(this.btnBrowse);
this.pnlProgram.Controls.Add(this.lbProgram);
this.pnlProgram.Controls.Add(this.pBProgram);
this.pnlProgram.Name = "pnlProgram";
//
// pnlMacro
//
resources.ApplyResources(this.pnlMacro, "pnlMacro");
this.pnlMacro.Controls.Add(this.btnRecordMacro);
this.pnlMacro.Controls.Add(this.lbMacroRecorded);
this.pnlMacro.Name = "pnlMacro";
//
// lbMacroRecorded
//
resources.ApplyResources(this.lbMacroRecorded, "lbMacroRecorded");
this.lbMacroRecorded.Name = "lbMacroRecorded";
//
// pnlProfile
//
resources.ApplyResources(this.pnlProfile, "pnlProfile");
this.pnlProfile.Controls.Add(this.label1);
this.pnlProfile.Controls.Add(this.cBProfiles);
this.pnlProfile.Controls.Add(this.btnSetUTrigger);
this.pnlProfile.Name = "pnlProfile";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// SpecActions
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Control;
this.Controls.Add(this.pnlProfile);
this.Controls.Add(this.pnlMacro);
this.Controls.Add(this.pnlProgram);
this.Controls.Add(this.tBName);
this.Controls.Add(this.cBActions);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.lbName);
this.Controls.Add(this.lVTrigger);
this.Controls.Add(this.lVUnloadTrigger);
this.Controls.Add(this.btnBorder);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "SpecActions";
((System.ComponentModel.ISupportInitialize)(this.pBProgram)).EndInit();
this.pnlProgram.ResumeLayout(false);
this.pnlMacro.ResumeLayout(false);
this.pnlProfile.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListView lVTrigger;
private System.Windows.Forms.ColumnHeader cHTrigger;
private System.Windows.Forms.Button btnRecordMacro;
private System.Windows.Forms.Button btnBrowse;
private System.Windows.Forms.ComboBox cBProfiles;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Label lbName;
private System.Windows.Forms.TextBox tBName;
private System.Windows.Forms.ComboBox cBActions;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.PictureBox pBProgram;
private System.Windows.Forms.Label lbProgram;
private System.Windows.Forms.Button btnBorder;
private System.Windows.Forms.Button btnSetUTrigger;
private System.Windows.Forms.ListView lVUnloadTrigger;
private System.Windows.Forms.ColumnHeader cHUnloadTrigger;
private System.Windows.Forms.Panel pnlProgram;
private System.Windows.Forms.Panel pnlMacro;
private System.Windows.Forms.Panel pnlProfile;
public System.Windows.Forms.Label lbMacroRecorded;
private System.Windows.Forms.Label label1;
}
}

257
DS4Tool/SpecActions.cs Normal file
View File

@ -0,0 +1,257 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DS4Control;
using System.IO;
using System.Xml;
namespace DS4Windows
{
public partial class SpecActions : Form
{
Options opt;
RecordBox rb;
public List<string> macros = new List<string>();
public List<string> controls = new List<string>();
public List<string> ucontrols = new List<string>();
public List<int> macrostag = new List<int>();
public bool macrorepeat, newaction;
public string program;
int editIndex;
protected String m_Actions = Global.appdatapath + "\\Actions.xml";
string oldprofilename;
public SpecActions(Options opt, string edit = "", int editindex = -1)
{
InitializeComponent();
this.opt = opt;
cBProfiles.Items.Add("[none]");
cBProfiles.SelectedIndex = 0;
cBActions.SelectedIndex = 0;
foreach (object s in opt.root.lBProfiles.Items)
cBProfiles.Items.Add(s.ToString());
editIndex = editindex;
if (edit != string.Empty)
{
oldprofilename = edit;
tBName.Text = edit;
LoadAction();
}
}
void LoadAction()
{
SpecialAction act = Global.GetAction(oldprofilename);
foreach (string s in act.controls.Split('/'))
foreach (ListViewItem lvi in lVTrigger.Items)
if (lvi.Text == s)
{
lvi.Checked = true;
break;
}
switch (act.type)
{
case "Macro": cBActions.SelectedIndex = 1; macrostag = act.macro; lbMacroRecorded.Text = "Macro Recored"; break;
case "Program": cBActions.SelectedIndex = 2; LoadProgram(act.details); break;
case "Profile":
cBActions.SelectedIndex = 3;
cBProfiles.Text = act.details;
foreach (string s in act.ucontrols.Split('/'))
foreach (ListViewItem lvi in lVUnloadTrigger.Items)
if (lvi.Text == s)
{
lvi.Checked = true;
break;
}
break;
}
}
private void btnRecordMacro_Click(object sender, EventArgs e)
{
rb = new RecordBox(this);
rb.TopLevel = false;
rb.Dock = DockStyle.Fill;
rb.Visible = true;
Controls.Add(rb);
rb.BringToFront();
}
private void lVUnloadTrigger_SelectedIndexChanged(object sender, EventArgs e)
{
if (cBProfiles.SelectedIndex > 0)
{
btnSetUTrigger.Enabled = true;
}
else
{
btnSetUTrigger.Enabled = false;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnSave_Click(object sender, EventArgs e)
{
foreach (SpecialAction sA in Global.GetActions())
{
if ((sA.name == tBName.Text && editIndex > -1 && tBName.Text != oldprofilename) ||
(sA.name == tBName.Text && editIndex == -1))
{
MessageBox.Show(Properties.Resources.ActionExists);
return;
}
}
controls.Clear();
ucontrols.Clear();
foreach (ListViewItem lvi in lVTrigger.Items)
if (lvi.Checked)
controls.Add(lvi.Text);
if (cBActions.SelectedIndex == 3)
{
foreach (ListViewItem lvi in lVUnloadTrigger.Items)
if (lvi.Checked)
ucontrols.Add(lvi.Text);
}
if (!string.IsNullOrEmpty(tBName.Text) && controls.Count > 0 && cBActions.SelectedIndex > 0)
{
bool actRe = false;
string action = "null";
bool edit = (!string.IsNullOrEmpty(oldprofilename) && tBName.Text == oldprofilename);
switch (cBActions.SelectedIndex)
{
case 1:
if (macrostag.Count > 0)
{
action = "Macro";
actRe = true;
if (!string.IsNullOrEmpty(oldprofilename) && oldprofilename != tBName.Text)
Global.RemoveAction(oldprofilename);
Global.SaveAction(tBName.Text, String.Join("/", controls), cBActions.SelectedIndex, String.Join("/", macrostag), edit);
}
break;
case 2:
if (!string.IsNullOrEmpty(program))
{
action = Properties.Resources.LaunchProgram.Replace("*program*", lbProgram.Text);
actRe = true;
if (!string.IsNullOrEmpty(oldprofilename) && oldprofilename != tBName.Text)
Global.RemoveAction(oldprofilename);
Global.SaveAction(tBName.Text, String.Join("/", controls), cBActions.SelectedIndex, program, edit);
}
break;
case 3:
if (cBProfiles.SelectedIndex > 0 && ucontrols.Count > 0)
{
action = Properties.Resources.LoadProfile.Replace("*profile*", cBProfiles.Text);
actRe = true;
if (!string.IsNullOrEmpty(oldprofilename) && oldprofilename != tBName.Text)
Global.RemoveAction(oldprofilename);
Global.SaveAction(tBName.Text, String.Join("/", controls), cBActions.SelectedIndex, cBProfiles.Text, edit, String.Join("/", ucontrols));
}
else
{
btnSetUTrigger.ForeColor = Color.Red;
}
break;
}
if (actRe)
{
ListViewItem lvi = new ListViewItem(tBName.Text);
lvi.SubItems.Add(String.Join(", ", controls));
lvi.SubItems.Add(action);
lvi.Checked = true;
if (editIndex > -1)
opt.lVActions.Items.RemoveAt(editIndex);
opt.lVActions.Items.Add(lvi);
Close();
}
}
else if (string.IsNullOrEmpty(tBName.Text))
{
lbName.ForeColor = Color.Red;
}
else
{
btnBorder.BackColor = Color.Red;
}
}
private void tBName_TextChanged(object sender, EventArgs e)
{
lbName.ForeColor = Color.Black;
if (tBName.Text.Contains('/')) { tBName.ForeColor = Color.Red; btnSave.Enabled = false; }
else { tBName.ForeColor = Color.Black; btnSave.Enabled = true; }
}
private void cBActions_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cBActions.SelectedIndex)
{
default:
pnlMacro.Visible = false;
pnlProgram.Visible = false;
pnlProfile.Visible = false;
btnSave.Enabled = false;
break;
case 1:
pnlMacro.Visible = true;
pnlProgram.Visible = false;
pnlProfile.Visible = false;
btnSave.Enabled = true;
break;
case 2:
pnlMacro.Visible = false;
pnlProgram.Visible = true;
pnlProfile.Visible = false;
btnSave.Enabled = true;
break;
case 3:
pnlMacro.Visible = false;
pnlProgram.Visible = false;
pnlProfile.Visible = true;
btnSave.Enabled = true;
break;
}
}
private void btnBroswe_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
LoadProgram(openFileDialog1.FileName);
}
void LoadProgram(string path)
{
pBProgram.Image = Icon.ExtractAssociatedIcon(path).ToBitmap();
lbProgram.Text = Path.GetFileNameWithoutExtension(path);
program = path;
}
private void lVTrigger_ItemChecked(object sender, ItemCheckedEventArgs e)
{
btnBorder.BackColor = SystemColors.ControlDark;
}
private void btnSetUTrigger_Click(object sender, EventArgs e)
{
lVTrigger.Visible = !lVTrigger.Visible;
if (lVTrigger.Visible)
btnSetUTrigger.Text = "Set Unload Trigger";
else
btnSetUTrigger.Text = "Set Regular Trigger";
}
private void lVUnloadTrigger_ItemChecked(object sender, ItemCheckedEventArgs e)
{
btnSetUTrigger.ForeColor = Color.Black;
}
}
}

File diff suppressed because it is too large Load Diff

1857
DS4Tool/SpecActions.resx Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="$this.Text" xml:space="preserve">
<value>Bienvenido a DS4Windows</value>
</data>
<data name="bnFinish.Text" xml:space="preserve">
<value>Finalizado</value>
</data>
<data name="bnStep1.Text" xml:space="preserve">
<value>Paso 1: Instalar el Driver DS4</value>
</data>
<data name="button2.Text" xml:space="preserve">
<value>Paso 2: Si usas Windows 7 o inferior, instala el Driver 360</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Si esta ventana reaparece despues de instalar, necesitas reiniciar tu pc o esperar 10-15 minutos que Windows reconozca el driver</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Si usas un Controlador X360 en esta PC, puedes omitir esto</value>
</data>
<data name="linkBluetoothSettings.Text" xml:space="preserve">
<value>Configuracion de Bluetooth</value>
</data>
</root>

View File

@ -388,6 +388,9 @@ Once paired, you're ready. Have fun!</value>
<data name="&gt;&gt;bnFinish.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>es</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View File

@ -190,7 +190,6 @@
//
// cMSPrograms
//
resources.ApplyResources(this.cMSPrograms, "cMSPrograms");
this.cMSPrograms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.addProgramsFromStartMenuToolStripMenuItem,
this.addSteamGamesToolStripMenuItem,
@ -198,29 +197,30 @@
this.browseForOtherProgramsToolStripMenuItem});
this.cMSPrograms.Name = "contextMenuStrip1";
this.cMSPrograms.ShowImageMargin = false;
resources.ApplyResources(this.cMSPrograms, "cMSPrograms");
//
// addProgramsFromStartMenuToolStripMenuItem
//
resources.ApplyResources(this.addProgramsFromStartMenuToolStripMenuItem, "addProgramsFromStartMenuToolStripMenuItem");
this.addProgramsFromStartMenuToolStripMenuItem.Name = "addProgramsFromStartMenuToolStripMenuItem";
resources.ApplyResources(this.addProgramsFromStartMenuToolStripMenuItem, "addProgramsFromStartMenuToolStripMenuItem");
this.addProgramsFromStartMenuToolStripMenuItem.Click += new System.EventHandler(this.addProgramsFromStartMenuToolStripMenuItem_Click);
//
// addSteamGamesToolStripMenuItem
//
resources.ApplyResources(this.addSteamGamesToolStripMenuItem, "addSteamGamesToolStripMenuItem");
this.addSteamGamesToolStripMenuItem.Name = "addSteamGamesToolStripMenuItem";
resources.ApplyResources(this.addSteamGamesToolStripMenuItem, "addSteamGamesToolStripMenuItem");
this.addSteamGamesToolStripMenuItem.Click += new System.EventHandler(this.addSteamGamesToolStripMenuItem_Click);
//
// addOriginGamesToolStripMenuItem
//
resources.ApplyResources(this.addOriginGamesToolStripMenuItem, "addOriginGamesToolStripMenuItem");
this.addOriginGamesToolStripMenuItem.Name = "addOriginGamesToolStripMenuItem";
resources.ApplyResources(this.addOriginGamesToolStripMenuItem, "addOriginGamesToolStripMenuItem");
this.addOriginGamesToolStripMenuItem.Click += new System.EventHandler(this.addOriginGamesToolStripMenuItem_Click);
//
// browseForOtherProgramsToolStripMenuItem
//
resources.ApplyResources(this.browseForOtherProgramsToolStripMenuItem, "browseForOtherProgramsToolStripMenuItem");
this.browseForOtherProgramsToolStripMenuItem.Name = "browseForOtherProgramsToolStripMenuItem";
resources.ApplyResources(this.browseForOtherProgramsToolStripMenuItem, "browseForOtherProgramsToolStripMenuItem");
this.browseForOtherProgramsToolStripMenuItem.Click += new System.EventHandler(this.browseForOtherProgramsToolStripMenuItem_Click);
//
// WinProgs

View File

@ -427,7 +427,7 @@ namespace DS4Windows
return url;
}
static string ResolveShortcut(string filePath)
public static string ResolveShortcut(string filePath)
{
// IWshRuntimeLibrary is in the COM library "Windows Script Host Object Model"
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
@ -444,7 +444,24 @@ namespace DS4Windows
}
}
static string ResolveMsiShortcut(string file)
public static string ResolveShortcutAndArgument(string filePath)
{
// IWshRuntimeLibrary is in the COM library "Windows Script Host Object Model"
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
try
{
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(filePath);
return shortcut.TargetPath + " " + shortcut.Arguments;
}
catch (COMException)
{
// A COMException is thrown if the file is not a valid shortcut (.lnk) file
return null;
}
}
public static string ResolveMsiShortcut(string file)
{
StringBuilder product = new StringBuilder(NativeMethods.MaxGuidLength + 1);
StringBuilder feature = new StringBuilder(NativeMethods.MaxFeatureLength + 1);

165
DS4Tool/WinProgs.es.resx Normal file
View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="addOriginGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Adicionar Juegos de "Origin"</value>
</data>
<data name="addProgramsFromStartMenuToolStripMenuItem.Text" xml:space="preserve">
<value>Adicionar Programas del menu de Inicio</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Adicionar Juegos de "Steam"</value>
</data>
<data name="bnAddPrograms.Text" xml:space="preserve">
<value>Adicionar Programas</value>
</data>
<data name="bnDelete.Text" xml:space="preserve">
<value>Quitar</value>
</data>
<data name="bnHideUnchecked.Text" xml:space="preserve">
<value>Ocultar desmarcados</value>
</data>
<data name="bnSave.Text" xml:space="preserve">
<value>Guardar</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Text" xml:space="preserve">
<value>Explorar para Otros Programas</value>
</data>
<data name="lBController1.Text" xml:space="preserve">
<value>Controlador 1</value>
</data>
<data name="lBController2.Text" xml:space="preserve">
<value>Controlador 2</value>
</data>
<data name="lBController3.Text" xml:space="preserve">
<value>Controlador 3</value>
</data>
<data name="lBController4.Text" xml:space="preserve">
<value>Controlador 4</value>
</data>
<data name="nameHeader.Text" xml:space="preserve">
<value>Nombre</value>
</data>
<data name="PathHeader.Text" xml:space="preserve">
<value>Ruta</value>
</data>
<data name="pBProfilesTip.Text" xml:space="preserve">
<value>Elegir Perfiles aqui</value>
</data>
</root>

View File

@ -117,455 +117,131 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;cBProfile1.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="&gt;&gt;lBProgramPath.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="bnAddPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 23</value>
</data>
<data name="&gt;&gt;cBProfile2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="lBController2.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="&gt;&gt;browseForOtherProgramsToolStripMenuItem.Name" xml:space="preserve">
<value>browseForOtherProgramsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;cBProfile4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="bnDelete.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;lVPrograms.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="cMSPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>193, 92</value>
</data>
<data name="lBController4.Text" xml:space="preserve">
<value>Controller 4</value>
</data>
<data name="bnHideUnchecked.Size" type="System.Drawing.Size, System.Drawing">
<value>94, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lBController1.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;cBProfile1.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBProgramPath.Name" xml:space="preserve">
<value>lBProgramPath</value>
</data>
<data name="lBController1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;cBProfile4.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Text" xml:space="preserve">
<value>Browse for Other Programs</value>
</data>
<data name="&gt;&gt;lBController1.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;lBController2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Add Steam Games</value>
</data>
<data name="bnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<data name="iLIcons.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="&gt;&gt;addProgramsFromStartMenuToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="nameHeader.Text" xml:space="preserve">
<value>Name</value>
</data>
<data name="lBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 31</value>
</data>
<data name="cBProfile4.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Auto-Profiles</value>
</data>
<data name="&gt;&gt;lBController4.Name" xml:space="preserve">
<value>lBController4</value>
</data>
<data name="addProgramsFromStartMenuToolStripMenuItem.Text" xml:space="preserve">
<value>Add Start Menu Programs</value>
</data>
<data name="lBController1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;cBProfile2.Name" xml:space="preserve">
<value>cBProfile2</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="lBController4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;bnAddPrograms.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnAddPrograms.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cBProfile2.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 55</value>
</data>
<data name="bnAddPrograms.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 2</value>
</data>
<data name="&gt;&gt;openProgram.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addOriginGamesToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cMSPrograms.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController2.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;lBController3.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;bnDelete.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnSave.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cBProfile3.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="addOriginGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="&gt;&gt;PathHeader.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addProgramsFromStartMenuToolStripMenuItem.Name" xml:space="preserve">
<value>addProgramsFromStartMenuToolStripMenuItem</value>
</data>
<data name="&gt;&gt;addSteamGamesToolStripMenuItem.Name" xml:space="preserve">
<value>addSteamGamesToolStripMenuItem</value>
</data>
<data name="lBController4.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 112</value>
</data>
<data name="&gt;&gt;cBProfile3.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="&gt;&gt;lBController1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cBProfile2.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="pBProfilesTip.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 13</value>
</data>
<data name="pBProfilesTip.Text" xml:space="preserve">
<value>Pick Profiles here</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
<data name="bnAddPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="bnAddPrograms.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="pBProfilesTip.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="lVPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>505, 190</value>
</data>
<data name="&gt;&gt;nameHeader.Name" xml:space="preserve">
<value>nameHeader</value>
</data>
<data name="&gt;&gt;cBProfile1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="lBProgramPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;cBProfile3.Name" xml:space="preserve">
<value>cBProfile3</value>
</data>
<data name="&gt;&gt;lBController2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController1.Name" xml:space="preserve">
<value>lBController1</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WinProgs</value>
</data>
<data name="bnAddPrograms.Text" xml:space="preserve">
<value>Add programs</value>
</data>
<data name="&gt;&gt;cMSPrograms.Name" xml:space="preserve">
<value>cMSPrograms</value>
<data name="&gt;&gt;bnAddPrograms.Name" xml:space="preserve">
<value>bnAddPrograms</value>
</data>
<data name="bnHideUnchecked.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<data name="&gt;&gt;bnAddPrograms.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addSteamGamesToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="addProgramsFromStartMenuToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="&gt;&gt;lBController3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cBProfile1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="lBProgramPath.Size" type="System.Drawing.Size, System.Drawing">
<value>205, 18</value>
</data>
<data name="lBController2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;lBController4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBProfile2.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="openProgram.Filter" xml:space="preserve">
<value>Programs|*.exe|Shortcuts|*.lnk</value>
</data>
<data name="&gt;&gt;nameHeader.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;openProgram.Name" xml:space="preserve">
<value>openProgram</value>
</data>
<data name="&gt;&gt;bnDelete.Parent" xml:space="preserve">
<data name="&gt;&gt;bnAddPrograms.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="pBProfilesTip.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="lVPrograms.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 28</value>
</data>
<data name="lBController3.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="&gt;&gt;bnDelete.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="lBController2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="PathHeader.Text" xml:space="preserve">
<value>Path</value>
</data>
<data name="lBController2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;bnSave.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="addOriginGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Add Origin Games</value>
</data>
<data name="&gt;&gt;bnSave.Name" xml:space="preserve">
<value>bnSave</value>
</data>
<data name="cBProfile1.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="&gt;&gt;addOriginGamesToolStripMenuItem.Name" xml:space="preserve">
<value>addOriginGamesToolStripMenuItem</value>
</data>
<data name="nameHeader.Width" type="System.Int32, mscorlib">
<value>140</value>
</data>
<data name="&gt;&gt;bnDelete.Name" xml:space="preserve">
<value>bnDelete</value>
</data>
<data name="&gt;&gt;pBProfilesTip.Name" xml:space="preserve">
<value>pBProfilesTip</value>
</data>
<data name="&gt;&gt;lBProgramPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="bnSave.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="bnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 23</value>
</data>
<data name="cBProfile3.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 82</value>
</data>
<data name="lBProgramPath.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="bnDelete.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lBController3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;lBController4.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;lBProgramPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pBProfilesTip.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;cBProfile3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="lBProgramPath.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="lBController1.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="bnSave.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="cBProfile2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;cBProfile2.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="&gt;&gt;bnAddPrograms.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="cBProfile1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lBProgramPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;cBProfile4.ZOrder" xml:space="preserve">
<value>9</value>
<data name="lBProgramPath.Location" type="System.Drawing.Point, System.Drawing">
<value>519, 195</value>
</data>
<data name="lBController1.Text" xml:space="preserve">
<value>Controller 1</value>
<data name="lBProgramPath.Size" type="System.Drawing.Size, System.Drawing">
<value>205, 18</value>
</data>
<data name="&gt;&gt;lBController2.Name" xml:space="preserve">
<value>lBController2</value>
<data name="lBProgramPath.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="bnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>590, 2</value>
<data name="lBProgramPath.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;lVPrograms.Name" xml:space="preserve">
<value>lVPrograms</value>
<data name="&gt;&gt;lBProgramPath.Name" xml:space="preserve">
<value>lBProgramPath</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cBProfile4.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="&gt;&gt;iLIcons.Name" xml:space="preserve">
<value>iLIcons</value>
</data>
<data name="cBProfile3.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;pBProfilesTip.Type" xml:space="preserve">
<data name="&gt;&gt;lBProgramPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="PathHeader.Width" type="System.Int32, mscorlib">
<value>358</value>
</data>
<data name="bnDelete.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="lBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 85</value>
</data>
<data name="bnSave.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;lBController1.Parent" xml:space="preserve">
<data name="&gt;&gt;lBProgramPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="bnHideUnchecked.Location" type="System.Drawing.Point, System.Drawing">
<value>99, 2</value>
<data name="&gt;&gt;lBProgramPath.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="&gt;&gt;bnSave.Parent" xml:space="preserve">
<value>$this</value>
<data name="cBProfile1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="cBProfile1.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 28</value>
</data>
<data name="&gt;&gt;lBController4.Parent" xml:space="preserve">
<data name="cBProfile1.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="cBProfile1.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;cBProfile1.Name" xml:space="preserve">
<value>cBProfile1</value>
</data>
<data name="&gt;&gt;cBProfile1.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBProfile1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="pBProfilesTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;cBProfile1.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="&gt;&gt;iLIcons.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lBController4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<data name="cBProfile2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="bnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>663, 2</value>
<data name="cBProfile2.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 55</value>
</data>
<data name="lBController4.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<data name="cBProfile2.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="lVPrograms.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
<data name="cBProfile2.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;cBProfile4.Name" xml:space="preserve">
<value>cBProfile4</value>
<data name="&gt;&gt;cBProfile2.Name" xml:space="preserve">
<value>cBProfile2</value>
</data>
<data name="lBController3.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<data name="&gt;&gt;cBProfile2.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lBController2.Text" xml:space="preserve">
<value>Controller 2</value>
<data name="&gt;&gt;cBProfile2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnAddPrograms.Name" xml:space="preserve">
<value>bnAddPrograms</value>
<data name="&gt;&gt;cBProfile2.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="cBProfile3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="cBProfile3.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 82</value>
</data>
<data name="cBProfile3.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="cBProfile3.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;cBProfile3.Name" xml:space="preserve">
<value>cBProfile3</value>
</data>
<data name="&gt;&gt;cBProfile3.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBProfile3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;cBProfile3.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="cBProfile4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
@ -573,79 +249,406 @@
<data name="cBProfile4.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 109</value>
</data>
<data name="&gt;&gt;cBProfile3.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="cBProfile4.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="cBProfile2.TabIndex" type="System.Int32, mscorlib">
<data name="cBProfile4.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;browseForOtherProgramsToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;cBProfile4.Name" xml:space="preserve">
<value>cBProfile4</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>736, 222</value>
<data name="&gt;&gt;cBProfile4.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController3.Parent" xml:space="preserve">
<data name="&gt;&gt;cBProfile4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="lVPrograms.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
<data name="&gt;&gt;cBProfile4.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="&gt;&gt;lVPrograms.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="pBProfilesTip.Location" type="System.Drawing.Point, System.Drawing">
<value>622, 136</value>
</data>
<data name="&gt;&gt;lBController3.Name" xml:space="preserve">
<value>lBController3</value>
</data>
<data name="lBController3.Text" xml:space="preserve">
<value>Controller 3</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.Name" xml:space="preserve">
<value>bnHideUnchecked</value>
</data>
<data name="&gt;&gt;lVPrograms.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 58</value>
</data>
<data name="&gt;&gt;cBProfile1.Name" xml:space="preserve">
<value>cBProfile1</value>
</data>
<data name="lBController3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cBProfile3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<data name="bnSave.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="bnHideUnchecked.Text" xml:space="preserve">
<value>Hide unchecked</value>
<data name="bnSave.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="lBProgramPath.Location" type="System.Drawing.Point, System.Drawing">
<value>519, 195</value>
<data name="bnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>663, 2</value>
</data>
<data name="bnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 23</value>
</data>
<data name="bnSave.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="bnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<data name="&gt;&gt;bnSave.Name" xml:space="preserve">
<value>bnSave</value>
</data>
<data name="&gt;&gt;bnSave.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnSave.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="lBController1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="lBController1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 31</value>
</data>
<data name="lBController1.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController1.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="lBController1.Text" xml:space="preserve">
<value>Controller 1</value>
</data>
<data name="&gt;&gt;lBController1.Name" xml:space="preserve">
<value>lBController1</value>
</data>
<data name="&gt;&gt;lBController1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lBController1.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="lBController2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="lBController2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 58</value>
</data>
<data name="lBController2.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="lBController2.Text" xml:space="preserve">
<value>Controller 2</value>
</data>
<data name="&gt;&gt;lBController2.Name" xml:space="preserve">
<value>lBController2</value>
</data>
<data name="&gt;&gt;lBController2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lBController2.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="lBController3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="lBController3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 85</value>
</data>
<data name="lBController3.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController3.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="lBController3.Text" xml:space="preserve">
<value>Controller 3</value>
</data>
<data name="&gt;&gt;lBController3.Name" xml:space="preserve">
<value>lBController3</value>
</data>
<data name="&gt;&gt;lBController3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lBController3.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="lBController4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="lBController4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 112</value>
</data>
<data name="lBController4.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController4.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="lBController4.Text" xml:space="preserve">
<value>Controller 4</value>
</data>
<data name="&gt;&gt;lBController4.Name" xml:space="preserve">
<value>lBController4</value>
</data>
<data name="&gt;&gt;lBController4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lBController4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lBController4.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<metadata name="openProgram.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="openProgram.Filter" xml:space="preserve">
<value>Programs|*.exe|Shortcuts|*.lnk</value>
</data>
<data name="bnDelete.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="bnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>590, 2</value>
</data>
<data name="bnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 23</value>
</data>
<data name="bnDelete.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="bnDelete.Text" xml:space="preserve">
<value>Remove</value>
</data>
<data name="&gt;&gt;bnDelete.Name" xml:space="preserve">
<value>bnDelete</value>
</data>
<data name="&gt;&gt;bnDelete.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnDelete.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnDelete.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<metadata name="iLIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>143, 17</value>
</metadata>
<data name="iLIcons.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="lVPrograms.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="nameHeader.Text" xml:space="preserve">
<value>Name</value>
</data>
<data name="nameHeader.Width" type="System.Int32, mscorlib">
<value>140</value>
</data>
<data name="PathHeader.Text" xml:space="preserve">
<value>Path</value>
</data>
<data name="PathHeader.Width" type="System.Int32, mscorlib">
<value>358</value>
</data>
<data name="lVPrograms.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 28</value>
</data>
<data name="lVPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>505, 190</value>
</data>
<data name="lVPrograms.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="&gt;&gt;lVPrograms.Name" xml:space="preserve">
<value>lVPrograms</value>
</data>
<data name="&gt;&gt;lVPrograms.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lVPrograms.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lVPrograms.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="pBProfilesTip.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="pBProfilesTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="pBProfilesTip.Location" type="System.Drawing.Point, System.Drawing">
<value>622, 136</value>
</data>
<data name="pBProfilesTip.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 13</value>
</data>
<data name="pBProfilesTip.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="pBProfilesTip.Text" xml:space="preserve">
<value>Pick Profiles here</value>
</data>
<data name="&gt;&gt;pBProfilesTip.Name" xml:space="preserve">
<value>pBProfilesTip</value>
</data>
<data name="&gt;&gt;pBProfilesTip.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pBProfilesTip.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pBProfilesTip.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="bnHideUnchecked.Location" type="System.Drawing.Point, System.Drawing">
<value>99, 2</value>
</data>
<data name="bnHideUnchecked.Size" type="System.Drawing.Size, System.Drawing">
<value>94, 23</value>
</data>
<data name="bnHideUnchecked.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="bnHideUnchecked.Text" xml:space="preserve">
<value>Hide unchecked</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.Name" xml:space="preserve">
<value>bnHideUnchecked</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnHideUnchecked.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="cMSPrograms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>232, 17</value>
</metadata>
<data name="addProgramsFromStartMenuToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="addProgramsFromStartMenuToolStripMenuItem.Text" xml:space="preserve">
<value>Add Start Menu Programs</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Add Steam Games</value>
</data>
<data name="addOriginGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="addOriginGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Add Origin Games</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 22</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Text" xml:space="preserve">
<value>Browse for Other Programs</value>
</data>
<data name="cMSPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>193, 92</value>
</data>
<data name="&gt;&gt;cMSPrograms.Name" xml:space="preserve">
<value>cMSPrograms</value>
</data>
<data name="&gt;&gt;cMSPrograms.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>es</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>736, 222</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Auto-Profiles</value>
</data>
<data name="&gt;&gt;openProgram.Name" xml:space="preserve">
<value>openProgram</value>
</data>
<data name="&gt;&gt;openProgram.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;iLIcons.Name" xml:space="preserve">
<value>iLIcons</value>
</data>
<data name="&gt;&gt;iLIcons.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nameHeader.Name" xml:space="preserve">
<value>nameHeader</value>
</data>
<data name="&gt;&gt;nameHeader.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;PathHeader.Name" xml:space="preserve">
<value>PathHeader</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="iLIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>143, 17</value>
</metadata>
<metadata name="cMSPrograms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>232, 17</value>
</metadata>
<metadata name="openProgram.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="&gt;&gt;PathHeader.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addProgramsFromStartMenuToolStripMenuItem.Name" xml:space="preserve">
<value>addProgramsFromStartMenuToolStripMenuItem</value>
</data>
<data name="&gt;&gt;addProgramsFromStartMenuToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addSteamGamesToolStripMenuItem.Name" xml:space="preserve">
<value>addSteamGamesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;addSteamGamesToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;addOriginGamesToolStripMenuItem.Name" xml:space="preserve">
<value>addOriginGamesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;addOriginGamesToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;browseForOtherProgramsToolStripMenuItem.Name" xml:space="preserve">
<value>browseForOtherProgramsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;browseForOtherProgramsToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WinProgs</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>