2014-03-28 02:50:40 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Xml;
|
2014-05-28 04:49:58 +02:00
|
|
|
|
using System.Drawing;
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
2014-06-12 20:46:00 +02:00
|
|
|
|
using System.Security.Principal;
|
2015-02-08 22:51:52 +01:00
|
|
|
|
namespace DS4Windows
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
|
|
|
|
[Flags]
|
2014-06-14 21:14:27 +02:00
|
|
|
|
public enum DS4KeyType : byte { None = 0, ScanCode = 1, Toggle = 2, Unbound = 4, Macro = 8, HoldMacro = 16, RepeatMacro = 32 }; //Increment by exponents of 2*, starting at 2^0
|
2014-03-28 02:50:40 +01:00
|
|
|
|
public enum Ds3PadId : byte { None = 0xFF, One = 0x00, Two = 0x01, Three = 0x02, Four = 0x03, All = 0x04 };
|
2014-11-15 22:54:14 +01:00
|
|
|
|
public enum DS4Controls : byte { None, LXNeg, LXPos, LYNeg, LYPos, RXNeg, RXPos, RYNeg, RYPos, L1, L2, L3, R1, R2, R3, Square, Triangle, Circle, Cross, DpadUp, DpadRight, DpadDown, DpadLeft, PS, TouchLeft, TouchUpper, TouchMulti, TouchRight, Share, Options, GyroXPos, GyroXNeg, GyroZPos, GyroZNeg, SwipeLeft, SwipeRight, SwipeUp, SwipeDown };
|
2014-04-29 23:56:58 +02:00
|
|
|
|
public enum X360Controls : byte { None, LXNeg, LXPos, LYNeg, LYPos, RXNeg, RXPos, RYNeg, RYPos, LB, LT, LS, RB, RT, RS, X, Y, B, A, DpadUp, DpadRight, DpadDown, DpadLeft, Guide, Back, Start, LeftMouse, RightMouse, MiddleMouse, FourthMouse, FifthMouse, WUP, WDOWN, MouseUp, MouseDown, MouseLeft, MouseRight, Unbound };
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
|
|
|
|
public class DebugEventArgs : EventArgs
|
|
|
|
|
{
|
|
|
|
|
protected DateTime m_Time = DateTime.Now;
|
|
|
|
|
protected String m_Data = String.Empty;
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
protected bool warning = false;
|
|
|
|
|
public DebugEventArgs(String Data, bool warn)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
|
|
|
|
m_Data = Data;
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
warning = warn;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public DateTime Time
|
|
|
|
|
{
|
|
|
|
|
get { return m_Time; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String Data
|
|
|
|
|
{
|
|
|
|
|
get { return m_Data; }
|
|
|
|
|
}
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
public bool Warning
|
|
|
|
|
{
|
|
|
|
|
get { return warning; }
|
|
|
|
|
}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class MappingDoneEventArgs : EventArgs
|
|
|
|
|
{
|
|
|
|
|
protected int deviceNum = -1;
|
|
|
|
|
|
|
|
|
|
public MappingDoneEventArgs(int DeviceID)
|
|
|
|
|
{
|
|
|
|
|
deviceNum = DeviceID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int DeviceID
|
|
|
|
|
{
|
|
|
|
|
get { return deviceNum; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class ReportEventArgs : EventArgs
|
|
|
|
|
{
|
|
|
|
|
protected Ds3PadId m_Pad = Ds3PadId.None;
|
|
|
|
|
protected Byte[] m_Report = new Byte[64];
|
|
|
|
|
|
|
|
|
|
public ReportEventArgs()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ReportEventArgs(Ds3PadId Pad)
|
|
|
|
|
{
|
|
|
|
|
m_Pad = Pad;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Ds3PadId Pad
|
|
|
|
|
{
|
|
|
|
|
get { return m_Pad; }
|
|
|
|
|
set { m_Pad = value; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Byte[] Report
|
|
|
|
|
{
|
|
|
|
|
get { return m_Report; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class Global
|
|
|
|
|
{
|
|
|
|
|
protected static BackingStore m_Config = new BackingStore();
|
|
|
|
|
protected static Int32 m_IdleTimeout = 600000;
|
Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won't affect you), thanks to this update, you can now...
Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
Another fix for auto profiles startup bug
Better reading of autoprofile program path names
Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
UI fixes
2014-06-10 21:45:09 +02:00
|
|
|
|
static string exepath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName;
|
|
|
|
|
public static string appdatapath;
|
2014-09-15 04:37:14 +02:00
|
|
|
|
public static string[] tempprofilename = new string[5] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty };
|
Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won't affect you), thanks to this update, you can now...
Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
Another fix for auto profiles startup bug
Better reading of autoprofile program path names
Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
UI fixes
2014-06-10 21:45:09 +02:00
|
|
|
|
|
2014-06-12 20:46:00 +02:00
|
|
|
|
public static void SaveWhere(string path)
|
Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won't affect you), thanks to this update, you can now...
Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
Another fix for auto profiles startup bug
Better reading of autoprofile program path names
Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
UI fixes
2014-06-10 21:45:09 +02:00
|
|
|
|
{
|
2014-06-12 20:46:00 +02:00
|
|
|
|
appdatapath = path;
|
Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won't affect you), thanks to this update, you can now...
Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
Another fix for auto profiles startup bug
Better reading of autoprofile program path names
Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
UI fixes
2014-06-10 21:45:09 +02:00
|
|
|
|
m_Config.m_Profile = appdatapath + "\\Profiles.xml";
|
2014-12-13 21:12:03 +01:00
|
|
|
|
m_Config.m_Actions = appdatapath + "\\Actions.xml";
|
Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won't affect you), thanks to this update, you can now...
Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
Another fix for auto profiles startup bug
Better reading of autoprofile program path names
Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
UI fixes
2014-06-10 21:45:09 +02:00
|
|
|
|
}
|
2014-06-12 20:46:00 +02:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Check if Admin Rights are needed to write in Appliplation Directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static bool AdminNeeded()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2014-06-13 21:52:25 +02:00
|
|
|
|
File.WriteAllText(exepath + "\\test.txt", "test");
|
|
|
|
|
File.Delete(exepath + "\\test.txt");
|
2014-06-12 20:46:00 +02:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
catch (UnauthorizedAccessException)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool IsAdministrator()
|
|
|
|
|
{
|
|
|
|
|
var identity = WindowsIdentity.GetCurrent();
|
|
|
|
|
var principal = new WindowsPrincipal(identity);
|
|
|
|
|
return principal.IsInRole(WindowsBuiltInRole.Administrator);
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-29 06:29:08 +01:00
|
|
|
|
public static event EventHandler<EventArgs> ControllerStatusChange; // called when a controller is added/removed/battery or touchpad mode changes/etc.
|
|
|
|
|
public static void ControllerStatusChanged(object sender)
|
|
|
|
|
{
|
|
|
|
|
if (ControllerStatusChange != null)
|
|
|
|
|
ControllerStatusChange(sender, EventArgs.Empty);
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
//general values
|
|
|
|
|
public static bool UseExclusiveMode
|
2014-04-27 21:32:09 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.useExclusiveMode = value; }
|
|
|
|
|
get { return m_Config.useExclusiveMode; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static DateTime LastChecked
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.lastChecked = value; }
|
|
|
|
|
get { return m_Config.lastChecked; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int CheckWhen
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.CheckWhen = value; }
|
|
|
|
|
get { return m_Config.CheckWhen; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool Notifications
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.notifications = value; }
|
|
|
|
|
get { return m_Config.notifications; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool DCBTatStop
|
2014-05-31 06:37:02 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.disconnectBTAtStop = value; }
|
|
|
|
|
get { return m_Config.disconnectBTAtStop; }
|
2014-05-31 06:37:02 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool SwipeProfiles
|
2014-05-31 06:37:02 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.swipeProfiles = value; }
|
|
|
|
|
get { return m_Config.swipeProfiles; }
|
2014-05-31 06:37:02 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool DS4Mapping
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.ds4Mapping = value; }
|
|
|
|
|
get { return m_Config.ds4Mapping; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool QuickCharge
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.quickCharge = value; }
|
|
|
|
|
get { return m_Config.quickCharge; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int FirstXinputPort
|
2014-06-02 19:29:38 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.firstXinputPort = value; }
|
|
|
|
|
get { return m_Config.firstXinputPort; }
|
2014-06-02 19:29:38 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool CloseMini
|
2014-06-02 19:29:38 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.closeMini = value; }
|
|
|
|
|
get { return m_Config.closeMini; }
|
2014-06-02 19:29:38 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool StartMinimized
|
2014-08-23 22:52:20 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.startMinimized = value; }
|
|
|
|
|
get { return m_Config.startMinimized; }
|
2014-08-23 22:52:20 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int FormWidth
|
2014-08-23 22:52:20 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.formWidth = value; }
|
|
|
|
|
get { return m_Config.formWidth;}
|
2014-08-23 22:52:20 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int FormHeight
|
2014-09-15 04:37:14 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.formHeight = value; }
|
|
|
|
|
get { return m_Config.formHeight; }
|
2014-09-15 04:37:14 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool DownloadLang
|
2014-09-15 04:37:14 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
set { m_Config.downloadLang = value; }
|
|
|
|
|
get { return m_Config.downloadLang; }
|
2014-09-15 04:37:14 +02:00
|
|
|
|
}
|
2015-03-15 19:16:01 +01:00
|
|
|
|
public static bool FlashWhenLate
|
|
|
|
|
{
|
|
|
|
|
set { m_Config.flashWhenLate = value; }
|
|
|
|
|
get { return m_Config.flashWhenLate; }
|
|
|
|
|
}
|
2014-11-15 22:54:14 +01:00
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
//controller/profile specfic values
|
|
|
|
|
public static int[] ButtonMouseSensitivity
|
2014-11-15 22:54:14 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get {return m_Config.buttonMouseSensitivity;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static byte[] RumbleBoost
|
2014-05-21 19:39:56 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.rumble; }
|
2014-05-21 19:39:56 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static double[] Rainbow
|
2014-05-21 19:39:56 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.rainbow; }
|
2014-05-21 19:39:56 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] FlushHIDQueue
|
2014-06-06 22:38:52 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.flushHIDQueue; }
|
2014-06-06 22:38:52 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] IdleDisconnectTimeout
|
2014-06-06 22:38:52 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.idleDisconnectTimeout; }
|
2014-06-06 22:38:52 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static byte[] TouchSensitivity
|
2014-06-06 22:38:52 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.touchSensitivity; }
|
|
|
|
|
}
|
|
|
|
|
public static byte[] FlashType
|
2014-06-21 20:00:28 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.flashType;}
|
2014-06-21 20:00:28 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] FlashAt
|
2014-06-21 20:00:28 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.flashAt;}
|
2014-06-21 20:00:28 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] LedAsBatteryIndicator
|
2014-11-20 20:03:18 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.ledAsBattery;}
|
2014-11-20 20:03:18 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] ChargingType
|
2014-11-20 20:03:18 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.chargingType; }
|
2014-11-20 20:03:18 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] DinputOnly
|
2014-11-20 20:03:18 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.dinputOnly; }
|
2014-11-20 20:03:18 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] StartTouchpadOff
|
2014-11-20 20:03:18 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.startTouchpadOff; }
|
2014-12-03 23:36:54 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] UseTPforControls
|
2014-12-03 23:36:54 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.useTPforControls; }
|
2014-12-03 23:36:54 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static DS4Color[] MainColor
|
2014-12-03 23:36:54 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.m_Leds; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static DS4Color[] LowColor
|
2014-12-13 21:12:03 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.m_LowLeds; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static DS4Color[] ChargingColor
|
2014-12-13 21:12:03 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.m_ChargingLeds;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
public static DS4Color[] FlashColor
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.m_FlashLeds;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static DS4Color[] ShiftColor
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.m_ShiftLeds; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] ShiftColorOn
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get{ return m_Config.shiftColorOn; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static byte[] TapSensitivity
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.tapSensitivity; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] DoubleTap
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.doubleTap; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] ScrollSensitivity
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get{ return m_Config.scrollSensitivity;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] LowerRCOn
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get{ return m_Config.lowerRCOn;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] TouchpadJitterCompensation
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.touchpadJitterCompensation; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static byte[] L2Deadzone
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.l2Deadzone; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static byte[] R2Deadzone
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.r2Deadzone;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static double[] SXDeadzone
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.SXDeadzone;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static double[] SZDeadzone
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.SZDeadzone;}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-04-21 21:00:09 +02:00
|
|
|
|
public static int[] LSDeadzone
|
2014-06-26 20:02:01 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.LSDeadzone;}
|
2014-06-26 20:02:01 +02:00
|
|
|
|
}
|
2015-04-21 21:00:09 +02:00
|
|
|
|
public static int[] RSDeadzone
|
2014-06-26 20:02:01 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.RSDeadzone;}
|
2014-06-26 20:02:01 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] LSCurve
|
2014-06-26 20:02:01 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.lsCurve;}
|
2014-06-26 20:02:01 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] RSCurve
|
2014-06-26 20:02:01 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.rsCurve;}
|
2014-06-26 20:02:01 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static bool[] MouseAccel
|
2014-05-21 23:42:25 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.mouseAccel;}
|
2014-05-21 23:42:25 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static int[] ShiftModifier
|
2014-05-21 23:42:25 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.shiftModifier;}
|
2014-05-21 23:42:25 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static string[] LaunchProgram
|
2014-05-21 23:42:25 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.launchProgram;}
|
2014-05-21 23:42:25 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static string[] ProfilePath
|
2014-05-21 23:42:25 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
get { return m_Config.profilePath; }
|
2014-05-21 23:42:25 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static List<String>[] ProfileActions
|
2014-12-13 21:12:03 +01:00
|
|
|
|
{
|
2015-03-15 19:16:01 +01:00
|
|
|
|
get { return m_Config.profileActions; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
2015-03-15 19:16:01 +01:00
|
|
|
|
public static void SaveAction(string name, string controls, int mode, string details, bool edit, string extras = "")
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
{
|
2015-03-15 19:16:01 +01:00
|
|
|
|
m_Config.SaveAction(name, controls, mode, details, edit, extras);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
public static void RemoveAction(string name)
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
m_Config.RemoveAction(name);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
public static bool LoadActions()
|
2014-07-26 01:17:45 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
return m_Config.LoadActions();
|
2014-07-26 01:17:45 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
public static List<SpecialAction> GetActions()
|
2014-07-26 01:17:45 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
return m_Config.actions;
|
2014-07-26 01:17:45 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
public static int GetActionIndexOf(string name)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
for (int i = 0; i < m_Config.actions.Count; i++)
|
|
|
|
|
if (m_Config.actions[i].name == name)
|
|
|
|
|
return i;
|
|
|
|
|
return -1;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
public static SpecialAction GetAction(string name)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
foreach (SpecialAction sA in m_Config.actions)
|
|
|
|
|
if (sA.name == name)
|
|
|
|
|
return sA;
|
|
|
|
|
return new SpecialAction("null", "null", "null", "null");
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public static X360Controls getCustomButton(int device, DS4Controls controlName)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-27 21:32:09 +02:00
|
|
|
|
return m_Config.GetCustomButton(device, controlName);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public static ushort getCustomKey(int device, DS4Controls controlName)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-27 21:32:09 +02:00
|
|
|
|
return m_Config.GetCustomKey(device, controlName);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-05-28 04:49:58 +02:00
|
|
|
|
public static string getCustomMacro(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetCustomMacro(device, controlName);
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public static string getCustomExtras(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetCustomExtras(device, controlName);
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public static DS4KeyType getCustomKeyType(int device, DS4Controls controlName)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-27 21:32:09 +02:00
|
|
|
|
return m_Config.GetCustomKeyType(device, controlName);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
public static bool getHasCustomKeysorButtons(int device)
|
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
return m_Config.customMapButtons[device].Count > 0
|
|
|
|
|
|| m_Config.customMapKeys[device].Count > 0;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public static bool getHasCustomExtras(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.customMapExtras[device].Count > 0;
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public static Dictionary<DS4Controls, X360Controls> getCustomButtons(int device)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
return m_Config.customMapButtons[device];
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public static Dictionary<DS4Controls, ushort> getCustomKeys(int device)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
return m_Config.customMapKeys[device];
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-05-28 04:49:58 +02:00
|
|
|
|
public static Dictionary<DS4Controls, string> getCustomMacros(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.customMapMacros[device];
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public static Dictionary<DS4Controls, string> getCustomExtras(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.customMapExtras[device];
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public static Dictionary<DS4Controls, DS4KeyType> getCustomKeyTypes(int device)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
return m_Config.customMapKeyTypes[device];
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
|
|
|
|
|
public static X360Controls getShiftCustomButton(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetShiftCustomButton(device, controlName);
|
|
|
|
|
}
|
|
|
|
|
public static ushort getShiftCustomKey(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetShiftCustomKey(device, controlName);
|
|
|
|
|
}
|
|
|
|
|
public static string getShiftCustomMacro(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetShiftCustomMacro(device, controlName);
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public static string getShiftCustomExtras(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetShiftCustomExtras(device, controlName);
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public static DS4KeyType getShiftCustomKeyType(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.GetShiftCustomKeyType(device, controlName);
|
|
|
|
|
}
|
|
|
|
|
public static bool getHasShiftCustomKeysorButtons(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapButtons[device].Count > 0
|
|
|
|
|
|| m_Config.shiftCustomMapKeys[device].Count > 0;
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public static bool getHasShiftCustomExtras(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapExtras[device].Count > 0;
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public static Dictionary<DS4Controls, X360Controls> getShiftCustomButtons(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapButtons[device];
|
|
|
|
|
}
|
|
|
|
|
public static Dictionary<DS4Controls, ushort> getShiftCustomKeys(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapKeys[device];
|
|
|
|
|
}
|
|
|
|
|
public static Dictionary<DS4Controls, string> getShiftCustomMacros(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapMacros[device];
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public static Dictionary<DS4Controls, string> getShiftCustomExtras(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapExtras[device];
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public static Dictionary<DS4Controls, DS4KeyType> getShiftCustomKeyTypes(int device)
|
|
|
|
|
{
|
|
|
|
|
return m_Config.shiftCustomMapKeyTypes[device];
|
|
|
|
|
}
|
2014-04-29 11:19:00 +02:00
|
|
|
|
public static bool Load()
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
return m_Config.Load();
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static void LoadProfile(int device, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons, bool launchprogram, ControlService control)
|
2014-04-27 21:32:09 +02:00
|
|
|
|
{
|
2014-09-15 04:37:14 +02:00
|
|
|
|
m_Config.LoadProfile(device, buttons, shiftbuttons, launchprogram, control);
|
|
|
|
|
tempprofilename[device] = string.Empty;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static void LoadProfile(int device, bool launchprogram, ControlService control)
|
2014-04-27 21:32:09 +02:00
|
|
|
|
{
|
2014-09-15 04:37:14 +02:00
|
|
|
|
m_Config.LoadProfile(device, null, null, launchprogram, control);
|
|
|
|
|
tempprofilename[device] = string.Empty;
|
|
|
|
|
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public static void LoadTempProfile(int device, string name, bool launchprogram, ControlService control)
|
2014-06-06 22:38:52 +02:00
|
|
|
|
{
|
2014-09-15 04:37:14 +02:00
|
|
|
|
m_Config.LoadProfile(device, null, null, launchprogram, control, appdatapath + @"\Profiles\" + name + ".xml");
|
|
|
|
|
tempprofilename[device] = name;
|
2014-06-06 22:38:52 +02:00
|
|
|
|
}
|
2014-06-12 20:46:00 +02:00
|
|
|
|
public static bool Save()
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-06-12 20:46:00 +02:00
|
|
|
|
return m_Config.Save();
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public static void SaveProfile(int device, string propath, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons)
|
2014-04-27 21:32:09 +02:00
|
|
|
|
{
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
m_Config.SaveProfile(device, propath, buttons, shiftbuttons);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
|
|
|
|
|
2014-06-02 19:29:38 +02:00
|
|
|
|
private static byte applyRatio(byte b1, byte b2, double r)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-06-02 19:29:38 +02:00
|
|
|
|
if (r > 100)
|
|
|
|
|
r = 100;
|
|
|
|
|
else if (r < 0)
|
|
|
|
|
r = 0;
|
2015-02-08 22:51:52 +01:00
|
|
|
|
r /= 100f;
|
2015-02-12 20:36:40 +01:00
|
|
|
|
return (byte)Math.Round((b1 * (1 - r) + b2 *r),0);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-06-02 19:29:38 +02:00
|
|
|
|
public static DS4Color getTransitionedColor(DS4Color c1, DS4Color c2, double ratio)
|
2014-09-02 01:23:02 +02:00
|
|
|
|
{//;
|
|
|
|
|
//Color cs = Color.FromArgb(c1.red, c1.green, c1.blue);
|
2014-03-29 06:29:08 +01:00
|
|
|
|
c1.red = applyRatio(c1.red, c2.red, ratio);
|
|
|
|
|
c1.green = applyRatio(c1.green, c2.green, ratio);
|
|
|
|
|
c1.blue = applyRatio(c1.blue, c2.blue, ratio);
|
|
|
|
|
return c1;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-05-28 21:47:25 +02:00
|
|
|
|
|
|
|
|
|
private static Color applyRatio(Color c1, Color c2, uint r)
|
|
|
|
|
{
|
|
|
|
|
float ratio = r / 100f;
|
|
|
|
|
float hue1 = c1.GetHue();
|
|
|
|
|
float hue2 = c2.GetHue();
|
|
|
|
|
float bri1 = c1.GetBrightness();
|
|
|
|
|
float bri2 = c2.GetBrightness();
|
|
|
|
|
float sat1 = c1.GetSaturation();
|
|
|
|
|
float sat2 = c2.GetSaturation();
|
|
|
|
|
float hr = hue2 - hue1;
|
|
|
|
|
float br = bri2 - bri1;
|
|
|
|
|
float sr = sat2 - sat1;
|
|
|
|
|
Color csR;
|
|
|
|
|
if (bri1 == 0)
|
|
|
|
|
csR = HuetoRGB(hue2,sat2,bri2 - br*ratio);
|
|
|
|
|
else
|
|
|
|
|
csR = HuetoRGB(hue2 - hr * ratio, sat2 - sr * ratio, bri2 - br * ratio);
|
|
|
|
|
return csR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Color HuetoRGB(float hue, float sat, float bri)
|
|
|
|
|
{
|
|
|
|
|
float C = (1-Math.Abs(2*bri)-1)* sat;
|
|
|
|
|
float X = C * (1 - Math.Abs((hue / 60) % 2 - 1));
|
|
|
|
|
float m = bri - C / 2;
|
|
|
|
|
float R, G, B;
|
|
|
|
|
if (0 <= hue && hue < 60)
|
|
|
|
|
{ R = C; G = X; B = 0;}
|
|
|
|
|
else if (60 <= hue && hue < 120)
|
|
|
|
|
{R = X; G = C; B = 0; }
|
|
|
|
|
else if (120 <= hue && hue < 180)
|
|
|
|
|
{ R = 0; G = C; B = X; }
|
|
|
|
|
else if (180 <= hue && hue < 240)
|
|
|
|
|
{ R = 0; G = X; B = C; }
|
|
|
|
|
else if (240 <= hue && hue < 300)
|
|
|
|
|
{ R = X; G = 0; B = C; }
|
|
|
|
|
else if (300 <= hue && hue < 360)
|
|
|
|
|
{ R = C; G = 0; B = X; }
|
|
|
|
|
else
|
|
|
|
|
{ R = 255; G = 0; B = 0; }
|
|
|
|
|
R += m; G += m; B += m;
|
|
|
|
|
R *= 255; G *= 255; B *= 255;
|
|
|
|
|
return Color.FromArgb((int)R, (int)G, (int)B);
|
|
|
|
|
}
|
2014-12-13 21:12:03 +01:00
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class BackingStore
|
|
|
|
|
{
|
Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won't affect you), thanks to this update, you can now...
Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
Another fix for auto profiles startup bug
Better reading of autoprofile program path names
Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
UI fixes
2014-06-10 21:45:09 +02:00
|
|
|
|
//public String m_Profile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool" + "\\Profiles.xml";
|
|
|
|
|
public String m_Profile = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + "\\Profiles.xml";
|
2014-12-13 21:12:03 +01:00
|
|
|
|
public String m_Actions = Global.appdatapath + "\\Actions.xml";
|
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
protected XmlDocument m_Xdoc = new XmlDocument();
|
2014-05-30 22:39:39 +02:00
|
|
|
|
//fifth value used to for options, not fifth controller
|
|
|
|
|
public int[] buttonMouseSensitivity = { 25, 25, 25, 25, 25 };
|
2014-09-15 04:37:14 +02:00
|
|
|
|
|
|
|
|
|
public bool[] flushHIDQueue = { true, true, true, true, true };
|
|
|
|
|
public int[] idleDisconnectTimeout = { 0, 0, 0, 0, 0 };
|
|
|
|
|
public Boolean[] touchpadJitterCompensation = { true, true, true, true, true };
|
2014-05-30 22:39:39 +02:00
|
|
|
|
public Boolean[] lowerRCOn = { false, false, false, false, false };
|
|
|
|
|
public Boolean[] ledAsBattery = { false, false, false, false, false };
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public Byte[] flashType = { 0, 0, 0, 0, 0 };
|
|
|
|
|
public Byte[] l2Deadzone = { 0, 0, 0, 0, 0 }, r2Deadzone = { 0, 0, 0, 0, 0 };
|
2014-05-30 22:39:39 +02:00
|
|
|
|
public String[] profilePath = { String.Empty, String.Empty, String.Empty, String.Empty, String.Empty };
|
2014-12-13 21:12:03 +01:00
|
|
|
|
public Byte[] rumble = { 100, 100, 100, 100, 100 };
|
2014-05-30 22:39:39 +02:00
|
|
|
|
public Byte[] touchSensitivity = { 100, 100, 100, 100, 100 };
|
2015-04-21 21:00:09 +02:00
|
|
|
|
public int[] LSDeadzone = { 0, 0, 0, 0, 0 }, RSDeadzone = { 0, 0, 0, 0, 0 };
|
2014-06-26 20:02:01 +02:00
|
|
|
|
public double[] SXDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 }, SZDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 };
|
2014-05-30 22:39:39 +02:00
|
|
|
|
public Byte[] tapSensitivity = { 0, 0, 0, 0, 0 };
|
|
|
|
|
public bool[] doubleTap = { false, false, false, false, false };
|
|
|
|
|
public int[] scrollSensitivity = { 0, 0, 0, 0, 0 };
|
|
|
|
|
public double[] rainbow = { 0, 0, 0, 0, 0 };
|
2014-09-15 04:37:14 +02:00
|
|
|
|
public int[] flashAt = { 0, 0, 0, 0, 0 };
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public int[] shiftModifier = { 0, 0, 0, 0, 0 };
|
2014-06-26 20:02:01 +02:00
|
|
|
|
public bool[] mouseAccel = { true, true, true, true, true };
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public DS4Color[] m_LowLeds = new DS4Color[]
|
2014-04-29 10:01:13 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black)
|
2014-04-29 10:01:13 +02:00
|
|
|
|
};
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public DS4Color[] m_Leds = new DS4Color[]
|
2014-04-29 10:01:13 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
new DS4Color(Color.Blue),
|
|
|
|
|
new DS4Color(Color.Red),
|
|
|
|
|
new DS4Color(Color.Green),
|
|
|
|
|
new DS4Color(Color.Pink),
|
|
|
|
|
new DS4Color(Color.White)
|
2014-04-29 10:01:13 +02:00
|
|
|
|
};
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public DS4Color[] m_ChargingLeds = new DS4Color[]
|
2014-06-02 19:29:38 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black)
|
2014-06-02 19:29:38 +02:00
|
|
|
|
};
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public DS4Color[] m_ShiftLeds = new DS4Color[]
|
2014-07-26 01:17:45 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black)
|
2014-07-26 01:17:45 +02:00
|
|
|
|
};
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public DS4Color[] m_FlashLeds = new DS4Color[]
|
2014-08-23 22:52:20 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black),
|
|
|
|
|
new DS4Color(Color.Black)
|
2014-08-23 22:52:20 +02:00
|
|
|
|
};
|
2014-07-26 01:17:45 +02:00
|
|
|
|
public bool[] shiftColorOn = { false, false, false, false, false };
|
2014-06-02 19:29:38 +02:00
|
|
|
|
public int[] chargingType = { 0, 0, 0, 0, 0 };
|
2014-07-26 01:17:45 +02:00
|
|
|
|
public string[] launchProgram = { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty };
|
2014-08-23 22:52:20 +02:00
|
|
|
|
public bool[] dinputOnly = { false, false, false, false, false };
|
2014-09-15 04:37:14 +02:00
|
|
|
|
public bool[] startTouchpadOff = { false, false, false, false, false };
|
2014-11-15 22:54:14 +01:00
|
|
|
|
public bool[] useTPforControls = { false, false, false, false, false };
|
2014-12-13 21:12:03 +01:00
|
|
|
|
public int[] lsCurve = { 0, 0, 0, 0, 0 };
|
|
|
|
|
public int[] rsCurve = { 0, 0, 0, 0, 0 };
|
2014-03-28 02:50:40 +01:00
|
|
|
|
public Boolean useExclusiveMode = false;
|
|
|
|
|
public Int32 formWidth = 782;
|
|
|
|
|
public Int32 formHeight = 550;
|
|
|
|
|
public Boolean startMinimized = false;
|
2014-05-21 19:39:56 +02:00
|
|
|
|
public DateTime lastChecked;
|
2014-06-06 22:38:52 +02:00
|
|
|
|
public int CheckWhen = 1;
|
|
|
|
|
public bool notifications = true;
|
2014-06-21 20:00:28 +02:00
|
|
|
|
public bool disconnectBTAtStop = false;
|
|
|
|
|
public bool swipeProfiles = true;
|
2014-11-20 20:03:18 +01:00
|
|
|
|
public bool ds4Mapping = true;
|
|
|
|
|
public bool quickCharge = false;
|
2014-12-03 23:36:54 +01:00
|
|
|
|
public int firstXinputPort = 1;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
public bool closeMini = false;
|
|
|
|
|
public List<SpecialAction> actions = new List<SpecialAction>();
|
2014-06-06 22:38:52 +02:00
|
|
|
|
public Dictionary<DS4Controls, DS4KeyType>[] customMapKeyTypes = { null, null, null, null, null };
|
2014-05-30 22:39:39 +02:00
|
|
|
|
public Dictionary<DS4Controls, UInt16>[] customMapKeys = { null, null, null, null, null };
|
|
|
|
|
public Dictionary<DS4Controls, String>[] customMapMacros = { null, null, null, null, null };
|
|
|
|
|
public Dictionary<DS4Controls, X360Controls>[] customMapButtons = { null, null, null, null, null };
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public Dictionary<DS4Controls, String>[] customMapExtras = { null, null, null, null, null };
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
|
|
|
|
|
public Dictionary<DS4Controls, DS4KeyType>[] shiftCustomMapKeyTypes = { null, null, null, null, null };
|
|
|
|
|
public Dictionary<DS4Controls, UInt16>[] shiftCustomMapKeys = { null, null, null, null, null };
|
|
|
|
|
public Dictionary<DS4Controls, String>[] shiftCustomMapMacros = { null, null, null, null, null };
|
|
|
|
|
public Dictionary<DS4Controls, X360Controls>[] shiftCustomMapButtons = { null, null, null, null, null };
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public Dictionary<DS4Controls, String>[] shiftCustomMapExtras = { null, null, null, null, null };
|
2014-12-13 21:12:03 +01:00
|
|
|
|
public List<String>[] profileActions = { null, null, null, null, null };
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public bool downloadLang = true;
|
2015-03-15 19:16:01 +01:00
|
|
|
|
public bool flashWhenLate = true;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public BackingStore()
|
|
|
|
|
{
|
2014-05-30 22:39:39 +02:00
|
|
|
|
for (int i = 0; i < 5; i++)
|
2014-04-27 21:32:09 +02:00
|
|
|
|
{
|
2014-05-21 23:42:25 +02:00
|
|
|
|
customMapKeyTypes[i] = new Dictionary<DS4Controls, DS4KeyType>();
|
|
|
|
|
customMapKeys[i] = new Dictionary<DS4Controls, UInt16>();
|
2014-05-28 04:49:58 +02:00
|
|
|
|
customMapMacros[i] = new Dictionary<DS4Controls, String>();
|
2014-05-21 23:42:25 +02:00
|
|
|
|
customMapButtons[i] = new Dictionary<DS4Controls, X360Controls>();
|
2014-12-02 01:07:29 +01:00
|
|
|
|
customMapExtras[i] = new Dictionary<DS4Controls, string>();
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
|
|
|
|
|
shiftCustomMapKeyTypes[i] = new Dictionary<DS4Controls, DS4KeyType>();
|
|
|
|
|
shiftCustomMapKeys[i] = new Dictionary<DS4Controls, UInt16>();
|
|
|
|
|
shiftCustomMapMacros[i] = new Dictionary<DS4Controls, String>();
|
|
|
|
|
shiftCustomMapButtons[i] = new Dictionary<DS4Controls, X360Controls>();
|
2014-12-02 01:07:29 +01:00
|
|
|
|
shiftCustomMapExtras[i] = new Dictionary<DS4Controls, string>();
|
2014-12-13 21:12:03 +01:00
|
|
|
|
profileActions[i] = new List<string>();
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
profileActions[i].Add("Disconnect Controller");
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public X360Controls GetCustomButton(int device, DS4Controls controlName)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
if (customMapButtons[device].ContainsKey(controlName))
|
|
|
|
|
return customMapButtons[device][controlName];
|
2014-04-27 21:32:09 +02:00
|
|
|
|
else return X360Controls.None;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public UInt16 GetCustomKey(int device, DS4Controls controlName)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
if (customMapKeys[device].ContainsKey(controlName))
|
|
|
|
|
return customMapKeys[device][controlName];
|
2014-03-28 02:50:40 +01:00
|
|
|
|
else return 0;
|
|
|
|
|
}
|
2014-05-28 04:49:58 +02:00
|
|
|
|
public string GetCustomMacro(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
if (customMapMacros[device].ContainsKey(controlName))
|
|
|
|
|
return customMapMacros[device][controlName];
|
|
|
|
|
else return "0";
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public string GetCustomExtras(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
if (customMapExtras[device].ContainsKey(controlName))
|
|
|
|
|
return customMapExtras[device][controlName];
|
|
|
|
|
else return "0";
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public DS4KeyType GetCustomKeyType(int device, DS4Controls controlName)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-06-03 07:29:42 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (customMapKeyTypes[device].ContainsKey(controlName))
|
|
|
|
|
return customMapKeyTypes[device][controlName];
|
|
|
|
|
else return 0;
|
|
|
|
|
}
|
|
|
|
|
catch { return 0; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public X360Controls GetShiftCustomButton(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
if (shiftCustomMapButtons[device].ContainsKey(controlName))
|
|
|
|
|
return shiftCustomMapButtons[device][controlName];
|
|
|
|
|
else return X360Controls.None;
|
|
|
|
|
}
|
|
|
|
|
public UInt16 GetShiftCustomKey(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
if (shiftCustomMapKeys[device].ContainsKey(controlName))
|
|
|
|
|
return shiftCustomMapKeys[device][controlName];
|
|
|
|
|
else return 0;
|
|
|
|
|
}
|
|
|
|
|
public string GetShiftCustomMacro(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
if (shiftCustomMapMacros[device].ContainsKey(controlName))
|
|
|
|
|
return shiftCustomMapMacros[device][controlName];
|
|
|
|
|
else return "0";
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
public string GetShiftCustomExtras(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
if (customMapExtras[device].ContainsKey(controlName))
|
|
|
|
|
return customMapExtras[device][controlName];
|
|
|
|
|
else return "0";
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public DS4KeyType GetShiftCustomKeyType(int device, DS4Controls controlName)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (shiftCustomMapKeyTypes[device].ContainsKey(controlName))
|
|
|
|
|
return shiftCustomMapKeyTypes[device][controlName];
|
|
|
|
|
else return 0;
|
|
|
|
|
}
|
|
|
|
|
catch { return 0; }
|
|
|
|
|
}
|
2014-04-29 10:22:37 +02:00
|
|
|
|
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public Boolean SaveProfile(int device, String propath, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
|
|
|
|
Boolean Saved = true;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
String path = Global.appdatapath + @"\Profiles\" + Path.GetFileNameWithoutExtension(propath) + ".xml";
|
2014-03-28 02:50:40 +01:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
XmlNode Node;
|
2014-11-18 22:23:41 +01:00
|
|
|
|
XmlNode xmlControls = m_Xdoc.SelectSingleNode("/DS4Windows/Control");
|
|
|
|
|
XmlNode xmlShiftControls = m_Xdoc.SelectSingleNode("/DS4Windows/ShiftControl");
|
2014-03-28 02:50:40 +01:00
|
|
|
|
m_Xdoc.RemoveAll();
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
Node = m_Xdoc.CreateXmlDeclaration("1.0", "utf-8", String.Empty);
|
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Node = m_Xdoc.CreateComment(String.Format(" DS4Windows Configuration Data. {0} ", DateTime.Now));
|
2014-03-28 02:50:40 +01:00
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
Node = m_Xdoc.CreateWhitespace("\r\n");
|
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Node = m_Xdoc.CreateNode(XmlNodeType.Element, "DS4Windows", null);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-04-29 10:22:37 +02:00
|
|
|
|
XmlNode xmlFlushHIDQueue = m_Xdoc.CreateNode(XmlNodeType.Element, "flushHIDQueue", null); xmlFlushHIDQueue.InnerText = flushHIDQueue[device].ToString(); Node.AppendChild(xmlFlushHIDQueue);
|
|
|
|
|
XmlNode xmlIdleDisconnectTimeout = m_Xdoc.CreateNode(XmlNodeType.Element, "idleDisconnectTimeout", null); xmlIdleDisconnectTimeout.InnerText = idleDisconnectTimeout[device].ToString(); Node.AppendChild(xmlIdleDisconnectTimeout);
|
2014-06-26 20:02:01 +02:00
|
|
|
|
XmlNode xmlColor = m_Xdoc.CreateNode(XmlNodeType.Element, "Color", null);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
xmlColor.InnerText = m_Leds[device].red.ToString() + "," + m_Leds[device].green.ToString() + "," + m_Leds[device].blue.ToString();
|
2014-06-26 20:02:01 +02:00
|
|
|
|
Node.AppendChild(xmlColor);
|
2014-12-13 21:12:03 +01:00
|
|
|
|
XmlNode xmlRumbleBoost = m_Xdoc.CreateNode(XmlNodeType.Element, "RumbleBoost", null); xmlRumbleBoost.InnerText = rumble[device].ToString(); Node.AppendChild(xmlRumbleBoost);
|
2014-04-29 10:22:37 +02:00
|
|
|
|
XmlNode xmlLedAsBatteryIndicator = m_Xdoc.CreateNode(XmlNodeType.Element, "ledAsBatteryIndicator", null); xmlLedAsBatteryIndicator.InnerText = ledAsBattery[device].ToString(); Node.AppendChild(xmlLedAsBatteryIndicator);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
XmlNode xmlLowBatteryFlash = m_Xdoc.CreateNode(XmlNodeType.Element, "FlashType", null); xmlLowBatteryFlash.InnerText = flashType[device].ToString(); Node.AppendChild(xmlLowBatteryFlash);
|
2014-05-31 06:37:02 +02:00
|
|
|
|
XmlNode xmlFlashBatterAt = m_Xdoc.CreateNode(XmlNodeType.Element, "flashBatteryAt", null); xmlFlashBatterAt.InnerText = flashAt[device].ToString(); Node.AppendChild(xmlFlashBatterAt);
|
2014-04-29 10:22:37 +02:00
|
|
|
|
XmlNode xmlTouchSensitivity = m_Xdoc.CreateNode(XmlNodeType.Element, "touchSensitivity", null); xmlTouchSensitivity.InnerText = touchSensitivity[device].ToString(); Node.AppendChild(xmlTouchSensitivity);
|
2014-06-26 20:02:01 +02:00
|
|
|
|
XmlNode xmlLowColor = m_Xdoc.CreateNode(XmlNodeType.Element, "LowColor", null);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
xmlLowColor.InnerText = m_LowLeds[device].red.ToString() + "," + m_LowLeds[device].green.ToString() + "," + m_LowLeds[device].blue.ToString();
|
2014-06-26 20:02:01 +02:00
|
|
|
|
Node.AppendChild(xmlLowColor);
|
|
|
|
|
XmlNode xmlChargingColor = m_Xdoc.CreateNode(XmlNodeType.Element, "ChargingColor", null);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
xmlChargingColor.InnerText = m_ChargingLeds[device].red.ToString() + "," + m_ChargingLeds[device].green.ToString() + "," + m_ChargingLeds[device].blue.ToString();
|
2014-06-26 20:02:01 +02:00
|
|
|
|
Node.AppendChild(xmlChargingColor);
|
2014-07-26 01:17:45 +02:00
|
|
|
|
XmlNode xmlShiftColor = m_Xdoc.CreateNode(XmlNodeType.Element, "ShiftColor", null);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
xmlShiftColor.InnerText = m_ShiftLeds[device].red.ToString() + "," + m_ShiftLeds[device].green.ToString() + "," + m_ShiftLeds[device].blue.ToString();
|
2014-07-26 01:17:45 +02:00
|
|
|
|
Node.AppendChild(xmlShiftColor);
|
|
|
|
|
XmlNode xmlShiftColorOn = m_Xdoc.CreateNode(XmlNodeType.Element, "ShiftColorOn", null); xmlShiftColorOn.InnerText = shiftColorOn[device].ToString(); Node.AppendChild(xmlShiftColorOn);
|
2014-08-23 22:52:20 +02:00
|
|
|
|
XmlNode xmlFlashColor = m_Xdoc.CreateNode(XmlNodeType.Element, "FlashColor", null);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
xmlFlashColor.InnerText = m_FlashLeds[device].red.ToString() + "," + m_FlashLeds[device].green.ToString() + "," + m_FlashLeds[device].blue.ToString();
|
2014-08-23 22:52:20 +02:00
|
|
|
|
Node.AppendChild(xmlFlashColor);
|
2014-04-29 10:22:37 +02:00
|
|
|
|
XmlNode xmlTouchpadJitterCompensation = m_Xdoc.CreateNode(XmlNodeType.Element, "touchpadJitterCompensation", null); xmlTouchpadJitterCompensation.InnerText = touchpadJitterCompensation[device].ToString(); Node.AppendChild(xmlTouchpadJitterCompensation);
|
|
|
|
|
XmlNode xmlLowerRCOn = m_Xdoc.CreateNode(XmlNodeType.Element, "lowerRCOn", null); xmlLowerRCOn.InnerText = lowerRCOn[device].ToString(); Node.AppendChild(xmlLowerRCOn);
|
|
|
|
|
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);
|
2014-12-13 21:12:03 +01:00
|
|
|
|
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);
|
2014-04-29 23:56:58 +02:00
|
|
|
|
XmlNode xmlButtonMouseSensitivity = m_Xdoc.CreateNode(XmlNodeType.Element, "ButtonMouseSensitivity", null); xmlButtonMouseSensitivity.InnerText = buttonMouseSensitivity[device].ToString(); Node.AppendChild(xmlButtonMouseSensitivity);
|
2014-04-30 21:32:44 +02:00
|
|
|
|
XmlNode xmlRainbow = m_Xdoc.CreateNode(XmlNodeType.Element, "Rainbow", null); xmlRainbow.InnerText = rainbow[device].ToString(); Node.AppendChild(xmlRainbow);
|
2014-05-21 23:42:25 +02:00
|
|
|
|
XmlNode xmlLSD = m_Xdoc.CreateNode(XmlNodeType.Element, "LSDeadZone", null); xmlLSD.InnerText = LSDeadzone[device].ToString(); Node.AppendChild(xmlLSD);
|
|
|
|
|
XmlNode xmlRSD = m_Xdoc.CreateNode(XmlNodeType.Element, "RSDeadZone", null); xmlRSD.InnerText = RSDeadzone[device].ToString(); Node.AppendChild(xmlRSD);
|
2014-06-26 20:02:01 +02:00
|
|
|
|
XmlNode xmlSXD = m_Xdoc.CreateNode(XmlNodeType.Element, "SXDeadZone", null); xmlSXD.InnerText = SXDeadzone[device].ToString(); Node.AppendChild(xmlSXD);
|
|
|
|
|
XmlNode xmlSZD = m_Xdoc.CreateNode(XmlNodeType.Element, "SZDeadZone", null); xmlSZD.InnerText = SZDeadzone[device].ToString(); Node.AppendChild(xmlSZD);
|
2014-06-02 19:29:38 +02:00
|
|
|
|
XmlNode xmlChargingType = m_Xdoc.CreateNode(XmlNodeType.Element, "ChargingType", null); xmlChargingType.InnerText = chargingType[device].ToString(); Node.AppendChild(xmlChargingType);
|
2014-06-26 20:02:01 +02:00
|
|
|
|
XmlNode xmlMouseAccel = m_Xdoc.CreateNode(XmlNodeType.Element, "MouseAcceleration", null); xmlMouseAccel.InnerText = mouseAccel[device].ToString(); Node.AppendChild(xmlMouseAccel);
|
2014-07-26 01:17:45 +02:00
|
|
|
|
XmlNode xmlShiftMod = m_Xdoc.CreateNode(XmlNodeType.Element, "ShiftModifier", null); xmlShiftMod.InnerText = shiftModifier[device].ToString(); Node.AppendChild(xmlShiftMod);
|
2014-08-23 22:52:20 +02:00
|
|
|
|
XmlNode xmlLaunchProgram = m_Xdoc.CreateNode(XmlNodeType.Element, "LaunchProgram", null); xmlLaunchProgram.InnerText = launchProgram[device].ToString(); Node.AppendChild(xmlLaunchProgram);
|
|
|
|
|
XmlNode xmlDinput = m_Xdoc.CreateNode(XmlNodeType.Element, "DinputOnly", null); xmlDinput.InnerText = dinputOnly[device].ToString(); Node.AppendChild(xmlDinput);
|
2014-09-15 04:37:14 +02:00
|
|
|
|
XmlNode xmlStartTouchpadOff = m_Xdoc.CreateNode(XmlNodeType.Element, "StartTouchpadOff", null); xmlStartTouchpadOff.InnerText = startTouchpadOff[device].ToString(); Node.AppendChild(xmlStartTouchpadOff);
|
2014-11-15 22:54:14 +01:00
|
|
|
|
XmlNode xmlUseTPforControls = m_Xdoc.CreateNode(XmlNodeType.Element, "UseTPforControls", null); xmlUseTPforControls.InnerText = useTPforControls[device].ToString(); Node.AppendChild(xmlUseTPforControls);
|
2014-12-13 21:12:03 +01:00
|
|
|
|
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);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
XmlNode NodeControl = m_Xdoc.CreateNode(XmlNodeType.Element, "Control", null);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
|
|
|
|
XmlNode Key = m_Xdoc.CreateNode(XmlNodeType.Element, "Key", null);
|
2014-05-28 04:49:58 +02:00
|
|
|
|
XmlNode Macro = m_Xdoc.CreateNode(XmlNodeType.Element, "Macro", null);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
XmlNode KeyType = m_Xdoc.CreateNode(XmlNodeType.Element, "KeyType", null);
|
|
|
|
|
XmlNode Button = m_Xdoc.CreateNode(XmlNodeType.Element, "Button", null);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
XmlNode Extras = m_Xdoc.CreateNode(XmlNodeType.Element, "Extras", null);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (buttons != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var button in buttons)
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
|
|
|
|
// Save even if string (for xbox controller buttons)
|
|
|
|
|
if (button.Tag != null)
|
|
|
|
|
{
|
|
|
|
|
XmlNode buttonNode;
|
|
|
|
|
string keyType = String.Empty;
|
2014-12-02 01:07:29 +01:00
|
|
|
|
|
|
|
|
|
if (button.Tag is KeyValuePair<string, string>)
|
|
|
|
|
if (((KeyValuePair<string, string>)button.Tag).Key == "Unbound")
|
|
|
|
|
keyType += DS4KeyType.Unbound;
|
|
|
|
|
|
|
|
|
|
if (button.Font.Strikeout)
|
|
|
|
|
keyType += DS4KeyType.HoldMacro;
|
|
|
|
|
if (button.Font.Underline)
|
|
|
|
|
keyType += DS4KeyType.Macro;
|
|
|
|
|
if (button.Font.Italic)
|
|
|
|
|
keyType += DS4KeyType.Toggle;
|
|
|
|
|
if (button.Font.Bold)
|
|
|
|
|
keyType += DS4KeyType.ScanCode;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
if (keyType != String.Empty)
|
|
|
|
|
{
|
|
|
|
|
buttonNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
|
|
|
|
|
buttonNode.InnerText = keyType;
|
|
|
|
|
KeyType.AppendChild(buttonNode);
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
|
|
|
|
|
string[] extras;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
buttonNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
if (button.Tag is KeyValuePair<IEnumerable<int>, string> || button.Tag is KeyValuePair<Int32[], string> || button.Tag is KeyValuePair<UInt16[], string>)
|
2014-05-28 04:49:58 +02:00
|
|
|
|
{
|
2014-12-02 01:07:29 +01:00
|
|
|
|
KeyValuePair<Int32[], string> tag = (KeyValuePair<Int32[], string>)button.Tag;
|
|
|
|
|
int[] ii = tag.Key;
|
|
|
|
|
buttonNode.InnerText = string.Join("/", ii);
|
2014-05-28 04:49:58 +02:00
|
|
|
|
Macro.AppendChild(buttonNode);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
extras = tag.Value.Split(',');
|
2014-05-28 04:49:58 +02:00
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
else if (button.Tag is KeyValuePair<Int32, string> || button.Tag is KeyValuePair<UInt16, string> || button.Tag is KeyValuePair<byte, string>)
|
|
|
|
|
{
|
|
|
|
|
KeyValuePair<int, string> tag = (KeyValuePair<int, string>)button.Tag;
|
|
|
|
|
buttonNode.InnerText = tag.Key.ToString();
|
2014-03-28 02:50:40 +01:00
|
|
|
|
Key.AppendChild(buttonNode);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
extras = tag.Value.Split(',');
|
|
|
|
|
}
|
|
|
|
|
else if (button.Tag is KeyValuePair<string, string>)
|
|
|
|
|
{
|
|
|
|
|
KeyValuePair<string, string> tag = (KeyValuePair<string, string>)button.Tag;
|
|
|
|
|
buttonNode.InnerText = tag.Key;
|
|
|
|
|
Button.AppendChild(buttonNode);
|
|
|
|
|
extras = tag.Value.Split(',');
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
KeyValuePair<object, string> tag = (KeyValuePair<object, string>)button.Tag;
|
|
|
|
|
extras = tag.Value.Split(',');
|
|
|
|
|
}
|
|
|
|
|
bool hasvalue = false;
|
|
|
|
|
foreach (string s in extras)
|
|
|
|
|
if (s != "0")
|
|
|
|
|
{
|
|
|
|
|
hasvalue = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (hasvalue)
|
|
|
|
|
{
|
|
|
|
|
XmlNode extraNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
|
|
|
|
|
extraNode.InnerText = String.Join(",", extras);
|
|
|
|
|
Extras.AppendChild(extraNode);
|
|
|
|
|
}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
Node.AppendChild(NodeControl);
|
|
|
|
|
if (Button.HasChildNodes)
|
|
|
|
|
NodeControl.AppendChild(Button);
|
|
|
|
|
if (Macro.HasChildNodes)
|
|
|
|
|
NodeControl.AppendChild(Macro);
|
|
|
|
|
if (Key.HasChildNodes)
|
|
|
|
|
NodeControl.AppendChild(Key);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
if (Extras.HasChildNodes)
|
|
|
|
|
NodeControl.AppendChild(Extras);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (KeyType.HasChildNodes)
|
|
|
|
|
NodeControl.AppendChild(KeyType);
|
|
|
|
|
}
|
|
|
|
|
else if (xmlControls != null)
|
|
|
|
|
Node.AppendChild(xmlControls);
|
|
|
|
|
if (shiftModifier[device] > 0)
|
|
|
|
|
{
|
|
|
|
|
XmlNode NodeShiftControl = m_Xdoc.CreateNode(XmlNodeType.Element, "ShiftControl", null);
|
|
|
|
|
|
|
|
|
|
XmlNode ShiftKey = m_Xdoc.CreateNode(XmlNodeType.Element, "Key", null);
|
|
|
|
|
XmlNode ShiftMacro = m_Xdoc.CreateNode(XmlNodeType.Element, "Macro", null);
|
|
|
|
|
XmlNode ShiftKeyType = m_Xdoc.CreateNode(XmlNodeType.Element, "KeyType", null);
|
|
|
|
|
XmlNode ShiftButton = m_Xdoc.CreateNode(XmlNodeType.Element, "Button", null);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
XmlNode ShiftExtras = m_Xdoc.CreateNode(XmlNodeType.Element, "Extras", null);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (shiftbuttons != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (var button in shiftbuttons)
|
|
|
|
|
{
|
|
|
|
|
// Save even if string (for xbox controller buttons)
|
|
|
|
|
if (button.Tag != null)
|
|
|
|
|
{
|
|
|
|
|
XmlNode buttonNode;
|
|
|
|
|
string keyType = String.Empty;
|
2014-12-02 01:07:29 +01:00
|
|
|
|
if (button.Tag is KeyValuePair<string, string>)
|
|
|
|
|
if (((KeyValuePair<string, string>)button.Tag).Key == "Unbound")
|
|
|
|
|
keyType += DS4KeyType.Unbound;
|
|
|
|
|
|
|
|
|
|
if (button.Font.Strikeout)
|
|
|
|
|
keyType += DS4KeyType.HoldMacro;
|
|
|
|
|
if (button.Font.Underline)
|
|
|
|
|
keyType += DS4KeyType.Macro;
|
|
|
|
|
if (button.Font.Italic)
|
|
|
|
|
keyType += DS4KeyType.Toggle;
|
|
|
|
|
if (button.Font.Bold)
|
|
|
|
|
keyType += DS4KeyType.ScanCode;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (keyType != String.Empty)
|
|
|
|
|
{
|
|
|
|
|
buttonNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
|
|
|
|
|
buttonNode.InnerText = keyType;
|
|
|
|
|
ShiftKeyType.AppendChild(buttonNode);
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
|
|
|
|
|
string[] extras;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
buttonNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
if (button.Tag is KeyValuePair<IEnumerable<int>, string> || button.Tag is KeyValuePair<Int32[], string> || button.Tag is KeyValuePair<UInt16[], string>)
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
{
|
2014-12-02 01:07:29 +01:00
|
|
|
|
KeyValuePair<Int32[], string> tag = (KeyValuePair<Int32[], string>)button.Tag;
|
|
|
|
|
int[] ii = tag.Key;
|
|
|
|
|
buttonNode.InnerText = string.Join("/", ii);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
ShiftMacro.AppendChild(buttonNode);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
extras = tag.Value.Split(',');
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
else if (button.Tag is KeyValuePair<Int32, string> || button.Tag is KeyValuePair<UInt16, string> || button.Tag is KeyValuePair<byte, string>)
|
|
|
|
|
{
|
|
|
|
|
KeyValuePair<int, string> tag = (KeyValuePair<int, string>)button.Tag;
|
|
|
|
|
buttonNode.InnerText = tag.Key.ToString();
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
ShiftKey.AppendChild(buttonNode);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
extras = tag.Value.Split(',');
|
|
|
|
|
}
|
|
|
|
|
else if (button.Tag is KeyValuePair<string, string>)
|
|
|
|
|
{
|
|
|
|
|
KeyValuePair<string, string> tag = (KeyValuePair<string, string>)button.Tag;
|
|
|
|
|
buttonNode.InnerText = tag.Key;
|
|
|
|
|
ShiftButton.AppendChild(buttonNode);
|
|
|
|
|
extras = tag.Value.Split(',');
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
KeyValuePair<object, string> tag = (KeyValuePair<object, string>)button.Tag;
|
|
|
|
|
extras = tag.Value.Split(',');
|
|
|
|
|
}
|
|
|
|
|
bool hasvalue = false;
|
|
|
|
|
foreach (string s in extras)
|
|
|
|
|
if (s != "0")
|
|
|
|
|
{
|
|
|
|
|
hasvalue = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2014-12-17 19:29:22 +01:00
|
|
|
|
if (hasvalue && !string.IsNullOrEmpty(String.Join(",", extras)))
|
2014-12-02 01:07:29 +01:00
|
|
|
|
{
|
|
|
|
|
XmlNode extraNode = m_Xdoc.CreateNode(XmlNodeType.Element, button.Name, null);
|
|
|
|
|
extraNode.InnerText = String.Join(",", extras);
|
|
|
|
|
ShiftExtras.AppendChild(extraNode);
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Node.AppendChild(NodeShiftControl);
|
|
|
|
|
if (ShiftButton.HasChildNodes)
|
|
|
|
|
NodeShiftControl.AppendChild(ShiftButton);
|
|
|
|
|
if (ShiftMacro.HasChildNodes)
|
|
|
|
|
NodeShiftControl.AppendChild(ShiftMacro);
|
|
|
|
|
if (ShiftKey.HasChildNodes)
|
|
|
|
|
NodeShiftControl.AppendChild(ShiftKey);
|
|
|
|
|
if (ShiftKeyType.HasChildNodes)
|
|
|
|
|
NodeShiftControl.AppendChild(ShiftKeyType);
|
|
|
|
|
}
|
|
|
|
|
else if (xmlShiftControls != null)
|
|
|
|
|
Node.AppendChild(xmlShiftControls);
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
m_Xdoc.AppendChild(Node);
|
|
|
|
|
if (NodeControl.HasChildNodes)
|
|
|
|
|
Node.AppendChild(NodeControl);
|
|
|
|
|
m_Xdoc.Save(path);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
catch { Saved = false; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
return Saved;
|
|
|
|
|
}
|
|
|
|
|
private DS4Controls getDS4ControlsByName(string key)
|
|
|
|
|
{
|
|
|
|
|
switch (key)
|
|
|
|
|
{
|
|
|
|
|
case "bnShare": return DS4Controls.Share;
|
|
|
|
|
case "bnL3": return DS4Controls.L3;
|
|
|
|
|
case "bnR3": return DS4Controls.R3;
|
|
|
|
|
case "bnOptions": return DS4Controls.Options;
|
|
|
|
|
case "bnUp": return DS4Controls.DpadUp;
|
|
|
|
|
case "bnRight": return DS4Controls.DpadRight;
|
|
|
|
|
case "bnDown": return DS4Controls.DpadDown;
|
|
|
|
|
case "bnLeft": return DS4Controls.DpadLeft;
|
|
|
|
|
|
|
|
|
|
case "bnL1": return DS4Controls.L1;
|
|
|
|
|
case "bnR1": return DS4Controls.R1;
|
|
|
|
|
case "bnTriangle": return DS4Controls.Triangle;
|
|
|
|
|
case "bnCircle": return DS4Controls.Circle;
|
|
|
|
|
case "bnCross": return DS4Controls.Cross;
|
|
|
|
|
case "bnSquare": return DS4Controls.Square;
|
|
|
|
|
|
|
|
|
|
case "bnPS": return DS4Controls.PS;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
case "bnLSLeft": return DS4Controls.LXNeg;
|
|
|
|
|
case "bnLSUp": return DS4Controls.LYNeg;
|
|
|
|
|
case "bnRSLeft": return DS4Controls.RXNeg;
|
|
|
|
|
case "bnRSUp": return DS4Controls.RYNeg;
|
|
|
|
|
|
|
|
|
|
case "bnLSRight": return DS4Controls.LXPos;
|
|
|
|
|
case "bnLSDown": return DS4Controls.LYPos;
|
|
|
|
|
case "bnRSRight": return DS4Controls.RXPos;
|
|
|
|
|
case "bnRSDown": return DS4Controls.RYPos;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
case "bnL2": return DS4Controls.L2;
|
|
|
|
|
case "bnR2": return DS4Controls.R2;
|
|
|
|
|
|
2014-04-27 21:32:09 +02:00
|
|
|
|
case "bnTouchLeft": return DS4Controls.TouchLeft;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
case "bnTouchMulti": return DS4Controls.TouchMulti;
|
|
|
|
|
case "bnTouchUpper": return DS4Controls.TouchUpper;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
case "bnTouchRight": return DS4Controls.TouchRight;
|
2014-06-24 00:27:14 +02:00
|
|
|
|
case "bnGyroXP": return DS4Controls.GyroXPos;
|
|
|
|
|
case "bnGyroXN": return DS4Controls.GyroXNeg;
|
|
|
|
|
case "bnGyroZP": return DS4Controls.GyroZPos;
|
|
|
|
|
case "bnGyroZN": return DS4Controls.GyroZNeg;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
|
2014-12-13 21:12:03 +01:00
|
|
|
|
case "bnSwipeUp": return DS4Controls.SwipeUp;
|
|
|
|
|
case "bnSwipeDown": return DS4Controls.SwipeDown;
|
|
|
|
|
case "bnSwipeLeft": return DS4Controls.SwipeLeft;
|
|
|
|
|
case "bnSwipeRight": return DS4Controls.SwipeRight;
|
2014-11-18 22:23:41 +01:00
|
|
|
|
|
|
|
|
|
#region OldShiftname
|
|
|
|
|
case "sbnShare": return DS4Controls.Share;
|
|
|
|
|
case "sbnL3": return DS4Controls.L3;
|
|
|
|
|
case "sbnR3": return DS4Controls.R3;
|
|
|
|
|
case "sbnOptions": return DS4Controls.Options;
|
|
|
|
|
case "sbnUp": return DS4Controls.DpadUp;
|
|
|
|
|
case "sbnRight": return DS4Controls.DpadRight;
|
|
|
|
|
case "sbnDown": return DS4Controls.DpadDown;
|
|
|
|
|
case "sbnLeft": return DS4Controls.DpadLeft;
|
|
|
|
|
|
|
|
|
|
case "sbnL1": return DS4Controls.L1;
|
|
|
|
|
case "sbnR1": return DS4Controls.R1;
|
|
|
|
|
case "sbnTriangle": return DS4Controls.Triangle;
|
|
|
|
|
case "sbnCircle": return DS4Controls.Circle;
|
|
|
|
|
case "sbnCross": return DS4Controls.Cross;
|
|
|
|
|
case "sbnSquare": return DS4Controls.Square;
|
|
|
|
|
|
|
|
|
|
case "sbnPS": return DS4Controls.PS;
|
|
|
|
|
case "sbnLSLeft": return DS4Controls.LXNeg;
|
|
|
|
|
case "sbnLSUp": return DS4Controls.LYNeg;
|
|
|
|
|
case "sbnRSLeft": return DS4Controls.RXNeg;
|
|
|
|
|
case "sbnRSUp": return DS4Controls.RYNeg;
|
|
|
|
|
|
|
|
|
|
case "sbnLSRight": return DS4Controls.LXPos;
|
|
|
|
|
case "sbnLSDown": return DS4Controls.LYPos;
|
|
|
|
|
case "sbnRSRight": return DS4Controls.RXPos;
|
|
|
|
|
case "sbnRSDown": return DS4Controls.RYPos;
|
|
|
|
|
case "sbnL2": return DS4Controls.L2;
|
|
|
|
|
case "sbnR2": return DS4Controls.R2;
|
|
|
|
|
|
|
|
|
|
case "sbnTouchLeft": return DS4Controls.TouchLeft;
|
|
|
|
|
case "sbnTouchMulti": return DS4Controls.TouchMulti;
|
|
|
|
|
case "sbnTouchUpper": return DS4Controls.TouchUpper;
|
|
|
|
|
case "sbnTouchRight": return DS4Controls.TouchRight;
|
|
|
|
|
case "sbnGsyroXP": return DS4Controls.GyroXPos;
|
|
|
|
|
case "sbnGyroXN": return DS4Controls.GyroXNeg;
|
|
|
|
|
case "sbnGyroZP": return DS4Controls.GyroZPos;
|
|
|
|
|
case "sbnGyroZN": return DS4Controls.GyroZNeg;
|
|
|
|
|
#endregion
|
|
|
|
|
|
2014-11-01 22:49:22 +01:00
|
|
|
|
case "bnShiftShare": return DS4Controls.Share;
|
|
|
|
|
case "bnShiftL3": return DS4Controls.L3;
|
|
|
|
|
case "bnShiftR3": return DS4Controls.R3;
|
|
|
|
|
case "bnShiftOptions": return DS4Controls.Options;
|
|
|
|
|
case "bnShiftUp": return DS4Controls.DpadUp;
|
|
|
|
|
case "bnShiftRight": return DS4Controls.DpadRight;
|
|
|
|
|
case "bnShiftDown": return DS4Controls.DpadDown;
|
|
|
|
|
case "bnShiftLeft": return DS4Controls.DpadLeft;
|
|
|
|
|
|
|
|
|
|
case "bnShiftL1": return DS4Controls.L1;
|
|
|
|
|
case "bnShiftR1": return DS4Controls.R1;
|
|
|
|
|
case "bnShiftTriangle": return DS4Controls.Triangle;
|
|
|
|
|
case "bnShiftCircle": return DS4Controls.Circle;
|
|
|
|
|
case "bnShiftCross": return DS4Controls.Cross;
|
|
|
|
|
case "bnShiftSquare": return DS4Controls.Square;
|
|
|
|
|
|
|
|
|
|
case "bnShiftPS": return DS4Controls.PS;
|
|
|
|
|
case "bnShiftLSLeft": return DS4Controls.LXNeg;
|
|
|
|
|
case "bnShiftLSUp": return DS4Controls.LYNeg;
|
|
|
|
|
case "bnShiftRSLeft": return DS4Controls.RXNeg;
|
|
|
|
|
case "bnShiftRSUp": return DS4Controls.RYNeg;
|
|
|
|
|
|
|
|
|
|
case "bnShiftLSRight": return DS4Controls.LXPos;
|
|
|
|
|
case "bnShiftLSDown": return DS4Controls.LYPos;
|
|
|
|
|
case "bnShiftRSRight": return DS4Controls.RXPos;
|
|
|
|
|
case "bnShiftRSDown": return DS4Controls.RYPos;
|
|
|
|
|
case "bnShiftL2": return DS4Controls.L2;
|
|
|
|
|
case "bnShiftR2": return DS4Controls.R2;
|
|
|
|
|
|
|
|
|
|
case "bnShiftTouchLeft": return DS4Controls.TouchLeft;
|
|
|
|
|
case "bnShiftTouchMulti": return DS4Controls.TouchMulti;
|
|
|
|
|
case "bnShiftTouchUpper": return DS4Controls.TouchUpper;
|
|
|
|
|
case "bnShiftTouchRight": return DS4Controls.TouchRight;
|
2014-11-18 22:23:41 +01:00
|
|
|
|
case "bnShiftGyroXP": return DS4Controls.GyroXPos;
|
2014-11-01 22:49:22 +01:00
|
|
|
|
case "bnShiftGyroXN": return DS4Controls.GyroXNeg;
|
|
|
|
|
case "bnShiftGyroZP": return DS4Controls.GyroZPos;
|
|
|
|
|
case "bnShiftGyroZN": return DS4Controls.GyroZNeg;
|
|
|
|
|
|
2014-11-15 22:54:14 +01:00
|
|
|
|
case "bnShiftSwipeUp": return DS4Controls.SwipeUp;
|
|
|
|
|
case "bnShiftSwipeDown": return DS4Controls.SwipeDown;
|
|
|
|
|
case "bnShiftSwipeLeft": return DS4Controls.SwipeLeft;
|
|
|
|
|
case "bnShiftSwipeRight": return DS4Controls.SwipeRight;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
private X360Controls getX360ControlsByName(string key)
|
|
|
|
|
{
|
|
|
|
|
switch (key)
|
|
|
|
|
{
|
|
|
|
|
case "Back": return X360Controls.Back;
|
|
|
|
|
case "Left Stick": return X360Controls.LS;
|
|
|
|
|
case "Right Stick": return X360Controls.RS;
|
|
|
|
|
case "Start": return X360Controls.Start;
|
|
|
|
|
case "Up Button": return X360Controls.DpadUp;
|
|
|
|
|
case "Right Button": return X360Controls.DpadRight;
|
|
|
|
|
case "Down Button": return X360Controls.DpadDown;
|
|
|
|
|
case "Left Button": return X360Controls.DpadLeft;
|
|
|
|
|
|
|
|
|
|
case "Left Bumper": return X360Controls.LB;
|
|
|
|
|
case "Right Bumper": return X360Controls.RB;
|
|
|
|
|
case "Y Button": return X360Controls.Y;
|
|
|
|
|
case "B Button": return X360Controls.B;
|
|
|
|
|
case "A Button": return X360Controls.A;
|
|
|
|
|
case "X Button": return X360Controls.X;
|
|
|
|
|
|
|
|
|
|
case "Guide": return X360Controls.Guide;
|
|
|
|
|
case "Left X-Axis-": return X360Controls.LXNeg;
|
|
|
|
|
case "Left Y-Axis-": return X360Controls.LYNeg;
|
|
|
|
|
case "Right X-Axis-": return X360Controls.RXNeg;
|
|
|
|
|
case "Right Y-Axis-": return X360Controls.RYNeg;
|
|
|
|
|
|
|
|
|
|
case "Left X-Axis+": return X360Controls.LXPos;
|
|
|
|
|
case "Left Y-Axis+": return X360Controls.LYPos;
|
|
|
|
|
case "Right X-Axis+": return X360Controls.RXPos;
|
|
|
|
|
case "Right Y-Axis+": return X360Controls.RYPos;
|
|
|
|
|
case "Left Trigger": return X360Controls.LT;
|
|
|
|
|
case "Right Trigger": return X360Controls.RT;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
|
|
|
|
case "Left Mouse Button": return X360Controls.LeftMouse;
|
|
|
|
|
case "Right Mouse Button": return X360Controls.RightMouse;
|
|
|
|
|
case "Middle Mouse Button": return X360Controls.MiddleMouse;
|
|
|
|
|
case "4th Mouse Button": return X360Controls.FourthMouse;
|
|
|
|
|
case "5th Mouse Button": return X360Controls.FifthMouse;
|
|
|
|
|
case "Mouse Wheel Up": return X360Controls.WUP;
|
|
|
|
|
case "Mouse Wheel Down": return X360Controls.WDOWN;
|
2014-04-29 23:56:58 +02:00
|
|
|
|
case "Mouse Up": return X360Controls.MouseUp;
|
|
|
|
|
case "Mouse Down": return X360Controls.MouseDown;
|
|
|
|
|
case "Mouse Left": return X360Controls.MouseLeft;
|
|
|
|
|
case "Mouse Right": return X360Controls.MouseRight;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
case "Unbound": return X360Controls.Unbound;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return X360Controls.Unbound;
|
|
|
|
|
}
|
2014-06-26 20:02:01 +02:00
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
public Boolean LoadProfile(int device, System.Windows.Forms.Control[] buttons, System.Windows.Forms.Control[] shiftbuttons, bool launchprogram, ControlService control, string propath = "")
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
|
|
|
|
Boolean Loaded = true;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
Dictionary<DS4Controls, DS4KeyType> customMapKeyTypes = new Dictionary<DS4Controls, DS4KeyType>();
|
|
|
|
|
Dictionary<DS4Controls, UInt16> customMapKeys = new Dictionary<DS4Controls, UInt16>();
|
|
|
|
|
Dictionary<DS4Controls, X360Controls> customMapButtons = new Dictionary<DS4Controls, X360Controls>();
|
2014-05-28 04:49:58 +02:00
|
|
|
|
Dictionary<DS4Controls, String> customMapMacros = new Dictionary<DS4Controls, String>();
|
2014-12-02 01:07:29 +01:00
|
|
|
|
Dictionary<DS4Controls, String> customMapExtras = new Dictionary<DS4Controls, String>();
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
Dictionary<DS4Controls, DS4KeyType> shiftCustomMapKeyTypes = new Dictionary<DS4Controls, DS4KeyType>();
|
|
|
|
|
Dictionary<DS4Controls, UInt16> shiftCustomMapKeys = new Dictionary<DS4Controls, UInt16>();
|
|
|
|
|
Dictionary<DS4Controls, X360Controls> shiftCustomMapButtons = new Dictionary<DS4Controls, X360Controls>();
|
|
|
|
|
Dictionary<DS4Controls, String> shiftCustomMapMacros = new Dictionary<DS4Controls, String>();
|
2014-12-02 01:07:29 +01:00
|
|
|
|
Dictionary<DS4Controls, String> shiftCustomMapExtras = new Dictionary<DS4Controls, String>();
|
2014-11-18 22:23:41 +01:00
|
|
|
|
string rootname = "DS4Windows";
|
2014-03-28 02:50:40 +01:00
|
|
|
|
Boolean missingSetting = false;
|
2014-06-26 20:02:01 +02:00
|
|
|
|
string profilepath;
|
|
|
|
|
if (propath == "")
|
2015-02-08 22:51:52 +01:00
|
|
|
|
profilepath = Global.appdatapath + @"\Profiles\" + profilePath[device] + ".xml";
|
2014-06-26 20:02:01 +02:00
|
|
|
|
else
|
|
|
|
|
profilepath = propath;
|
2014-07-03 04:33:05 +02:00
|
|
|
|
if (File.Exists(profilepath))
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
2014-07-03 04:33:05 +02:00
|
|
|
|
XmlNode Item;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-07-03 04:33:05 +02:00
|
|
|
|
m_Xdoc.Load(profilepath);
|
2014-11-18 22:23:41 +01:00
|
|
|
|
if (m_Xdoc.SelectSingleNode(rootname) == null)
|
|
|
|
|
{
|
|
|
|
|
rootname = "ScpControl";
|
|
|
|
|
missingSetting = true;
|
|
|
|
|
}
|
2015-03-15 19:16:01 +01:00
|
|
|
|
if (device < 4)
|
|
|
|
|
{
|
|
|
|
|
DS4LightBar.forcelight[device] = false;
|
|
|
|
|
DS4LightBar.forcedFlash[device] = 0;
|
|
|
|
|
}
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/"+ rootname + "/flushHIDQueue"); Boolean.TryParse(Item.InnerText, out flushHIDQueue[device]); }
|
|
|
|
|
catch { missingSetting = true; }//rootname = }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/idleDisconnectTimeout"); Int32.TryParse(Item.InnerText, out idleDisconnectTimeout[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
//New method for saving color
|
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/Color");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
string[] colors;
|
|
|
|
|
if (!string.IsNullOrEmpty(Item.InnerText))
|
|
|
|
|
colors = Item.InnerText.Split(',');
|
|
|
|
|
else
|
|
|
|
|
colors = new string[0];
|
2015-02-08 22:51:52 +01:00
|
|
|
|
m_Leds[device].red = byte.Parse(colors[0]);
|
|
|
|
|
m_Leds[device].green = byte.Parse(colors[1]);
|
|
|
|
|
m_Leds[device].blue = byte.Parse(colors[2]);
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
if (m_Xdoc.SelectSingleNode("/" + rootname + "/Color") == null)
|
2014-07-03 04:33:05 +02:00
|
|
|
|
{
|
|
|
|
|
//Old method of color saving
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/Red"); Byte.TryParse(Item.InnerText, out m_Leds[device].red); }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/Green"); Byte.TryParse(Item.InnerText, out m_Leds[device].green); }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/Blue"); Byte.TryParse(Item.InnerText, out m_Leds[device].blue); }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
2014-12-13 21:12:03 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RumbleBoost"); Byte.TryParse(Item.InnerText, out rumble[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ledAsBatteryIndicator"); Boolean.TryParse(Item.InnerText, out ledAsBattery[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/FlashType"); Byte.TryParse(Item.InnerText, out flashType[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/flashBatteryAt"); Int32.TryParse(Item.InnerText, out flashAt[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-05-31 06:37:02 +02:00
|
|
|
|
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/touchSensitivity"); Byte.TryParse(Item.InnerText, out touchSensitivity[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
//New method for saving color
|
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LowColor");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
string[] colors;
|
|
|
|
|
if (!string.IsNullOrEmpty(Item.InnerText))
|
|
|
|
|
colors = Item.InnerText.Split(',');
|
|
|
|
|
else
|
|
|
|
|
colors = new string[0];
|
2015-02-08 22:51:52 +01:00
|
|
|
|
m_LowLeds[device].red = byte.Parse(colors[0]);
|
|
|
|
|
m_LowLeds[device].green = byte.Parse(colors[1]);
|
|
|
|
|
m_LowLeds[device].blue = byte.Parse(colors[2]);
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
if (m_Xdoc.SelectSingleNode("/" + rootname + "/LowColor") == null)
|
2014-07-03 04:33:05 +02:00
|
|
|
|
{
|
|
|
|
|
//Old method of color saving
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LowRed"); Byte.TryParse(Item.InnerText, out m_LowLeds[device].red); }
|
2014-05-21 23:42:25 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LowGreen"); Byte.TryParse(Item.InnerText, out m_LowLeds[device].green); }
|
2014-05-21 23:42:25 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LowBlue"); Byte.TryParse(Item.InnerText, out m_LowLeds[device].blue); }
|
2014-06-26 20:02:01 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
|
|
|
|
//New method for saving color
|
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ChargingColor");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
string[] colors;
|
|
|
|
|
if (!string.IsNullOrEmpty(Item.InnerText))
|
|
|
|
|
colors = Item.InnerText.Split(',');
|
|
|
|
|
else
|
|
|
|
|
colors = new string[0];
|
2015-02-08 22:51:52 +01:00
|
|
|
|
|
|
|
|
|
m_ChargingLeds[device].red = byte.Parse(colors[0]);
|
|
|
|
|
m_ChargingLeds[device].green = byte.Parse(colors[1]);
|
|
|
|
|
m_ChargingLeds[device].blue = byte.Parse(colors[2]);
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
if (m_Xdoc.SelectSingleNode("/" + rootname + "/ChargingColor") == null)
|
2014-07-03 04:33:05 +02:00
|
|
|
|
{
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ChargingRed"); Byte.TryParse(Item.InnerText, out m_ChargingLeds[device].red); }
|
2014-06-26 20:02:01 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ChargingGreen"); Byte.TryParse(Item.InnerText, out m_ChargingLeds[device].green); }
|
2014-06-02 19:29:38 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ChargingBlue"); Byte.TryParse(Item.InnerText, out m_ChargingLeds[device].blue); }
|
2014-06-26 20:02:01 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
2014-07-26 01:17:45 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftColor");
|
2014-07-26 01:17:45 +02:00
|
|
|
|
string[] colors;
|
|
|
|
|
if (!string.IsNullOrEmpty(Item.InnerText))
|
|
|
|
|
colors = Item.InnerText.Split(',');
|
|
|
|
|
else
|
|
|
|
|
colors = new string[0];
|
2015-02-08 22:51:52 +01:00
|
|
|
|
m_ShiftLeds[device].red = byte.Parse(colors[0]);
|
|
|
|
|
m_ShiftLeds[device].green = byte.Parse(colors[1]);
|
|
|
|
|
m_ShiftLeds[device].blue = byte.Parse(colors[2]);
|
2014-07-26 01:17:45 +02:00
|
|
|
|
}
|
|
|
|
|
catch { m_ShiftLeds[device] = m_Leds[device]; missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftColorOn"); Boolean.TryParse(Item.InnerText, out shiftColorOn[device]); }
|
2014-07-26 01:17:45 +02:00
|
|
|
|
catch { shiftColorOn[device] = false; missingSetting = true; }
|
2014-08-23 22:52:20 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/FlashColor");
|
2014-08-23 22:52:20 +02:00
|
|
|
|
string[] colors;
|
|
|
|
|
if (!string.IsNullOrEmpty(Item.InnerText))
|
|
|
|
|
colors = Item.InnerText.Split(',');
|
|
|
|
|
else
|
|
|
|
|
colors = new string[0];
|
2015-02-08 22:51:52 +01:00
|
|
|
|
m_FlashLeds[device].red = byte.Parse(colors[0]);
|
|
|
|
|
m_FlashLeds[device].green = byte.Parse(colors[1]);
|
|
|
|
|
m_FlashLeds[device].blue = byte.Parse(colors[2]);
|
2014-08-23 22:52:20 +02:00
|
|
|
|
}
|
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/touchpadJitterCompensation"); Boolean.TryParse(Item.InnerText, out touchpadJitterCompensation[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/lowerRCOn"); Boolean.TryParse(Item.InnerText, out lowerRCOn[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/tapSensitivity"); Byte.TryParse(Item.InnerText, out tapSensitivity[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/doubleTap"); Boolean.TryParse(Item.InnerText, out doubleTap[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/scrollSensitivity"); Int32.TryParse(Item.InnerText, out scrollSensitivity[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LeftTriggerMiddle"); Byte.TryParse(Item.InnerText, out l2Deadzone[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RightTriggerMiddle"); Byte.TryParse(Item.InnerText, out r2Deadzone[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ButtonMouseSensitivity"); Int32.TryParse(Item.InnerText, out buttonMouseSensitivity[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/Rainbow"); Double.TryParse(Item.InnerText, out rainbow[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { rainbow[device] = 0; missingSetting = true; }
|
2015-04-21 21:00:09 +02:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LSDeadZone"); int.TryParse(Item.InnerText, out LSDeadzone[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2015-04-21 21:00:09 +02:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/RSDeadZone"); int.TryParse(Item.InnerText, out RSDeadzone[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SXDeadZone"); Double.TryParse(Item.InnerText, out SXDeadzone[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/SZDeadZone"); Double.TryParse(Item.InnerText, out SZDeadzone[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ChargingType"); Int32.TryParse(Item.InnerText, out chargingType[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/MouseAcceleration"); Boolean.TryParse(Item.InnerText, out mouseAccel[device]); }
|
2014-07-03 04:33:05 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-11-18 22:23:41 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftModifier"); Int32.TryParse(Item.InnerText, out shiftModifier[device]); }
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
catch { shiftModifier[device] = 0; missingSetting = true; }
|
2014-09-15 04:37:14 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/LaunchProgram");
|
2014-09-15 04:37:14 +02:00
|
|
|
|
launchProgram[device] = Item.InnerText;
|
|
|
|
|
if (launchprogram == true && launchProgram[device] != string.Empty) System.Diagnostics.Process.Start(launchProgram[device]);
|
|
|
|
|
}
|
2014-07-26 01:17:45 +02:00
|
|
|
|
catch { launchProgram[device] = string.Empty; missingSetting = true; }
|
2014-09-15 04:37:14 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/DinputOnly");
|
2014-09-15 04:37:14 +02:00
|
|
|
|
Boolean.TryParse(Item.InnerText, out dinputOnly[device]);
|
2014-09-15 04:52:21 +02:00
|
|
|
|
if (device < 4)
|
|
|
|
|
{
|
|
|
|
|
if (dinputOnly[device] == true) control.x360Bus.Unplug(device);
|
2014-10-31 20:00:15 +01:00
|
|
|
|
else if (control.DS4Controllers[device] != null && control.DS4Controllers[device].IsAlive()) control.x360Bus.Plugin(device);
|
2014-09-15 04:52:21 +02:00
|
|
|
|
}
|
2014-09-15 04:37:14 +02:00
|
|
|
|
}
|
2014-08-23 22:52:20 +02:00
|
|
|
|
catch { missingSetting = true; }
|
2014-09-15 04:37:14 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode("/" + rootname + "/StartTouchpadOff");
|
2014-09-15 04:37:14 +02:00
|
|
|
|
Boolean.TryParse(Item.InnerText, out startTouchpadOff[device]);
|
|
|
|
|
if (startTouchpadOff[device] == true) control.StartTPOff(device);
|
|
|
|
|
}
|
|
|
|
|
catch { startTouchpadOff[device] = false; missingSetting = true; }
|
2014-11-15 22:54:14 +01:00
|
|
|
|
try
|
2014-11-18 22:23:41 +01:00
|
|
|
|
{ Item = m_Xdoc.SelectSingleNode("/" + rootname + "/UseTPforControls"); Boolean.TryParse(Item.InnerText, out useTPforControls[device]); }
|
2014-11-15 22:54:14 +01:00
|
|
|
|
catch { useTPforControls[device] = false; missingSetting = true; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
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; }
|
|
|
|
|
|
2014-07-03 04:33:05 +02:00
|
|
|
|
DS4KeyType keyType;
|
|
|
|
|
UInt16 wvk;
|
|
|
|
|
if (buttons == null)
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
XmlNode ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/Control/Button");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
customMapButtons.Add(getDS4ControlsByName(item.Name), getX360ControlsByName(item.InnerText));
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/Control/Macro");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
customMapMacros.Add(getDS4ControlsByName(item.Name), item.InnerText);
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/Control/Key");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
if (UInt16.TryParse(item.InnerText, out wvk))
|
|
|
|
|
customMapKeys.Add(getDS4ControlsByName(item.Name), wvk);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/Control/Extras");
|
2014-12-17 19:29:22 +01:00
|
|
|
|
if (ParentItem != null)
|
2014-12-02 01:07:29 +01:00
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
2014-12-17 19:29:22 +01:00
|
|
|
|
if (item.InnerText != string.Empty)
|
|
|
|
|
customMapExtras.Add(getDS4ControlsByName(item.Name), item.InnerText);
|
|
|
|
|
else
|
|
|
|
|
ParentItem.RemoveChild(item);
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/Control/KeyType");
|
2014-07-03 04:33:05 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
if (item != null)
|
|
|
|
|
{
|
|
|
|
|
keyType = DS4KeyType.None;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.ScanCode.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.ScanCode;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.Toggle.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.Toggle;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.Macro.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.Macro;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.HoldMacro.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.HoldMacro;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.Unbound.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.Unbound;
|
|
|
|
|
if (keyType != DS4KeyType.None)
|
|
|
|
|
customMapKeyTypes.Add(getDS4ControlsByName(item.Name), keyType);
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (shiftModifier[device] > 0)
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftControl/Button");
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
shiftCustomMapButtons.Add(getDS4ControlsByName(item.Name), getX360ControlsByName(item.InnerText));
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftControl/Macro");
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
shiftCustomMapMacros.Add(getDS4ControlsByName(item.Name), item.InnerText);
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftControl/Key");
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
if (UInt16.TryParse(item.InnerText, out wvk))
|
|
|
|
|
shiftCustomMapKeys.Add(getDS4ControlsByName(item.Name), wvk);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftControl/Extras");
|
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
shiftCustomMapExtras.Add(getDS4ControlsByName(item.Name), item.InnerText);
|
2014-11-18 22:23:41 +01:00
|
|
|
|
ParentItem = m_Xdoc.SelectSingleNode("/" + rootname + "/ShiftControl/KeyType");
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (ParentItem != null)
|
|
|
|
|
foreach (XmlNode item in ParentItem.ChildNodes)
|
|
|
|
|
if (item != null)
|
2014-04-27 21:32:09 +02:00
|
|
|
|
{
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
keyType = DS4KeyType.None;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.ScanCode.ToString()))
|
2014-04-27 21:32:09 +02:00
|
|
|
|
keyType |= DS4KeyType.ScanCode;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.Toggle.ToString()))
|
2014-05-28 04:49:58 +02:00
|
|
|
|
keyType |= DS4KeyType.Toggle;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.Macro.ToString()))
|
2014-05-28 04:49:58 +02:00
|
|
|
|
keyType |= DS4KeyType.Macro;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.HoldMacro.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.HoldMacro;
|
|
|
|
|
if (item.InnerText.Contains(DS4KeyType.Unbound.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.Unbound;
|
|
|
|
|
if (keyType != DS4KeyType.None)
|
|
|
|
|
shiftCustomMapKeyTypes.Add(getDS4ControlsByName(item.Name), keyType);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-12-02 01:07:29 +01:00
|
|
|
|
LoadButtons(buttons, "Control", customMapKeyTypes, customMapKeys, customMapButtons, customMapMacros, customMapExtras);
|
|
|
|
|
LoadButtons(shiftbuttons, "ShiftControl", shiftCustomMapKeyTypes, shiftCustomMapKeys, shiftCustomMapButtons, shiftCustomMapMacros, shiftCustomMapExtras);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-07-03 04:33:05 +02:00
|
|
|
|
}
|
|
|
|
|
//catch { Loaded = false; }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
if (Loaded)
|
|
|
|
|
{
|
2014-04-29 11:19:00 +02:00
|
|
|
|
this.customMapButtons[device] = customMapButtons;
|
|
|
|
|
this.customMapKeys[device] = customMapKeys;
|
|
|
|
|
this.customMapKeyTypes[device] = customMapKeyTypes;
|
2014-05-28 04:49:58 +02:00
|
|
|
|
this.customMapMacros[device] = customMapMacros;
|
2014-12-02 01:07:29 +01:00
|
|
|
|
this.customMapExtras[device] = customMapExtras;
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
|
|
|
|
|
this.shiftCustomMapButtons[device] = shiftCustomMapButtons;
|
|
|
|
|
this.shiftCustomMapKeys[device] = shiftCustomMapKeys;
|
|
|
|
|
this.shiftCustomMapKeyTypes[device] = shiftCustomMapKeyTypes;
|
|
|
|
|
this.shiftCustomMapMacros[device] = shiftCustomMapMacros;
|
2014-12-02 01:07:29 +01:00
|
|
|
|
this.shiftCustomMapExtras[device] = shiftCustomMapExtras;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
// Only add missing settings if the actual load was graceful
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (missingSetting && Loaded)// && buttons != null)
|
|
|
|
|
SaveProfile(device, profilepath, buttons, shiftbuttons);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
|
|
|
|
return Loaded;
|
|
|
|
|
}
|
|
|
|
|
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
public void LoadButtons(System.Windows.Forms.Control[] buttons, string control, Dictionary<DS4Controls, DS4KeyType> customMapKeyTypes,
|
2014-12-02 01:07:29 +01:00
|
|
|
|
Dictionary<DS4Controls, UInt16> customMapKeys, Dictionary<DS4Controls, X360Controls> customMapButtons, Dictionary<DS4Controls, String> customMapMacros, Dictionary<DS4Controls, String> customMapExtras)
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
{
|
|
|
|
|
XmlNode Item;
|
|
|
|
|
DS4KeyType keyType;
|
|
|
|
|
UInt16 wvk;
|
2014-11-18 22:23:41 +01:00
|
|
|
|
string rootname = "DS4Windows";
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
foreach (var button in buttons)
|
|
|
|
|
try
|
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
if (m_Xdoc.SelectSingleNode(rootname) == null)
|
|
|
|
|
{
|
|
|
|
|
rootname = "ScpControl";
|
|
|
|
|
}
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
//bool foundBinding = false;
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/KeyType/{0}", button.Name));
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (Item != null)
|
|
|
|
|
{
|
|
|
|
|
//foundBinding = true;
|
|
|
|
|
keyType = DS4KeyType.None;
|
|
|
|
|
if (Item.InnerText.Contains(DS4KeyType.Unbound.ToString()))
|
|
|
|
|
{
|
|
|
|
|
keyType = DS4KeyType.Unbound;
|
|
|
|
|
button.Tag = "Unbound";
|
|
|
|
|
button.Text = "Unbound";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bool SC = Item.InnerText.Contains(DS4KeyType.ScanCode.ToString());
|
|
|
|
|
bool TG = Item.InnerText.Contains(DS4KeyType.Toggle.ToString());
|
|
|
|
|
bool MC = Item.InnerText.Contains(DS4KeyType.Macro.ToString());
|
|
|
|
|
bool MR = Item.InnerText.Contains(DS4KeyType.HoldMacro.ToString());
|
|
|
|
|
button.Font = new Font(button.Font,
|
|
|
|
|
(SC ? FontStyle.Bold : FontStyle.Regular) | (TG ? FontStyle.Italic : FontStyle.Regular) |
|
|
|
|
|
(MC ? FontStyle.Underline : FontStyle.Regular) | (MR ? FontStyle.Strikeout : FontStyle.Regular));
|
|
|
|
|
if (Item.InnerText.Contains(DS4KeyType.ScanCode.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.ScanCode;
|
|
|
|
|
if (Item.InnerText.Contains(DS4KeyType.Toggle.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.Toggle;
|
|
|
|
|
if (Item.InnerText.Contains(DS4KeyType.Macro.ToString()))
|
|
|
|
|
keyType |= DS4KeyType.Macro;
|
|
|
|
|
}
|
|
|
|
|
if (keyType != DS4KeyType.None)
|
|
|
|
|
customMapKeyTypes.Add(getDS4ControlsByName(Item.Name), keyType);
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
string extras;
|
|
|
|
|
Item = m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/Extras/{0}", button.Name));
|
|
|
|
|
if (Item != null)
|
|
|
|
|
{
|
2014-12-17 19:29:22 +01:00
|
|
|
|
if (Item.InnerText != string.Empty)
|
|
|
|
|
{
|
|
|
|
|
extras = Item.InnerText;
|
|
|
|
|
customMapExtras.Add(getDS4ControlsByName(button.Name), Item.InnerText);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_Xdoc.RemoveChild(Item);
|
|
|
|
|
extras = "0,0,0,0,0,0,0,0";
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
extras = "0,0,0,0,0,0,0,0";
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/Macro/{0}", button.Name));
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (Item != null)
|
|
|
|
|
{
|
|
|
|
|
string[] splitter = Item.InnerText.Split('/');
|
|
|
|
|
int[] keys = new int[splitter.Length];
|
|
|
|
|
for (int i = 0; i < keys.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
keys[i] = int.Parse(splitter[i]);
|
|
|
|
|
if (keys[i] < 255) splitter[i] = ((System.Windows.Forms.Keys)keys[i]).ToString();
|
|
|
|
|
else if (keys[i] == 256) splitter[i] = "Left Mouse Button";
|
|
|
|
|
else if (keys[i] == 257) splitter[i] = "Right Mouse Button";
|
|
|
|
|
else if (keys[i] == 258) splitter[i] = "Middle Mouse Button";
|
|
|
|
|
else if (keys[i] == 259) splitter[i] = "4th Mouse Button";
|
|
|
|
|
else if (keys[i] == 260) splitter[i] = "5th Mouse Button";
|
|
|
|
|
else if (keys[i] > 300) splitter[i] = "Wait " + (keys[i] - 300) + "ms";
|
|
|
|
|
}
|
|
|
|
|
button.Text = "Macro";
|
2014-12-02 01:07:29 +01:00
|
|
|
|
button.Tag = new KeyValuePair<int[], string>(keys, extras);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
customMapMacros.Add(getDS4ControlsByName(button.Name), Item.InnerText);
|
|
|
|
|
}
|
2014-11-18 22:23:41 +01:00
|
|
|
|
else if (m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/Key/{0}", button.Name)) != null)
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/Key/{0}", button.Name));
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
if (UInt16.TryParse(Item.InnerText, out wvk))
|
|
|
|
|
{
|
|
|
|
|
//foundBinding = true;
|
|
|
|
|
customMapKeys.Add(getDS4ControlsByName(Item.Name), wvk);
|
2014-12-02 01:07:29 +01:00
|
|
|
|
button.Tag = new KeyValuePair<int, string>(wvk, extras);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
button.Text = ((System.Windows.Forms.Keys)wvk).ToString();
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-12-02 01:07:29 +01:00
|
|
|
|
else if (m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/Button/{0}", button.Name)) != null)
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
{
|
2014-11-18 22:23:41 +01:00
|
|
|
|
Item = m_Xdoc.SelectSingleNode(String.Format("/" + rootname + "/" + control + "/Button/{0}", button.Name));
|
2014-12-02 01:07:29 +01:00
|
|
|
|
//foundBinding = true;
|
|
|
|
|
button.Tag = new KeyValuePair<string, string>(Item.InnerText, extras);
|
|
|
|
|
button.Text = Item.InnerText;
|
|
|
|
|
customMapButtons.Add(getDS4ControlsByName(button.Name), getX360ControlsByName(Item.InnerText));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
button.Tag = new KeyValuePair<object, string>(null, extras);
|
Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
View input of controls in profiles, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
While opened, option to keep the window size after closing the profile's settings
Old profiles are automatically upgraded if it's missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
Other UI changes for profile settings, flipped touchpad and other settings boxes
Others:
Fix for when clicking the semicolon in the select an action screen
Fix assigning Sixaxis action to a key
minor UI changes and bug fixes, such as auto resize of the log listview
DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users
2014-07-07 21:22:42 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public bool Load()
|
|
|
|
|
{
|
|
|
|
|
Boolean Loaded = true;
|
2014-04-29 11:23:28 +02:00
|
|
|
|
Boolean missingSetting = false;
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (File.Exists(m_Profile))
|
|
|
|
|
{
|
|
|
|
|
XmlNode Item;
|
|
|
|
|
|
|
|
|
|
m_Xdoc.Load(m_Profile);
|
|
|
|
|
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/useExclusiveMode"); Boolean.TryParse(Item.InnerText, out useExclusiveMode); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/startMinimized"); Boolean.TryParse(Item.InnerText, out startMinimized); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/formWidth"); Int32.TryParse(Item.InnerText, out formWidth); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/formHeight"); Int32.TryParse(Item.InnerText, out formHeight); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller1"); profilePath[0] = Item.InnerText; }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller2"); profilePath[1] = Item.InnerText; }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller3"); profilePath[2] = Item.InnerText; }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller4"); profilePath[3] = Item.InnerText; }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-05-21 19:39:56 +02:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/LastChecked"); DateTime.TryParse(Item.InnerText, out lastChecked); }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-06-06 22:38:52 +02:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/CheckWhen"); Int32.TryParse(Item.InnerText, out CheckWhen); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/Notifications"); Boolean.TryParse(Item.InnerText, out notifications); }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-06-21 20:00:28 +02:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/DisconnectBTAtStop"); Boolean.TryParse(Item.InnerText, out disconnectBTAtStop); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/SwipeProfiles"); Boolean.TryParse(Item.InnerText, out swipeProfiles); }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-11-20 20:03:18 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/UseDS4ForMapping"); Boolean.TryParse(Item.InnerText, out ds4Mapping); }
|
|
|
|
|
catch { missingSetting = true; }
|
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/QuickCharge"); Boolean.TryParse(Item.InnerText, out quickCharge); }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-12-03 23:36:54 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/FirstXinputPort"); Int32.TryParse(Item.InnerText, out firstXinputPort); }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-12-13 21:12:03 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/CloseMinimizes"); Boolean.TryParse(Item.InnerText, out closeMini); }
|
|
|
|
|
catch { missingSetting = true; }
|
2015-02-08 22:51:52 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/DownloadLang"); Boolean.TryParse(Item.InnerText, out downloadLang); }
|
|
|
|
|
catch { missingSetting = true; }
|
2015-03-15 19:16:01 +01:00
|
|
|
|
try { Item = m_Xdoc.SelectSingleNode("/Profile/FlashWhenLate"); Boolean.TryParse(Item.InnerText, out flashWhenLate); }
|
|
|
|
|
catch { missingSetting = true; }
|
2014-04-27 21:32:09 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch { }
|
|
|
|
|
if (missingSetting)
|
2014-04-29 11:23:28 +02:00
|
|
|
|
Save();
|
2014-04-29 11:19:00 +02:00
|
|
|
|
return Loaded;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
2014-04-27 21:32:09 +02:00
|
|
|
|
public bool Save()
|
2014-03-28 02:50:40 +01:00
|
|
|
|
{
|
|
|
|
|
Boolean Saved = true;
|
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
XmlNode Node;
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
m_Xdoc.RemoveAll();
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
Node = m_Xdoc.CreateXmlDeclaration("1.0", "utf-8", String.Empty);
|
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
Node = m_Xdoc.CreateComment(String.Format(" Profile Configuration Data. {0} ", DateTime.Now));
|
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
Node = m_Xdoc.CreateWhitespace("\r\n");
|
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
Node = m_Xdoc.CreateNode(XmlNodeType.Element, "Profile", null);
|
2014-04-27 21:32:09 +02:00
|
|
|
|
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
XmlNode xmlUseExclNode = m_Xdoc.CreateNode(XmlNodeType.Element, "useExclusiveMode", null); xmlUseExclNode.InnerText = useExclusiveMode.ToString(); Node.AppendChild(xmlUseExclNode);
|
|
|
|
|
XmlNode xmlStartMinimized = m_Xdoc.CreateNode(XmlNodeType.Element, "startMinimized", null); xmlStartMinimized.InnerText = startMinimized.ToString(); Node.AppendChild(xmlStartMinimized);
|
|
|
|
|
XmlNode xmlFormWidth = m_Xdoc.CreateNode(XmlNodeType.Element, "formWidth", null); xmlFormWidth.InnerText = formWidth.ToString(); Node.AppendChild(xmlFormWidth);
|
|
|
|
|
XmlNode xmlFormHeight = m_Xdoc.CreateNode(XmlNodeType.Element, "formHeight", null); xmlFormHeight.InnerText = formHeight.ToString(); Node.AppendChild(xmlFormHeight);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
XmlNode xmlController1 = m_Xdoc.CreateNode(XmlNodeType.Element, "Controller1", null); xmlController1.InnerText = profilePath[0]; Node.AppendChild(xmlController1);
|
|
|
|
|
XmlNode xmlController2 = m_Xdoc.CreateNode(XmlNodeType.Element, "Controller2", null); xmlController2.InnerText = profilePath[1]; Node.AppendChild(xmlController2);
|
|
|
|
|
XmlNode xmlController3 = m_Xdoc.CreateNode(XmlNodeType.Element, "Controller3", null); xmlController3.InnerText = profilePath[2]; Node.AppendChild(xmlController3);
|
|
|
|
|
XmlNode xmlController4 = m_Xdoc.CreateNode(XmlNodeType.Element, "Controller4", null); xmlController4.InnerText = profilePath[3]; Node.AppendChild(xmlController4);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
XmlNode xmlLastChecked = m_Xdoc.CreateNode(XmlNodeType.Element, "LastChecked", null); xmlLastChecked.InnerText = lastChecked.ToString(); Node.AppendChild(xmlLastChecked);
|
|
|
|
|
XmlNode xmlCheckWhen = m_Xdoc.CreateNode(XmlNodeType.Element, "CheckWhen", null); xmlCheckWhen.InnerText = CheckWhen.ToString(); Node.AppendChild(xmlCheckWhen);
|
|
|
|
|
XmlNode xmlNotifications = m_Xdoc.CreateNode(XmlNodeType.Element, "Notifications", null); xmlNotifications.InnerText = notifications.ToString(); Node.AppendChild(xmlNotifications);
|
|
|
|
|
XmlNode xmlDisconnectBT = m_Xdoc.CreateNode(XmlNodeType.Element, "DisconnectBTAtStop", null); xmlDisconnectBT.InnerText = disconnectBTAtStop.ToString(); Node.AppendChild(xmlDisconnectBT);
|
|
|
|
|
XmlNode xmlSwipeProfiles = m_Xdoc.CreateNode(XmlNodeType.Element, "SwipeProfiles", null); xmlSwipeProfiles.InnerText = swipeProfiles.ToString(); Node.AppendChild(xmlSwipeProfiles);
|
2014-11-20 20:03:18 +01:00
|
|
|
|
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);
|
2014-12-03 23:36:54 +01:00
|
|
|
|
XmlNode xmlFirstXinputPort = m_Xdoc.CreateNode(XmlNodeType.Element, "FirstXinputPort", null); xmlFirstXinputPort.InnerText = firstXinputPort.ToString(); Node.AppendChild(xmlFirstXinputPort);
|
2015-02-08 22:51:52 +01:00
|
|
|
|
XmlNode xmlCloseMini = m_Xdoc.CreateNode(XmlNodeType.Element, "CloseMinimizes", null); xmlCloseMini.InnerText = closeMini.ToString(); Node.AppendChild(xmlCloseMini);
|
2015-03-15 19:16:01 +01:00
|
|
|
|
XmlNode xmlDownloadLang = m_Xdoc.CreateNode(XmlNodeType.Element, "DownloadLang", null); xmlDownloadLang.InnerText = downloadLang.ToString(); Node.AppendChild(xmlDownloadLang);
|
|
|
|
|
XmlNode xmlFlashWhenLate = m_Xdoc.CreateNode(XmlNodeType.Element, "FlashWhenLate", null); xmlFlashWhenLate.InnerText = flashWhenLate.ToString(); Node.AppendChild(xmlFlashWhenLate);
|
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
m_Xdoc.AppendChild(Node);
|
2014-03-28 02:50:40 +01:00
|
|
|
|
|
2014-06-21 20:00:28 +02:00
|
|
|
|
try { m_Xdoc.Save(m_Profile); }
|
|
|
|
|
catch (UnauthorizedAccessException) { Saved = false; }
|
2014-03-28 02:50:40 +01:00
|
|
|
|
return Saved;
|
|
|
|
|
}
|
2014-12-13 21:12:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-17 19:29:22 +01:00
|
|
|
|
public bool SaveAction(string name, string controls, int mode, string details, bool edit, string extras = "")
|
2014-12-13 21:12:03 +01:00
|
|
|
|
{
|
|
|
|
|
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;
|
2014-12-17 19:29:22 +01:00
|
|
|
|
if (extras != string.Empty)
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Extras")).InnerText = extras;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "Program";
|
2015-03-15 19:16:01 +01:00
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details.Split('?')[0];
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Arguements")).InnerText = extras;
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Delay")).InnerText = details.Split('?')[1];
|
2014-12-13 21:12:03 +01:00
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "Profile";
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
|
2014-12-17 19:29:22 +01:00
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("UnloadTrigger")).InnerText = extras;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
break;
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
case 4:
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "Key";
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
|
|
|
|
|
if (!String.IsNullOrEmpty(extras))
|
|
|
|
|
{
|
|
|
|
|
string[] exts = extras.Split('\n');
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("UnloadTrigger")).InnerText = exts[1];
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("UnloadStyle")).InnerText = exts[0];
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "DisconnectBT";
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
|
|
|
|
|
break;
|
2015-02-12 20:36:40 +01:00
|
|
|
|
case 6:
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Type")).InnerText = "BatteryCheck";
|
|
|
|
|
el.AppendChild(m_Xdoc.CreateElement("Details")).InnerText = details;
|
|
|
|
|
break;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
|
|
|
|
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"))
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
{
|
|
|
|
|
SaveAction("Disconnect Controller", "PS/Options", 5, "0", false);
|
|
|
|
|
saved = false;
|
|
|
|
|
}
|
2014-12-13 21:12:03 +01:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
actions.Clear();
|
|
|
|
|
XmlDocument doc = new XmlDocument();
|
|
|
|
|
doc.Load(Global.appdatapath + "\\Actions.xml");
|
|
|
|
|
XmlNodeList actionslist = doc.SelectNodes("Actions/Action");
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
string name, controls, type, details, extras, extras2;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
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")
|
|
|
|
|
{
|
2014-12-17 19:29:22 +01:00
|
|
|
|
extras = x.ChildNodes[3].InnerText;
|
2015-03-15 19:16:01 +01:00
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details, 0, extras));
|
2014-12-17 19:29:22 +01:00
|
|
|
|
}
|
|
|
|
|
else if (type == "Macro")
|
|
|
|
|
{
|
|
|
|
|
if (x.ChildNodes[3] != null) extras = x.ChildNodes[3].InnerText;
|
|
|
|
|
else extras = string.Empty;
|
2015-03-15 19:16:01 +01:00
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details, 0, extras));
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
else if (type == "Key")
|
|
|
|
|
{
|
|
|
|
|
if (x.ChildNodes[3] != null)
|
|
|
|
|
{
|
|
|
|
|
extras = x.ChildNodes[3].InnerText;
|
|
|
|
|
extras2 = x.ChildNodes[4].InnerText;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
extras = string.Empty;
|
|
|
|
|
extras2 = string.Empty;
|
|
|
|
|
}
|
|
|
|
|
if (!string.IsNullOrEmpty(extras))
|
2015-03-15 19:16:01 +01:00
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details, 0, extras2 + '\n' + extras));
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
else
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details));
|
|
|
|
|
}
|
2015-03-15 19:16:01 +01:00
|
|
|
|
else if (type == "DisconnectBT")
|
|
|
|
|
{
|
|
|
|
|
double doub;
|
|
|
|
|
if (double.TryParse(details, out doub))
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, "", doub));
|
|
|
|
|
else
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, ""));
|
|
|
|
|
}
|
|
|
|
|
else if (type == "BatteryCheck")
|
|
|
|
|
{
|
|
|
|
|
double doub;
|
|
|
|
|
if (double.TryParse(details.Split(',')[0], out doub))
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details, doub));
|
|
|
|
|
else
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details));
|
|
|
|
|
}
|
|
|
|
|
else if (type == "Program")
|
|
|
|
|
{
|
|
|
|
|
double doub;
|
|
|
|
|
if (x.ChildNodes[3] != null)
|
|
|
|
|
{
|
|
|
|
|
extras = x.ChildNodes[3].InnerText;
|
|
|
|
|
if (double.TryParse(x.ChildNodes[4].InnerText, out doub))
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details, doub, extras));
|
|
|
|
|
else
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details, 0, extras));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
actions.Add(new SpecialAction(name, controls, type, details));
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
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;
|
2015-03-15 19:16:01 +01:00
|
|
|
|
public double delayTime = 0;
|
|
|
|
|
public string extra;
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
public bool pressRelease = false;
|
2014-12-17 19:29:22 +01:00
|
|
|
|
public DS4KeyType keyType;
|
2015-03-15 19:16:01 +01:00
|
|
|
|
public SpecialAction(string name, string controls, string type, string details, double delay = 0, string extras = "")
|
2014-12-13 21:12:03 +01:00
|
|
|
|
{
|
|
|
|
|
this.name = name;
|
|
|
|
|
this.type = type;
|
|
|
|
|
this.controls = controls;
|
2015-03-15 19:16:01 +01:00
|
|
|
|
delayTime = delay;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
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);
|
|
|
|
|
}
|
2014-12-17 19:29:22 +01:00
|
|
|
|
if (extras.Contains("Scan Code"))
|
|
|
|
|
keyType |= DS4KeyType.ScanCode;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
else if (type == "Key")
|
|
|
|
|
{
|
|
|
|
|
this.details = details.Split(' ')[0];
|
|
|
|
|
if (!string.IsNullOrEmpty(extras))
|
|
|
|
|
{
|
|
|
|
|
string[] exts = extras.Split('\n');
|
|
|
|
|
pressRelease = exts[0] == "Release";
|
|
|
|
|
this.ucontrols = exts[1];
|
|
|
|
|
string[] uctrls = exts[1].Split('/');
|
|
|
|
|
foreach (string s in uctrls)
|
|
|
|
|
uTrigger.Add(getDS4ControlsByName(s));
|
|
|
|
|
}
|
|
|
|
|
if (details.Contains("Scan Code"))
|
|
|
|
|
keyType |= DS4KeyType.ScanCode;
|
|
|
|
|
}
|
2015-03-15 19:16:01 +01:00
|
|
|
|
else if (type == "Program")
|
|
|
|
|
{
|
|
|
|
|
this.details = details;
|
|
|
|
|
if (extras != string.Empty)
|
|
|
|
|
extra = extras;
|
|
|
|
|
}
|
2014-12-13 21:12:03 +01:00
|
|
|
|
else
|
|
|
|
|
this.details = details;
|
Version 1.4.222
Added Press/Toggle Key to Special Actions, you can hold a trigger to
hold a key or toggle a key with one set of buttons, and untoggle it by
pressing or releasing another set of buttons
Added Disconnect BT to Special Actions, PS+Options to d/c is now added
to Special actions and can be enabled for each profile. You can now set
Disconnect BT to any control(s) and how long you need to hold the
control(s) to take affect
Added Partial German Translation (Thanks Michél)
Added 95% Finished Russian Translation (Thanks overclockers.ru members:
KoNoRIMCI & Sr_psycho)
Added Partial Italian Translation (Thanks Giulio)
Updates to the translations sheets, they should now have every bit of
text in DS4Windows, minus the controls of the controller
English Spelling fixes
Main/Starting tab only shows info for connected controllers, and context
menu only shows options for connected controllers.
Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now
scrolls smoothly
Slightly reworked analog mouse movement + mouse acceleration (not as
janky anymore)
When starting DS4Windows, if no controllers are connected, DS4Windows
defaults to the profile tab
Certain log warnings (Like unable to get controller exclusively) shows
up in red
Easter egg: try pressing a few buttons in sequence while in the log tab
Fixed Start Profile with TP off being unchecked next time a profile is
opened
Other minor Bug Fixes, such as clearing the log then moving to a new tab
crashing DS4W
2015-01-17 21:16:48 +01:00
|
|
|
|
|
|
|
|
|
if (type != "Key" && !string.IsNullOrEmpty(extras))
|
2014-12-13 21:12:03 +01:00
|
|
|
|
{
|
2014-12-17 19:29:22 +01:00
|
|
|
|
this.ucontrols = extras;
|
|
|
|
|
string[] uctrls = extras.Split('/');
|
2014-12-13 21:12:03 +01:00
|
|
|
|
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;
|
2015-02-12 20:36:40 +01:00
|
|
|
|
|
|
|
|
|
case "Tilt Up": return DS4Controls.GyroZNeg;
|
|
|
|
|
case "Tilt Down": return DS4Controls.GyroZPos;
|
|
|
|
|
case "Tilt Left": return DS4Controls.GyroXPos;
|
|
|
|
|
case "Tilt Right": return DS4Controls.GyroXNeg;
|
2014-12-13 21:12:03 +01:00
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2014-03-28 02:50:40 +01:00
|
|
|
|
}
|
|
|
|
|
}
|