From 906946a7ea9f80ac3b28a6153b036f89c250558d Mon Sep 17 00:00:00 2001 From: Travis Nickles Date: Wed, 18 Dec 2019 15:33:23 -0600 Subject: [PATCH] Import DS4WindowsWPF code --- .gitignore | 253 +- DS4Windows.sln | 31 - DS4Windows/App.xaml | 20 + DS4Windows/App.xaml.cs | 446 + DS4Windows/ArgumentParser.cs | 97 + DS4Windows/AutoProfileChecker.cs | 198 + DS4Windows/AutoProfileHolder.cs | 205 + DS4Windows/DS4Control/ControlService.cs | 184 +- .../DS4Control/ControllerSlotManager.cs | 44 + DS4Windows/DS4Control/MacroParser.cs | 249 + DS4Windows/DS4Control/Mapping.cs | 4 +- DS4Windows/DS4Control/Mouse.cs | 2 +- DS4Windows/DS4Control/Program.cs | 13 + DS4Windows/DS4Control/ScpUtil.cs | 410 +- DS4Windows/DS4Forms/About.xaml | 75 + DS4Windows/DS4Forms/About.xaml.cs | 64 + DS4Windows/DS4Forms/AdvancedColorDialog.cs | 172 - DS4Windows/DS4Forms/AutoProfiles.xaml | 160 + DS4Windows/DS4Forms/AutoProfiles.xaml.cs | 279 + DS4Windows/DS4Forms/BindingWindow.xaml | 559 + DS4Windows/DS4Forms/BindingWindow.xaml.cs | 891 ++ DS4Windows/DS4Forms/ColorPickerWindow.xaml | 13 + DS4Windows/DS4Forms/ColorPickerWindow.xaml.cs | 35 + .../DS4Forms/ControllerReadingsControl.xaml | 146 + .../ControllerReadingsControl.xaml.cs | 284 + DS4Windows/DS4Forms/DS4Form.Designer.cs | 1587 --- DS4Windows/DS4Forms/DS4Form.ar.resx | 641 - DS4Windows/DS4Forms/DS4Form.cs | 3018 ----- DS4Windows/DS4Forms/DS4Form.cs.resx | 646 - DS4Windows/DS4Forms/DS4Form.de-DE.resx | 652 - DS4Windows/DS4Forms/DS4Form.el.resx | 598 - DS4Windows/DS4Forms/DS4Form.es.resx | 649 - DS4Windows/DS4Forms/DS4Form.fi.resx | 688 - DS4Windows/DS4Forms/DS4Form.fr-FR.resx | 682 - DS4Windows/DS4Forms/DS4Form.he.resx | 652 - DS4Windows/DS4Forms/DS4Form.hu.resx | 631 - DS4Windows/DS4Forms/DS4Form.id.resx | 613 - DS4Windows/DS4Forms/DS4Form.it-IT.resx | 631 - DS4Windows/DS4Forms/DS4Form.ja.resx | 491 - DS4Windows/DS4Forms/DS4Form.ko.resx | 357 - DS4Windows/DS4Forms/DS4Form.nb.resx | 412 - DS4Windows/DS4Forms/DS4Form.nl.resx | 628 - DS4Windows/DS4Forms/DS4Form.pl.resx | 674 - DS4Windows/DS4Forms/DS4Form.pt-BR.resx | 659 - DS4Windows/DS4Forms/DS4Form.resx | 3732 ------ DS4Windows/DS4Forms/DS4Form.ro-RO.resx | 6794 ---------- DS4Windows/DS4Forms/DS4Form.ru-RU.resx | 6908 ---------- DS4Windows/DS4Forms/DS4Form.sl.resx | 634 - DS4Windows/DS4Forms/DS4Form.sv.resx | 445 - DS4Windows/DS4Forms/DS4Form.tr.resx | 6809 ---------- DS4Windows/DS4Forms/DS4Form.uk.resx | 655 - DS4Windows/DS4Forms/DS4Form.vi.resx | 6800 ---------- DS4Windows/DS4Forms/DS4Form.zh-Hans.resx | 6809 ---------- DS4Windows/DS4Forms/DS4Form.zh-Hant.resx | 6854 ---------- DS4Windows/DS4Forms/DS4Keyboard.Designer.cs | 1802 --- DS4Windows/DS4Forms/DS4Keyboard.cs | 20 - DS4Windows/DS4Forms/DS4Keyboard.resx | 120 - DS4Windows/DS4Forms/DS4W.ico | Bin 1983 -> 0 bytes DS4Windows/DS4Forms/DupBox.Designer.cs | 87 - DS4Windows/DS4Forms/DupBox.ar.resx | 129 - DS4Windows/DS4Forms/DupBox.cs | 62 - DS4Windows/DS4Forms/DupBox.cs.resx | 129 - DS4Windows/DS4Forms/DupBox.de-DE.resx | 129 - DS4Windows/DS4Forms/DupBox.el.resx | 129 - DS4Windows/DS4Forms/DupBox.es.resx | 129 - DS4Windows/DS4Forms/DupBox.fi.resx | 132 - DS4Windows/DS4Forms/DupBox.fr-FR.resx | 133 - DS4Windows/DS4Forms/DupBox.he.resx | 167 - DS4Windows/DS4Forms/DupBox.hu.resx | 129 - DS4Windows/DS4Forms/DupBox.id.resx | 129 - DS4Windows/DS4Forms/DupBox.it-IT.resx | 129 - DS4Windows/DS4Forms/DupBox.ja.resx | 129 - DS4Windows/DS4Forms/DupBox.ko.resx | 129 - DS4Windows/DS4Forms/DupBox.nb.resx | 121 - DS4Windows/DS4Forms/DupBox.nl.resx | 129 - DS4Windows/DS4Forms/DupBox.pl.resx | 129 - DS4Windows/DS4Forms/DupBox.pt-BR.resx | 129 - DS4Windows/DS4Forms/DupBox.resx | 228 - DS4Windows/DS4Forms/DupBox.ro-RO.resx | 129 - DS4Windows/DS4Forms/DupBox.ru-RU.resx | 129 - DS4Windows/DS4Forms/DupBox.sl.resx | 129 - DS4Windows/DS4Forms/DupBox.sv.resx | 120 - DS4Windows/DS4Forms/DupBox.tr.resx | 167 - DS4Windows/DS4Forms/DupBox.uk.resx | 129 - DS4Windows/DS4Forms/DupBox.vi.resx | 129 - DS4Windows/DS4Forms/DupBox.xaml | 16 + DS4Windows/DS4Forms/DupBox.xaml.cs | 70 + DS4Windows/DS4Forms/DupBox.zh-Hans.resx | 129 - DS4Windows/DS4Forms/DupBox.zh-Hant.resx | 129 - DS4Windows/DS4Forms/Hotkeys.Designer.cs | 602 - DS4Windows/DS4Forms/Hotkeys.ar.resx | 157 - DS4Windows/DS4Forms/Hotkeys.cs | 125 - DS4Windows/DS4Forms/Hotkeys.cs.resx | 138 - DS4Windows/DS4Forms/Hotkeys.de-DE.resx | 274 - DS4Windows/DS4Forms/Hotkeys.el.resx | 138 - DS4Windows/DS4Forms/Hotkeys.es.resx | 185 - DS4Windows/DS4Forms/Hotkeys.fi.resx | 173 - DS4Windows/DS4Forms/Hotkeys.fr-FR.resx | 283 - DS4Windows/DS4Forms/Hotkeys.he.resx | 151 - DS4Windows/DS4Forms/Hotkeys.hu.resx | 135 - DS4Windows/DS4Forms/Hotkeys.id.resx | 156 - DS4Windows/DS4Forms/Hotkeys.it-IT.resx | 194 - DS4Windows/DS4Forms/Hotkeys.ja.resx | 120 - DS4Windows/DS4Forms/Hotkeys.ko.resx | 138 - DS4Windows/DS4Forms/Hotkeys.nb.resx | 316 - DS4Windows/DS4Forms/Hotkeys.nl.resx | 157 - DS4Windows/DS4Forms/Hotkeys.pl.resx | 157 - DS4Windows/DS4Forms/Hotkeys.pt-BR.resx | 167 - DS4Windows/DS4Forms/Hotkeys.resx | 2737 ---- DS4Windows/DS4Forms/Hotkeys.ro-RO.resx | 158 - DS4Windows/DS4Forms/Hotkeys.ru-RU.resx | 221 - DS4Windows/DS4Forms/Hotkeys.sl.resx | 138 - DS4Windows/DS4Forms/Hotkeys.sv.resx | 120 - DS4Windows/DS4Forms/Hotkeys.tr.resx | 157 - DS4Windows/DS4Forms/Hotkeys.uk.resx | 157 - DS4Windows/DS4Forms/Hotkeys.vi.resx | 234 - DS4Windows/DS4Forms/Hotkeys.zh-Hans.resx | 157 - DS4Windows/DS4Forms/Hotkeys.zh-Hant.resx | 170 - DS4Windows/DS4Forms/KBM360.Designer.cs | 2281 ---- DS4Windows/DS4Forms/KBM360.ar.resx | 187 - DS4Windows/DS4Forms/KBM360.cs | 1075 -- DS4Windows/DS4Forms/KBM360.cs.resx | 229 - DS4Windows/DS4Forms/KBM360.de-DE.resx | 235 - DS4Windows/DS4Forms/KBM360.el.resx | 223 - DS4Windows/DS4Forms/KBM360.en.resx | 1241 -- DS4Windows/DS4Forms/KBM360.es.resx | 220 - DS4Windows/DS4Forms/KBM360.fi.resx | 220 - DS4Windows/DS4Forms/KBM360.fr-FR.resx | 235 - DS4Windows/DS4Forms/KBM360.he.resx | 205 - DS4Windows/DS4Forms/KBM360.hu.resx | 232 - DS4Windows/DS4Forms/KBM360.id.resx | 223 - DS4Windows/DS4Forms/KBM360.it-IT.resx | 218 - DS4Windows/DS4Forms/KBM360.ja.resx | 127 - DS4Windows/DS4Forms/KBM360.ko.resx | 189 - DS4Windows/DS4Forms/KBM360.nl.resx | 186 - DS4Windows/DS4Forms/KBM360.pl.resx | 220 - DS4Windows/DS4Forms/KBM360.pt-BR.resx | 221 - DS4Windows/DS4Forms/KBM360.resx | 5725 -------- DS4Windows/DS4Forms/KBM360.ro-RO.resx | 220 - DS4Windows/DS4Forms/KBM360.ru-RU.resx | 237 - DS4Windows/DS4Forms/KBM360.sl.resx | 232 - DS4Windows/DS4Forms/KBM360.sv.resx | 120 - DS4Windows/DS4Forms/KBM360.tr.resx | 229 - DS4Windows/DS4Forms/KBM360.uk.resx | 1314 -- DS4Windows/DS4Forms/KBM360.vi.resx | 215 - DS4Windows/DS4Forms/KBM360.zh-Hans.resx | 183 - DS4Windows/DS4Forms/KBM360.zh-Hant.resx | 220 - .../DS4Forms/LanguagePackComboBox.Designer.cs | 70 - DS4Windows/DS4Forms/LanguagePackComboBox.cs | 147 - DS4Windows/DS4Forms/LanguagePackComboBox.resx | 195 - DS4Windows/DS4Forms/LanguagePackControl.xaml | 20 + .../DS4Forms/LanguagePackControl.xaml.cs | 56 + DS4Windows/DS4Forms/MainWindow.xaml | 360 + DS4Windows/DS4Forms/MainWindow.xaml.cs | 1320 ++ DS4Windows/DS4Forms/Options.Designer.cs | 5177 -------- DS4Windows/DS4Forms/Options.ar.resx | 757 -- DS4Windows/DS4Forms/Options.cs | 3955 ------ DS4Windows/DS4Forms/Options.cs.resx | 490 - DS4Windows/DS4Forms/Options.de-DE.resx | 728 -- DS4Windows/DS4Forms/Options.el.resx | 607 - DS4Windows/DS4Forms/Options.es.resx | 610 - DS4Windows/DS4Forms/Options.fi.resx | 787 -- DS4Windows/DS4Forms/Options.fr-FR.resx | 713 - DS4Windows/DS4Forms/Options.he.resx | 494 - DS4Windows/DS4Forms/Options.hu.resx | 120 - DS4Windows/DS4Forms/Options.id.resx | 558 - DS4Windows/DS4Forms/Options.it-IT.resx | 602 - DS4Windows/DS4Forms/Options.ko.resx | 390 - DS4Windows/DS4Forms/Options.nb.resx | 822 -- DS4Windows/DS4Forms/Options.nl.resx | 381 - DS4Windows/DS4Forms/Options.pl.resx | 704 - DS4Windows/DS4Forms/Options.pt-BR.resx | 635 - DS4Windows/DS4Forms/Options.resx | 10836 ---------------- DS4Windows/DS4Forms/Options.ro-RO.resx | 583 - DS4Windows/DS4Forms/Options.ru-RU.resx | 805 -- DS4Windows/DS4Forms/Options.sl.resx | 682 - DS4Windows/DS4Forms/Options.sv.resx | 120 - DS4Windows/DS4Forms/Options.tr.resx | 589 - DS4Windows/DS4Forms/Options.uk.resx | 664 - DS4Windows/DS4Forms/Options.vi.resx | 714 - DS4Windows/DS4Forms/Options.zh-Hans.resx | 586 - DS4Windows/DS4Forms/Options.zh-Hant.resx | 695 - DS4Windows/DS4Forms/ProfileEditor.xaml | 996 ++ DS4Windows/DS4Forms/ProfileEditor.xaml.cs | 1246 ++ DS4Windows/DS4Forms/RecordBox.Designer.cs | 330 - DS4Windows/DS4Forms/RecordBox.ar.resx | 174 - DS4Windows/DS4Forms/RecordBox.cs | 1388 -- DS4Windows/DS4Forms/RecordBox.cs.resx | 241 - DS4Windows/DS4Forms/RecordBox.de-DE.resx | 256 - DS4Windows/DS4Forms/RecordBox.el.resx | 214 - DS4Windows/DS4Forms/RecordBox.es.resx | 208 - DS4Windows/DS4Forms/RecordBox.fi.resx | 250 - DS4Windows/DS4Forms/RecordBox.fr-FR.resx | 250 - DS4Windows/DS4Forms/RecordBox.he.resx | 247 - DS4Windows/DS4Forms/RecordBox.hu.resx | 171 - DS4Windows/DS4Forms/RecordBox.id.resx | 171 - DS4Windows/DS4Forms/RecordBox.it-IT.resx | 250 - DS4Windows/DS4Forms/RecordBox.ja.resx | 304 - DS4Windows/DS4Forms/RecordBox.ko.resx | 174 - DS4Windows/DS4Forms/RecordBox.nl.resx | 165 - DS4Windows/DS4Forms/RecordBox.pl.resx | 179 - DS4Windows/DS4Forms/RecordBox.pt-BR.resx | 234 - DS4Windows/DS4Forms/RecordBox.resx | 795 -- DS4Windows/DS4Forms/RecordBox.ro-RO.resx | 223 - DS4Windows/DS4Forms/RecordBox.ru-RU.resx | 253 - DS4Windows/DS4Forms/RecordBox.sl.resx | 241 - DS4Windows/DS4Forms/RecordBox.sv.resx | 120 - DS4Windows/DS4Forms/RecordBox.tr.resx | 168 - DS4Windows/DS4Forms/RecordBox.uk.resx | 247 - DS4Windows/DS4Forms/RecordBox.vi.resx | 174 - DS4Windows/DS4Forms/RecordBox.xaml | 93 + DS4Windows/DS4Forms/RecordBox.xaml.cs | 527 + DS4Windows/DS4Forms/RecordBox.zh-Hans.resx | 168 - DS4Windows/DS4Forms/RecordBox.zh-Hant.resx | 171 - DS4Windows/DS4Forms/RecordBoxWindow.xaml | 12 + DS4Windows/DS4Forms/RecordBoxWindow.xaml.cs | 46 + DS4Windows/DS4Forms/SaveWhere.Designer.cs | 117 - DS4Windows/DS4Forms/SaveWhere.ar.resx | 142 - DS4Windows/DS4Forms/SaveWhere.cs | 102 - DS4Windows/DS4Forms/SaveWhere.cs.resx | 129 - DS4Windows/DS4Forms/SaveWhere.de-DE.resx | 155 - DS4Windows/DS4Forms/SaveWhere.el.resx | 135 - DS4Windows/DS4Forms/SaveWhere.es.resx | 135 - DS4Windows/DS4Forms/SaveWhere.fi.resx | 141 - DS4Windows/DS4Forms/SaveWhere.fr-FR.resx | 155 - DS4Windows/DS4Forms/SaveWhere.he.resx | 138 - DS4Windows/DS4Forms/SaveWhere.hu.resx | 120 - DS4Windows/DS4Forms/SaveWhere.id.resx | 120 - DS4Windows/DS4Forms/SaveWhere.it-IT.resx | 152 - DS4Windows/DS4Forms/SaveWhere.ja.resx | 120 - DS4Windows/DS4Forms/SaveWhere.ko.resx | 141 - DS4Windows/DS4Forms/SaveWhere.nb.resx | 128 - DS4Windows/DS4Forms/SaveWhere.nl.resx | 123 - DS4Windows/DS4Forms/SaveWhere.pl.resx | 145 - DS4Windows/DS4Forms/SaveWhere.pt-BR.resx | 154 - DS4Windows/DS4Forms/SaveWhere.resx | 343 - DS4Windows/DS4Forms/SaveWhere.ro-RO.resx | 145 - DS4Windows/DS4Forms/SaveWhere.ru-RU.resx | 152 - DS4Windows/DS4Forms/SaveWhere.sl.resx | 141 - DS4Windows/DS4Forms/SaveWhere.sv.resx | 120 - DS4Windows/DS4Forms/SaveWhere.tr.resx | 141 - DS4Windows/DS4Forms/SaveWhere.uk.resx | 141 - DS4Windows/DS4Forms/SaveWhere.vi.resx | 141 - DS4Windows/DS4Forms/SaveWhere.xaml | 32 + DS4Windows/DS4Forms/SaveWhere.xaml.cs | 85 + DS4Windows/DS4Forms/SaveWhere.zh-Hans.resx | 194 - DS4Windows/DS4Forms/SaveWhere.zh-Hant.resx | 141 - DS4Windows/DS4Forms/SpecActions.Designer.cs | 750 -- DS4Windows/DS4Forms/SpecActions.ar.resx | 207 - DS4Windows/DS4Forms/SpecActions.cs | 571 - DS4Windows/DS4Forms/SpecActions.cs.resx | 156 - DS4Windows/DS4Forms/SpecActions.de-DE.resx | 1567 --- DS4Windows/DS4Forms/SpecActions.el.resx | 174 - DS4Windows/DS4Forms/SpecActions.es.resx | 198 - DS4Windows/DS4Forms/SpecActions.fi.resx | 222 - DS4Windows/DS4Forms/SpecActions.fr-FR.resx | 1395 -- DS4Windows/DS4Forms/SpecActions.he.resx | 183 - DS4Windows/DS4Forms/SpecActions.hu.resx | 120 - DS4Windows/DS4Forms/SpecActions.id.resx | 120 - DS4Windows/DS4Forms/SpecActions.it-IT.resx | 1552 --- DS4Windows/DS4Forms/SpecActions.ja.resx | 129 - DS4Windows/DS4Forms/SpecActions.ko.resx | 207 - DS4Windows/DS4Forms/SpecActions.nb.resx | 196 - DS4Windows/DS4Forms/SpecActions.nl.resx | 120 - DS4Windows/DS4Forms/SpecActions.pl.resx | 186 - DS4Windows/DS4Forms/SpecActions.pt-BR.resx | 1395 -- DS4Windows/DS4Forms/SpecActions.resx | 3093 ----- DS4Windows/DS4Forms/SpecActions.ro-RO.resx | 1552 --- DS4Windows/DS4Forms/SpecActions.ru-RU.resx | 1573 --- DS4Windows/DS4Forms/SpecActions.sl.resx | 207 - DS4Windows/DS4Forms/SpecActions.sv.resx | 120 - DS4Windows/DS4Forms/SpecActions.tr.resx | 201 - DS4Windows/DS4Forms/SpecActions.uk.resx | 207 - DS4Windows/DS4Forms/SpecActions.vi.resx | 171 - DS4Windows/DS4Forms/SpecActions.zh-Hans.resx | 198 - DS4Windows/DS4Forms/SpecActions.zh-Hant.resx | 207 - DS4Windows/DS4Forms/SpecialActionEditor.xaml | 450 + .../DS4Forms/SpecialActionEditor.xaml.cs | 469 + DS4Windows/DS4Forms/UtilMethods.cs | 45 + .../ViewModels/AutoProfilesViewModel.cs | 517 + .../ViewModels/BindingWindowViewModel.cs | 649 + .../ViewModels/ControllerListViewModel.cs | 409 + .../ViewModels/LanguagePackViewModel.cs | 126 + .../DS4Forms/ViewModels/LogViewModel.cs | 65 + .../ViewModels/MappingListViewModel.cs | 255 + .../ViewModels/ProfileSettingsViewModel.cs | 1752 +++ .../DS4Forms/ViewModels/RecordBoxViewModel.cs | 434 + .../DS4Forms/ViewModels/SettingsViewModel.cs | 326 + .../ViewModels/SpecialActEditorViewModel.cs | 173 + .../SpecialActions/CheckBatteryViewModel.cs | 143 + .../SpecialActions/DisconnectBTViewModel.cs | 52 + .../SpecialActions/LaunchProgramViewModel.cs | 130 + .../SpecialActions/LoadProfileViewModel.cs | 98 + .../SpecialActions/MacroViewModel.cs | 122 + .../SpecialActions/MultiActButtonViewModel.cs | 178 + .../SpecialActions/PressKeyViewModel.cs | 155 + .../SASteeringWheelViewModel.cs | 52 + .../ViewModels/SpecialActionsListViewModel.cs | 186 + .../DS4Forms/ViewModels/TrayIconViewModel.cs | 347 + .../ViewModels/Util/NotifyDataErrorBase.cs | 31 + DS4Windows/DS4Forms/WelcomeDialog.Designer.cs | 140 - DS4Windows/DS4Forms/WelcomeDialog.ar.resx | 153 - DS4Windows/DS4Forms/WelcomeDialog.cs | 108 - DS4Windows/DS4Forms/WelcomeDialog.cs.resx | 258 - DS4Windows/DS4Forms/WelcomeDialog.de-DE.resx | 203 - DS4Windows/DS4Forms/WelcomeDialog.el.resx | 242 - DS4Windows/DS4Forms/WelcomeDialog.es.resx | 154 - DS4Windows/DS4Forms/WelcomeDialog.fi.resx | 251 - DS4Windows/DS4Forms/WelcomeDialog.fr-FR.resx | 207 - DS4Windows/DS4Forms/WelcomeDialog.he.resx | 259 - DS4Windows/DS4Forms/WelcomeDialog.hu.resx | 224 - DS4Windows/DS4Forms/WelcomeDialog.id.resx | 221 - DS4Windows/DS4Forms/WelcomeDialog.it-IT.resx | 204 - DS4Windows/DS4Forms/WelcomeDialog.ja.resx | 224 - DS4Windows/DS4Forms/WelcomeDialog.ko.resx | 159 - DS4Windows/DS4Forms/WelcomeDialog.nb.resx | 140 - DS4Windows/DS4Forms/WelcomeDialog.nl.resx | 120 - DS4Windows/DS4Forms/WelcomeDialog.pl.resx | 169 - DS4Windows/DS4Forms/WelcomeDialog.pt-BR.resx | 198 - DS4Windows/DS4Forms/WelcomeDialog.resx | 439 - DS4Windows/DS4Forms/WelcomeDialog.ro-RO.resx | 191 - DS4Windows/DS4Forms/WelcomeDialog.ru-RU.resx | 263 - DS4Windows/DS4Forms/WelcomeDialog.sl.resx | 254 - DS4Windows/DS4Forms/WelcomeDialog.sv.resx | 120 - DS4Windows/DS4Forms/WelcomeDialog.tr.resx | 252 - DS4Windows/DS4Forms/WelcomeDialog.uk.resx | 228 - DS4Windows/DS4Forms/WelcomeDialog.vi.resx | 120 - DS4Windows/DS4Forms/WelcomeDialog.xaml | 49 + DS4Windows/DS4Forms/WelcomeDialog.xaml.cs | 123 + .../DS4Forms/WelcomeDialog.zh-Hans.resx | 157 - .../DS4Forms/WelcomeDialog.zh-Hant.resx | 276 - DS4Windows/DS4Forms/WinProgs.Designer.cs | 333 - DS4Windows/DS4Forms/WinProgs.ar.resx | 168 - DS4Windows/DS4Forms/WinProgs.cs | 801 -- DS4Windows/DS4Forms/WinProgs.cs.resx | 165 - DS4Windows/DS4Forms/WinProgs.de-DE.resx | 287 - DS4Windows/DS4Forms/WinProgs.el.resx | 153 - DS4Windows/DS4Forms/WinProgs.es.resx | 199 - DS4Windows/DS4Forms/WinProgs.fi.resx | 180 - DS4Windows/DS4Forms/WinProgs.fr-FR.resx | 332 - DS4Windows/DS4Forms/WinProgs.he.resx | 168 - DS4Windows/DS4Forms/WinProgs.hu.resx | 120 - DS4Windows/DS4Forms/WinProgs.id.resx | 120 - DS4Windows/DS4Forms/WinProgs.it-IT.resx | 184 - DS4Windows/DS4Forms/WinProgs.ja.resx | 162 - DS4Windows/DS4Forms/WinProgs.ko.resx | 168 - DS4Windows/DS4Forms/WinProgs.nb.resx | 182 - DS4Windows/DS4Forms/WinProgs.nl.resx | 120 - DS4Windows/DS4Forms/WinProgs.pl.resx | 171 - DS4Windows/DS4Forms/WinProgs.pt-BR.resx | 199 - DS4Windows/DS4Forms/WinProgs.resx | 783 -- DS4Windows/DS4Forms/WinProgs.ro-RO.resx | 196 - DS4Windows/DS4Forms/WinProgs.ru-RU.resx | 200 - DS4Windows/DS4Forms/WinProgs.sl.resx | 168 - DS4Windows/DS4Forms/WinProgs.sv.resx | 120 - DS4Windows/DS4Forms/WinProgs.tr.resx | 329 - DS4Windows/DS4Forms/WinProgs.uk.resx | 168 - DS4Windows/DS4Forms/WinProgs.vi.resx | 120 - DS4Windows/DS4Forms/WinProgs.zh-Hans.resx | 165 - DS4Windows/DS4Forms/WinProgs.zh-Hant.resx | 168 - DS4Windows/DS4Library/DS4Device.cs | 26 +- DS4Windows/DS4W.ico | Bin 0 -> 324976 bytes DS4Windows/DS4WinWPF.csproj | 465 + DS4Windows/DS4Windows.csproj | 1265 -- DS4Windows/LogItem.cs | 26 + DS4Windows/LogWriter.cs | 37 + DS4Windows/LoggerHolder.cs | 44 + DS4Windows/NLog.config | 17 + DS4Windows/ProfileEntity.cs | 57 + DS4Windows/ProfileList.cs | 74 + DS4Windows/Program.cs | 306 - DS4Windows/Properties/AssemblyInfo.cs | 46 +- DS4Windows/Properties/Resources.Designer.cs | 14 +- DS4Windows/Properties/Resources.ar.resx | 543 - DS4Windows/Properties/Resources.cs.resx | 192 - DS4Windows/Properties/Resources.de-DE.resx | 564 - DS4Windows/Properties/Resources.el.resx | 222 - DS4Windows/Properties/Resources.es.resx | 549 - DS4Windows/Properties/Resources.fi.resx | 636 - DS4Windows/Properties/Resources.fr-FR.resx | 555 - DS4Windows/Properties/Resources.he.resx | 495 - DS4Windows/Properties/Resources.hu.resx | 120 - DS4Windows/Properties/Resources.id.resx | 135 - DS4Windows/Properties/Resources.it-IT.resx | 552 - DS4Windows/Properties/Resources.ja.resx | 120 - DS4Windows/Properties/Resources.ko.resx | 552 - DS4Windows/Properties/Resources.nb.resx | 618 - DS4Windows/Properties/Resources.nl.resx | 120 - DS4Windows/Properties/Resources.pl.resx | 516 - DS4Windows/Properties/Resources.pt-BR.resx | 555 - DS4Windows/Properties/Resources.resx | 10 +- DS4Windows/Properties/Resources.ro-RO.resx | 525 - DS4Windows/Properties/Resources.ru-RU.resx | 558 - DS4Windows/Properties/Resources.sl.resx | 552 - DS4Windows/Properties/Resources.sv.resx | 120 - DS4Windows/Properties/Resources.tr.resx | 534 - DS4Windows/Properties/Resources.uk.resx | 552 - DS4Windows/Properties/Resources.zh-Hant.resx | 555 - DS4Windows/Properties/Resources.zh-hans.resx | 534 - DS4Windows/Properties/Settings.Designer.cs | 26 + DS4Windows/Properties/Settings.settings | 7 + ...fig_ptionss.png => DS4-Config_options.png} | Bin DS4Windows/Resources/clock.png | Bin 0 -> 16309 bytes DS4Windows/Resources/keydown.png | Bin 0 -> 8239 bytes DS4Windows/Resources/keyup.png | Bin 0 -> 7265 bytes DS4Windows/Settings.cs | 28 - DS4Windows/StartupMethods.cs | 170 + DS4Windows/StatusLogMsg.cs | 44 + DS4Windows/Translations/Strings.Designer.cs | 632 + .../Strings.ja.resx} | 250 +- .../Strings.resx} | 240 +- DS4Windows/app.config | 13 +- DS4Windows/app.manifest | 18 +- DS4Windows/extras/task.bat | 4 + DS4Windows/packages.config | 7 + DS4WindowsWPF.sln | 37 + ds4windows_screen.png | Bin 13625 -> 0 bytes ds4winwpf_screen.png | Bin 0 -> 13131 bytes ds4winwpf_screen_20190926.png | Bin 0 -> 19525 bytes 419 files changed, 18744 insertions(+), 181640 deletions(-) delete mode 100644 DS4Windows.sln create mode 100644 DS4Windows/App.xaml create mode 100644 DS4Windows/App.xaml.cs create mode 100644 DS4Windows/ArgumentParser.cs create mode 100644 DS4Windows/AutoProfileChecker.cs create mode 100644 DS4Windows/AutoProfileHolder.cs create mode 100644 DS4Windows/DS4Control/ControllerSlotManager.cs create mode 100644 DS4Windows/DS4Control/MacroParser.cs create mode 100644 DS4Windows/DS4Control/Program.cs create mode 100644 DS4Windows/DS4Forms/About.xaml create mode 100644 DS4Windows/DS4Forms/About.xaml.cs delete mode 100644 DS4Windows/DS4Forms/AdvancedColorDialog.cs create mode 100644 DS4Windows/DS4Forms/AutoProfiles.xaml create mode 100644 DS4Windows/DS4Forms/AutoProfiles.xaml.cs create mode 100644 DS4Windows/DS4Forms/BindingWindow.xaml create mode 100644 DS4Windows/DS4Forms/BindingWindow.xaml.cs create mode 100644 DS4Windows/DS4Forms/ColorPickerWindow.xaml create mode 100644 DS4Windows/DS4Forms/ColorPickerWindow.xaml.cs create mode 100644 DS4Windows/DS4Forms/ControllerReadingsControl.xaml create mode 100644 DS4Windows/DS4Forms/ControllerReadingsControl.xaml.cs delete mode 100644 DS4Windows/DS4Forms/DS4Form.Designer.cs delete mode 100644 DS4Windows/DS4Forms/DS4Form.ar.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.cs delete mode 100644 DS4Windows/DS4Forms/DS4Form.cs.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.el.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.es.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.fi.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.he.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.hu.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.id.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.ja.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.ko.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.nb.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.nl.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.pl.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.sl.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.sv.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.tr.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.uk.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.vi.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/DS4Form.zh-Hant.resx delete mode 100644 DS4Windows/DS4Forms/DS4Keyboard.Designer.cs delete mode 100644 DS4Windows/DS4Forms/DS4Keyboard.cs delete mode 100644 DS4Windows/DS4Forms/DS4Keyboard.resx delete mode 100644 DS4Windows/DS4Forms/DS4W.ico delete mode 100644 DS4Windows/DS4Forms/DupBox.Designer.cs delete mode 100644 DS4Windows/DS4Forms/DupBox.ar.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.cs delete mode 100644 DS4Windows/DS4Forms/DupBox.cs.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.el.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.es.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.fi.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.he.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.hu.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.id.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.ja.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.ko.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.nb.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.nl.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.pl.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.sl.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.sv.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.tr.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.uk.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.vi.resx create mode 100644 DS4Windows/DS4Forms/DupBox.xaml create mode 100644 DS4Windows/DS4Forms/DupBox.xaml.cs delete mode 100644 DS4Windows/DS4Forms/DupBox.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/DupBox.zh-Hant.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.Designer.cs delete mode 100644 DS4Windows/DS4Forms/Hotkeys.ar.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.cs delete mode 100644 DS4Windows/DS4Forms/Hotkeys.cs.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.el.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.es.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.fi.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.he.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.hu.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.id.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.ja.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.ko.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.nb.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.nl.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.pl.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.sl.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.sv.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.tr.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.uk.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.vi.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/Hotkeys.zh-Hant.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.Designer.cs delete mode 100644 DS4Windows/DS4Forms/KBM360.ar.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.cs delete mode 100644 DS4Windows/DS4Forms/KBM360.cs.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.el.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.en.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.es.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.fi.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.he.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.hu.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.id.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.ja.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.ko.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.nl.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.pl.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.sl.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.sv.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.tr.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.uk.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.vi.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/KBM360.zh-Hant.resx delete mode 100644 DS4Windows/DS4Forms/LanguagePackComboBox.Designer.cs delete mode 100644 DS4Windows/DS4Forms/LanguagePackComboBox.cs delete mode 100644 DS4Windows/DS4Forms/LanguagePackComboBox.resx create mode 100644 DS4Windows/DS4Forms/LanguagePackControl.xaml create mode 100644 DS4Windows/DS4Forms/LanguagePackControl.xaml.cs create mode 100644 DS4Windows/DS4Forms/MainWindow.xaml create mode 100644 DS4Windows/DS4Forms/MainWindow.xaml.cs delete mode 100644 DS4Windows/DS4Forms/Options.Designer.cs delete mode 100644 DS4Windows/DS4Forms/Options.ar.resx delete mode 100644 DS4Windows/DS4Forms/Options.cs delete mode 100644 DS4Windows/DS4Forms/Options.cs.resx delete mode 100644 DS4Windows/DS4Forms/Options.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/Options.el.resx delete mode 100644 DS4Windows/DS4Forms/Options.es.resx delete mode 100644 DS4Windows/DS4Forms/Options.fi.resx delete mode 100644 DS4Windows/DS4Forms/Options.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/Options.he.resx delete mode 100644 DS4Windows/DS4Forms/Options.hu.resx delete mode 100644 DS4Windows/DS4Forms/Options.id.resx delete mode 100644 DS4Windows/DS4Forms/Options.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/Options.ko.resx delete mode 100644 DS4Windows/DS4Forms/Options.nb.resx delete mode 100644 DS4Windows/DS4Forms/Options.nl.resx delete mode 100644 DS4Windows/DS4Forms/Options.pl.resx delete mode 100644 DS4Windows/DS4Forms/Options.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/Options.resx delete mode 100644 DS4Windows/DS4Forms/Options.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/Options.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/Options.sl.resx delete mode 100644 DS4Windows/DS4Forms/Options.sv.resx delete mode 100644 DS4Windows/DS4Forms/Options.tr.resx delete mode 100644 DS4Windows/DS4Forms/Options.uk.resx delete mode 100644 DS4Windows/DS4Forms/Options.vi.resx delete mode 100644 DS4Windows/DS4Forms/Options.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/Options.zh-Hant.resx create mode 100644 DS4Windows/DS4Forms/ProfileEditor.xaml create mode 100644 DS4Windows/DS4Forms/ProfileEditor.xaml.cs delete mode 100644 DS4Windows/DS4Forms/RecordBox.Designer.cs delete mode 100644 DS4Windows/DS4Forms/RecordBox.ar.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.cs delete mode 100644 DS4Windows/DS4Forms/RecordBox.cs.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.el.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.es.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.fi.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.he.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.hu.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.id.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.ja.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.ko.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.nl.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.pl.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.sl.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.sv.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.tr.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.uk.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.vi.resx create mode 100644 DS4Windows/DS4Forms/RecordBox.xaml create mode 100644 DS4Windows/DS4Forms/RecordBox.xaml.cs delete mode 100644 DS4Windows/DS4Forms/RecordBox.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/RecordBox.zh-Hant.resx create mode 100644 DS4Windows/DS4Forms/RecordBoxWindow.xaml create mode 100644 DS4Windows/DS4Forms/RecordBoxWindow.xaml.cs delete mode 100644 DS4Windows/DS4Forms/SaveWhere.Designer.cs delete mode 100644 DS4Windows/DS4Forms/SaveWhere.ar.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.cs delete mode 100644 DS4Windows/DS4Forms/SaveWhere.cs.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.el.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.es.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.fi.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.he.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.hu.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.id.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.ja.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.ko.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.nb.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.nl.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.pl.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.sl.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.sv.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.tr.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.uk.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.vi.resx create mode 100644 DS4Windows/DS4Forms/SaveWhere.xaml create mode 100644 DS4Windows/DS4Forms/SaveWhere.xaml.cs delete mode 100644 DS4Windows/DS4Forms/SaveWhere.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/SaveWhere.zh-Hant.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.Designer.cs delete mode 100644 DS4Windows/DS4Forms/SpecActions.ar.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.cs delete mode 100644 DS4Windows/DS4Forms/SpecActions.cs.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.el.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.es.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.fi.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.he.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.hu.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.id.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.ja.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.ko.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.nb.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.nl.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.pl.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.sl.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.sv.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.tr.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.uk.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.vi.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/SpecActions.zh-Hant.resx create mode 100644 DS4Windows/DS4Forms/SpecialActionEditor.xaml create mode 100644 DS4Windows/DS4Forms/SpecialActionEditor.xaml.cs create mode 100644 DS4Windows/DS4Forms/UtilMethods.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/AutoProfilesViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/BindingWindowViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/ControllerListViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/LanguagePackViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/LogViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/MappingListViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/ProfileSettingsViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/RecordBoxViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SettingsViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActEditorViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/CheckBatteryViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/DisconnectBTViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/LaunchProgramViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/LoadProfileViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/MacroViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/MultiActButtonViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/PressKeyViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActions/SASteeringWheelViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/SpecialActionsListViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/TrayIconViewModel.cs create mode 100644 DS4Windows/DS4Forms/ViewModels/Util/NotifyDataErrorBase.cs delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.Designer.cs delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.ar.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.cs delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.cs.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.el.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.es.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.fi.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.he.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.hu.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.id.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.ja.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.ko.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.nb.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.nl.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.pl.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.sl.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.sv.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.tr.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.uk.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.vi.resx create mode 100644 DS4Windows/DS4Forms/WelcomeDialog.xaml create mode 100644 DS4Windows/DS4Forms/WelcomeDialog.xaml.cs delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/WelcomeDialog.zh-Hant.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.Designer.cs delete mode 100644 DS4Windows/DS4Forms/WinProgs.ar.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.cs delete mode 100644 DS4Windows/DS4Forms/WinProgs.cs.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.de-DE.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.el.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.es.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.fi.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.fr-FR.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.he.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.hu.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.id.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.it-IT.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.ja.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.ko.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.nb.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.nl.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.pl.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.pt-BR.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.ro-RO.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.ru-RU.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.sl.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.sv.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.tr.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.uk.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.vi.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.zh-Hans.resx delete mode 100644 DS4Windows/DS4Forms/WinProgs.zh-Hant.resx create mode 100644 DS4Windows/DS4W.ico create mode 100644 DS4Windows/DS4WinWPF.csproj delete mode 100644 DS4Windows/DS4Windows.csproj create mode 100644 DS4Windows/LogItem.cs create mode 100644 DS4Windows/LogWriter.cs create mode 100644 DS4Windows/LoggerHolder.cs create mode 100644 DS4Windows/NLog.config create mode 100644 DS4Windows/ProfileEntity.cs create mode 100644 DS4Windows/ProfileList.cs delete mode 100644 DS4Windows/Program.cs delete mode 100644 DS4Windows/Properties/Resources.ar.resx delete mode 100644 DS4Windows/Properties/Resources.cs.resx delete mode 100644 DS4Windows/Properties/Resources.de-DE.resx delete mode 100644 DS4Windows/Properties/Resources.el.resx delete mode 100644 DS4Windows/Properties/Resources.es.resx delete mode 100644 DS4Windows/Properties/Resources.fi.resx delete mode 100644 DS4Windows/Properties/Resources.fr-FR.resx delete mode 100644 DS4Windows/Properties/Resources.he.resx delete mode 100644 DS4Windows/Properties/Resources.hu.resx delete mode 100644 DS4Windows/Properties/Resources.id.resx delete mode 100644 DS4Windows/Properties/Resources.it-IT.resx delete mode 100644 DS4Windows/Properties/Resources.ja.resx delete mode 100644 DS4Windows/Properties/Resources.ko.resx delete mode 100644 DS4Windows/Properties/Resources.nb.resx delete mode 100644 DS4Windows/Properties/Resources.nl.resx delete mode 100644 DS4Windows/Properties/Resources.pl.resx delete mode 100644 DS4Windows/Properties/Resources.pt-BR.resx delete mode 100644 DS4Windows/Properties/Resources.ro-RO.resx delete mode 100644 DS4Windows/Properties/Resources.ru-RU.resx delete mode 100644 DS4Windows/Properties/Resources.sl.resx delete mode 100644 DS4Windows/Properties/Resources.sv.resx delete mode 100644 DS4Windows/Properties/Resources.tr.resx delete mode 100644 DS4Windows/Properties/Resources.uk.resx delete mode 100644 DS4Windows/Properties/Resources.zh-Hant.resx delete mode 100644 DS4Windows/Properties/Resources.zh-hans.resx create mode 100644 DS4Windows/Properties/Settings.Designer.cs create mode 100644 DS4Windows/Properties/Settings.settings rename DS4Windows/Resources/{DS4-Config_ptionss.png => DS4-Config_options.png} (100%) create mode 100644 DS4Windows/Resources/clock.png create mode 100644 DS4Windows/Resources/keydown.png create mode 100644 DS4Windows/Resources/keyup.png delete mode 100644 DS4Windows/Settings.cs create mode 100644 DS4Windows/StartupMethods.cs create mode 100644 DS4Windows/StatusLogMsg.cs create mode 100644 DS4Windows/Translations/Strings.Designer.cs rename DS4Windows/{DS4Forms/Options.ja.resx => Translations/Strings.ja.resx} (53%) rename DS4Windows/{Properties/Resources.vi.resx => Translations/Strings.resx} (55%) create mode 100644 DS4Windows/extras/task.bat create mode 100644 DS4WindowsWPF.sln delete mode 100644 ds4windows_screen.png create mode 100644 ds4winwpf_screen.png create mode 100644 ds4winwpf_screen_20190926.png diff --git a/.gitignore b/.gitignore index 685cd97..2bdc199 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,73 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.suo *.user +*.userosscache *.sln.docstates -# Build results +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs +# Build results [Dd]ebug/ +[Dd]ebugPublic/ [Rr]elease/ +[Rr]eleases/ x64/ -build/ +x86/ +bld/ [Bb]in/ [Oo]bj/ +[Ll]og/ -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -!packages/*/build/ +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio *_i.c *_p.c +*_i.h *.ilk *.meta *.obj +*.iobj *.pch *.pdb +*.ipdb *.pgc *.pgd *.rsp @@ -43,21 +82,34 @@ build/ *.vssscc .builds *.pidb -*.log +*.svclog *.scc +# Chutzpah Test files +_Chutzpah* + # Visual C++ cache files ipch/ *.aps *.ncb +*.opendb *.opensdf *.sdf *.cachefile +*.VC.db +*.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ # Guidance Automation Toolkit *.gpState @@ -65,6 +117,10 @@ ipch/ # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode # TeamCity is a build add-in _TeamCity* @@ -72,9 +128,25 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + # NCrunch -*.ncrunch* +_NCrunch_* .*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ # Installshield output folder [Ee]xpress/ @@ -93,67 +165,170 @@ DocProject/Help/html publish/ # Publish Web Output -*.Publish.xml +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -packages/ +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ -# Windows Azure Build Output -csx +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ *.build.csdef -# Windows Store app package directory +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ # Others -sql/ -*.Cache ClientBin/ -[Ss]tyle[Cc]op.* ~$* *~ *.dbmdl -*.[Pp]ublish.xml +*.dbproj.schemaview +*.jfm *.pfx *.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ # RIA/Silverlight projects Generated_Code/ -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak # SQL Server files -App_Data/*.mdf -App_Data/*.ldf +*.mdf +*.ldf +*.ndf +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser -#LightSwitch generated files -GeneratedArtifacts/ -_Pvt_Extensions/ -ModelManifest.xml +# Microsoft Fakes +FakesAssemblies/ -# ========================= -# Windows detritus -# ========================= +# GhostDoc plugin setting file +*.GhostDoc.xml -# Windows image file caches -Thumbs.db -ehthumbs.db +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ -# Folder config file -Desktop.ini +# Visual Studio 6 build log +*.plg -# Recycle Bin used on file shares -$RECYCLE.BIN/ +# Visual Studio 6 workspace options file +*.opt -# Mac desktop service store files -.DS_Store +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +!DS4WinWPF/libs/x64/ +!DS4WinWPF/libs/x86/ -.vs/ -!DS4Windows/libs/x64/ diff --git a/DS4Windows.sln b/DS4Windows.sln deleted file mode 100644 index 225754c..0000000 --- a/DS4Windows.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2046 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DS4Windows", "DS4Windows\DS4Windows.csproj", "{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x64.ActiveCfg = Debug|x64 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x64.Build.0 = Debug|x64 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x86.ActiveCfg = Debug|x86 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x86.Build.0 = Debug|x86 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x64.ActiveCfg = Release|x64 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x64.Build.0 = Release|x64 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x86.ActiveCfg = Release|x86 - {7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {113BEACD-0A7A-44CD-BC67-02082B5134EF} - EndGlobalSection -EndGlobal diff --git a/DS4Windows/App.xaml b/DS4Windows/App.xaml new file mode 100644 index 0000000..f84b267 --- /dev/null +++ b/DS4Windows/App.xaml @@ -0,0 +1,20 @@ + + + + + diff --git a/DS4Windows/App.xaml.cs b/DS4Windows/App.xaml.cs new file mode 100644 index 0000000..1a2f930 --- /dev/null +++ b/DS4Windows/App.xaml.cs @@ -0,0 +1,446 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Linq; +using System.Net.Http; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Interop; +using WPFLocalizeExtension.Engine; +using NLog; + +namespace DS4WinWPF +{ + /// + /// Interaction logic for App.xaml + /// + [System.Security.SuppressUnmanagedCodeSecurity] + public partial class App : Application + { + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); + + [DllImport("user32.dll", EntryPoint = "FindWindow")] + private static extern IntPtr FindWindow(string sClass, string sWindow); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] + private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, ref COPYDATASTRUCT lParam); + + [StructLayout(LayoutKind.Sequential)] + public struct COPYDATASTRUCT + { + public IntPtr dwData; + public int cbData; + public IntPtr lpData; + } + + private Thread controlThread; + public static DS4Windows.ControlService rootHub; + public static HttpClient requestClient; + private bool skipSave; + private bool runShutdown; + private bool exitApp; + private Thread testThread; + private bool exitComThread = false; + private const string SingleAppComEventName = "{a52b5b20-d9ee-4f32-8518-307fa14aa0c6}"; + private EventWaitHandle threadComEvent = null; + private Timer collectTimer; + private static LoggerHolder logHolder; + + private MemoryMappedFile ipcClassNameMMF = null; // MemoryMappedFile for inter-process communication used to hold className of DS4Form window + private MemoryMappedViewAccessor ipcClassNameMMA = null; + + private void Application_Startup(object sender, StartupEventArgs e) + { + runShutdown = true; + skipSave = true; + + ArgumentParser parser = new ArgumentParser(); + parser.Parse(e.Args); + CheckOptions(parser); + + if (exitApp) + { + return; + } + + try + { + Process.GetCurrentProcess().PriorityClass = + ProcessPriorityClass.High; + } + catch { } // Ignore problems raising the priority. + + // Force Normal IO Priority + IntPtr ioPrio = new IntPtr(2); + DS4Windows.Util.NtSetInformationProcess(Process.GetCurrentProcess().Handle, + DS4Windows.Util.PROCESS_INFORMATION_CLASS.ProcessIoPriority, ref ioPrio, 4); + + // Force Normal Page Priority + IntPtr pagePrio = new IntPtr(5); + DS4Windows.Util.NtSetInformationProcess(Process.GetCurrentProcess().Handle, + DS4Windows.Util.PROCESS_INFORMATION_CLASS.ProcessPagePriority, ref pagePrio, 4); + + try + { + // another instance is already running if OpenExisting succeeds. + threadComEvent = EventWaitHandle.OpenExisting(SingleAppComEventName, + System.Security.AccessControl.EventWaitHandleRights.Synchronize | + System.Security.AccessControl.EventWaitHandleRights.Modify); + threadComEvent.Set(); // signal the other instance. + threadComEvent.Close(); + Current.Shutdown(); // Quit temp instance + return; + } + catch { /* don't care about errors */ } + + // Create the Event handle + threadComEvent = new EventWaitHandle(false, EventResetMode.ManualReset, SingleAppComEventName); + CreateTempWorkerThread(); + + CreateControlService(); + + DS4Windows.Global.FindConfigLocation(); + bool firstRun = DS4Windows.Global.firstRun; + if (firstRun) + { + DS4Forms.SaveWhere savewh = new DS4Forms.SaveWhere(false); + savewh.ShowDialog(); + } + + DS4Windows.Global.Load(); + if (!CreateConfDirSkeleton()) + { + MessageBox.Show($"Cannot create config folder structure in {DS4Windows.Global.appdatapath}. Exiting", + "DS4Windows", MessageBoxButton.OK, MessageBoxImage.Error); + Current.Shutdown(1); + } + + logHolder = new LoggerHolder(rootHub); + DispatcherUnhandledException += App_DispatcherUnhandledException; + Logger logger = logHolder.Logger; + string version = DS4Windows.Global.exeversion; + logger.Info($"DS4Windows version {version}"); + //logger.Info("DS4Windows version 2.0"); + logger.Info("Logger created"); + + //DS4Windows.Global.ProfilePath[0] = "mixed"; + //DS4Windows.Global.LoadProfile(0, false, rootHub, false, false); + if (firstRun) + { + logger.Info("No config found. Creating default config"); + //Directory.CreateDirectory(DS4Windows.Global.appdatapath); + AttemptSave(); + + //Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Profiles\"); + //Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Macros\"); + DS4Windows.Global.SaveProfile(0, "Default"); + DS4Windows.Global.ProfilePath[0] = DS4Windows.Global.OlderProfilePath[0] = "Default"; + /*DS4Windows.Global.ProfilePath[1] = DS4Windows.Global.OlderProfilePath[1] = "Default"; + DS4Windows.Global.ProfilePath[2] = DS4Windows.Global.OlderProfilePath[2] = "Default"; + DS4Windows.Global.ProfilePath[3] = DS4Windows.Global.OlderProfilePath[3] = "Default"; + */ + logger.Info("Default config created"); + } + + skipSave = false; + + if (!DS4Windows.Global.LoadActions()) + { + DS4Windows.Global.CreateStdActions(); + } + + SetUICulture(DS4Windows.Global.UseLang); + DS4Forms.MainWindow window = new DS4Forms.MainWindow(parser); + MainWindow = window; + window.Show(); + window.CheckMinStatus(); + HwndSource source = PresentationSource.FromVisual(window) as HwndSource; + CreateIPCClassNameMMF(source.Handle); + } + + private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) + { + //Console.WriteLine("App Crashed"); + //Console.WriteLine(e.Exception.StackTrace); + Logger logger = logHolder.Logger; + logger.Error($"App Crashed with message {e.Exception.Message}"); + logger.Error(e.Exception.ToString()); + LogManager.Flush(); + LogManager.Shutdown(); + } + + private bool CreateConfDirSkeleton() + { + bool result = true; + try + { + Directory.CreateDirectory(DS4Windows.Global.appdatapath); + Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Profiles\"); + Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Logs\"); + //Directory.CreateDirectory(DS4Windows.Global.appdatapath + @"\Macros\"); + } + catch (UnauthorizedAccessException) + { + result = false; + } + + + return result; + } + + private void AttemptSave() + { + if (!DS4Windows.Global.Save()) //if can't write to file + { + if (MessageBox.Show("Cannot write at current location\nCopy Settings to appdata?", "DS4Windows", + MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes) + { + try + { + Directory.CreateDirectory(DS4Windows.Global.appDataPpath); + File.Copy(DS4Windows.Global.exedirpath + "\\Profiles.xml", + DS4Windows.Global.appDataPpath + "\\Profiles.xml"); + File.Copy(DS4Windows.Global.exedirpath + "\\Auto Profiles.xml", + DS4Windows.Global.appDataPpath + "\\Auto Profiles.xml"); + Directory.CreateDirectory(DS4Windows.Global.appDataPpath + "\\Profiles"); + foreach (string s in Directory.GetFiles(DS4Windows.Global.exedirpath + "\\Profiles")) + { + File.Copy(s, DS4Windows.Global.appDataPpath + "\\Profiles\\" + Path.GetFileName(s)); + } + } + catch { } + MessageBox.Show("Copy complete, please relaunch DS4Windows and remove settings from Program Directory", + "DS4Windows"); + } + else + { + MessageBox.Show("DS4Windows cannot edit settings here, This will now close", + "DS4Windows"); + } + + DS4Windows.Global.appdatapath = null; + skipSave = true; + Current.Shutdown(); + return; + } + } + + private void CheckOptions(ArgumentParser parser) + { + if (parser.HasErrors) + { + runShutdown = false; + exitApp = true; + Current.Shutdown(1); + } + else if (parser.Driverinstall) + { + DS4Forms.WelcomeDialog dialog = new DS4Forms.WelcomeDialog(true); + dialog.ShowDialog(); + runShutdown = false; + exitApp = true; + Current.Shutdown(); + } + else if (parser.ReenableDevice) + { + DS4Windows.DS4Devices.reEnableDevice(parser.DeviceInstanceId); + runShutdown = false; + exitApp = true; + Current.Shutdown(); + } + else if (parser.Runtask) + { + StartupMethods.LaunchOldTask(); + runShutdown = false; + exitApp = true; + Current.Shutdown(); + } + else if (parser.Command) + { + IntPtr hWndDS4WindowsForm = IntPtr.Zero; + hWndDS4WindowsForm = FindWindow(ReadIPCClassNameMMF(), "DS4Windows"); + if (hWndDS4WindowsForm != IntPtr.Zero) + { + COPYDATASTRUCT cds; + cds.lpData = IntPtr.Zero; + + try + { + cds.dwData = IntPtr.Zero; + cds.cbData = parser.CommandArgs.Length; + cds.lpData = Marshal.StringToHGlobalAnsi(parser.CommandArgs); + SendMessage(hWndDS4WindowsForm, DS4Forms.MainWindow.WM_COPYDATA, IntPtr.Zero, ref cds); + } + finally + { + if (cds.lpData != IntPtr.Zero) + Marshal.FreeHGlobal(cds.lpData); + } + } + + runShutdown = false; + exitApp = true; + Current.Shutdown(); + } + } + + private void CreateControlService() + { + controlThread = new Thread(() => { + rootHub = new DS4Windows.ControlService(); + DS4Windows.Program.rootHub = rootHub; + requestClient = new HttpClient(); + collectTimer = new Timer(GarbageTask, null, 30000, 30000); + + }); + controlThread.Priority = ThreadPriority.Normal; + controlThread.IsBackground = true; + controlThread.Start(); + while (controlThread.IsAlive) + Thread.SpinWait(500); + } + + private void GarbageTask(object state) + { + GC.Collect(0, GCCollectionMode.Forced, false); + } + + private void CreateTempWorkerThread() + { + testThread = new Thread(SingleAppComThread_DoWork); + testThread.Priority = ThreadPriority.Lowest; + testThread.IsBackground = true; + testThread.Start(); + } + + private void SingleAppComThread_DoWork() + { + while (!exitComThread) + { + // check for a signal. + if (threadComEvent.WaitOne()) + { + threadComEvent.Reset(); + // The user tried to start another instance. We can't allow that, + // so bring the other instance back into view and enable that one. + // That form is created in another thread, so we need some thread sync magic. + if (!exitComThread) + { + Dispatcher.BeginInvoke((Action)(() => + { + MainWindow.Show(); + MainWindow.WindowState = WindowState.Normal; + })); + } + } + } + } + + public void CreateIPCClassNameMMF(IntPtr hWnd) + { + if (ipcClassNameMMA != null) return; // Already holding a handle to MMF file. No need to re-write the data + + try + { + StringBuilder wndClassNameStr = new StringBuilder(128); + if (GetClassName(hWnd, wndClassNameStr, wndClassNameStr.Capacity) != 0 && wndClassNameStr.Length > 0) + { + byte[] buffer = ASCIIEncoding.ASCII.GetBytes(wndClassNameStr.ToString()); + + ipcClassNameMMF = MemoryMappedFile.CreateNew("DS4Windows_IPCClassName.dat", 128); + ipcClassNameMMA = ipcClassNameMMF.CreateViewAccessor(0, buffer.Length); + ipcClassNameMMA.WriteArray(0, buffer, 0, buffer.Length); + // The MMF file is alive as long this process holds the file handle open + } + } + catch (Exception) + { + /* Eat all exceptions because errors here are not fatal for DS4Win */ + } + } + + private string ReadIPCClassNameMMF() + { + MemoryMappedFile mmf = null; + MemoryMappedViewAccessor mma = null; + + try + { + byte[] buffer = new byte[128]; + mmf = MemoryMappedFile.OpenExisting("DS4Windows_IPCClassName.dat"); + mma = mmf.CreateViewAccessor(0, 128); + mma.ReadArray(0, buffer, 0, buffer.Length); + return ASCIIEncoding.ASCII.GetString(buffer); + } + catch (Exception) + { + // Eat all exceptions + } + finally + { + if (mma != null) mma.Dispose(); + if (mmf != null) mmf.Dispose(); + } + + return null; + } + + private void SetUICulture(string culture) + { + try + { + //CultureInfo ci = new CultureInfo("ja"); + CultureInfo ci = CultureInfo.GetCultureInfo(culture); + LocalizeDictionary.Instance.SetCurrentThreadCulture = true; + LocalizeDictionary.Instance.Culture = ci; + // fixes the culture in threads + CultureInfo.DefaultThreadCurrentCulture = ci; + CultureInfo.DefaultThreadCurrentUICulture = ci; + //DS4WinWPF.Properties.Resources.Culture = ci; + Thread.CurrentThread.CurrentCulture = ci; + Thread.CurrentThread.CurrentUICulture = ci; + } + catch (CultureNotFoundException) { /* Skip setting culture that we cannot set */ } + } + + private void Application_Exit(object sender, ExitEventArgs e) + { + if (runShutdown) + { + if (rootHub != null) + { + Task.Run(() => + { + rootHub.Stop(); + }).Wait(); + } + + if (!skipSave) + { + DS4Windows.Global.Save(); + } + + exitComThread = true; + if (threadComEvent != null) + { + threadComEvent.Set(); // signal the other instance. + while (testThread.IsAlive) + Thread.SpinWait(500); + threadComEvent.Close(); + } + + if (ipcClassNameMMA != null) ipcClassNameMMA.Dispose(); + if (ipcClassNameMMF != null) ipcClassNameMMF.Dispose(); + } + } + } +} diff --git a/DS4Windows/ArgumentParser.cs b/DS4Windows/ArgumentParser.cs new file mode 100644 index 0000000..37a7693 --- /dev/null +++ b/DS4Windows/ArgumentParser.cs @@ -0,0 +1,97 @@ + +using System.Collections.Generic; + +namespace DS4WinWPF +{ + public class ArgumentParser + { + private bool mini; + private bool stop; + private bool driverinstall; + private bool reenableDevice; + private string deviceInstanceId; + private bool runtask; + private bool command; + private string commandArgs; + + private Dictionary errors = + new Dictionary(); + + public bool Mini { get => mini; } + public bool Stop { get => stop; } + public bool Driverinstall { get => driverinstall; } + public bool ReenableDevice { get => reenableDevice; } + public bool Runtask { get => runtask; } + public bool Command { get => command; } + public string DeviceInstanceId { get => deviceInstanceId; } + public string CommandArgs { get => commandArgs; } + public Dictionary Errors { get => errors; } + + public bool HasErrors => errors.Count > 0; + + public void Parse(string[] args) + { + errors.Clear(); + //foreach (string arg in args) + for (int i = 0; i < args.Length; i++) + { + string arg = args[i]; + switch(arg) + { + case "driverinstall": + case "-driverinstall": + driverinstall = true; + break; + + case "re-enabledevice": + case "-re-enabledevice": + reenableDevice = true; + if (i + 1 < args.Length) + { + deviceInstanceId = args[++i]; + } + + break; + + case "runtask": + case "-runtask": + runtask = true; + break; + + case "-stop": + stop = true; + break; + + case "-m": + mini = true; + break; + + case "command": + case "-command": + command = true; + if (i + 1 < args.Length) + { + i++; + string temp = args[i]; + if (temp.Length > 0 && temp.Length <= 256) + { + commandArgs = temp; + } + else + { + command = false; + errors["Command"] = "Command length is invalid"; + } + } + else + { + errors["Command"] = "Command string not given"; + } + break; + + default: break; + } + } + } + } +} diff --git a/DS4Windows/AutoProfileChecker.cs b/DS4Windows/AutoProfileChecker.cs new file mode 100644 index 0000000..b03130b --- /dev/null +++ b/DS4Windows/AutoProfileChecker.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; +using System.Threading.Tasks; +using DS4Windows; + +namespace DS4WinWPF +{ + [SuppressUnmanagedCodeSecurity] + public class AutoProfileChecker + { + private AutoProfileHolder profileHolder; + private IntPtr prevForegroundWnd = IntPtr.Zero; + private uint prevForegroundProcessID; + private string prevForegroundProcessName = string.Empty; + private string prevForegroundWndTitleName = string.Empty; + private StringBuilder autoProfileCheckTextBuilder = new StringBuilder(1000); + private int autoProfileDebugLogLevel = 0; + private bool turnOffTemp; + private AutoProfileEntity tempAutoProfile; + private bool running; + + public int AutoProfileDebugLogLevel { get => autoProfileDebugLogLevel; set => autoProfileDebugLogLevel = value; } + public bool Running { get => running; set => running = value; } + + public delegate void ChangeServiceHandler(AutoProfileChecker sender, bool state); + public event ChangeServiceHandler RequestServiceChange; + + public AutoProfileChecker(AutoProfileHolder holder) + { + profileHolder = holder; + } + + public void Process() + { + string topProcessName, topWindowTitle; + bool turnOffDS4WinApp = false; + AutoProfileEntity matchedProfileEntity = null; + + if (GetTopWindowName(out topProcessName, out topWindowTitle)) + { + // Find a profile match based on autoprofile program path and wnd title list. + // The same program may set different profiles for each of the controllers, so we need an array of newProfileName[controllerIdx] values. + for (int i = 0, pathsLen = profileHolder.AutoProfileColl.Count; i < pathsLen; i++) + { + AutoProfileEntity tempEntity = profileHolder.AutoProfileColl[i]; + if (tempEntity.IsMatch(topProcessName, topWindowTitle)) + { + if (autoProfileDebugLogLevel > 0) + DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. Rule#{i + 1} Path={tempEntity.path} Title={tempEntity.title}", false); + + // Matching autoprofile rule found + turnOffDS4WinApp = tempEntity.Turnoff; + matchedProfileEntity = tempEntity; + break; + } + } + + if (matchedProfileEntity != null) + { + // Program match found. Check if the new profile is different than current profile of the controller. Load the new profile only if it is not already loaded. + for (int j = 0; j < 4; j++) + { + string tempname = matchedProfileEntity.ProfileNames[j]; + if (tempname != string.Empty && tempname != "(none)") + { + if ((Global.useTempProfile[j] && tempname != Global.tempprofilename[j]) || + (!Global.useTempProfile[j] && tempname != Global.ProfilePath[j])) + { + if (autoProfileDebugLogLevel > 0) + DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. LoadProfile Controller {j + 1}={tempname}", false); + + Global.LoadTempProfile(j, tempname, true, Program.rootHub); // j is controller index, i is filename + //if (LaunchProgram[j] != string.Empty) Process.Start(LaunchProgram[j]); + } + else + { + if (autoProfileDebugLogLevel > 0) + DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. LoadProfile Controller {j + 1}={tempname} (already loaded)", false); + } + } + } + + if (turnOffDS4WinApp) + { + turnOffTemp = true; + RequestServiceChange?.Invoke(this, false); + } + + tempAutoProfile = matchedProfileEntity; + } + else if (tempAutoProfile != null) + { + tempAutoProfile = null; + for (int j = 0; j < 4; j++) + { + if (Global.useTempProfile[j]) + { + if (autoProfileDebugLogLevel > 0) + DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. RestoreProfile Controller {j + 1}={Global.ProfilePath[j]} (default)", false); + + Global.LoadProfile(j, false, Program.rootHub); + } + } + + if (turnOffTemp) + { + turnOffTemp = false; + RequestServiceChange?.Invoke(this, true); + } + } + } + } + + private bool GetTopWindowName(out string topProcessName, out string topWndTitleName) + { + IntPtr hWnd = GetForegroundWindow(); + if (hWnd == IntPtr.Zero) + { + // Top window unknown or cannot acquire a handle. Return FALSE and return unknown process and wndTitle values + prevForegroundWnd = IntPtr.Zero; + prevForegroundProcessID = 0; + topProcessName = topWndTitleName = String.Empty; + return false; + } + + // + // If this function was called from "auto-profile watcher timer" then check cached "previous hWnd handle". If the current hWnd is the same + // as during the previous check then return cached previous wnd and name values (ie. foreground app and window are assumed to be the same, so no need to re-query names). + // This should optimize the auto-profile timer check process and causes less burden to .NET GC collector because StringBuffer is not re-allocated every second. + // + // Note! hWnd handles may be re-cycled but not during the lifetime of the window. This "cache" optimization still works because when an old window is closed + // then foreground window changes to something else and the cached prevForgroundWnd variable is updated to store the new hWnd handle. + // It doesn't matter even when the previously cached handle is recycled by WinOS to represent some other window (it is no longer used as a cached value anyway). + // + if (hWnd == prevForegroundWnd) + { + // The active window is still the same. Return cached process and wndTitle values and FALSE to indicate caller that no changes since the last call of this method + topProcessName = prevForegroundProcessName; + topWndTitleName = prevForegroundWndTitleName; + return false; + } + + prevForegroundWnd = hWnd; + + IntPtr hProcess = IntPtr.Zero; + uint lpdwProcessId = 0; + GetWindowThreadProcessId(hWnd, out lpdwProcessId); + + if (lpdwProcessId == prevForegroundProcessID) + { + topProcessName = prevForegroundProcessName; + } + else + { + prevForegroundProcessID = lpdwProcessId; + + hProcess = OpenProcess(0x0410, false, lpdwProcessId); + if (hProcess != IntPtr.Zero) GetModuleFileNameEx(hProcess, IntPtr.Zero, autoProfileCheckTextBuilder, autoProfileCheckTextBuilder.Capacity); + else autoProfileCheckTextBuilder.Clear(); + + prevForegroundProcessName = topProcessName = autoProfileCheckTextBuilder.Replace('/', '\\').ToString().ToLower(); + } + + GetWindowText(hWnd, autoProfileCheckTextBuilder, autoProfileCheckTextBuilder.Capacity); + prevForegroundWndTitleName = topWndTitleName = autoProfileCheckTextBuilder.ToString().ToLower(); + + + if (hProcess != IntPtr.Zero) CloseHandle(hProcess); + + if (autoProfileDebugLogLevel > 0) + DS4Windows.AppLogger.LogToGui($"DEBUG: Auto-Profile. PID={lpdwProcessId} Path={topProcessName} | WND={hWnd} Title={topWndTitleName}", false); + + return true; + } + + [DllImport("user32.dll")] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll")] + private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [DllImport("kernel32.dll")] + private static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId); + + [DllImport("kernel32.dll")] + private static extern bool CloseHandle(IntPtr handle); + + [DllImport("psapi.dll")] + private static extern uint GetModuleFileNameEx(IntPtr hWnd, IntPtr hModule, StringBuilder lpFileName, int nSize); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nSize); + } +} diff --git a/DS4Windows/AutoProfileHolder.cs b/DS4Windows/AutoProfileHolder.cs new file mode 100644 index 0000000..9152e2a --- /dev/null +++ b/DS4Windows/AutoProfileHolder.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; +using System.Xml; + +namespace DS4WinWPF +{ + public class AutoProfileHolder + { + private object _colLockobj = new object(); + private ObservableCollection autoProfileColl; + public ObservableCollection AutoProfileColl { get => autoProfileColl; } + //public Dictionary AutoProfileDict { get => autoProfileDict; } + + //private Dictionary autoProfileDict; + + public AutoProfileHolder() + { + autoProfileColl = new ObservableCollection(); + //autoProfileDict = new Dictionary(); + Load(); + + BindingOperations.EnableCollectionSynchronization(autoProfileColl, _colLockobj); + } + + private void Load() + { + try + { + XmlDocument doc = new XmlDocument(); + + if (!File.Exists(DS4Windows.Global.appdatapath + "\\Auto Profiles.xml")) + return; + + doc.Load(DS4Windows.Global.appdatapath + "\\Auto Profiles.xml"); + XmlNodeList programslist = doc.SelectNodes("Programs/Program"); + foreach (XmlNode x in programslist) + { + string path = x.Attributes["path"]?.Value ?? string.Empty; + string title = x.Attributes["title"]?.Value ?? string.Empty; + AutoProfileEntity autoprof = new AutoProfileEntity(path, title); + + XmlNode item; + for (int i = 0; i < 4; i++) + { + item = x.SelectSingleNode($"Controller{i+1}"); + if (item != null) + { + autoprof.ProfileNames[i] = item.InnerText; + } + } + + item = x.SelectSingleNode($"TurnOff"); + if (item != null && bool.TryParse(item.InnerText, out bool turnoff)) + { + autoprof.Turnoff = turnoff; + } + + autoProfileColl.Add(autoprof); + //autoProfileDict.Add(path, autoprof); + } + } + catch (Exception) { } + } + + public bool Save(string m_Profile) + { + XmlDocument doc = new XmlDocument(); + XmlNode Node; + bool saved = true; + try + { + Node = doc.CreateXmlDeclaration("1.0", "utf-8", string.Empty); + doc.AppendChild(Node); + + Node = doc.CreateComment(string.Format(" Auto-Profile Configuration Data. {0} ", DateTime.Now)); + doc.AppendChild(Node); + + Node = doc.CreateWhitespace("\r\n"); + doc.AppendChild(Node); + + Node = doc.CreateNode(XmlNodeType.Element, "Programs", ""); + doc.AppendChild(Node); + foreach (AutoProfileEntity entity in autoProfileColl) + { + XmlElement el = doc.CreateElement("Program"); + el.SetAttribute("path", entity.Path); + if (!string.IsNullOrEmpty(entity.Title)) + { + el.SetAttribute("title", entity.Title); + } + + el.AppendChild(doc.CreateElement("Controller1")).InnerText = entity.ProfileNames[0]; + el.AppendChild(doc.CreateElement("Controller2")).InnerText = entity.ProfileNames[1]; + el.AppendChild(doc.CreateElement("Controller3")).InnerText = entity.ProfileNames[2]; + el.AppendChild(doc.CreateElement("Controller4")).InnerText = entity.ProfileNames[3]; + el.AppendChild(doc.CreateElement("TurnOff")).InnerText = entity.Turnoff.ToString(); + + Node.AppendChild(el); + } + + doc.Save(m_Profile); + } + catch (Exception) { saved = false; } + return saved; + } + + public void Remove(AutoProfileEntity item) + { + //autoProfileDict.Remove(item.Path); + autoProfileColl.Remove(item); + } + } + + public class AutoProfileEntity + { + public string path = string.Empty; + public string title = string.Empty; + private string path_lowercase; + private string title_lowercase; + private bool turnoff; + private string[] profileNames = new string[4] { string.Empty, string.Empty, + string.Empty, string.Empty }; + public const string NONE_STRING = "(none)"; + + public string Path { get => path; set => SetSearchPath(value); } + public string Title { get => title; set => SetSearchTitle(value); } + public bool Turnoff { get => turnoff; set => turnoff = value; } + public string[] ProfileNames { get => profileNames; set => profileNames = value; } + + public AutoProfileEntity(string pathStr, string titleStr) + { + // Initialize autoprofile search keywords(xxx_tolower).To improve performance the search keyword is pre - calculated in xxx_tolower variables, + // so autoprofile timer thread doesn't have to create substrings/replace/tolower string instances every second over and over again. + SetSearchPath(pathStr); + SetSearchTitle(titleStr); + } + + public bool IsMatch(string searchPath, string searchTitle) + { + bool bPathMatched = true; + bool bTitleMwatched = true; + + if (!string.IsNullOrEmpty(path_lowercase)) + { + bPathMatched = (path_lowercase == searchPath + || (path[0] == '^' && searchPath.StartsWith(path_lowercase)) + || (path[path.Length - 1] == '$' && searchPath.EndsWith(path_lowercase)) + || (path[0] == '*' && searchPath.Contains(path_lowercase)) + ); + } + + if (bPathMatched && !string.IsNullOrEmpty(title_lowercase)) + { + bTitleMwatched = (title_lowercase == searchTitle + || (title[0] == '^' && searchTitle.StartsWith(title_lowercase)) + || (title[title.Length - 1] == '$' && searchTitle.EndsWith(title_lowercase)) + || (title[0] == '*' && searchTitle.Contains(title_lowercase)) + ); + } + + // If both path and title defined in autoprofile entry then do AND condition (ie. both path and title should match) + return bPathMatched && bTitleMwatched; + } + + private void SetSearchPath(string pathStr) + { + if (!string.IsNullOrEmpty(pathStr)) + { + path = pathStr; + path_lowercase = path.ToLower().Replace('/', '\\'); + + if (path.Length >= 2) + { + if (path[0] == '^') path_lowercase = path_lowercase.Substring(1); + else if (path[path.Length - 1] == '$') path_lowercase = path_lowercase.Substring(0, path_lowercase.Length - 1); + else if (path[0] == '*') path_lowercase = path_lowercase.Substring(1); + } + } + else path = path_lowercase = string.Empty; + } + + private void SetSearchTitle(string titleStr) + { + if (!string.IsNullOrEmpty(titleStr)) + { + title = titleStr; + title_lowercase = title.ToLower(); + + if (title.Length >= 2) + { + if (title[0] == '^') title_lowercase = title_lowercase.Substring(1); + else if (title[title.Length - 1] == '$') title_lowercase = title_lowercase.Substring(0, title_lowercase.Length - 1); + else if (title[0] == '*') title_lowercase = title_lowercase.Substring(1); + } + } + else title = title_lowercase = string.Empty; + } + } +} diff --git a/DS4Windows/DS4Control/ControlService.cs b/DS4Windows/DS4Control/ControlService.cs index d298483..ac6eedf 100644 --- a/DS4Windows/DS4Control/ControlService.cs +++ b/DS4Windows/DS4Control/ControlService.cs @@ -21,12 +21,13 @@ namespace DS4Windows public const int DS4_CONTROLLER_COUNT = 4; public DS4Device[] DS4Controllers = new DS4Device[DS4_CONTROLLER_COUNT]; public Mouse[] touchPad = new Mouse[DS4_CONTROLLER_COUNT]; - private bool running = false; + public bool running = false; private DS4State[] MappedState = new DS4State[DS4_CONTROLLER_COUNT]; private DS4State[] CurrentState = new DS4State[DS4_CONTROLLER_COUNT]; private DS4State[] PreviousState = new DS4State[DS4_CONTROLLER_COUNT]; private DS4State[] TempState = new DS4State[DS4_CONTROLLER_COUNT]; public DS4StateExposed[] ExposedState = new DS4StateExposed[DS4_CONTROLLER_COUNT]; + public ControllerSlotManager slotManager = new ControllerSlotManager(); public bool recordingMacro = false; public event EventHandler Debug = null; bool[] buttonsdown = new bool[4] { false, false, false, false }; @@ -52,6 +53,14 @@ namespace DS4Windows private UdpServer _udpServer; private OutputSlotManager outputslotMan; + public event EventHandler ServiceStarted; + public event EventHandler PreServiceStop; + public event EventHandler ServiceStopped; + public event EventHandler RunningChanged; + //public event EventHandler HotplugFinished; + public delegate void HotplugControllerHandler(ControlService sender, DS4Device device, int index); + public event HotplugControllerHandler HotplugController; + private class X360Data { public byte[] Report = new byte[28]; @@ -143,7 +152,7 @@ namespace DS4Windows { Crc32Algorithm.InitializeTable(DS4Device.DefaultPolynomial); - //sp.Stream = Properties.Resources.EE; + //sp.Stream = DS4WinWPF.Properties.Resources.EE; // Cause thread affinity to not be tied to main GUI thread tempThread = new Thread(() => { //_udpServer = new UdpServer(GetPadDetailForIdx); @@ -176,10 +185,10 @@ namespace DS4Windows if (Global.IsHidGuardianInstalled()) { ProcessStartInfo startInfo = - new ProcessStartInfo(Global.exepath + "\\HidGuardHelper.exe"); + new ProcessStartInfo(Global.exedirpath + "\\HidGuardHelper.exe"); startInfo.Verb = "runas"; startInfo.Arguments = Process.GetCurrentProcess().Id.ToString(); - startInfo.WorkingDirectory = Global.exepath; + startInfo.WorkingDirectory = Global.exedirpath; try { Process tempProc = Process.Start(startInfo); tempProc.Dispose(); } catch { } @@ -327,8 +336,8 @@ namespace DS4Windows { if (DS4Devices.isExclusiveMode && !device.isExclusive()) { - string message = Properties.Resources.CouldNotOpenDS4.Replace("*Mac address*", device.getMacAddress()) + " " + - Properties.Resources.QuitOtherPrograms; + string message = DS4WinWPF.Properties.Resources.CouldNotOpenDS4.Replace("*Mac address*", device.getMacAddress()) + " " + + DS4WinWPF.Properties.Resources.QuitOtherPrograms; LogDebug(message, true); AppLogger.LogToTray(message, true); } @@ -383,6 +392,8 @@ namespace DS4Windows }; outputslotMan.DeferredPlugin(tempXbox, index, outputDevices); + //tempXbox.Connect(); + //LogDebug("X360 Controller #" + (index + 1) + " connected"); } else if (contType == OutContType.DS4) { @@ -399,6 +410,8 @@ namespace DS4Windows }; outputslotMan.DeferredPlugin(tempDS4, index, outputDevices); + //tempDS4.Connect(); + //LogDebug("DS4 Controller #" + (index + 1) + " connected"); } } @@ -416,28 +429,29 @@ namespace DS4Windows outputDevices[index] = null; activeOutDevType[index] = OutContType.None; outputslotMan.DeferredRemoval(dev, index, outputDevices, immediate); + //dev.Disconnect(); + //LogDebug(tempType + " Controller # " + (index + 1) + " unplugged"); useDInputOnly[index] = true; } } - private SynchronizationContext uiContext = null; - public bool Start(object tempui, bool showlog = true) + public bool Start(bool showlog = true) { startViGEm(); if (vigemTestClient != null) //if (x360Bus.Open() && x360Bus.Start()) { if (showlog) - LogDebug(Properties.Resources.Starting); + LogDebug(DS4WinWPF.Properties.Resources.Starting); LogDebug($"Connection to ViGEmBus {Global.vigembusVersion} established"); DS4Devices.isExclusiveMode = getUseExclusiveMode(); - uiContext = tempui as SynchronizationContext; + //uiContext = tempui as SynchronizationContext; if (showlog) { - LogDebug(Properties.Resources.SearchingController); - LogDebug(DS4Devices.isExclusiveMode ? Properties.Resources.UsingExclusive : Properties.Resources.UsingShared); + LogDebug(DS4WinWPF.Properties.Resources.SearchingController); + LogDebug(DS4Devices.isExclusiveMode ? DS4WinWPF.Properties.Resources.UsingExclusive : DS4WinWPF.Properties.Resources.UsingShared); } if (isUsingUDPServer() && _udpServer == null) @@ -464,13 +478,14 @@ namespace DS4Windows DS4Device device = devEnum.Current; //DS4Device device = devices.ElementAt(i); if (showlog) - LogDebug(Properties.Resources.FoundController + " " + device.getMacAddress() + " (" + device.getConnectionType() + ") (" + + LogDebug(DS4WinWPF.Properties.Resources.FoundController + " " + device.getMacAddress() + " (" + device.getConnectionType() + ") (" + device.DisplayName + ")"); Task task = new Task(() => { Thread.Sleep(5); WarnExclusiveModeFailure(device); }); task.Start(); DS4Controllers[i] = device; + slotManager.AddController(device, i); device.Removal += this.On_DS4Removal; device.Removal += DS4Devices.On_Removal; device.SyncChange += this.On_SyncChange; @@ -497,7 +512,9 @@ namespace DS4Windows if (!getDInputOnly(i) && device.isSynced()) { + //useDInputOnly[i] = false; PluginOutDev(i, device); + } else { @@ -533,13 +550,13 @@ namespace DS4Windows { if (File.Exists(appdatapath + "\\Profiles\\" + ProfilePath[i] + ".xml")) { - string prolog = Properties.Resources.UsingProfile.Replace("*number*", (i + 1).ToString()).Replace("*Profile name*", ProfilePath[i]); + string prolog = DS4WinWPF.Properties.Resources.UsingProfile.Replace("*number*", (i + 1).ToString()).Replace("*Profile name*", ProfilePath[i]); LogDebug(prolog); AppLogger.LogToTray(prolog); } else { - string prolog = Properties.Resources.NotUsingProfile.Replace("*number*", (i + 1).ToString()); + string prolog = DS4WinWPF.Properties.Resources.NotUsingProfile.Replace("*number*", (i + 1).ToString()); LogDebug(prolog); AppLogger.LogToTray(prolog); } @@ -594,6 +611,8 @@ namespace DS4Windows } runHotPlug = true; + ServiceStarted?.Invoke(this, EventArgs.Empty); + RunningChanged?.Invoke(this, EventArgs.Empty); return true; } @@ -603,9 +622,10 @@ namespace DS4Windows { running = false; runHotPlug = false; + PreServiceStop?.Invoke(this, EventArgs.Empty); if (showlog) - LogDebug(Properties.Resources.StoppingX360); + LogDebug(DS4WinWPF.Properties.Resources.StoppingX360); LogDebug("Closing connection to ViGEmBus"); @@ -661,16 +681,17 @@ namespace DS4Windows } if (showlog) - LogDebug(Properties.Resources.StoppingDS4); + LogDebug(DS4WinWPF.Properties.Resources.StoppingDS4); DS4Devices.stopControllers(); + slotManager.ClearControllerList(); if (_udpServer != null) ChangeUDPStatus(false); //_udpServer.Stop(); if (showlog) - LogDebug(Properties.Resources.StoppedDS4Windows); + LogDebug(DS4WinWPF.Properties.Resources.StoppedDS4Windows); while (outputslotMan.RunningQueue) { @@ -681,6 +702,8 @@ namespace DS4Windows } runHotPlug = false; + ServiceStopped?.Invoke(this, EventArgs.Empty); + RunningChanged?.Invoke(this, EventArgs.Empty); return true; } @@ -719,12 +742,13 @@ namespace DS4Windows { if (DS4Controllers[Index] == null) { - //LogDebug(Properties.Resources.FoundController + device.getMacAddress() + " (" + device.getConnectionType() + ")"); - LogDebug(Properties.Resources.FoundController + " " + device.getMacAddress() + " (" + device.getConnectionType() + ") (" + + //LogDebug(DS4WinWPF.Properties.Resources.FoundController + device.getMacAddress() + " (" + device.getConnectionType() + ")"); + LogDebug(DS4WinWPF.Properties.Resources.FoundController + " " + device.getMacAddress() + " (" + device.getConnectionType() + ") (" + device.DisplayName + ")"); Task task = new Task(() => { Thread.Sleep(5); WarnExclusiveModeFailure(device); }); task.Start(); DS4Controllers[Index] = device; + slotManager.AddController(device, Index); device.Removal += this.On_DS4Removal; device.Removal += DS4Devices.On_Removal; device.SyncChange += this.On_SyncChange; @@ -770,6 +794,7 @@ namespace DS4Windows if (!getDInputOnly(Index) && device.isSynced()) { + //useDInputOnly[Index] = false; PluginOutDev(Index, device); } else @@ -785,17 +810,19 @@ namespace DS4Windows //string filename = Path.GetFileName(ProfilePath[Index]); if (File.Exists(appdatapath + "\\Profiles\\" + ProfilePath[Index] + ".xml")) { - string prolog = Properties.Resources.UsingProfile.Replace("*number*", (Index + 1).ToString()).Replace("*Profile name*", ProfilePath[Index]); + string prolog = DS4WinWPF.Properties.Resources.UsingProfile.Replace("*number*", (Index + 1).ToString()).Replace("*Profile name*", ProfilePath[Index]); LogDebug(prolog); AppLogger.LogToTray(prolog); } else { - string prolog = Properties.Resources.NotUsingProfile.Replace("*number*", (Index + 1).ToString()); + string prolog = DS4WinWPF.Properties.Resources.NotUsingProfile.Replace("*number*", (Index + 1).ToString()); LogDebug(prolog); AppLogger.LogToTray(prolog); } + HotplugController?.Invoke(this, device, Index); + break; } } @@ -993,20 +1020,20 @@ namespace DS4Windows { if (!d.IsAlive()) { - return Properties.Resources.Connecting; + return DS4WinWPF.Properties.Resources.Connecting; } string battery; if (d.isCharging()) { if (d.getBattery() >= 100) - battery = Properties.Resources.Charged; + battery = DS4WinWPF.Properties.Resources.Charged; else - battery = Properties.Resources.Charging.Replace("*number*", d.getBattery().ToString()); + battery = DS4WinWPF.Properties.Resources.Charging.Replace("*number*", d.getBattery().ToString()); } else { - battery = Properties.Resources.Battery.Replace("*number*", d.getBattery().ToString()); + battery = DS4WinWPF.Properties.Resources.Battery.Replace("*number*", d.getBattery().ToString()); } return d.getMacAddress() + " (" + d.getConnectionType() + "), " + battery; @@ -1023,7 +1050,7 @@ namespace DS4Windows { if (!d.IsAlive()) { - return Properties.Resources.Connecting; + return DS4WinWPF.Properties.Resources.Connecting; } return d.getMacAddress(); @@ -1044,7 +1071,7 @@ namespace DS4Windows if (d.isCharging()) { if (d.getBattery() >= 100) - battery = Properties.Resources.Full; + battery = DS4WinWPF.Properties.Resources.Full; else battery = d.getBattery() + "%+"; } @@ -1056,7 +1083,7 @@ namespace DS4Windows return (d.getConnectionType() + " " + battery); } else - return Properties.Resources.NoneText; + return DS4WinWPF.Properties.Resources.NoneText; } public string getDS4Battery(int index) @@ -1071,7 +1098,7 @@ namespace DS4Windows if (d.isCharging()) { if (d.getBattery() >= 100) - battery = Properties.Resources.Full; + battery = DS4WinWPF.Properties.Resources.Full; else battery = d.getBattery() + "%+"; } @@ -1083,7 +1110,7 @@ namespace DS4Windows return battery; } else - return Properties.Resources.NA; + return DS4WinWPF.Properties.Resources.NA; } public string getDS4Status(int index) @@ -1094,7 +1121,7 @@ namespace DS4Windows return d.getConnectionType() + ""; } else - return Properties.Resources.NoneText; + return DS4WinWPF.Properties.Resources.NoneText; } protected void On_SerialChange(object sender, EventArgs e) @@ -1147,6 +1174,39 @@ namespace DS4Windows if (!getDInputOnly(ind)) { PluginOutDev(ind, device); + /*OutContType conType = Global.OutContType[ind]; + if (conType == OutContType.X360) + { + LogDebug("Plugging in X360 Controller #" + (ind + 1)); + Global.activeOutDevType[ind] = OutContType.X360; + Xbox360OutDevice tempXbox = new Xbox360OutDevice(vigemTestClient); + outputDevices[ind] = tempXbox; + tempXbox.cont.FeedbackReceived += (eventsender, args) => + { + SetDevRumble(device, args.LargeMotor, args.SmallMotor, ind); + }; + + tempXbox.Connect(); + LogDebug("X360 Controller #" + (ind + 1) + " connected"); + } + else if (conType == OutContType.DS4) + { + LogDebug("Plugging in DS4 Controller #" + (ind + 1)); + Global.activeOutDevType[ind] = OutContType.DS4; + DS4OutDevice tempDS4 = new DS4OutDevice(vigemTestClient); + outputDevices[ind] = tempDS4; + int devIndex = ind; + tempDS4.cont.FeedbackReceived += (eventsender, args) => + { + SetDevRumble(device, args.LargeMotor, args.SmallMotor, devIndex); + }; + + tempDS4.Connect(); + LogDebug("DS4 Controller #" + (ind + 1) + " connected"); + } + */ + + //useDInputOnly[ind] = false; } } } @@ -1181,12 +1241,6 @@ namespace DS4Windows if (!useDInputOnly[ind]) { UnplugOutDev(ind, device); - //string tempType = outputDevices[ind].GetDeviceType(); - //outputDevices[ind].Disconnect(); - //outputDevices[ind] = null; - //x360controls[ind].Disconnect(); - //x360controls[ind] = null; - //LogDebug(tempType + " Controller # " + (ind + 1) + " unplugged"); } // Use Task to reset device synth state and commit it @@ -1195,11 +1249,11 @@ namespace DS4Windows Mapping.Commit(ind); }).Wait(); - string removed = Properties.Resources.ControllerWasRemoved.Replace("*Mac address*", (ind + 1).ToString()); + string removed = DS4WinWPF.Properties.Resources.ControllerWasRemoved.Replace("*Mac address*", (ind + 1).ToString()); if (device.getBattery() <= 20 && device.getConnectionType() == ConnectionType.BT && !device.isCharging()) { - removed += ". " + Properties.Resources.ChargeController; + removed += ". " + DS4WinWPF.Properties.Resources.ChargeController; } LogDebug(removed); @@ -1218,15 +1272,17 @@ namespace DS4Windows device.IsRemoved = true; device.Synced = false; DS4Controllers[ind] = null; + slotManager.RemoveController(device, ind); touchPad[ind] = null; lag[ind] = false; inWarnMonitor[ind] = false; useDInputOnly[ind] = true; Global.activeOutDevType[ind] = OutContType.None; - uiContext?.Post(new SendOrPostCallback((state) => + /*uiContext?.Post(new SendOrPostCallback((state) => { OnControllerRemoved(this, ind); }), null); + */ //Thread.Sleep(XINPUT_UNPLUG_SETTLE_TIME); } } @@ -1252,10 +1308,12 @@ namespace DS4Windows string devError = tempStrings[ind] = device.error; if (!string.IsNullOrEmpty(devError)) { - uiContext?.Post(new SendOrPostCallback(delegate (object state) + LogDebug(devError); + /*uiContext?.Post(new SendOrPostCallback(delegate (object state) { LogDebug(devError); }), null); + */ } if (inWarnMonitor[ind]) @@ -1264,18 +1322,22 @@ namespace DS4Windows if (!lag[ind] && device.Latency >= flashWhenLateAt) { lag[ind] = true; - uiContext?.Post(new SendOrPostCallback(delegate (object state) + LagFlashWarning(ind, true); + /*uiContext?.Post(new SendOrPostCallback(delegate (object state) { LagFlashWarning(ind, true); }), null); + */ } else if (lag[ind] && device.Latency < flashWhenLateAt) { lag[ind] = false; - uiContext?.Post(new SendOrPostCallback(delegate (object state) + LagFlashWarning(ind, false); + /*uiContext?.Post(new SendOrPostCallback(delegate (object state) { LagFlashWarning(ind, false); }), null); + */ } } else @@ -1295,20 +1357,22 @@ namespace DS4Windows if (device.firstReport && device.IsAlive()) { device.firstReport = false; - uiContext?.Post(new SendOrPostCallback(delegate (object state) + /*uiContext?.Post(new SendOrPostCallback(delegate (object state) { OnDeviceStatusChanged(this, ind); }), null); + */ } - else if (pState.Battery != cState.Battery || device.oldCharging != device.isCharging()) - { - byte tempBattery = currentBattery[ind] = cState.Battery; - bool tempCharging = charging[ind] = device.isCharging(); - uiContext?.Post(new SendOrPostCallback(delegate (object state) - { - OnBatteryStatusChange(this, ind, tempBattery, tempCharging); - }), null); - } + //else if (pState.Battery != cState.Battery || device.oldCharging != device.isCharging()) + //{ + // byte tempBattery = currentBattery[ind] = cState.Battery; + // bool tempCharging = charging[ind] = device.isCharging(); + // /*uiContext?.Post(new SendOrPostCallback(delegate (object state) + // { + // OnBatteryStatusChange(this, ind, tempBattery, tempCharging); + // }), null); + // */ + //} if (getEnableTouchToggle(ind)) CheckForTouchToggle(ind, cState, pState); @@ -1384,7 +1448,7 @@ namespace DS4Windows if (on) { lag[ind] = true; - LogDebug(Properties.Resources.LatencyOverTen.Replace("*number*", (ind + 1).ToString()), true); + LogDebug(DS4WinWPF.Properties.Resources.LatencyOverTen.Replace("*number*", (ind + 1).ToString()), true); if (getFlashWhenLate()) { DS4Color color = new DS4Color { red = 50, green = 0, blue = 0 }; @@ -1396,7 +1460,7 @@ namespace DS4Windows else { lag[ind] = false; - LogDebug(Properties.Resources.LatencyNotOverTen.Replace("*number*", (ind + 1).ToString())); + LogDebug(DS4WinWPF.Properties.Resources.LatencyNotOverTen.Replace("*number*", (ind + 1).ToString())); DS4LightBar.forcelight[ind] = false; DS4LightBar.forcedFlash[ind] = 0; } @@ -1484,15 +1548,15 @@ namespace DS4Windows if (GetTouchActive(deviceID) && touchreleased[deviceID]) { TouchActive[deviceID] = false; - LogDebug(Properties.Resources.TouchpadMovementOff); - AppLogger.LogToTray(Properties.Resources.TouchpadMovementOff); + LogDebug(DS4WinWPF.Properties.Resources.TouchpadMovementOff); + AppLogger.LogToTray(DS4WinWPF.Properties.Resources.TouchpadMovementOff); touchreleased[deviceID] = false; } else if (touchreleased[deviceID]) { TouchActive[deviceID] = true; - LogDebug(Properties.Resources.TouchpadMovementOn); - AppLogger.LogToTray(Properties.Resources.TouchpadMovementOn); + LogDebug(DS4WinWPF.Properties.Resources.TouchpadMovementOn); + AppLogger.LogToTray(DS4WinWPF.Properties.Resources.TouchpadMovementOn); touchreleased[deviceID] = false; } } diff --git a/DS4Windows/DS4Control/ControllerSlotManager.cs b/DS4Windows/DS4Control/ControllerSlotManager.cs new file mode 100644 index 0000000..df4cffb --- /dev/null +++ b/DS4Windows/DS4Control/ControllerSlotManager.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; + +namespace DS4Windows +{ + public class ControllerSlotManager + { + private List controllerColl; + public List ControllerColl { get => controllerColl; set => controllerColl = value; } + + private Dictionary controllerDict; + private Dictionary reverseControllerDict; + public Dictionary ControllerDict { get => controllerDict; } + public Dictionary ReverseControllerDict { get => reverseControllerDict; } + + public ControllerSlotManager() + { + controllerColl = new List(); + controllerDict = new Dictionary(); + reverseControllerDict = new Dictionary(); + } + + public void AddController(DS4Device device, int slotIdx) + { + controllerColl.Add(device); + controllerDict.Add(slotIdx, device); + reverseControllerDict.Add(device, slotIdx); + } + + public void RemoveController(DS4Device device, int slotIdx) + { + controllerColl.Remove(device); + controllerDict.Remove(slotIdx); + reverseControllerDict.Remove(device); + } + + public void ClearControllerList() + { + controllerColl.Clear(); + controllerDict.Clear(); + reverseControllerDict.Clear(); + } + } +} diff --git a/DS4Windows/DS4Control/MacroParser.cs b/DS4Windows/DS4Control/MacroParser.cs new file mode 100644 index 0000000..0950eb7 --- /dev/null +++ b/DS4Windows/DS4Control/MacroParser.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace DS4Windows +{ + public class MacroParser + { + private bool loaded; + private List macroSteps; + private int[] inputMacro; + private Dictionary keydown = new Dictionary(); + public static Dictionary macroInputNames = new Dictionary() + { + [256] = "Left Mouse Button", [257] = "Right Mouse Button", + [258] = "Middle Mouse Button", [259] = "4th Mouse Button", + [260] = "5th Mouse Button", [261] = "A Button", + [262] = "B Button", [263] = "X Button", + [264] = "Y Button", [265] = "Start", + [266] = "Back", [267] = "Up Button", + [268] = "Down Button", [269] = "Left Button", + [270] = "Right Button", [271] = "Guide", + [272] = "Left Bumper", [273] = "Right Bumper", + [274] = "Left Trigger", [275] = "Right Trigger", + [276] = "Left Stick", [277] = "Right Stick", + [278] = "LS Right", [279] = "LS Left", + [280] = "LS Down", [281] = "LS Up", + [282] = "RS Right", [283] = "RS Left", + [284] = "RS Down", [285] = "RS Up", + }; + + public List MacroSteps { get => macroSteps; } + + public MacroParser(int[] macro) + { + macroSteps = new List(); + inputMacro = macro; + } + + public void LoadMacro() + { + if (loaded) + { + return; + } + + keydown.Clear(); + for(int i = 0; i < inputMacro.Length; i++) + { + int value = inputMacro[i]; + MacroStep step = ParseStep(value); + macroSteps.Add(step); + } + + loaded = true; + } + + public List GetMacroStrings() + { + if (!loaded) + { + LoadMacro(); + } + + List result = new List(); + foreach(MacroStep step in macroSteps) + { + result.Add(step.Name); + } + + return result; + } + + private MacroStep ParseStep(int value) + { + string name = string.Empty; + MacroStep.StepType type = MacroStep.StepType.ActDown; + MacroStep.StepOutput outType = MacroStep.StepOutput.Key; + + if (value >= 1000000000) + { + outType = MacroStep.StepOutput.Lightbar; + if (value > 1000000000) + { + type = MacroStep.StepType.ActDown; + string lb = value.ToString().Substring(1); + byte r = (byte)(int.Parse(lb[0].ToString()) * 100 + int.Parse(lb[1].ToString()) * 10 + int.Parse(lb[2].ToString())); + byte g = (byte)(int.Parse(lb[3].ToString()) * 100 + int.Parse(lb[4].ToString()) * 10 + int.Parse(lb[5].ToString())); + byte b = (byte)(int.Parse(lb[6].ToString()) * 100 + int.Parse(lb[7].ToString()) * 10 + int.Parse(lb[8].ToString())); + name = $"Lightbar Color: {r},{g},{b}"; + } + else + { + type = MacroStep.StepType.ActUp; + name = "Reset Lightbar"; + } + } + else if (value >= 1000000) + { + outType = MacroStep.StepOutput.Rumble; + if (value > 1000000) + { + type = MacroStep.StepType.ActDown; + string r = value.ToString().Substring(1); + byte heavy = (byte)(int.Parse(r[0].ToString()) * 100 + int.Parse(r[1].ToString()) * 10 + int.Parse(r[2].ToString())); + byte light = (byte)(int.Parse(r[3].ToString()) * 100 + int.Parse(r[4].ToString()) * 10 + int.Parse(r[5].ToString())); + name = $"Rumble {heavy}, {light} ({Math.Round((heavy * .75f + light * .25f) / 2.55f, 1)}%)"; + } + else + { + type = MacroStep.StepType.ActUp; + name = "Stop Rumble"; + } + } + else if (value >= 300) // ints over 300 used to delay + { + type = MacroStep.StepType.Wait; + outType = MacroStep.StepOutput.None; + name = $"Wait {(value - 300).ToString()} ms"; + } + else + { + // anything above 255 is not a key value + outType = value <= 255 ? MacroStep.StepOutput.Key : MacroStep.StepOutput.Button; + keydown.TryGetValue(value, out bool isdown); + if (!isdown) + { + type = MacroStep.StepType.ActDown; + keydown.Add(value, true); + if (outType == MacroStep.StepOutput.Key) + { + name = KeyInterop.KeyFromVirtualKey(value).ToString(); + } + else + { + macroInputNames.TryGetValue(value, out name); + } + } + else + { + type = MacroStep.StepType.ActUp; + keydown.Remove(value); + if (outType == MacroStep.StepOutput.Key) + { + name = KeyInterop.KeyFromVirtualKey(value).ToString(); + } + else + { + macroInputNames.TryGetValue(value, out name); + } + } + } + + MacroStep step = new MacroStep(value, name, type, outType); + return step; + } + + public void Reset() + { + loaded = false; + } + } + + public class MacroStep + { + public enum StepType : uint + { + ActDown, + ActUp, + Wait, + } + + public enum StepOutput : uint + { + None, + Key, + Button, + Rumble, + Lightbar, + } + + private string name; + private int value; + private StepType actType; + private StepOutput outputType; + + public string Name + { + get => name; + set + { + name = value; + NameChanged?.Invoke(this, EventArgs.Empty); + } + } + public event EventHandler NameChanged; + public int Value + { + get => value; + set + { + this.value = value; + ValueChanged?.Invoke(this, EventArgs.Empty); + } + } + public event EventHandler ValueChanged; + public StepType ActType { get => actType; } + public StepOutput OutputType { get => outputType; } + + public MacroStep(int value, string name, StepType act, StepOutput output) + { + this.value = value; + this.name = name; + actType = act; + outputType = output; + + ValueChanged += MacroStep_ValueChanged; + } + + private void MacroStep_ValueChanged(object sender, EventArgs e) + { + if (actType == StepType.Wait) + { + Name = $"Wait {value-300}ms"; + } + else if (outputType == StepOutput.Rumble) + { + int result = value; + result -= 1000000; + int curHeavy = result / 1000; + int curLight = result - (curHeavy * 1000); + Name = $"Rumble {curHeavy},{curLight}"; + } + else if (outputType == StepOutput.Lightbar) + { + int temp = value - 1000000000; + int r = temp / 1000000; + temp -= (r * 1000000); + int g = temp / 1000; + temp -= (g * 1000); + int b = temp; + Name = $"Lightbar Color: {r},{g},{b}"; + } + } + } +} diff --git a/DS4Windows/DS4Control/Mapping.cs b/DS4Windows/DS4Control/Mapping.cs index 2950896..65c25d5 100644 --- a/DS4Windows/DS4Control/Mapping.cs +++ b/DS4Windows/DS4Control/Mapping.cs @@ -2105,7 +2105,7 @@ namespace DS4Windows } } - string prolog = Properties.Resources.UsingProfile.Replace("*number*", (device + 1).ToString()).Replace("*Profile name*", action.details); + string prolog = DS4WinWPF.Properties.Resources.UsingProfile.Replace("*number*", (device + 1).ToString()).Replace("*Profile name*", action.details); AppLogger.LogToGui(prolog, false); LoadTempProfile(device, action.details, true, ctrl); @@ -2559,7 +2559,7 @@ namespace DS4Windows } string profileName = untriggeraction[device].prevProfileName; - string prolog = Properties.Resources.UsingProfile.Replace("*number*", (device + 1).ToString()).Replace("*Profile name*", (profileName == string.Empty ? ProfilePath[device] : profileName)); + string prolog = DS4WinWPF.Properties.Resources.UsingProfile.Replace("*number*", (device + 1).ToString()).Replace("*Profile name*", (profileName == string.Empty ? ProfilePath[device] : profileName)); AppLogger.LogToGui(prolog, false); untriggeraction[device] = null; diff --git a/DS4Windows/DS4Control/Mouse.cs b/DS4Windows/DS4Control/Mouse.cs index f0cc9e4..d21c15d 100644 --- a/DS4Windows/DS4Control/Mouse.cs +++ b/DS4Windows/DS4Control/Mouse.cs @@ -359,7 +359,7 @@ namespace DS4Windows tempBool = true; for (int i = 0, arlen = disArray.Length; tempBool && i < arlen; i++) { - if (disArray[i] == -1 || getDS4ControlsByName(disArray[i]) == false) + if (getDS4ControlsByName(disArray[i]) == false) tempBool = false; } diff --git a/DS4Windows/DS4Control/Program.cs b/DS4Windows/DS4Control/Program.cs new file mode 100644 index 0000000..c78e761 --- /dev/null +++ b/DS4Windows/DS4Control/Program.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DS4Windows +{ + public class Program + { + public static ControlService rootHub; + } +} diff --git a/DS4Windows/DS4Control/ScpUtil.cs b/DS4Windows/DS4Control/ScpUtil.cs index 9edadc8..e349a00 100644 --- a/DS4Windows/DS4Control/ScpUtil.cs +++ b/DS4Windows/DS4Control/ScpUtil.cs @@ -11,6 +11,7 @@ using System.Security.Principal; using System.Threading; using System.Threading.Tasks; using System.Globalization; +using System.Diagnostics; namespace DS4Windows { @@ -238,7 +239,10 @@ namespace DS4Windows { protected static BackingStore m_Config = new BackingStore(); protected static Int32 m_IdleTimeout = 600000; - public static readonly string exepath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName; + public static string exelocation = Assembly.GetExecutingAssembly().Location; + public static string exedirpath = Directory.GetParent(exelocation).FullName; + public static FileVersionInfo fileVersion = FileVersionInfo.GetVersionInfo(exelocation); + public static string exeversion = fileVersion.ProductVersion; public static string appdatapath; public static bool firstRun = false; public static bool multisavespots = false; @@ -265,7 +269,7 @@ namespace DS4Windows X360Controls.LYNeg, X360Controls.LYPos, X360Controls.RXNeg, X360Controls.RXPos, X360Controls.RYNeg, X360Controls.RYPos, X360Controls.LB, X360Controls.LT, X360Controls.LS, X360Controls.RB, X360Controls.RT, X360Controls.RS, X360Controls.X, X360Controls.Y, X360Controls.B, X360Controls.A, X360Controls.DpadUp, X360Controls.DpadRight, X360Controls.DpadDown, - X360Controls.DpadLeft, X360Controls.Guide, X360Controls.None, X360Controls.None, X360Controls.None, X360Controls.None, + X360Controls.DpadLeft, X360Controls.Guide, X360Controls.LeftMouse, X360Controls.RightMouse, X360Controls.MiddleMouse, X360Controls.LeftMouse, X360Controls.Back, X360Controls.Start, X360Controls.None, X360Controls.None, X360Controls.None, X360Controls.None, X360Controls.None, X360Controls.None, X360Controls.None, X360Controls.None }; @@ -286,6 +290,162 @@ namespace DS4Windows return temp; })(); + public static Dictionary xboxDefaultNames = new Dictionary() + { + [X360Controls.LXNeg] = "Left X-Axis-", + [X360Controls.LXPos] = "Left X-Axis+", + [X360Controls.LYNeg] = "Left Y-Axis-", + [X360Controls.LYPos] = "Left Y-Axis+", + [X360Controls.RXNeg] = "Right X-Axis-", + [X360Controls.RXPos] = "Right X-Axis+", + [X360Controls.RYNeg] = "Right Y-Axis-", + [X360Controls.RYPos] = "Right Y-Axis+", + [X360Controls.LB] = "Left Bumper", + [X360Controls.LT] = "Left Trigger", + [X360Controls.LS] = "Left Stick", + [X360Controls.RB] = "Right Bumper", + [X360Controls.RT] = "Right Trigger", + [X360Controls.RS] = "Right Stick", + [X360Controls.X] = "X Button", + [X360Controls.Y] = "Y Button", + [X360Controls.B] = "B Button", + [X360Controls.A] = "A Button", + [X360Controls.DpadUp] = "Up Button", + [X360Controls.DpadRight] = "Right Button", + [X360Controls.DpadDown] = "Down Button", + [X360Controls.DpadLeft] = "Left Button", + [X360Controls.Guide] = "Guide", + [X360Controls.Back] = "Back", + [X360Controls.Start] = "Start", + [X360Controls.LeftMouse] = "Left Mouse Button", + [X360Controls.RightMouse] = "Right Mouse Button", + [X360Controls.MiddleMouse] = "Middle Mouse Button", + [X360Controls.FourthMouse] = "4th Mouse Button", + [X360Controls.FifthMouse] = "5th Mouse Button", + [X360Controls.WUP] = "Mouse Wheel Up", + [X360Controls.WDOWN] = "Mouse Wheel Down", + [X360Controls.MouseUp] = "Mouse Up", + [X360Controls.MouseDown] = "Mouse Down", + [X360Controls.MouseLeft] = "Mouse Left", + [X360Controls.MouseRight] = "Mouse Right", + [X360Controls.Unbound] = "Unbound", + }; + + public static Dictionary ds4DefaultNames = new Dictionary() + { + [X360Controls.LXNeg] = "Left X-Axis-", + [X360Controls.LXPos] = "Left X-Axis+", + [X360Controls.LYNeg] = "Left Y-Axis-", + [X360Controls.LYPos] = "Left Y-Axis+", + [X360Controls.RXNeg] = "Right X-Axis-", + [X360Controls.RXPos] = "Right X-Axis+", + [X360Controls.RYNeg] = "Right Y-Axis-", + [X360Controls.RYPos] = "Right Y-Axis+", + [X360Controls.LB] = "L1", + [X360Controls.LT] = "L2", + [X360Controls.LS] = "L3", + [X360Controls.RB] = "R1", + [X360Controls.RT] = "R2", + [X360Controls.RS] = "R3", + [X360Controls.X] = "Square", + [X360Controls.Y] = "Triangle", + [X360Controls.B] = "Circle", + [X360Controls.A] = "Cross", + [X360Controls.DpadUp] = "Dpad Up", + [X360Controls.DpadRight] = "Dpad Right", + [X360Controls.DpadDown] = "Dpad Down", + [X360Controls.DpadLeft] = "Dpad Left", + [X360Controls.Guide] = "PS", + [X360Controls.Back] = "Share", + [X360Controls.Start] = "Options", + [X360Controls.LeftMouse] = "Left Mouse Button", + [X360Controls.RightMouse] = "Right Mouse Button", + [X360Controls.MiddleMouse] = "Middle Mouse Button", + [X360Controls.FourthMouse] = "4th Mouse Button", + [X360Controls.FifthMouse] = "5th Mouse Button", + [X360Controls.WUP] = "Mouse Wheel Up", + [X360Controls.WDOWN] = "Mouse Wheel Down", + [X360Controls.MouseUp] = "Mouse Up", + [X360Controls.MouseDown] = "Mouse Down", + [X360Controls.MouseLeft] = "Mouse Left", + [X360Controls.MouseRight] = "Mouse Right", + [X360Controls.Unbound] = "Unbound", + }; + + public static string getX360ControlString(X360Controls key, OutContType conType) + { + string result = string.Empty; + if (conType == DS4Windows.OutContType.X360) + { + xboxDefaultNames.TryGetValue(key, out result); + } + else if (conType == DS4Windows.OutContType.DS4) + { + ds4DefaultNames.TryGetValue(key, out result); + } + + return result; + } + + public static Dictionary ds4inputNames = new Dictionary() + { + [DS4Controls.LXNeg] = "Left X-Axis-", + [DS4Controls.LXPos] = "Left X-Axis+", + [DS4Controls.LYNeg] = "Left Y-Axis-", + [DS4Controls.LYPos] = "Left Y-Axis+", + [DS4Controls.RXNeg] = "Right X-Axis-", + [DS4Controls.RXPos] = "Right X-Axis+", + [DS4Controls.RYNeg] = "Right Y-Axis-", + [DS4Controls.RYPos] = "Right Y-Axis+", + [DS4Controls.L1] = "L1", + [DS4Controls.L2] = "L2", + [DS4Controls.L3] = "L3", + [DS4Controls.R1] = "R1", + [DS4Controls.R2] = "R2", + [DS4Controls.R3] = "R3", + [DS4Controls.Square] = "Square", + [DS4Controls.Triangle] = "Triangle", + [DS4Controls.Circle] = "Circle", + [DS4Controls.Cross] = "Cross", + [DS4Controls.DpadUp] = "Dpad Up", + [DS4Controls.DpadRight] = "Dpad Right", + [DS4Controls.DpadDown] = "Dpad Down", + [DS4Controls.DpadLeft] = "Dpad Left", + [DS4Controls.PS] = "PS", + [DS4Controls.Share] = "Share", + [DS4Controls.Options] = "Options", + [DS4Controls.TouchLeft] = "Left Touch", + [DS4Controls.TouchUpper] = "Upper Touch", + [DS4Controls.TouchMulti] = "Multitouch", + [DS4Controls.TouchRight] = "Right Touch", + [DS4Controls.GyroXPos] = "Gyro X+", + [DS4Controls.GyroXNeg] = "Gyro X-", + [DS4Controls.GyroZPos] = "Gyro Z+", + [DS4Controls.GyroZNeg] = "Gyro Z+-", + [DS4Controls.SwipeLeft] = "Swipe Left", + [DS4Controls.SwipeRight] = "Swipe Right", + [DS4Controls.SwipeUp] = "Swipe Up", + [DS4Controls.SwipeUp] = "Swipe Up", + [DS4Controls.SwipeDown] = "None", + }; + + public static Dictionary macroDS4Values = new Dictionary() + { + [DS4Controls.Cross] = 261, [DS4Controls.Circle] = 262, + [DS4Controls.Square] = 263, [DS4Controls.Triangle] = 264, + [DS4Controls.Options] = 265, [DS4Controls.Share] = 266, + [DS4Controls.DpadUp] = 267, [DS4Controls.DpadDown] = 268, + [DS4Controls.DpadLeft] = 269, [DS4Controls.DpadRight] = 270, + [DS4Controls.PS] = 271, [DS4Controls.L1] = 272, + [DS4Controls.R1] = 273, [DS4Controls.L2] = 274, + [DS4Controls.R2] = 275, [DS4Controls.L3] = 276, + [DS4Controls.R3] = 277, [DS4Controls.LXPos] = 278, + [DS4Controls.LXNeg] = 279, [DS4Controls.LYPos] = 280, + [DS4Controls.LYNeg] = 281, [DS4Controls.RXPos] = 282, + [DS4Controls.RXNeg] = 283, [DS4Controls.RYPos] = 284, + [DS4Controls.RYNeg] = 285, + }; + public static void SaveWhere(string path) { appdatapath = path; @@ -295,6 +455,36 @@ namespace DS4Windows m_Config.m_controllerConfigs = Global.appdatapath + "\\ControllerConfigs.xml"; } + public static bool SaveDefault(string path) + { + Boolean Saved = true; + XmlDocument m_Xdoc = new XmlDocument(); + try + { + XmlNode Node; + + m_Xdoc.RemoveAll(); + + Node = m_Xdoc.CreateXmlDeclaration("1.0", "utf-8", String.Empty); + m_Xdoc.AppendChild(Node); + + Node = m_Xdoc.CreateComment(string.Format(" Profile 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, "Profile", null); + + m_Xdoc.AppendChild(Node); + + m_Xdoc.Save(path); + } + catch { Saved = false; } + + return Saved; + } + /// /// Check if Admin Rights are needed to write in Appliplation Directory /// @@ -303,8 +493,8 @@ namespace DS4Windows { try { - File.WriteAllText(exepath + "\\test.txt", "test"); - File.Delete(exepath + "\\test.txt"); + File.WriteAllText(exedirpath + "\\test.txt", "test"); + File.Delete(exedirpath + "\\test.txt"); return false; } catch (UnauthorizedAccessException) @@ -451,17 +641,17 @@ namespace DS4Windows public static void FindConfigLocation() { - if (File.Exists(exepath + "\\Auto Profiles.xml") + if (File.Exists(exedirpath + "\\Auto Profiles.xml") && File.Exists(appDataPpath + "\\Auto Profiles.xml")) { Global.firstRun = true; Global.multisavespots = true; } - else if (File.Exists(exepath + "\\Auto Profiles.xml")) - SaveWhere(exepath); + else if (File.Exists(exedirpath + "\\Auto Profiles.xml")) + SaveWhere(exedirpath); else if (File.Exists(appDataPpath + "\\Auto Profiles.xml")) SaveWhere(appDataPpath); - else if (!File.Exists(exepath + "\\Auto Profiles.xml") + else if (!File.Exists(exedirpath + "\\Auto Profiles.xml") && !File.Exists(appDataPpath + "\\Auto Profiles.xml")) { Global.firstRun = true; @@ -517,6 +707,33 @@ namespace DS4Windows catch { } } + public static bool CreateAutoProfiles(string m_Profile) + { + bool Saved = true; + + try + { + XmlNode Node; + XmlDocument doc = new XmlDocument(); + + Node = doc.CreateXmlDeclaration("1.0", "utf-8", String.Empty); + doc.AppendChild(Node); + + Node = doc.CreateComment(string.Format(" Auto-Profile Configuration Data. {0} ", DateTime.Now)); + doc.AppendChild(Node); + + Node = doc.CreateWhitespace("\r\n"); + doc.AppendChild(Node); + + Node = doc.CreateNode(XmlNodeType.Element, "Programs", ""); + doc.AppendChild(Node); + doc.Save(m_Profile); + } + catch { Saved = false; } + + return Saved; + } + public static event EventHandler ControllerStatusChange; // called when a controller is added/removed/battery or touchpad mode changes/etc. public static void ControllerStatusChanged(object sender) { @@ -1554,6 +1771,15 @@ namespace DS4Windows tempprofileDistance[device] = name.ToLower().Contains("distance"); } + public static void LoadBlankDevProfile(int device, bool launchprogram, ControlService control, + bool xinputChange = true, bool postLoad = true) + { + m_Config.LoadBlankProfile(device, launchprogram, control, "", xinputChange, postLoad); + tempprofilename[device] = string.Empty; + useTempProfile[device] = false; + tempprofileDistance[device] = false; + } + public static bool Save() { return m_Config.Save(); @@ -3346,31 +3572,8 @@ namespace DS4Windows // performing this upon program startup before loading devices. if (xinputChange) { - if (device < 4) - { - DS4Device tempDevice = control.DS4Controllers[device]; - bool exists = tempBool = (tempDevice != null); - bool synced = tempBool = exists ? tempDevice.isSynced() : false; - bool isAlive = tempBool = exists ? tempDevice.IsAlive() : false; - if (dinputOnly[device] != oldUseDInputOnly) - { - if (dinputOnly[device] == true) - { - xinputPlug = false; - xinputStatus = true; - } - else if (synced && isAlive) - { - xinputPlug = true; - xinputStatus = true; - } - } - else if (oldContType != outputDevType[device]) - { - xinputPlug = true; - xinputStatus = true; - } - } + CheckOldDevicestatus(device, control, oldContType, + out xinputPlug, out xinputStatus); } try @@ -3630,41 +3833,7 @@ namespace DS4Windows // options to device instance if (postLoad && device < 4) { - DS4Device tempDev = control.DS4Controllers[device]; - if (tempDev != null && tempDev.isSynced()) - { - tempDev.queueEvent(() => - { - tempDev.setIdleTimeout(idleDisconnectTimeout[device]); - tempDev.setBTPollRate(btPollRate[device]); - if (xinputStatus && xinputPlug) - { - OutputDevice tempOutDev = control.outputDevices[device]; - if (tempOutDev != null) - { - //string tempType = tempOutDev.GetDeviceType(); - //AppLogger.LogToGui("Unplug " + tempType + " Controller #" + (device + 1), false); - //tempOutDev.Disconnect(); - tempOutDev = null; - //control.outputDevices[device] = null; - Global.activeOutDevType[device] = OutContType.None; - control.UnplugOutDev(device, tempDev); - } - - OutContType tempContType = outputDevType[device]; - control.PluginOutDev(device, tempDev); - } - else if (xinputStatus && !xinputPlug) - { - Global.activeOutDevType[device] = OutContType.None; - control.UnplugOutDev(device, tempDev); - } - - tempDev.setRumble(0, 0); - }); - - Program.rootHub.touchPad[device]?.ResetTrackAccel(trackballFriction[device]); - } + PostLoadSnippet(device, control, xinputStatus, xinputPlug); } return Loaded; @@ -4630,6 +4799,111 @@ namespace DS4Windows outputDevType[device] = OutContType.X360; ds4Mapping = false; } + + public void LoadBlankProfile(int device, bool launchprogram, ControlService control, + string propath = "", bool xinputChange = true, bool postLoad = true) + { + bool xinputPlug = false; + bool xinputStatus = false; + + OutContType oldContType = Global.activeOutDevType[device]; + + // Make sure to reset currently set profile values before parsing + ResetProfile(device); + + // Only change xinput devices under certain conditions. Avoid + // performing this upon program startup before loading devices. + if (xinputChange) + { + CheckOldDevicestatus(device, control, oldContType, + out xinputPlug, out xinputStatus); + } + + foreach (DS4ControlSettings dcs in ds4settings[device]) + dcs.Reset(); + + profileActions[device].Clear(); + containsCustomAction[device] = false; + containsCustomExtras[device] = false; + + // If a device exists, make sure to transfer relevant profile device + // options to device instance + if (postLoad && device < 4) + { + PostLoadSnippet(device, control, xinputStatus, xinputPlug); + } + } + + private void CheckOldDevicestatus(int device, ControlService control, + OutContType oldContType, out bool xinputPlug, out bool xinputStatus) + { + xinputPlug = false; + xinputStatus = false; + + if (device < 4) + { + bool oldUseDInputOnly = Global.useDInputOnly[device]; + DS4Device tempDevice = control.DS4Controllers[device]; + bool exists = tempBool = (tempDevice != null); + bool synced = tempBool = exists ? tempDevice.isSynced() : false; + bool isAlive = tempBool = exists ? tempDevice.IsAlive() : false; + if (dinputOnly[device] != oldUseDInputOnly) + { + if (dinputOnly[device] == true) + { + xinputPlug = false; + xinputStatus = true; + } + else if (synced && isAlive) + { + xinputPlug = true; + xinputStatus = true; + } + } + else if (oldContType != outputDevType[device]) + { + xinputPlug = true; + xinputStatus = true; + } + } + } + + private void PostLoadSnippet(int device, ControlService control, bool xinputStatus, bool xinputPlug) + { + DS4Device tempDev = control.DS4Controllers[device]; + if (tempDev != null && tempDev.isSynced()) + { + tempDev.queueEvent(() => + { + tempDev.setIdleTimeout(idleDisconnectTimeout[device]); + tempDev.setBTPollRate(btPollRate[device]); + if (xinputStatus && xinputPlug) + { + OutputDevice tempOutDev = control.outputDevices[device]; + if (tempOutDev != null) + { + tempOutDev = null; + Global.activeOutDevType[device] = OutContType.None; + control.UnplugOutDev(device, tempDev); + } + + OutContType tempContType = outputDevType[device]; + control.PluginOutDev(device, tempDev); + //Global.useDInputOnly[device] = false; + + } + else if (xinputStatus && !xinputPlug) + { + Global.activeOutDevType[device] = OutContType.None; + control.UnplugOutDev(device, tempDev); + } + + tempDev.setRumble(0, 0); + }); + + Program.rootHub.touchPad[device]?.ResetTrackAccel(trackballFriction[device]); + } + } } public class SpecialAction diff --git a/DS4Windows/DS4Forms/About.xaml b/DS4Windows/DS4Forms/About.xaml new file mode 100644 index 0000000..0e9cc06 --- /dev/null +++ b/DS4Windows/DS4Forms/About.xaml @@ -0,0 +1,75 @@ + + + + diff --git a/DS4Windows/DS4Forms/About.xaml.cs b/DS4Windows/DS4Forms/About.xaml.cs new file mode 100644 index 0000000..156b672 --- /dev/null +++ b/DS4Windows/DS4Forms/About.xaml.cs @@ -0,0 +1,64 @@ +using System.Diagnostics; +using System.Windows; + +namespace DS4WinWPF.DS4Forms +{ + /// + /// Interaction logic for About.xaml + /// + public partial class About : Window + { + public About() + { + InitializeComponent(); + + string version = DS4Windows.Global.exeversion; + headerLb.Content += version + ")"; + } + + private void ChangeLogLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://docs.google.com/document/d/1CovpH08fbPSXrC6TmEprzgPwCe0tTjQ_HTFfDotpmxk/edit?usp=sharing"); + } + + private void PaypalLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://paypal.me/ryochan7"); + } + + private void PatreonLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://patreon.com/user?u=501036"); + } + + private void SubscribeStartLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://subscribestar.com/ryochan7"); + } + + private void SiteLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://ryochan7.github.io/ds4windows-site/"); + } + + private void SourceLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://github.com/Ryochan7/DS4Windows"); + } + + private void Jays2KingsLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://github.com/Jays2Kings/"); + } + + private void InhexSTERLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://code.google.com/p/ds4-tool/"); + } + + private void ElectrobrainsLink_Click(object sender, RoutedEventArgs e) + { + Process.Start("https://code.google.com/r/brianfundakowskifeldman-ds4windows/"); + } + } +} diff --git a/DS4Windows/DS4Forms/AdvancedColorDialog.cs b/DS4Windows/DS4Forms/AdvancedColorDialog.cs deleted file mode 100644 index d70a558..0000000 --- a/DS4Windows/DS4Forms/AdvancedColorDialog.cs +++ /dev/null @@ -1,172 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Security; -using System.Windows.Forms; - -namespace DS4Windows -{ - [SuppressUnmanagedCodeSecurity] - public class AdvancedColorDialog : ColorDialog - { - #region WinAPI - internal class ApiWindow - { - public IntPtr hWnd; - public string ClassName; - public string MainWindowTitle; - } - [SuppressUnmanagedCodeSecurity] - internal class WindowsEnumerator - { - private delegate int EnumCallBackDelegate(IntPtr hwnd, int lParam); - - [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int EnumWindows(EnumCallBackDelegate lpEnumFunc, int lParam); - - [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int EnumChildWindows(IntPtr hWndParent, EnumCallBackDelegate lpEnumFunc, int lParam); - - [DllImport("user32", EntryPoint = "GetClassNameA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int GetClassName(IntPtr hwnd, System.Text.StringBuilder lpClassName, int nMaxCount); - - [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int IsWindowVisible(IntPtr hwnd); - - [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int GetParent(IntPtr hwnd); - - [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); - - [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, System.Text.StringBuilder lParam); - - private List _listChildren = new List(); - - private List _listTopLevel = new List(); - private string _topLevelClass = string.Empty; - - private string _childClass = string.Empty; - public ApiWindow[] GetTopLevelWindows() - { - EnumWindows(EnumWindowProc, 0x0); - return _listTopLevel.ToArray(); - } - - public ApiWindow[] GetTopLevelWindows(string className) - { - _topLevelClass = className; - return this.GetTopLevelWindows(); - } - - public ApiWindow[] GetChildWindows(IntPtr hwnd) - { - _listChildren.Clear(); - EnumChildWindows(hwnd, EnumChildWindowProc, 0x0); - return _listChildren.ToArray(); - } - - public ApiWindow[] GetChildWindows(IntPtr hwnd, string childClass) - { - _childClass = childClass; - return this.GetChildWindows(hwnd); - } - - private Int32 EnumWindowProc(IntPtr hwnd, Int32 lParam) - { - if (GetParent(hwnd) == 0 && IsWindowVisible(hwnd) != 0) - { - ApiWindow window = GetWindowIdentification(hwnd); - if (_topLevelClass.Length == 0 || window.ClassName.ToLower() == _topLevelClass.ToLower()) - { - _listTopLevel.Add(window); - } - } - return 1; - } - - private Int32 EnumChildWindowProc(IntPtr hwnd, Int32 lParam) - { - ApiWindow window = GetWindowIdentification(hwnd); - if (_childClass.Length == 0 || window.ClassName.ToLower() == _childClass.ToLower()) - { - _listChildren.Add(window); - } - return 1; - } - - private ApiWindow GetWindowIdentification(IntPtr hwnd) - { - System.Text.StringBuilder classBuilder = new System.Text.StringBuilder(64); - GetClassName(hwnd, classBuilder, 64); - - ApiWindow window = new ApiWindow(); - window.ClassName = classBuilder.ToString(); - window.MainWindowTitle = WindowText(hwnd); - window.hWnd = hwnd; - return window; - } - - public static string WindowText(IntPtr hwnd) - { - const int W_GETTEXT = 0xd; - const int W_GETTEXTLENGTH = 0xe; - - System.Text.StringBuilder SB = new System.Text.StringBuilder(); - int length = SendMessage(hwnd, W_GETTEXTLENGTH, 0, 0); - if (length > 0) - { - SB = new System.Text.StringBuilder(length + 1); - SendMessage(hwnd, W_GETTEXT, SB.Capacity, SB); - } - return SB.ToString(); - } - - } - #endregion - private const int GA_ROOT = 2; - private const int WM_CTLCOLOREDIT = 0x133; - private const int WM_LBUTTONDOWN = 0x0201; - private const int WM_INITDIALOG = 0x0110; - - private List EditWindows = null; - public delegate void ColorUpdateHandler(Color colValue, EventArgs e); - public event ColorUpdateHandler OnUpdateColor; - - [DllImport("user32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] - public static extern IntPtr GetAncestor(IntPtr hWnd, int gaFlags); - - // Overrides the base class hook procedure... - //[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] - protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) - { - if (msg == WM_INITDIALOG) - { - IntPtr mainWindow = GetAncestor(hWnd, GA_ROOT); - if (!mainWindow.Equals(IntPtr.Zero)) - EditWindows = new List((new WindowsEnumerator()).GetChildWindows(mainWindow, "Edit")); - } - else if (msg == WM_CTLCOLOREDIT) - { - if ((EditWindows == null)) - { - IntPtr mainWindow = GetAncestor(hWnd, GA_ROOT); - if (!mainWindow.Equals(IntPtr.Zero)) - EditWindows = new List((new WindowsEnumerator()).GetChildWindows(mainWindow, "Edit")); - } - if ((EditWindows != null) && EditWindows.Count == 6) - { - byte red = 0, green = 0, blue = 0; - if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[3].hWnd), out red)) - if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[4].hWnd), out green)) - if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[5].hWnd), out blue)) - OnUpdateColor?.Invoke(Color.FromArgb(red, green, blue), EventArgs.Empty); - } - } - // Always call the base class hook procedure. - return base.HookProc(hWnd, msg, wParam, lParam); - } - } -} diff --git a/DS4Windows/DS4Forms/AutoProfiles.xaml b/DS4Windows/DS4Forms/AutoProfiles.xaml new file mode 100644 index 0000000..90e6df4 --- /dev/null +++ b/DS4Windows/DS4Forms/AutoProfiles.xaml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DS4Windows/DS4Forms/ProfileEditor.xaml.cs b/DS4Windows/DS4Forms/ProfileEditor.xaml.cs new file mode 100644 index 0000000..8fb8448 --- /dev/null +++ b/DS4Windows/DS4Forms/ProfileEditor.xaml.cs @@ -0,0 +1,1246 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Microsoft.Win32; +using NonFormTimer = System.Timers.Timer; +using DS4WinWPF.DS4Forms.ViewModels; +using DS4Windows; + +namespace DS4WinWPF.DS4Forms +{ + /// + /// Interaction logic for ProfileEditor.xaml + /// + public partial class ProfileEditor : UserControl + { + private class HoverImageInfo + { + public Point point; + public Size size; + } + + private int deviceNum; + private ProfileSettingsViewModel profileSettingsVM; + private MappingListViewModel mappingListVM; + private ProfileEntity currentProfile; + private SpecialActionsListViewModel specialActionsVM; + + public event EventHandler Closed; + public delegate void CreatedProfileHandler(ProfileEditor sender, string profile); + public event CreatedProfileHandler CreatedProfile; + + private Dictionary hoverImages = + new Dictionary(); + private Dictionary hoverLocations = new Dictionary(); + private Dictionary hoverIndexes = new Dictionary(); + private Dictionary reverseHoverIndexes = new Dictionary(); + + private StackPanel activeTouchPanel; + private StackPanel activeGyroModePanel; + private bool keepsize; + private bool controllerReadingsTabActive = false; + public bool Keepsize { get => keepsize; } + + private NonFormTimer inputTimer; + + public ProfileEditor(int device) + { + InitializeComponent(); + + deviceNum = device; + emptyColorGB.Visibility = Visibility.Collapsed; + profileSettingsVM = new ProfileSettingsViewModel(device); + picBoxHover.Visibility = Visibility.Hidden; + picBoxHover2.Visibility = Visibility.Hidden; + bool touchMouse = profileSettingsVM.UseTouchMouse; + if (!touchMouse) + { + useMousePanel.Visibility = Visibility.Collapsed; + useControlsPanel.Visibility = Visibility.Visible; + useTouchControlsRadio.IsChecked = true; + } + else + { + useTouchMouseRadio.IsChecked = true; + } + + //useControlsPanel.Visibility = !touchMouse ? Visibility.Visible : Visibility.Collapsed; + activeTouchPanel = touchMouse ? useMousePanel : useControlsPanel; + //activeTouchPanel = useMousePanel; + + switch (profileSettingsVM.GyroOutModeIndex) + { + case 0: + activeGyroModePanel = gyroControlsPanel; break; + case 1: + activeGyroModePanel = gyroMousePanel; break; + case 2: + activeGyroModePanel = gyroMouseJoystickPanel; break; + default: + activeGyroModePanel = gyroControlsPanel; break; + } + + //activeGyroModePanel = gyroControlsPanel; + gyroControlsPanel.Visibility = Visibility.Collapsed; + gyroMousePanel.Visibility = Visibility.Collapsed; + gyroMouseJoystickPanel.Visibility = Visibility.Collapsed; + activeGyroModePanel.Visibility = Visibility.Visible; + + mappingListVM = new MappingListViewModel(deviceNum, profileSettingsVM.ContType); + specialActionsVM = new SpecialActionsListViewModel(device); + + RemoveHoverBtnText(); + PopulateHoverImages(); + PopulateHoverLocations(); + PopulateHoverIndexes(); + PopulateReverseHoverIndexes(); + + ColorByBatteryPerCheck(); + AssignTiltAssociation(); + AssignSwipeAssociation(); + + inputTimer = new NonFormTimer(100); + inputTimer.Elapsed += InputDS4; + SetupEvents(); + } + + private void SetupEvents() + { + gyroOutModeCombo.SelectionChanged += GyroOutModeCombo_SelectionChanged; + outConTypeCombo.SelectionChanged += OutConTypeCombo_SelectionChanged; + mappingListBox.SelectionChanged += MappingListBox_SelectionChanged; + Closed += ProfileEditor_Closed; + profileSettingsVM.LSDeadZoneChanged += UpdateReadingsLsDeadZone; + profileSettingsVM.RSDeadZoneChanged += UpdateReadingsRsDeadZone; + profileSettingsVM.L2DeadZoneChanged += UpdateReadingsL2DeadZone; + profileSettingsVM.R2DeadZoneChanged += UpdateReadingsR2DeadZone; + profileSettingsVM.SXDeadZoneChanged += UpdateReadingsSXDeadZone; + profileSettingsVM.SZDeadZoneChanged += UpdateReadingsSZDeadZone; + } + + private void UpdateReadingsSZDeadZone(object sender, EventArgs e) + { + conReadingsUserCon.SixAxisZDead = profileSettingsVM.SZDeadZone; + } + + private void UpdateReadingsSXDeadZone(object sender, EventArgs e) + { + conReadingsUserCon.SixAxisXDead = profileSettingsVM.SXDeadZone; + } + + private void UpdateReadingsR2DeadZone(object sender, EventArgs e) + { + conReadingsUserCon.R2Dead = profileSettingsVM.R2DeadZone; + } + + private void UpdateReadingsL2DeadZone(object sender, EventArgs e) + { + conReadingsUserCon.L2Dead = profileSettingsVM.L2DeadZone; + } + + private void UpdateReadingsRsDeadZone(object sender, EventArgs e) + { + conReadingsUserCon.RsDead = profileSettingsVM.RSDeadZone; + } + + private void UpdateReadingsLsDeadZone(object sender, EventArgs e) + { + conReadingsUserCon.LsDead = profileSettingsVM.LSDeadZone; + } + + private void AssignTiltAssociation() + { + gyroZNLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.GyroZNeg]; + gyroZPLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.GyroZPos]; + gyroXNLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.GyroXNeg]; + gyroXLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.GyroXPos]; + } + + private void AssignSwipeAssociation() + { + swipeUpLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.SwipeUp]; + swipeDownLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.SwipeDown]; + swipeLeftLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.SwipeLeft]; + swipeRightLb.DataContext = mappingListVM.ControlMap[DS4Windows.DS4Controls.SwipeRight]; + } + + private void MappingListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (mappingListVM.SelectedIndex >= 0) + { + if (reverseHoverIndexes.TryGetValue(mappingListVM.SelectedIndex, out Button tempBtn)) + { + InputControlHighlight(tempBtn); + } + //; + } + + } + + private void PopulateReverseHoverIndexes() + { + foreach(KeyValuePair pair in hoverIndexes) + { + reverseHoverIndexes.Add(pair.Value, pair.Key); + } + } + + private void PopulateHoverIndexes() + { + hoverIndexes[crossConBtn] = 0; + hoverIndexes[circleConBtn] = 1; + hoverIndexes[squareConBtn] = 2; + hoverIndexes[triangleConBtn] = 3; + hoverIndexes[optionsConBtn] = 4; + hoverIndexes[shareConBtn] = 5; + hoverIndexes[upConBtn] = 6; + hoverIndexes[downConBtn] = 7; + hoverIndexes[leftConBtn] = 8; + hoverIndexes[rightConBtn] = 9; + hoverIndexes[guideConBtn] = 10; + hoverIndexes[l1ConBtn] = 11; + hoverIndexes[r1ConBtn] = 12; + hoverIndexes[l2ConBtn] = 13; + hoverIndexes[r2ConBtn] = 14; + hoverIndexes[l3ConBtn] = 15; + hoverIndexes[r3ConBtn] = 16; + hoverIndexes[leftTouchConBtn] = 17; + hoverIndexes[rightTouchConBtn] = 18; + hoverIndexes[multiTouchConBtn] = 19; + hoverIndexes[topTouchConBtn] = 20; + + hoverIndexes[lsuConBtn] = 21; + hoverIndexes[lsdConBtn] = 22; + hoverIndexes[lslConBtn] = 23; + hoverIndexes[lsrConBtn] = 24; + + hoverIndexes[rsuConBtn] = 25; + hoverIndexes[rsdConBtn] = 26; + hoverIndexes[rslConBtn] = 27; + hoverIndexes[rsrConBtn] = 28; + + hoverIndexes[gyroZNBtn] = 29; + hoverIndexes[gyroZPBtn] = 30; + hoverIndexes[gyroXNBtn] = 31; + hoverIndexes[gyroXPBtn] = 32; + + hoverIndexes[swipeUpBtn] = 33; + hoverIndexes[swipeDownBtn] = 34; + hoverIndexes[swipeLeftBtn] = 35; + hoverIndexes[swipeRightBtn] = 36; + } + + private void PopulateHoverLocations() + { + hoverLocations[crossConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(crossConBtn), Canvas.GetTop(crossConBtn)), + size = new Size(crossConBtn.Width, crossConBtn.Height) }; + hoverLocations[circleConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(circleConBtn), Canvas.GetTop(circleConBtn)), + size = new Size(circleConBtn.Width, circleConBtn.Height) }; + hoverLocations[squareConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(squareConBtn), Canvas.GetTop(squareConBtn)), + size = new Size(squareConBtn.Width, squareConBtn.Height) }; + hoverLocations[triangleConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(triangleConBtn), Canvas.GetTop(triangleConBtn)), + size = new Size(triangleConBtn.Width, triangleConBtn.Height) }; + hoverLocations[l1ConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l1ConBtn), Canvas.GetTop(l1ConBtn)), + size = new Size(l1ConBtn.Width, l1ConBtn.Height) }; + hoverLocations[r1ConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r1ConBtn), Canvas.GetTop(r1ConBtn)), + size = new Size(r1ConBtn.Width, r1ConBtn.Height) }; + hoverLocations[l2ConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l2ConBtn), Canvas.GetTop(l2ConBtn)), + size = new Size(l2ConBtn.Width, l2ConBtn.Height) }; + hoverLocations[r2ConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r2ConBtn), Canvas.GetTop(r2ConBtn)), + size = new Size(r2ConBtn.Width, r2ConBtn.Height) }; + hoverLocations[shareConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(shareConBtn), Canvas.GetTop(shareConBtn)), + size = new Size(shareConBtn.Width, shareConBtn.Height) }; + hoverLocations[optionsConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(optionsConBtn), Canvas.GetTop(optionsConBtn)), + size = new Size(optionsConBtn.Width, optionsConBtn.Height) }; + hoverLocations[guideConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(guideConBtn), Canvas.GetTop(guideConBtn)), + size = new Size(guideConBtn.Width, guideConBtn.Height) }; + + hoverLocations[leftTouchConBtn] = new HoverImageInfo() { point = new Point(144, 44), size = new Size(140, 98) }; + hoverLocations[multiTouchConBtn] = new HoverImageInfo() { point = new Point(143, 42), size = new Size(158, 100) }; + hoverLocations[rightTouchConBtn] = new HoverImageInfo() { point = new Point(156, 47), size = new Size(146, 94) }; + hoverLocations[topTouchConBtn] = new HoverImageInfo() { point = new Point(155, 6), size = new Size(153, 114) }; + + hoverLocations[l3ConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l3ConBtn), Canvas.GetTop(l3ConBtn)), + size = new Size(l3ConBtn.Width, l3ConBtn.Height) }; + hoverLocations[lsuConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l3ConBtn), Canvas.GetTop(l3ConBtn)), + size = new Size(l3ConBtn.Width, l3ConBtn.Height) }; + hoverLocations[lsrConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l3ConBtn), Canvas.GetTop(l3ConBtn)), + size = new Size(l3ConBtn.Width, l3ConBtn.Height) }; + hoverLocations[lsdConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l3ConBtn), Canvas.GetTop(l3ConBtn)), + size = new Size(l3ConBtn.Width, l3ConBtn.Height) }; + hoverLocations[lslConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(l3ConBtn), Canvas.GetTop(l3ConBtn)), + size = new Size(l3ConBtn.Width, l3ConBtn.Height) }; + + hoverLocations[r3ConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r3ConBtn), Canvas.GetTop(r3ConBtn)), + size = new Size(r3ConBtn.Width, r3ConBtn.Height) }; + hoverLocations[rsuConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r3ConBtn), Canvas.GetTop(r3ConBtn)), + size = new Size(r3ConBtn.Width, r3ConBtn.Height) }; + hoverLocations[rsrConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r3ConBtn), Canvas.GetTop(r3ConBtn)), + size = new Size(r3ConBtn.Width, r3ConBtn.Height) }; + hoverLocations[rsdConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r3ConBtn), Canvas.GetTop(r3ConBtn)), + size = new Size(r3ConBtn.Width, r3ConBtn.Height) }; + hoverLocations[rslConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(r3ConBtn), Canvas.GetTop(r3ConBtn)), + size = new Size(r3ConBtn.Width, r3ConBtn.Height) }; + + hoverLocations[upConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(upConBtn), Canvas.GetTop(upConBtn)), + size = new Size(upConBtn.Width, upConBtn.Height) }; + hoverLocations[rightConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(rightConBtn), Canvas.GetTop(rightConBtn)), + size = new Size(rightConBtn.Width, rightConBtn.Height) }; + hoverLocations[downConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(downConBtn), Canvas.GetTop(downConBtn)), + size = new Size(downConBtn.Width, downConBtn.Height) }; + hoverLocations[leftConBtn] = new HoverImageInfo() { point = new Point(Canvas.GetLeft(leftConBtn), Canvas.GetTop(leftConBtn)), + size = new Size(leftConBtn.Width, leftConBtn.Height) }; + } + + private void RemoveHoverBtnText() + { + crossConBtn.Content = ""; + circleConBtn.Content = ""; + squareConBtn.Content = ""; + triangleConBtn.Content = ""; + l1ConBtn.Content = ""; + r1ConBtn.Content = ""; + l2ConBtn.Content = ""; + r2ConBtn.Content = ""; + shareConBtn.Content = ""; + optionsConBtn.Content = ""; + guideConBtn.Content = ""; + leftTouchConBtn.Content = ""; + multiTouchConBtn.Content = ""; + rightTouchConBtn.Content = ""; + topTouchConBtn.Content = ""; + + l3ConBtn.Content = ""; + lsuConBtn.Content = ""; + lsrConBtn.Content = ""; + lsdConBtn.Content = ""; + lslConBtn.Content = ""; + + r3ConBtn.Content = ""; + rsuConBtn.Content = ""; + rsrConBtn.Content = ""; + rsdConBtn.Content = ""; + rslConBtn.Content = ""; + + upConBtn.Content = ""; + rightConBtn.Content = ""; + downConBtn.Content = ""; + leftConBtn.Content = ""; + } + + private void PopulateHoverImages() + { + ImageSourceConverter sourceConverter = new ImageSourceConverter(); + + ImageSource temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Cross.png") as ImageSource; + ImageBrush crossHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Circle.png") as ImageSource; + ImageBrush circleHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Square.png") as ImageSource; + ImageBrush squareHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Triangle.png") as ImageSource; + ImageBrush triangleHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_L1.png") as ImageSource; + ImageBrush l1Hover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_R1.png") as ImageSource; + ImageBrush r1Hover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_L2.png") as ImageSource; + ImageBrush l2Hover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_R2.png") as ImageSource; + ImageBrush r2Hover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Share.png") as ImageSource; + ImageBrush shareHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_options.png") as ImageSource; + ImageBrush optionsHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_PS.png") as ImageSource; + ImageBrush guideHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_TouchLeft.png") as ImageSource; + ImageBrush leftTouchHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_TouchMulti.png") as ImageSource; + ImageBrush multiTouchTouchHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_TouchRight.png") as ImageSource; + ImageBrush rightTouchHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_TouchUpper.png") as ImageSource; + ImageBrush topTouchHover = new ImageBrush(temp); + + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_LS.png") as ImageSource; + ImageBrush l3Hover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_LS.png") as ImageSource; + ImageBrush lsuHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_LS.png") as ImageSource; + ImageBrush lsrHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_LS.png") as ImageSource; + ImageBrush lsdHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_LS.png") as ImageSource; + ImageBrush lslHover = new ImageBrush(temp); + + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_RS.png") as ImageSource; + ImageBrush r3Hover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_RS.png") as ImageSource; + ImageBrush rsuHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_RS.png") as ImageSource; + ImageBrush rsrHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_RS.png") as ImageSource; + ImageBrush rsdHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_RS.png") as ImageSource; + ImageBrush rslHover = new ImageBrush(temp); + + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Up.png") as ImageSource; + ImageBrush upHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Right.png") as ImageSource; + ImageBrush rightHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Down.png") as ImageSource; + ImageBrush downHover = new ImageBrush(temp); + + temp = sourceConverter. + ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/DS4-Config_Left.png") as ImageSource; + ImageBrush leftHover = new ImageBrush(temp); + + hoverImages[crossConBtn] = crossHover; + hoverImages[circleConBtn] = circleHover; + hoverImages[squareConBtn] = squareHover; + hoverImages[triangleConBtn] = triangleHover; + hoverImages[l1ConBtn] = l1Hover; + hoverImages[r1ConBtn] = r1Hover; + hoverImages[l2ConBtn] = l2Hover; + hoverImages[r2ConBtn] = r2Hover; + hoverImages[shareConBtn] = shareHover; + hoverImages[optionsConBtn] = optionsHover; + hoverImages[guideConBtn] = guideHover; + + hoverImages[leftTouchConBtn] = leftTouchHover; + hoverImages[multiTouchConBtn] = multiTouchTouchHover; + hoverImages[rightTouchConBtn] = rightTouchHover; + hoverImages[topTouchConBtn] = topTouchHover; + hoverImages[l3ConBtn] = l3Hover; + hoverImages[lsuConBtn] = lsuHover; + hoverImages[lsrConBtn] = lsrHover; + hoverImages[lsdConBtn] = lsdHover; + hoverImages[lslConBtn] = lslHover; + hoverImages[r3ConBtn] = r3Hover; + hoverImages[rsuConBtn] = rsuHover; + hoverImages[rsrConBtn] = rsrHover; + hoverImages[rsdConBtn] = rsdHover; + hoverImages[rslConBtn] = rslHover; + + hoverImages[upConBtn] = upHover; + hoverImages[rightConBtn] = rightHover; + hoverImages[downConBtn] = downHover; + hoverImages[leftConBtn] = leftHover; + } + + public void Reload(int device, ProfileEntity profile = null) + { + profileSettingsTabCon.DataContext = null; + touchpadSettingsPanel.DataContext = null; + mappingListBox.DataContext = null; + specialActionsTab.DataContext = null; + lightbarRect.DataContext = null; + + deviceNum = device; + if (profile != null) + { + currentProfile = profile; + if (device == 4) + { + Global.ProfilePath[4] = profile.Name; + } + + Global.LoadProfile(device, false, App.rootHub); + profileNameTxt.Text = profile.Name; + } + else + { + currentProfile = null; + Global.LoadBlankDevProfile(device, false, App.rootHub, false); + } + + if (device < 4) + { + useControllerUD.Value = device + 1; + conReadingsUserCon.UseDevice(device); + } + else + { + useControllerUD.Value = 1; + conReadingsUserCon.UseDevice(0); + } + + conReadingsUserCon.EnableControl(false); + + specialActionsVM.LoadActions(currentProfile == null); + mappingListVM.UpdateMappings(); + profileSettingsVM.UpdateLateProperties(); + profileSettingsVM.PopulateTouchDisInver(touchDisInvertBtn.ContextMenu); + profileSettingsVM.PopulateGyroMouseTrig(gyroMouseTrigBtn.ContextMenu); + profileSettingsVM.PopulateGyroMouseStickTrig(gyroMouseStickTrigBtn.ContextMenu); + profileSettingsTabCon.DataContext = profileSettingsVM; + touchpadSettingsPanel.DataContext = profileSettingsVM; + mappingListBox.DataContext = mappingListVM; + specialActionsTab.DataContext = specialActionsVM; + lightbarRect.DataContext = profileSettingsVM; + + conReadingsUserCon.LsDead = profileSettingsVM.LSDeadZone; + conReadingsUserCon.RsDead = profileSettingsVM.RSDeadZone; + conReadingsUserCon.L2Dead = profileSettingsVM.L2DeadZone; + conReadingsUserCon.R2Dead = profileSettingsVM.R2DeadZone; + conReadingsUserCon.SixAxisXDead = profileSettingsVM.SXDeadZone; + conReadingsUserCon.SixAxisZDead = profileSettingsVM.SZDeadZone; + + if (profileSettingsVM.UseControllerReadout) + { + inputTimer.Start(); + } + } + + private void CancelBtn_Click(object sender, RoutedEventArgs e) + { + if (profileSettingsVM.FuncDevNum < 4) + { + App.rootHub.setRumble(0, 0, profileSettingsVM.FuncDevNum); + } + DS4Windows.Global.outDevTypeTemp[deviceNum] = DS4Windows.OutContType.X360; + DS4Windows.Global.LoadProfile(deviceNum, false, App.rootHub); + Closed?.Invoke(this, EventArgs.Empty); + } + + private void HoverConBtn_Click(object sender, RoutedEventArgs e) + { + MappedControl mpControl = mappingListVM.Mappings[mappingListVM.SelectedIndex]; + BindingWindow window = new BindingWindow(deviceNum, mpControl.Setting); + window.Owner = App.Current.MainWindow; + window.ShowDialog(); + mpControl.UpdateMappingName(); + UpdateHighlightLabel(mpControl); + } + + private void InputControlHighlight(Button control) + { + if (hoverImages.TryGetValue(control, out ImageBrush tempBrush)) + { + picBoxHover.Source = tempBrush.ImageSource; + //picBoxHover.Width = tempBrush.ImageSource.Width * .8; + //picBoxHover.Height = tempBrush.ImageSource.Height * .8; + //control.Background = tempBrush; + //control.Background = new SolidColorBrush(Colors.Green); + //control.Width = tempBrush.ImageSource.Width; + //control.Height = tempBrush.ImageSource.Height; + } + + if (hoverLocations.TryGetValue(control, out HoverImageInfo tempInfo)) + { + Canvas.SetLeft(picBoxHover, tempInfo.point.X); + Canvas.SetTop(picBoxHover, tempInfo.point.Y); + picBoxHover.Width = tempInfo.size.Width; + picBoxHover.Height = tempInfo.size.Height; + picBoxHover.Stretch = Stretch.Fill; + picBoxHover.Visibility = Visibility.Visible; + } + + if (hoverIndexes.TryGetValue(control, out int tempIndex)) + { + mappingListVM.SelectedIndex = tempIndex; + mappingListBox.ScrollIntoView(mappingListBox.SelectedItem); + MappedControl mapped = mappingListVM.Mappings[tempIndex]; + UpdateHighlightLabel(mapped); + } + } + + private void UpdateHighlightLabel(MappedControl mapped) + { + string display = $"{mapped.ControlName}: {mapped.MappingName}"; + if (mapped.HasShiftAction()) + { + display += "\nShift: "; + display += mapped.ShiftMappingName; + } + + highlightControlDisplayLb.Content = display; + } + + private void ContBtn_MouseEnter(object sender, MouseEventArgs e) + { + Button control = sender as Button; + InputControlHighlight(control); + } + + private void ContBtn_MouseLeave(object sender, MouseEventArgs e) + { + //Button control = sender as Button; + //control.Background = new SolidColorBrush(Colors.Transparent); + Canvas.SetLeft(picBoxHover, 0); + Canvas.SetTop(picBoxHover, 0); + picBoxHover.Visibility = Visibility.Hidden; + } + + private void UseTouchMouseRadio_Click(object sender, RoutedEventArgs e) + { + activeTouchPanel.Visibility = Visibility.Collapsed; + useMousePanel.Visibility = Visibility.Visible; + activeTouchPanel = useMousePanel; + profileSettingsVM.UseTouchMouse = true; + } + + private void UseTouchControlsRadio_Click(object sender, RoutedEventArgs e) + { + activeTouchPanel.Visibility = Visibility.Collapsed; + useControlsPanel.Visibility = Visibility.Visible; + activeTouchPanel = useControlsPanel; + profileSettingsVM.UseTouchMouse = false; + } + + private void GyroOutModeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + int idx = gyroOutModeCombo.SelectedIndex; + if (idx >= 0) + { + activeGyroModePanel.Visibility = Visibility.Collapsed; + + if (idx == 0) + { + activeGyroModePanel = gyroControlsPanel; + } + else if (idx == 1) + { + activeGyroModePanel = gyroMousePanel; + } + else if (idx == 2) + { + activeGyroModePanel = gyroMouseJoystickPanel; + } + + activeGyroModePanel.Visibility = Visibility.Visible; + + if (deviceNum < 4) + { + App.rootHub.touchPad[deviceNum]?.ResetToggleGyroM(); + } + } + } + + private void SetLateProperties() + { + DS4Windows.Global.BTPollRate[deviceNum] = profileSettingsVM.TempBTPollRateIndex; + DS4Windows.Global.OutContType[deviceNum] = profileSettingsVM.TempConType; + DS4Windows.Global.outDevTypeTemp[deviceNum] = DS4Windows.OutContType.X360; + } + + private void SaveBtn_Click(object sender, RoutedEventArgs e) + { + if (profileSettingsVM.FuncDevNum < 4) + { + App.rootHub.setRumble(0, 0, profileSettingsVM.FuncDevNum); + } + + string temp = profileNameTxt.Text; + if (!string.IsNullOrWhiteSpace(temp) && + temp.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) == -1) + { + SetLateProperties(); + DS4Windows.Global.ProfilePath[deviceNum] = + DS4Windows.Global.OlderProfilePath[deviceNum] = temp; + + if (currentProfile != null) + { + if (temp != currentProfile.Name) + { + //File.Delete(DS4Windows.Global.appdatapath + @"\Profiles\" + currentProfile.Name + ".xml"); + currentProfile.DeleteFile(); + currentProfile.Name = temp; + } + } + + if (currentProfile != null) + { + currentProfile.SaveProfile(deviceNum); + currentProfile.FireSaved(); + Closed?.Invoke(this, EventArgs.Empty); + } + else + { + string tempprof = Global.appdatapath + @"\Profiles\" + temp + ".xml"; + if (!File.Exists(tempprof)) + { + Global.SaveProfile(deviceNum, temp); + Global.calculateProfileActionCount(deviceNum); + Global.calculateProfileActionDicts(deviceNum); + Global.cacheProfileCustomsFlags(deviceNum); + CreatedProfile?.Invoke(this, temp); + Closed?.Invoke(this, EventArgs.Empty); + } + else + { + MessageBox.Show(Properties.Resources.ValidName, Properties.Resources.NotValid, + MessageBoxButton.OK, MessageBoxImage.Exclamation); + } + } + } + else + { + MessageBox.Show(Properties.Resources.ValidName, Properties.Resources.NotValid, + MessageBoxButton.OK, MessageBoxImage.Exclamation); + } + } + + private void KeepSizeBtn_Click(object sender, RoutedEventArgs e) + { + keepsize = true; + ImageSourceConverter c = new ImageSourceConverter(); + sizeImage.Source = c.ConvertFromString("pack://application:,,,/DS4Windows;component/Resources/checked.png") as ImageSource; + } + + public void Close() + { + if (profileSettingsVM.FuncDevNum < 4) + { + App.rootHub.setRumble(0, 0, profileSettingsVM.FuncDevNum); + } + + Closed?.Invoke(this, EventArgs.Empty); + } + + private void ColorByBatteryPerCk_Click(object sender, RoutedEventArgs e) + { + ColorByBatteryPerCheck(); + } + + private void ColorByBatteryPerCheck() + { + bool state = profileSettingsVM.ColorBatteryPercent; + if (state) + { + colorGB.Header = Translations.Strings.Full; + emptyColorGB.Visibility = Visibility.Visible; + } + else + { + colorGB.Header = Translations.Strings.Color; + emptyColorGB.Visibility = Visibility.Hidden; + } + } + + private void FlashColorBtn_Click(object sender, RoutedEventArgs e) + { + ColorPickerWindow dialog = new ColorPickerWindow(); + dialog.Owner = Application.Current.MainWindow; + Color tempcolor = profileSettingsVM.FlashColorMedia; + dialog.colorPicker.SelectedColor = tempcolor; + profileSettingsVM.StartForcedColor(tempcolor); + dialog.ColorChanged += (sender2, color) => + { + profileSettingsVM.UpdateForcedColor(color); + }; + dialog.ShowDialog(); + profileSettingsVM.EndForcedColor(); + profileSettingsVM.UpdateFlashColor(dialog.colorPicker.SelectedColor.GetValueOrDefault()); + } + + private void LowColorBtn_Click(object sender, RoutedEventArgs e) + { + ColorPickerWindow dialog = new ColorPickerWindow(); + dialog.Owner = Application.Current.MainWindow; + Color tempcolor = profileSettingsVM.LowColorMedia; + dialog.colorPicker.SelectedColor = tempcolor; + profileSettingsVM.StartForcedColor(tempcolor); + dialog.ColorChanged += (sender2, color) => + { + profileSettingsVM.UpdateForcedColor(color); + }; + dialog.ShowDialog(); + profileSettingsVM.EndForcedColor(); + profileSettingsVM.UpdateLowColor(dialog.colorPicker.SelectedColor.GetValueOrDefault()); + } + + private void HeavyRumbleTestBtn_Click(object sender, RoutedEventArgs e) + { + int deviceNum = profileSettingsVM.FuncDevNum; + if (deviceNum < 4) + { + DS4Device d = App.rootHub.DS4Controllers[deviceNum]; + if (d != null) + { + bool rumbleActive = profileSettingsVM.HeavyRumbleActive; + if (!rumbleActive) + { + profileSettingsVM.HeavyRumbleActive = true; + d.setRumble(d.LeftHeavySlowRumble, + (byte)Math.Min(255, 255 * profileSettingsVM.RumbleBoost / 100)); + heavyRumbleTestBtn.Content = Properties.Resources.StopHText; + } + else + { + profileSettingsVM.HeavyRumbleActive = false; + d.setRumble(0, 0); + heavyRumbleTestBtn.Content = Properties.Resources.TestHText; + } + } + } + } + + private void LightRumbleTestBtn_Click(object sender, RoutedEventArgs e) + { + int deviceNum = profileSettingsVM.FuncDevNum; + if (deviceNum < 4) + { + DS4Device d = App.rootHub.DS4Controllers[deviceNum]; + if (d != null) + { + bool rumbleActive = profileSettingsVM.LightRumbleActive; + if (!rumbleActive) + { + profileSettingsVM.LightRumbleActive = true; + d.setRumble((byte)Math.Min(255, 255 * profileSettingsVM.RumbleBoost / 100), + d.RightLightFastRumble); + lightRumbleTestBtn.Content = Properties.Resources.StopLText; + } + else + { + profileSettingsVM.LightRumbleActive = false; + d.setRumble(0, 0); + lightRumbleTestBtn.Content = Properties.Resources.TestLText; + } + } + } + } + + private void CustomEditorBtn_Click(object sender, RoutedEventArgs e) + { + Button btn = sender as Button; + string tag = btn.Tag.ToString(); + if (tag == "LS") LaunchCurveEditor(profileSettingsVM.LSCustomCurve); + else if (tag == "RS") LaunchCurveEditor(profileSettingsVM.RSCustomCurve); + else if (tag == "L2") LaunchCurveEditor(profileSettingsVM.L2CustomCurve); + else if (tag == "R2") LaunchCurveEditor(profileSettingsVM.R2CustomCurve); + else if (tag == "SX") LaunchCurveEditor(profileSettingsVM.SXCustomCurve); + else if (tag == "SZ") LaunchCurveEditor(profileSettingsVM.SZCustomCurve); + } + + private void LaunchCurveEditor(string customDefinition) + { + profileSettingsVM.LaunchCurveEditor(customDefinition); + } + + private void LaunchProgBrowseBtn_Click(object sender, RoutedEventArgs e) + { + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Multiselect = false; + dialog.AddExtension = true; + dialog.DefaultExt = ".exe"; + dialog.Filter = "Program (*.exe)|*.exe"; + dialog.Title = "Select Program"; + + dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); + if (dialog.ShowDialog() == true) + { + profileSettingsVM.UpdateLaunchProgram(dialog.FileName); + } + } + + private void FrictionUD_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + if (deviceNum < 4) + { + App.rootHub.touchPad[deviceNum]?.ResetTrackAccel(frictionUD.Value.GetValueOrDefault()); + } + } + + private void RainbowBtn_Click(object sender, RoutedEventArgs e) + { + bool active = profileSettingsVM.Rainbow != 0.0; + if (active) + { + profileSettingsVM.Rainbow = 0.0; + colorByBatteryPerCk.Content = Properties.Resources.ColorByBattery; + colorGB.IsEnabled = true; + emptyColorGB.IsEnabled = true; + } + else + { + profileSettingsVM.Rainbow = 5.0; + colorByBatteryPerCk.Content = Properties.Resources.DimByBattery; + colorGB.IsEnabled = false; + emptyColorGB.IsEnabled = false; + } + } + + private void ChargingColorBtn_Click(object sender, RoutedEventArgs e) + { + ColorPickerWindow dialog = new ColorPickerWindow(); + dialog.Owner = Application.Current.MainWindow; + Color tempcolor = profileSettingsVM.ChargingColorMedia; + dialog.colorPicker.SelectedColor = tempcolor; + profileSettingsVM.StartForcedColor(tempcolor); + dialog.ColorChanged += (sender2, color) => + { + profileSettingsVM.UpdateForcedColor(color); + }; + dialog.ShowDialog(); + profileSettingsVM.EndForcedColor(); + profileSettingsVM.UpdateChargingColor(dialog.colorPicker.SelectedColor.GetValueOrDefault()); + } + + private void SteeringWheelEmulationCalibrateBtn_Click(object sender, RoutedEventArgs e) + { + if (profileSettingsVM.SASteeringWheelEmulationAxisIndex > 0) + { + DS4Windows.DS4Device d = App.rootHub.DS4Controllers[profileSettingsVM.FuncDevNum]; + if (d != null) + { + System.Drawing.Point origWheelCenterPoint = new System.Drawing.Point(d.wheelCenterPoint.X, d.wheelCenterPoint.Y); + System.Drawing.Point origWheel90DegPointLeft = new System.Drawing.Point(d.wheel90DegPointLeft.X, d.wheel90DegPointLeft.Y); + System.Drawing.Point origWheel90DegPointRight = new System.Drawing.Point(d.wheel90DegPointRight.X, d.wheel90DegPointRight.Y); + + d.WheelRecalibrateActiveState = 1; + + MessageBoxResult result = MessageBox.Show($"{Properties.Resources.SASteeringWheelEmulationCalibrate}.\n\n" + + $"{Properties.Resources.SASteeringWheelEmulationCalibrateInstruction1}.\n" + + $"{Properties.Resources.SASteeringWheelEmulationCalibrateInstruction2}.\n" + + $"{Properties.Resources.SASteeringWheelEmulationCalibrateInstruction3}.\n\n" + + $"{Properties.Resources.SASteeringWheelEmulationCalibrateInstruction}.\n", + Properties.Resources.SASteeringWheelEmulationCalibrate, MessageBoxButton.OKCancel, MessageBoxImage.Information, MessageBoxResult.OK); + + if (result == MessageBoxResult.OK) + { + // Accept new calibration values (State 3 is "Complete calibration" state) + d.WheelRecalibrateActiveState = 3; + } + else + { + // Cancel calibration and reset back to original calibration values + d.WheelRecalibrateActiveState = 4; + + d.wheelFullTurnCount = 0; + d.wheelCenterPoint = origWheelCenterPoint; + d.wheel90DegPointLeft = origWheel90DegPointLeft; + d.wheel90DegPointRight = origWheel90DegPointRight; + } + } + else + { + MessageBox.Show($"{Properties.Resources.SASteeringWheelEmulationCalibrateNoControllerError}."); + } + } + } + + private void TouchDisInvertBtn_Click(object sender, RoutedEventArgs e) + { + touchDisInvertBtn.ContextMenu.IsOpen = true; + } + + private void TouchDisInvertMenuItem_Click(object sender, RoutedEventArgs e) + { + profileSettingsVM.UpdateTouchDisInvert(touchDisInvertBtn.ContextMenu); + } + + private void GyroMouseTrigMenuItem_Click(object sender, RoutedEventArgs e) + { + ContextMenu menu = gyroMouseTrigBtn.ContextMenu; + int itemCount = menu.Items.Count; + MenuItem alwaysOnItem = menu.Items[itemCount - 1] as MenuItem; + + profileSettingsVM.UpdateGyroMouseTrig(menu, e.OriginalSource == alwaysOnItem); + } + + private void GyroMouseStickTrigMenuItem_Click(object sender, RoutedEventArgs e) + { + ContextMenu menu = gyroMouseStickTrigBtn.ContextMenu; + int itemCount = menu.Items.Count; + MenuItem alwaysOnItem = menu.Items[itemCount - 1] as MenuItem; + + profileSettingsVM.UpdateGyroMouseStickTrig(menu, e.OriginalSource == alwaysOnItem); + } + + private void GyroMouseTrigBtn_Click(object sender, RoutedEventArgs e) + { + gyroMouseTrigBtn.ContextMenu.IsOpen = true; + } + + private void GyroMouseStickTrigBtn_Click(object sender, RoutedEventArgs e) + { + gyroMouseStickTrigBtn.ContextMenu.IsOpen = true; + } + + private void OutConTypeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + int index = outConTypeCombo.SelectedIndex; + if (index >= 0) + { + mappingListVM.UpdateMappingDevType(profileSettingsVM.TempConType); + } + } + + private void NewActionBtn_Click(object sender, RoutedEventArgs e) + { + baseSpeActPanel.Visibility = Visibility.Collapsed; + ProfileList profList = (Application.Current.MainWindow as MainWindow).ProfileListHolder; + SpecialActionEditor actEditor = new SpecialActionEditor(deviceNum, profList, null); + specialActionDockPanel.Children.Add(actEditor); + actEditor.Visibility = Visibility.Visible; + actEditor.Cancel += (sender2, args) => + { + specialActionDockPanel.Children.Remove(actEditor); + baseSpeActPanel.Visibility = Visibility.Visible; + }; + actEditor.Saved += (sender2, actionName) => + { + DS4Windows.SpecialAction action = DS4Windows.Global.GetAction(actionName); + SpecialActionItem newitem = specialActionsVM.CreateActionItem(action); + specialActionsVM.ActionCol.Add(newitem); + specialActionDockPanel.Children.Remove(actEditor); + baseSpeActPanel.Visibility = Visibility.Visible; + }; + } + + private void EditActionBtn_Click(object sender, RoutedEventArgs e) + { + if (specialActionsVM.SpecialActionIndex >= 0) + { + int currentIndex = specialActionsVM.SpecialActionIndex; + SpecialActionItem item = specialActionsVM.ActionCol[specialActionsVM.SpecialActionIndex]; + baseSpeActPanel.Visibility = Visibility.Collapsed; + ProfileList profList = (Application.Current.MainWindow as MainWindow).ProfileListHolder; + SpecialActionEditor actEditor = new SpecialActionEditor(deviceNum, profList, item.SpecialAction); + specialActionDockPanel.Children.Add(actEditor); + actEditor.Visibility = Visibility.Visible; + actEditor.Cancel += (sender2, args) => + { + specialActionDockPanel.Children.Remove(actEditor); + baseSpeActPanel.Visibility = Visibility.Visible; + }; + actEditor.Saved += (sender2, actionName) => + { + DS4Windows.SpecialAction action = DS4Windows.Global.GetAction(actionName); + SpecialActionItem newitem = specialActionsVM.CreateActionItem(action); + newitem.Active = item.Active; + specialActionsVM.ActionCol.RemoveAt(currentIndex); + specialActionsVM.ActionCol.Insert(currentIndex, newitem); + specialActionDockPanel.Children.Remove(actEditor); + baseSpeActPanel.Visibility = Visibility.Visible; + }; + } + } + + private void RemoveActionBtn_Click(object sender, RoutedEventArgs e) + { + if (specialActionsVM.SpecialActionIndex >= 0) + { + SpecialActionItem item = specialActionsVM.ActionCol[specialActionsVM.SpecialActionIndex]; + specialActionsVM.RemoveAction(item); + } + } + + private void SpecialActionCheckBox_Click(object sender, RoutedEventArgs e) + { + specialActionsVM.ExportEnabledActions(); + } + + private void Ds4LightbarColorBtn_MouseEnter(object sender, MouseEventArgs e) + { + highlightControlDisplayLb.Content = "Click the lightbar for color picker"; + } + + private void Ds4LightbarColorBtn_MouseLeave(object sender, MouseEventArgs e) + { + highlightControlDisplayLb.Content = ""; + } + + private void Ds4LightbarColorBtn_Click(object sender, RoutedEventArgs e) + { + ColorPickerWindow dialog = new ColorPickerWindow(); + dialog.Owner = Application.Current.MainWindow; + Color tempcolor = profileSettingsVM.MainColor; + dialog.colorPicker.SelectedColor = tempcolor; + profileSettingsVM.StartForcedColor(tempcolor); + dialog.ColorChanged += (sender2, color) => + { + profileSettingsVM.UpdateForcedColor(color); + }; + dialog.ShowDialog(); + profileSettingsVM.EndForcedColor(); + profileSettingsVM.UpdateMainColor(dialog.colorPicker.SelectedColor.GetValueOrDefault()); + } + + private void InputDS4(object sender, System.Timers.ElapsedEventArgs e) + { + inputTimer.Stop(); + + bool activeWin = false; + int tempDeviceNum = 0; + Dispatcher.Invoke(() => + { + activeWin = Application.Current.MainWindow.IsActive; + tempDeviceNum = profileSettingsVM.FuncDevNum; + }); + + if (activeWin && profileSettingsVM.UseControllerReadout) + { + int index = -1; + switch(Program.rootHub.GetActiveInputControl(tempDeviceNum)) + { + case DS4Controls.None: break; + case DS4Controls.Cross: index = 0; break; + case DS4Controls.Circle: index = 1; break; + case DS4Controls.Square: index = 2; break; + case DS4Controls.Triangle: index = 3; break; + case DS4Controls.Options: index = 4; break; + case DS4Controls.Share: index = 5; break; + case DS4Controls.DpadUp: index = 6; break; + case DS4Controls.DpadDown: index = 7; break; + case DS4Controls.DpadLeft: index = 8; break; + case DS4Controls.DpadRight: index = 9; break; + case DS4Controls.PS: index = 10; break; + case DS4Controls.L1: index = 11; break; + case DS4Controls.R1: index = 12; break; + case DS4Controls.L2: index = 13; break; + case DS4Controls.R2: index = 14; break; + case DS4Controls.L3: index = 15; break; + case DS4Controls.R3: index = 16; break; + case DS4Controls.TouchLeft: index = 17; break; + case DS4Controls.TouchRight: index = 18; break; + case DS4Controls.TouchMulti: index = 19; break; + case DS4Controls.TouchUpper: index = 20; break; + case DS4Controls.LYNeg: index = 21; break; + case DS4Controls.LYPos: index = 22; break; + case DS4Controls.LXNeg: index = 23; break; + case DS4Controls.LXPos: index = 24; break; + case DS4Controls.RYNeg: index = 25; break; + case DS4Controls.RYPos: index = 26; break; + case DS4Controls.RXNeg: index = 27; break; + case DS4Controls.RXPos: index = 28; break; + default: break; + } + + if (index >= 0) + { + Dispatcher.BeginInvoke((Action)(() => + { + mappingListVM.SelectedIndex = index; + ShowControlBindingWindow(); + })); + } + } + + if (profileSettingsVM.UseControllerReadout) + { + inputTimer.Start(); + } + } + private void ProfileEditor_Closed(object sender, EventArgs e) + { + profileSettingsVM.UseControllerReadout = false; + inputTimer.Stop(); + conReadingsUserCon.EnableControl(false); + } + + private void UseControllerReadoutCk_Click(object sender, RoutedEventArgs e) + { + if (profileSettingsVM.UseControllerReadout && profileSettingsVM.Device < 4) + { + inputTimer.Start(); + } + else + { + inputTimer.Stop(); + } + } + + private void ShowControlBindingWindow() + { + MappedControl mpControl = mappingListVM.Mappings[mappingListVM.SelectedIndex]; + BindingWindow window = new BindingWindow(deviceNum, mpControl.Setting); + window.Owner = App.Current.MainWindow; + window.ShowDialog(); + mpControl.UpdateMappingName(); + UpdateHighlightLabel(mpControl); + } + + private void MappingListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + if (mappingListVM.SelectedIndex >= 0) + { + ShowControlBindingWindow(); + } + } + + private void SidebarTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (sidebarTabControl.SelectedItem == contReadingsTab) + { + controllerReadingsTabActive = true; + conReadingsUserCon.EnableControl(true); + } + else if (controllerReadingsTabActive) + { + controllerReadingsTabActive = false; + conReadingsUserCon.EnableControl(false); + } + } + } +} diff --git a/DS4Windows/DS4Forms/RecordBox.Designer.cs b/DS4Windows/DS4Forms/RecordBox.Designer.cs deleted file mode 100644 index aec95a8..0000000 --- a/DS4Windows/DS4Forms/RecordBox.Designer.cs +++ /dev/null @@ -1,330 +0,0 @@ -namespace DS4Windows.Forms -{ - partial class RecordBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordBox)); - this.btnRecord = new System.Windows.Forms.Button(); - this.cBRecordDelays = new System.Windows.Forms.CheckBox(); - this.lVMacros = new System.Windows.Forms.ListView(); - this.cHMacro = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.iLKeys = new System.Windows.Forms.ImageList(this.components); - this.cBStyle = new System.Windows.Forms.ComboBox(); - this.btnSave = new System.Windows.Forms.Button(); - this.btnCancel = new System.Windows.Forms.Button(); - this.btnSaveP = new System.Windows.Forms.Button(); - this.lbRecordTip = new System.Windows.Forms.Label(); - this.pnlMouseButtons = new System.Windows.Forms.Panel(); - this.pBRtouch = new System.Windows.Forms.PictureBox(); - this.pBLtouch = new System.Windows.Forms.PictureBox(); - this.btnLightbar = new System.Windows.Forms.Button(); - this.btnRumble = new System.Windows.Forms.Button(); - this.btn5th = new System.Windows.Forms.Button(); - this.btn4th = new System.Windows.Forms.Button(); - this.btnLoadP = new System.Windows.Forms.Button(); - this.savePresets = new System.Windows.Forms.SaveFileDialog(); - this.openPresets = new System.Windows.Forms.OpenFileDialog(); - this.lbMacroOrder = new System.Windows.Forms.Label(); - this.lbDelayTip = new System.Windows.Forms.Label(); - this.cMSLoadPresets = new System.Windows.Forms.ContextMenuStrip(this.components); - this.altTabToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.fromFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.pnlMouseButtons.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pBRtouch)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pBLtouch)).BeginInit(); - this.cMSLoadPresets.SuspendLayout(); - this.SuspendLayout(); - // - // btnRecord - // - resources.ApplyResources(this.btnRecord, "btnRecord"); - this.btnRecord.Name = "btnRecord"; - this.btnRecord.TabStop = false; - this.btnRecord.UseVisualStyleBackColor = true; - this.btnRecord.Click += new System.EventHandler(this.btnRecord_Click); - this.btnRecord.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.btnRecord.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - // - // cBRecordDelays - // - resources.ApplyResources(this.cBRecordDelays, "cBRecordDelays"); - this.cBRecordDelays.Name = "cBRecordDelays"; - this.cBRecordDelays.TabStop = false; - this.cBRecordDelays.UseVisualStyleBackColor = true; - this.cBRecordDelays.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.cBRecordDelays.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - this.cBRecordDelays.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown); - this.cBRecordDelays.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp); - // - // lVMacros - // - resources.ApplyResources(this.lVMacros, "lVMacros"); - this.lVMacros.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.cHMacro}); - this.lVMacros.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.lVMacros.HideSelection = false; - this.lVMacros.LargeImageList = this.iLKeys; - this.lVMacros.MultiSelect = false; - this.lVMacros.Name = "lVMacros"; - this.lVMacros.SmallImageList = this.iLKeys; - this.lVMacros.TileSize = new System.Drawing.Size(180, 30); - this.lVMacros.UseCompatibleStateImageBehavior = false; - this.lVMacros.View = System.Windows.Forms.View.Details; - this.lVMacros.SelectedIndexChanged += new System.EventHandler(this.lVMacros_SelectedIndexChanged); - this.lVMacros.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.lVMacros.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - this.lVMacros.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lVMacros_MouseDoubleClick); - this.lVMacros.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown); - this.lVMacros.MouseHover += new System.EventHandler(this.lVMacros_MouseHover); - this.lVMacros.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp); - // - // cHMacro - // - resources.ApplyResources(this.cHMacro, "cHMacro"); - // - // iLKeys - // - this.iLKeys.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("iLKeys.ImageStream"))); - this.iLKeys.TransparentColor = System.Drawing.Color.Transparent; - this.iLKeys.Images.SetKeyName(0, "keydown.png"); - this.iLKeys.Images.SetKeyName(1, "keyup.png"); - this.iLKeys.Images.SetKeyName(2, "Clock.png"); - // - // cBStyle - // - resources.ApplyResources(this.cBStyle, "cBStyle"); - this.cBStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cBStyle.FormattingEnabled = true; - this.cBStyle.Items.AddRange(new object[] { - resources.GetString("cBStyle.Items"), - resources.GetString("cBStyle.Items1")}); - this.cBStyle.Name = "cBStyle"; - // - // btnSave - // - resources.ApplyResources(this.btnSave, "btnSave"); - this.btnSave.Name = "btnSave"; - this.btnSave.UseVisualStyleBackColor = true; - this.btnSave.Click += new System.EventHandler(this.btnSave_Click); - // - // btnCancel - // - resources.ApplyResources(this.btnCancel, "btnCancel"); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.UseVisualStyleBackColor = true; - this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); - // - // btnSaveP - // - resources.ApplyResources(this.btnSaveP, "btnSaveP"); - this.btnSaveP.Name = "btnSaveP"; - this.btnSaveP.UseVisualStyleBackColor = true; - this.btnSaveP.Click += new System.EventHandler(this.btnSaveP_Click); - // - // lbRecordTip - // - resources.ApplyResources(this.lbRecordTip, "lbRecordTip"); - this.lbRecordTip.Name = "lbRecordTip"; - // - // pnlMouseButtons - // - resources.ApplyResources(this.pnlMouseButtons, "pnlMouseButtons"); - this.pnlMouseButtons.Controls.Add(this.pBRtouch); - this.pnlMouseButtons.Controls.Add(this.pBLtouch); - this.pnlMouseButtons.Controls.Add(this.btnLightbar); - this.pnlMouseButtons.Controls.Add(this.btnRumble); - this.pnlMouseButtons.Controls.Add(this.btn5th); - this.pnlMouseButtons.Controls.Add(this.btn4th); - this.pnlMouseButtons.Name = "pnlMouseButtons"; - this.pnlMouseButtons.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown); - this.pnlMouseButtons.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp); - // - // pBRtouch - // - this.pBRtouch.Image = global::DS4Windows.Properties.Resources.right_touch; - resources.ApplyResources(this.pBRtouch, "pBRtouch"); - this.pBRtouch.Name = "pBRtouch"; - this.pBRtouch.TabStop = false; - // - // pBLtouch - // - this.pBLtouch.Image = global::DS4Windows.Properties.Resources.left_touch; - resources.ApplyResources(this.pBLtouch, "pBLtouch"); - this.pBLtouch.Name = "pBLtouch"; - this.pBLtouch.TabStop = false; - // - // btnLightbar - // - resources.ApplyResources(this.btnLightbar, "btnLightbar"); - this.btnLightbar.Name = "btnLightbar"; - this.btnLightbar.UseVisualStyleBackColor = true; - this.btnLightbar.Click += new System.EventHandler(this.btnLightbar_Click); - this.btnLightbar.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.btnLightbar.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - // - // btnRumble - // - resources.ApplyResources(this.btnRumble, "btnRumble"); - this.btnRumble.Name = "btnRumble"; - this.btnRumble.UseVisualStyleBackColor = true; - this.btnRumble.Click += new System.EventHandler(this.btnRumble_Click); - this.btnRumble.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.btnRumble.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - // - // btn5th - // - resources.ApplyResources(this.btn5th, "btn5th"); - this.btn5th.Name = "btn5th"; - this.btn5th.UseVisualStyleBackColor = true; - this.btn5th.Click += new System.EventHandler(this.btn5th_Click); - this.btn5th.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.btn5th.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - // - // btn4th - // - resources.ApplyResources(this.btn4th, "btn4th"); - this.btn4th.Name = "btn4th"; - this.btn4th.UseVisualStyleBackColor = true; - this.btn4th.Click += new System.EventHandler(this.btn4th_Click); - this.btn4th.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.btn4th.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - // - // btnLoadP - // - resources.ApplyResources(this.btnLoadP, "btnLoadP"); - this.btnLoadP.Name = "btnLoadP"; - this.btnLoadP.UseVisualStyleBackColor = true; - this.btnLoadP.Click += new System.EventHandler(this.btnLoadP_Click); - // - // savePresets - // - resources.ApplyResources(this.savePresets, "savePresets"); - // - // openPresets - // - resources.ApplyResources(this.openPresets, "openPresets"); - // - // lbMacroOrder - // - resources.ApplyResources(this.lbMacroOrder, "lbMacroOrder"); - this.lbMacroOrder.Name = "lbMacroOrder"; - // - // lbDelayTip - // - resources.ApplyResources(this.lbDelayTip, "lbDelayTip"); - this.lbDelayTip.Name = "lbDelayTip"; - // - // cMSLoadPresets - // - this.cMSLoadPresets.ImageScalingSize = new System.Drawing.Size(20, 20); - this.cMSLoadPresets.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.altTabToolStripMenuItem, - this.fromFileToolStripMenuItem}); - this.cMSLoadPresets.Name = "cMSLoadPresets"; - this.cMSLoadPresets.ShowImageMargin = false; - resources.ApplyResources(this.cMSLoadPresets, "cMSLoadPresets"); - // - // altTabToolStripMenuItem - // - this.altTabToolStripMenuItem.Name = "altTabToolStripMenuItem"; - resources.ApplyResources(this.altTabToolStripMenuItem, "altTabToolStripMenuItem"); - this.altTabToolStripMenuItem.Click += new System.EventHandler(this.altTabToolStripMenuItem_Click); - // - // fromFileToolStripMenuItem - // - this.fromFileToolStripMenuItem.Name = "fromFileToolStripMenuItem"; - resources.ApplyResources(this.fromFileToolStripMenuItem, "fromFileToolStripMenuItem"); - this.fromFileToolStripMenuItem.Click += new System.EventHandler(this.fromFileToolStripMenuItem_Click); - // - // RecordBox - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.Controls.Add(this.lbMacroOrder); - this.Controls.Add(this.cBStyle); - this.Controls.Add(this.btnSaveP); - this.Controls.Add(this.cBRecordDelays); - this.Controls.Add(this.btnLoadP); - this.Controls.Add(this.lbDelayTip); - this.Controls.Add(this.lbRecordTip); - this.Controls.Add(this.btnRecord); - this.Controls.Add(this.lVMacros); - this.Controls.Add(this.btnCancel); - this.Controls.Add(this.btnSave); - this.Controls.Add(this.pnlMouseButtons); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "RecordBox"; - this.ShowInTaskbar = false; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.RecordBox_FormClosing); - this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown); - this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp); - this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown); - this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp); - this.Resize += new System.EventHandler(this.RecordBox_Resize); - this.pnlMouseButtons.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pBRtouch)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pBLtouch)).EndInit(); - this.cMSLoadPresets.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnRecord; - private System.Windows.Forms.CheckBox cBRecordDelays; - private System.Windows.Forms.ListView lVMacros; - private System.Windows.Forms.ImageList iLKeys; - private System.Windows.Forms.ColumnHeader cHMacro; - private System.Windows.Forms.ComboBox cBStyle; - private System.Windows.Forms.Button btnSave; - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.Panel pnlMouseButtons; - private System.Windows.Forms.Button btn5th; - private System.Windows.Forms.Button btn4th; - private System.Windows.Forms.Label lbRecordTip; - private System.Windows.Forms.Button btnSaveP; - private System.Windows.Forms.Button btnLoadP; - private System.Windows.Forms.SaveFileDialog savePresets; - private System.Windows.Forms.OpenFileDialog openPresets; - private System.Windows.Forms.Label lbMacroOrder; - private System.Windows.Forms.Label lbDelayTip; - private System.Windows.Forms.ContextMenuStrip cMSLoadPresets; - private System.Windows.Forms.ToolStripMenuItem altTabToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem fromFileToolStripMenuItem; - private System.Windows.Forms.Button btnLightbar; - private System.Windows.Forms.Button btnRumble; - private System.Windows.Forms.PictureBox pBRtouch; - private System.Windows.Forms.PictureBox pBLtouch; - } -} \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.ar.resx b/DS4Windows/DS4Forms/RecordBox.ar.resx deleted file mode 100644 index f0ea8f6..0000000 --- a/DS4Windows/DS4Forms/RecordBox.ar.resx +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - بدل البرامج - - - عدل الإنتظار لتغيير معدل الدورات - - - رابع زر للفأرة للأسفل - - - خامس زر للفأرة للأسفل - - - ألغي - - - غير لون الضوء - - - حمل المجهّز - - - تسجيل - - - أضف اهتزاز - - - احفظ - - - احفظ المجهّز - - - تسجيل التأخر - - - شغل مرة - - - كرر عند التعليق - - - من ملف... - - - ضغطتين عند الإنتظار لتعديل الوقت - - - ترتيب الماكرو - - - أستخدم لوحة المفاتيح/الفأرة + اليد 1 للتسجيل - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.cs b/DS4Windows/DS4Forms/RecordBox.cs deleted file mode 100644 index 8df818c..0000000 --- a/DS4Windows/DS4Forms/RecordBox.cs +++ /dev/null @@ -1,1388 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using NonFormTimer = System.Timers.Timer; - -using System.IO; -using System.Reflection; - -namespace DS4Windows.Forms -{ - public partial class RecordBox : Form - { - Stopwatch sw = new Stopwatch(); - //Timer ds4 = new Timer(); - NonFormTimer ds4 = new NonFormTimer(); - public List macros = new List(), macrosAfter = new List(); - public List macronames = new List(); - SpecActions sA; - int sAButton = -1; - KBM360 kbm; - DS4State cState; - public bool saved = false; - List dcs = new List(); - TextBox tb1, tb2; - public RecordBox(KBM360 op) - { - kbm = op; - InitializeComponent(); - openPresets.Filter = Properties.Resources.TextDocs + "|*.txt"; - savePresets.Filter = Properties.Resources.TextDocs + "|*.txt"; - if (op != null) - { - if (kbm.macrorepeat) - cBStyle.SelectedIndex = 1; - else - cBStyle.SelectedIndex = 0; - } - - AddtoDS4List(); - //ds4.Tick += ds4_Tick; - ds4.Elapsed += Ds4_Tick; - ds4.Interval = 10; - if (kbm.macrostag.Count > 0) - { - macros.AddRange(kbm.macrostag); - LoadMacro(); - saved = true; - } - } - - public RecordBox(SpecActions op, int button = -1) - { - sA = op; - InitializeComponent(); - if (sA.macrorepeat) - cBStyle.SelectedIndex = 1; - else - cBStyle.SelectedIndex = 0; - - AddtoDS4List(); - if (button > -1) - sAButton = button; - - //ds4.Tick += ds4_Tick; - ds4.Elapsed += Ds4_Tick; - ds4.Interval = 10; - lbRecordTip.Visible = false; - cBStyle.Visible = false; - pnlMouseButtons.Location = new Point(pnlMouseButtons.Location.X, pnlMouseButtons.Location.Y - 75); - if (sAButton > -1) - { - if (sA.multiMacrostag[sAButton].Count > 0) - { - macros.AddRange(sA.multiMacrostag[sAButton]); - LoadMacro(); - saved = true; - } - } - else if (sA.macrostag.Count > 0) - { - macros.AddRange(sA.macrostag); - LoadMacro(); - saved = true; - } - } - - void AddtoDS4List() - { - dcs.Add(DS4Controls.Cross); - dcs.Add(DS4Controls.Circle); - dcs.Add(DS4Controls.Square); - dcs.Add(DS4Controls.Triangle); - dcs.Add(DS4Controls.Options); - dcs.Add(DS4Controls.Share); - dcs.Add(DS4Controls.DpadUp); - dcs.Add(DS4Controls.DpadDown); - dcs.Add(DS4Controls.DpadLeft); - dcs.Add(DS4Controls.DpadRight); - dcs.Add(DS4Controls.PS); - dcs.Add(DS4Controls.L1); - dcs.Add(DS4Controls.R1); - dcs.Add(DS4Controls.L2); - dcs.Add(DS4Controls.R2); - dcs.Add(DS4Controls.L3); - dcs.Add(DS4Controls.R3); - dcs.Add(DS4Controls.LXPos); - dcs.Add(DS4Controls.LXNeg); - dcs.Add(DS4Controls.LYPos); - dcs.Add(DS4Controls.LYNeg); - dcs.Add(DS4Controls.RXPos); - dcs.Add(DS4Controls.RXNeg); - dcs.Add(DS4Controls.RYPos); - dcs.Add(DS4Controls.RYNeg); - } - - void AddMacroValue(int value) - { - if (recordAfter) - macrosAfter.Add(value); - else - macros.Add(value); - } - - bool[] pTP = new bool[4]; - - private void Ds4_Tick(object sender, System.Timers.ElapsedEventArgs e) - { - if (Program.rootHub.DS4Controllers[0] != null) - { - cState = Program.rootHub.getDS4State(0); - this.BeginInvoke((Action)(() => - { - if (btnRecord.Text == Properties.Resources.StopText) - { - if (cBRecordDelays.Checked) - { - Mouse tP = Program.rootHub.touchPad[0]; - if (tP.leftDown && !pTP[0]) - if (!btnRumble.Text.Contains("Stop")) - btnRumble_Click(sender, e); - else if (!tP.leftDown && pTP[0]) - if (btnRumble.Text.Contains("Stop")) - btnRumble_Click(sender, e); - if (tP.rightDown && !pTP[1]) - if (!btnLightbar.Text.Contains("Reset")) - btnLightbar_Click(sender, e); - else if (!tP.rightDown && pTP[1]) - if (btnLightbar.Text.Contains("Reset")) - btnLightbar_Click(sender, e); - pTP[0] = tP.leftDown; - pTP[1] = tP.rightDown; - } - - //foreach (DS4Controls dc in dcs) - for (int controlIndex = 0, dcsLen = dcs.Count; controlIndex < dcsLen; controlIndex++) - { - DS4Controls dc = dcs[controlIndex]; - if (Mapping.getBoolMapping(0, dc, cState, null, null)) - { - int value = DS4ControltoInt(dc); - int count = 0; - int macroLen = macros.Count; - //foreach (int i in macros) - for (int macroIndex = 0; macroIndex < macroLen; macroIndex++) - { - int i = macros[macroIndex]; - if (i == value) - count++; - } - - if (macroLen == 0) - { - AddMacroValue(value); - lVMacros.Items.Add(DS4ControltoX360(dc), 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (count % 2 == 0) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - AddMacroValue(value); - lVMacros.Items.Add(DS4ControltoX360(dc), 0); - } - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - else if (!Mapping.getBoolMapping(0, dc, cState, null, null)) - { - int macroLen = macros.Count; - if (macroLen != 0) - { - int value = DS4ControltoInt(dc); - int count = 0; - //foreach (int i in macros) - for (int macroIndex = 0; macroIndex < macroLen; macroIndex++) - { - int i = macros[macroIndex]; - if (i == value) - count++; - } - - /*for (int i = macros.Count - 1; i >= 0; i--) - if (macros.Count == 261) - count++;*/ - - if (count % 2 == 1) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add(DS4ControltoX360(dc), 1); - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - } - } - } - } - })); - } - } - - public static int DS4ControltoInt(DS4Controls ctrl) - { - switch (ctrl) - { - case DS4Controls.Cross: return 261; - case DS4Controls.Circle: return 262; - case DS4Controls.Square: return 263; - case DS4Controls.Triangle: return 264; - case DS4Controls.Options: return 265; - case DS4Controls.Share: return 266; - case DS4Controls.DpadUp: return 267; - case DS4Controls.DpadDown: return 268; - case DS4Controls.DpadLeft: return 269; - case DS4Controls.DpadRight: return 270; - case DS4Controls.PS: return 271; - case DS4Controls.L1: return 272; - case DS4Controls.R1: return 273; - case DS4Controls.L2: return 274; - case DS4Controls.R2: return 275; - case DS4Controls.L3: return 276; - case DS4Controls.R3: return 277; - case DS4Controls.LXPos: return 278; - case DS4Controls.LXNeg: return 279; - case DS4Controls.LYPos: return 280; - case DS4Controls.LYNeg: return 281; - case DS4Controls.RXPos: return 282; - case DS4Controls.RXNeg: return 283; - case DS4Controls.RYPos: return 284; - case DS4Controls.RYNeg: return 285; - } - return 0; - } - - public static string DS4ControltoX360(DS4Controls ctrl) - { - switch (ctrl) - { - case DS4Controls.Cross: return "A Button"; - case DS4Controls.Circle: return "B Button"; - case DS4Controls.Square: return "X Button"; - case DS4Controls.Triangle: return "Y Button"; - case DS4Controls.Options: return "Start"; - case DS4Controls.Share: return "Back"; - case DS4Controls.DpadUp: return "Up Button"; - case DS4Controls.DpadDown: return "Down Button"; - case DS4Controls.DpadLeft: return "Left Button"; - case DS4Controls.DpadRight: return "Right Button"; - case DS4Controls.PS: return "Guide"; - case DS4Controls.L1: return "Left Bumper"; - case DS4Controls.R1: return "Right Bumper"; - case DS4Controls.L2: return "Left Trigger"; - case DS4Controls.R2: return "Right Trigger"; - case DS4Controls.L3: return "Left Stick"; - case DS4Controls.R3: return "Right Stick"; - case DS4Controls.LXPos: return "LS Right"; - case DS4Controls.LXNeg: return "LS Left"; - case DS4Controls.LYPos: return "LS Down"; - case DS4Controls.LYNeg: return "LS Up"; - case DS4Controls.RXPos: return "RS Right"; - case DS4Controls.RXNeg: return "RS Left"; - case DS4Controls.RYPos: return "RS Down"; - case DS4Controls.RYNeg: return "RS Up"; - } - - return "None"; - } - - bool recordAfter = false; - int recordAfterInt = 0; - - private void btnRecord_Click(object sender, EventArgs e) - { - if (btnRecord.Text != Properties.Resources.StopText) - { - if (cBRecordDelays.Checked) - sw.Start(); - - btnRumble.Visible = cBRecordDelays.Checked; - btnLightbar.Visible = cBRecordDelays.Checked; - pBLtouch.Visible = cBRecordDelays.Checked; - pBRtouch.Visible = cBRecordDelays.Checked; - Program.rootHub.recordingMacro = true; - saved = false; - ds4.Start(); - if (!recordAfter) - macros.Clear(); - - lVMacros.Items.Clear(); - btnRecord.Text = Properties.Resources.StopText; - EnableControls(false); - ActiveControl = null; - lVMacros.Focus(); - } - else - { - Program.rootHub.recordingMacro = false; - ds4.Stop(); - if (recordAfter) - { - lVMacros.Items.Clear(); - macros.InsertRange(recordAfterInt, macrosAfter); - macrosAfter.Clear(); - recordAfter = false; - LoadMacro(); - } - - if (btn4th.Text.Contains(Properties.Resources.UpText)) - btn4th_Click(sender, e); - - if (btn5th.Text.Contains(Properties.Resources.UpText)) - btn5th_Click(sender, e); - - if (cBRecordDelays.Checked) - { - if (btnRumble.Text.Contains("Stop")) - btnRumble_Click(sender, e); - - if (btnLightbar.Text.Contains("Reset")) - btnLightbar_Click(sender, e); - } - - if (cBRecordDelays.Checked) - sw.Reset(); - - if (cBRecordDelays.Checked) - lbDelayTip.Visible = true; - - btnRecord.Text = Properties.Resources.RecordText; - EnableControls(true); - } - } - - private void EnableControls(bool on) - { - lVMacros.Enabled = on; - cBRecordDelays.Enabled = on; - cBStyle.Enabled = on; - pnlMouseButtons.Visible = !on; - } - - [DllImport("user32.dll")] - private static extern short GetAsyncKeyState(Keys key); - - private void anyKeyDown(object sender, KeyEventArgs e) - { - if (btnRecord.Text == Properties.Resources.StopText) - { - int value = WhichKey(e, 0); - int count = 0; - if (recordAfter) - { - foreach (int i in macrosAfter) - { - if (i == value) - count++; - } - } - else - { - foreach (int i in macros) - { - if (i == value) - count++; - } - } - - if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0)) - { - AddMacroValue(value); - lVMacros.Items.Add(((Keys)value).ToString(), 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (count % 2 == 0) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add(((Keys)value).ToString(), 0); - } - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - else if (e.KeyValue == 27) - { - Close(); - } - else if (e.KeyCode == Keys.Delete) - { - if (lVMacros.SelectedIndices.Count > 0 && lVMacros.SelectedIndices[0] > -1) - { - macros.RemoveAt(lVMacros.SelectedIndices[0]); - lVMacros.Items.Remove(lVMacros.SelectedItems[0]); - } - } - } - - private int WhichKey(KeyEventArgs e, int keystate) - { - if (keystate == 1) - { - if (e.KeyCode == Keys.ShiftKey) - { - if (recordAfter) - { - for (int i = macrosAfter.Count - 1; i >= 0; i--) - { - if (macrosAfter[i] == 160) - return 160; - else if (macrosAfter[i] == 161) - return 161; - } - } - else - { - for (int i = macros.Count - 1; i >= 0; i--) - { - if (macros[i] == 160) - return 160; - else if (macros[i] == 161) - return 161; - } - } - } - else if (e.KeyCode == Keys.ControlKey) - { - if (recordAfter) - { - for (int i = macrosAfter.Count - 1; i >= 0; i--) - { - if (macrosAfter[i] == 162) - return 162; - else if (macrosAfter[i] == 163) - return 163; - } - } - else - { - for (int i = macros.Count - 1; i >= 0; i--) - { - if (macros[i] == 162) - return 162; - else if (macros[i] == 163) - return 163; - } - } - } - else if (e.KeyCode == Keys.Menu) - { - if (recordAfter) - { - for (int i = macrosAfter.Count - 1; i >= 0; i--) - { - if (macrosAfter[i] == 164) - return 164; - else if (macrosAfter[i] == 165) - return 165; - } - } - else - { - for (int i = macros.Count - 1; i >= 0; i--) - { - if (macros[i] == 164) - return 164; - else if (macros[i] == 165) - return 165; - } - } - } - - return e.KeyValue; - } - else - { - if (e.KeyCode == Keys.ShiftKey) - { - if (Convert.ToBoolean(GetAsyncKeyState(Keys.LShiftKey))) - return 160; - if (Convert.ToBoolean(GetAsyncKeyState(Keys.RShiftKey))) - return 161; - } - else if (e.KeyCode == Keys.ControlKey) - { - if (Convert.ToBoolean(GetAsyncKeyState(Keys.LControlKey))) - return 162; - if (Convert.ToBoolean(GetAsyncKeyState(Keys.RControlKey))) - return 163; - } - else if (e.KeyCode == Keys.Menu) - { - e.Handled = true; - if (Convert.ToBoolean(GetAsyncKeyState(Keys.LMenu))) - return 164; - if (Convert.ToBoolean(GetAsyncKeyState(Keys.RMenu))) - return 165; - } - } - - return e.KeyValue; - } - - private void AnyKeyUp(object sender, KeyEventArgs e) - { - if (btnRecord.Text == Properties.Resources.StopText && (macros.Count != 0 || (recordAfter && macrosAfter.Count != 0))) - { - lVMacros.BeginUpdate(); - int value = WhichKey(e, 1); - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - if (e.KeyCode == Keys.PrintScreen) - { - int tempvalue = WhichKey(e, 0); - AddMacroValue(tempvalue); - lVMacros.Items.Add(((Keys)value).ToString(), 0); - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - - AddMacroValue(value); - lVMacros.Items.Add(((Keys)value).ToString(), 1); - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - lVMacros.EndUpdate(); - } - } - private void anyMouseDown(object sender, MouseEventArgs e) - { - if (btnRecord.Text == Properties.Resources.StopText) - { - int value; - switch (e.Button) - { - case MouseButtons.Left: value = 256; break; - case MouseButtons.Right: value = 257; break; - case MouseButtons.Middle: value = 258; break; - case MouseButtons.XButton1: value = 259; break; - case MouseButtons.XButton2: value = 260; break; - default: value = 0; break; - } - - if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0)) - { - AddMacroValue(value); - lVMacros.Items.Add(e.Button.ToString() + " Mouse Button", 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (macros.Count > 0 || (recordAfter && macrosAfter.Count > 0)) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add(e.Button.ToString() + " Mouse Button", 0); - } - - if (e.Button == MouseButtons.XButton1) - lVMacros.Items[lVMacros.Items.Count - 1].Text = "4th Mouse Button"; - - if (e.Button == MouseButtons.XButton2) - lVMacros.Items[lVMacros.Items.Count - 1].Text = "5th Mouse Button"; - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - } - - private void anyMouseUp(object sender, MouseEventArgs e) - { - if (btnRecord.Text == Properties.Resources.StopText && (macros.Count != 0 || (recordAfter && macrosAfter.Count != 0))) - { - int value; - switch (e.Button) - { - case MouseButtons.Left: value = 256; break; - case MouseButtons.Right: value = 257; break; - case MouseButtons.Middle: value = 258; break; - case MouseButtons.XButton1: value = 259; break; - case MouseButtons.XButton2: value = 260; break; - default: value = 0; break; - } - - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add("Wait " + sw.ElapsedMilliseconds + "ms", 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add(e.Button.ToString() + " Mouse Button", 1); - - if (e.Button == MouseButtons.XButton1) - lVMacros.Items[lVMacros.Items.Count - 1].Text = "4th Mouse Button"; - - if (e.Button == MouseButtons.XButton2) - lVMacros.Items[lVMacros.Items.Count - 1].Text = "5th Mouse Button"; - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - } - - private void btn4th_Click(object sender, EventArgs e) - { - int value = 259; - if (btn4th.Text.Contains(Properties.Resources.DownText)) - { - if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0)) - { - AddMacroValue(value); - lVMacros.Items.Add("4th Mouse Button", 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (macros.Count > 0 || (recordAfter && macrosAfter.Count >0)) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("4th Mouse Button", 0); - } - - btn4th.Text = Properties.Resources.FourthMouseUp; - } - else - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("4th Mouse Button", 1); - btn4th.Text = Properties.Resources.FourthMouseDown; - } - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - - private void btn5th_Click(object sender, EventArgs e) - { - int value = 260; - if (btn5th.Text.Contains(Properties.Resources.DownText)) - { - if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0)) - { - AddMacroValue(value); - lVMacros.Items.Add("5th Mouse Button", 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (macros.Count > 0 || (recordAfter && macrosAfter.Count > 0)) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("5th Mouse Button", 0); - } - - btn5th.Text = Properties.Resources.FifthMouseUp; - } - else - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("5th Mouse Button", 1); - btn5th.Text = Properties.Resources.FifthMouseDown; - } - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - - - private void btnRumble_Click(object sender, EventArgs e) - { - int value = 1255255; - if (btnRumble.Text.Contains("Add")) - { - if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0)) - { - AddMacroValue(value); - lVMacros.Items.Add("Rumble 255,255 (100%)", 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (macros.Count > 0 || (recordAfter && macrosAfter.Count > 0)) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("Rumble 255,255 (100%)", 0); - } - - btnRumble.Text = "Stop Rumble"; - } - else - { - value = 1000000; - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("Stop Rumble", 1); - btnRumble.Text = "Add Rumble"; - } - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - - private void btnLightbar_Click(object sender, EventArgs e) - { - int value = 1255255255; - if (btnLightbar.Text.Contains("Change")) - { - if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0)) - { - AddMacroValue(value); - lVMacros.Items.Add("Lightbar Color: 255,255,255", 0); - if (cBRecordDelays.Checked) - { - sw.Reset(); - sw.Start(); - } - } - else if (macros.Count > 0 || (recordAfter && macrosAfter.Count > 0)) - { - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("Lightbar Color: 255,255,255", 0); - } - - btnLightbar.Text = "Reset Lightbar Color"; - } - else - { - value = 1000000000; - if (cBRecordDelays.Checked) - { - AddMacroValue((int)sw.ElapsedMilliseconds + 300); - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2); - sw.Reset(); - sw.Start(); - } - - AddMacroValue(value); - lVMacros.Items.Add("Reset Lightbar", 1); - btnLightbar.Text = "Change Lightbar Color"; - } - - lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible(); - } - - public void btnSave_Click(object sender, EventArgs e) - { - if (sA != null && sAButton > -1) - { - sA.multiMacrostag[sAButton] = macros; - switch (sAButton) - { - case 0: sA.btnSTapT.Text = macros.Count > 0 ? Properties.Resources.MacroRecorded : Properties.Resources.SelectMacro; break; - case 1: sA.btnHoldT.Text = macros.Count > 0 ? Properties.Resources.MacroRecorded : Properties.Resources.SelectMacro; break; - case 2: sA.btnDTapT.Text = macros.Count > 0 ? Properties.Resources.MacroRecorded : Properties.Resources.SelectMacro; break; - } - - saved = true; - Close(); - } - else if (macros.Count > 0) - { - macronames.Clear(); - foreach (ListViewItem lvi in lVMacros.Items) - { - macronames.Add(lvi.Text); - } - - string macro = string.Join(", ", macronames.ToArray()); - if (kbm != null) - { - kbm.macrostag = macros; - kbm.macros = macronames; - kbm.lBMacroOn.Visible = true; - kbm.macrorepeat = cBStyle.SelectedIndex == 1; - saved = true; - if (sender != kbm) - kbm.Close(); - } - else if (sA != null) - { - sA.macrostag = macros; - sA.macros = macronames; - sA.lbMacroRecorded.Text = string.Join(", ", macronames); - //kbm.lBMacroOn.Visible = true; - sA.macrorepeat = cBStyle.SelectedIndex == 1; - saved = true; - //if (sender != sA) - // sA.Close(); - Close(); - } - else - Close(); - } - else - { - MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - - private void btnSaveP_Click(object sender, EventArgs e) - { - if (macros.Count > 0) - { - Stream stream; - Console.WriteLine(Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName); - Console.WriteLine(Global.appdatapath); - //string path; - if (Global.appdatapath == Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName) - savePresets.InitialDirectory = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + @"\Macros\"; - else - savePresets.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool" + @"\Macros\"; - - if (!Directory.Exists(savePresets.InitialDirectory)) - { - Directory.CreateDirectory(savePresets.InitialDirectory); - //savePresets.InitialDirectory = path; - } - - Console.WriteLine(savePresets.InitialDirectory); - if (savePresets.ShowDialog() == DialogResult.OK) - { - if ((stream = savePresets.OpenFile()) != null) - { - string macro = string.Join("/", macros.ToArray()); - StreamWriter sw = new StreamWriter(stream); - sw.Write(macro); - sw.Close(); - } - } - } - else - { - MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - - private void btnLoadP_Click(object sender, EventArgs e) - { - cMSLoadPresets.Show(btnLoadP, new Point(0, btnLoadP.Height)); - } - - private void altTabToolStripMenuItem_Click(object sender, EventArgs e) - { - macros.Clear(); - lVMacros.Items.Clear(); - macros.Add(18); - macros.Add(9); - macros.Add(9); - macros.Add(18); - macros.Add(1300); - LoadMacro(); - } - - private void fromFileToolStripMenuItem_Click(object sender, EventArgs e) - { - if (Global.appdatapath == Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName) - openPresets.InitialDirectory = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + @"\Macros\"; - else - openPresets.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool" + @"\Macros\"; - - if (openPresets.ShowDialog() == DialogResult.OK) - { - string file = openPresets.FileName; - macros.Clear(); - lVMacros.Items.Clear(); - StreamReader sr = new StreamReader(file); - string[] macs = File.ReadAllText(file).Split('/'); - int temp; - foreach (string s in macs) - { - if (int.TryParse(s, out temp)) - macros.Add(temp); - } - - LoadMacro(); - sr.Close(); - } - } - - private void lVMacros_MouseHover(object sender, EventArgs e) - { - lVMacros.Focus(); - } - - private void btnCancel_Click(object sender, EventArgs e) - { - saved = true; - Close(); - } - - void LoadMacro() - { - if (macros.Count > 0) - { - bool[] keydown = new bool[286]; - foreach (int i in macros) - { - if (i >= 1000000000) - { - if (i > 1000000000) - { - string lb = i.ToString().Substring(1); - byte r = (byte)(int.Parse(lb[0].ToString()) * 100 + int.Parse(lb[1].ToString()) * 10 + int.Parse(lb[2].ToString())); - byte g = (byte)(int.Parse(lb[3].ToString()) * 100 + int.Parse(lb[4].ToString()) * 10 + int.Parse(lb[5].ToString())); - byte b = (byte)(int.Parse(lb[6].ToString()) * 100 + int.Parse(lb[7].ToString()) * 10 + int.Parse(lb[8].ToString())); - lVMacros.Items.Add($"Lightbar Color: {r},{g},{b}", 0); - } - else - { - lVMacros.Items.Add("Reset Lightbar", 1); - } - } - else if (i >= 1000000) - { - if (i > 1000000) - { - string r = i.ToString().Substring(1); - byte heavy = (byte)(int.Parse(r[0].ToString()) * 100 + int.Parse(r[1].ToString()) * 10 + int.Parse(r[2].ToString())); - byte light = (byte)(int.Parse(r[3].ToString()) * 100 + int.Parse(r[4].ToString()) * 10 + int.Parse(r[5].ToString())); - lVMacros.Items.Add($"Rumble {heavy}, {light} ({Math.Round((heavy * .75f + light * .25f) / 2.55f, 1)}%)", 0); - } - else - lVMacros.Items.Add("Stop Rumble", 1); - } - else if (i >= 300) //ints over 300 used to delay - { - lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", (i - 300).ToString()).Replace("*ms*", "ms"), 2); - } - else if (!keydown[i]) - { - //anything above 255 is not a keyvalue - if (i == 256) lVMacros.Items.Add("Left Mouse Button", 0); - else if (i == 257) lVMacros.Items.Add("Right Mouse Button", 0); - else if (i == 258) lVMacros.Items.Add("Middle Mouse Button", 0); - else if (i == 259) lVMacros.Items.Add("4th Mouse Button", 0); - else if (i == 260) lVMacros.Items.Add("5th Mouse Button", 0); - else if (i == 261) lVMacros.Items.Add("A Button", 0); - else if (i == 262) lVMacros.Items.Add("B Button", 0); - else if (i == 263) lVMacros.Items.Add("X Button", 0); - else if (i == 264) lVMacros.Items.Add("Y Button", 0); - else if (i == 265) lVMacros.Items.Add("Start", 0); - else if (i == 266) lVMacros.Items.Add("Back", 0); - else if (i == 267) lVMacros.Items.Add("Up Button", 0); - else if (i == 268) lVMacros.Items.Add("Down Button", 0); - else if (i == 269) lVMacros.Items.Add("Left Button", 0); - else if (i == 270) lVMacros.Items.Add("Right Button", 0); - else if (i == 271) lVMacros.Items.Add("Guide", 0); - else if (i == 272) lVMacros.Items.Add("Left Bumper", 0); - else if (i == 273) lVMacros.Items.Add("Right Bumper", 0); - else if (i == 274) lVMacros.Items.Add("Left Trigger", 0); - else if (i == 275) lVMacros.Items.Add("Right Trigger", 0); - else if (i == 276) lVMacros.Items.Add("Left Stick", 0); - else if (i == 277) lVMacros.Items.Add("Right Stick", 0); - else if (i == 278) lVMacros.Items.Add("LS Right", 0); - else if (i == 279) lVMacros.Items.Add("LS Left", 0); - else if (i == 280) lVMacros.Items.Add("LS Down", 0); - else if (i == 281) lVMacros.Items.Add("LS Up", 0); - else if (i == 282) lVMacros.Items.Add("RS Right", 0); - else if (i == 283) lVMacros.Items.Add("RS Left", 0); - else if (i == 284) lVMacros.Items.Add("RS Down", 0); - else if (i == 285) lVMacros.Items.Add("RS Up", 0); - else lVMacros.Items.Add(((Keys)i).ToString(), 0); - keydown[i] = true; - } - else - { - if (i == 256) lVMacros.Items.Add("Left Mouse Button", 1); - else if (i == 257) lVMacros.Items.Add("Right Mouse Button", 1); - else if (i == 258) lVMacros.Items.Add("Middle Mouse Button", 1); - else if (i == 259) lVMacros.Items.Add("4th Mouse Button", 1); - else if (i == 260) lVMacros.Items.Add("5th Mouse Button", 1); - else if (i == 261) lVMacros.Items.Add("A Button", 1); - else if (i == 262) lVMacros.Items.Add("B Button", 1); - else if (i == 263) lVMacros.Items.Add("X Button", 1); - else if (i == 264) lVMacros.Items.Add("Y Button", 1); - else if (i == 265) lVMacros.Items.Add("Start", 1); - else if (i == 266) lVMacros.Items.Add("Back", 1); - else if (i == 267) lVMacros.Items.Add("Up Button", 1); - else if (i == 268) lVMacros.Items.Add("Down Button", 1); - else if (i == 269) lVMacros.Items.Add("Left Button", 1); - else if (i == 270) lVMacros.Items.Add("Right Button", 1); - else if (i == 271) lVMacros.Items.Add("Guide", 1); - else if (i == 272) lVMacros.Items.Add("Left Bumper", 1); - else if (i == 273) lVMacros.Items.Add("Right Bumper", 1); - else if (i == 274) lVMacros.Items.Add("Left Trigger", 1); - else if (i == 275) lVMacros.Items.Add("Right Trigger", 1); - else if (i == 276) lVMacros.Items.Add("Left Stick", 1); - else if (i == 277) lVMacros.Items.Add("Right Stick", 1); - else if (i == 278) lVMacros.Items.Add("LS Right", 1); - else if (i == 279) lVMacros.Items.Add("LS Left", 1); - else if (i == 280) lVMacros.Items.Add("LS Down", 1); - else if (i == 281) lVMacros.Items.Add("LS Up", 1); - else if (i == 282) lVMacros.Items.Add("RS Right", 1); - else if (i == 283) lVMacros.Items.Add("RS Left", 1); - else if (i == 284) lVMacros.Items.Add("RS Down", 1); - else if (i == 285) lVMacros.Items.Add("RS Up", 1); - else lVMacros.Items.Add(((Keys)i).ToString(), 1); - keydown[i] = false; - } - } - - for (int i = 0; i < keydown.Length; i++) - { - if (keydown[i]) - { - if (i == 256) lVMacros.Items.Add("Left Mouse Button", 1); - else if (i == 257) lVMacros.Items.Add("Right Mouse Button", 1); - else if (i == 258) lVMacros.Items.Add("Middle Mouse Button", 1); - else if (i == 259) lVMacros.Items.Add("4th Mouse Button", 1); - else if (i == 260) lVMacros.Items.Add("5th Mouse Button", 1); - else if (i == 261) lVMacros.Items.Add("A Button", 1); - else if (i == 262) lVMacros.Items.Add("B Button", 1); - else if (i == 263) lVMacros.Items.Add("X Button", 1); - else if (i == 264) lVMacros.Items.Add("Y Button", 1); - else if (i == 265) lVMacros.Items.Add("Start", 1); - else if (i == 266) lVMacros.Items.Add("Back", 1); - else if (i == 267) lVMacros.Items.Add("Up Button", 1); - else if (i == 268) lVMacros.Items.Add("Down Button", 1); - else if (i == 269) lVMacros.Items.Add("Left Button", 1); - else if (i == 270) lVMacros.Items.Add("Right Button", 1); - else if (i == 271) lVMacros.Items.Add("Guide", 1); - else if (i == 272) lVMacros.Items.Add("Left Bumper", 1); - else if (i == 273) lVMacros.Items.Add("Right Bumper", 1); - else if (i == 274) lVMacros.Items.Add("Left Trigger", 1); - else if (i == 275) lVMacros.Items.Add("Right Trigger", 1); - else if (i == 276) lVMacros.Items.Add("Left Stick", 1); - else if (i == 277) lVMacros.Items.Add("Right Stick", 1); - else if (i == 278) lVMacros.Items.Add("LS Right", 1); - else if (i == 279) lVMacros.Items.Add("LS Left", 1); - else if (i == 280) lVMacros.Items.Add("LS Down", 1); - else if (i == 281) lVMacros.Items.Add("LS Up", 1); - else if (i == 282) lVMacros.Items.Add("RS Right", 1); - else if (i == 283) lVMacros.Items.Add("RS Left", 1); - else if (i == 284) lVMacros.Items.Add("RS Down", 1); - else if (i == 285) lVMacros.Items.Add("RS Up", 1); - else lVMacros.Items.Add(((Keys)i).ToString(), 1); - macros.Add(i); - } - } - } - } - - private void RecordBox_FormClosing(object sender, FormClosingEventArgs e) - { - if (!saved && macros.Count > 0) - { - if (MessageBox.Show(Properties.Resources.SaveRecordedMacro, "DS4Windows", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) - btnSave_Click(null, null); - } - - Program.rootHub.recordingMacro = false; - } - - protected override bool IsInputKey(Keys keyData) - { - switch (keyData) - { - case Keys.Right: - case Keys.Left: - case Keys.Up: - case Keys.Down: - case Keys.Tab: - case Keys.MediaPlayPause: - case Keys.MediaPreviousTrack: - case Keys.MediaNextTrack: - return true; - case Keys.Shift | Keys.Right: - case Keys.Shift | Keys.Left: - case Keys.Shift | Keys.Up: - case Keys.Shift | Keys.Down: - case Keys.Shift | Keys.Tab: - case Keys.Shift | Keys.MediaPlayPause: - case Keys.Shift | Keys.MediaPreviousTrack: - case Keys.Shift | Keys.MediaNextTrack: - return true; - } - - return base.IsInputKey(keyData); - } - - protected override void OnKeyDown(KeyEventArgs e) - { - base.OnKeyDown(e); - switch (e.KeyCode) - { - case Keys.Left: - case Keys.Right: - case Keys.Up: - case Keys.Down: - case Keys.Tab: - case Keys.MediaPlayPause: - case Keys.MediaPreviousTrack: - case Keys.MediaNextTrack: - if (e.Shift) - { - - } - else - { - } - break; - } - } - - private int selection; - private bool changingDelay = false; - - private void lVMacros_MouseDoubleClick(object sender, MouseEventArgs e) - { - if (lVMacros.SelectedIndices.Count != 0) - { - if (lVMacros.SelectedItems[0].ImageIndex == 2) - { - TextBox tb = new TextBox(); - tb.MaxLength = 5; - tb.KeyDown += nud_KeyDown; - tb.LostFocus += nud_LostFocus; - selection = lVMacros.SelectedIndices[0]; - Controls.Add(tb); - changingDelay = true; - tb.Location = new Point(lVMacros.Location.X + lVMacros.SelectedItems[0].Position.X, lVMacros.Location.Y + lVMacros.SelectedItems[0].Position.Y); - tb.BringToFront(); - lVMacros.MouseHover -= lVMacros_MouseHover; - tb.TextChanged += tb_TextChanged; - tb.Focus(); - } - else if (macros[lVMacros.SelectedIndices[0]] > 1000000000) - { - selection = lVMacros.SelectedIndices[0]; - string lb = macros[lVMacros.SelectedIndices[0]].ToString().Substring(1); - byte r = (byte)(int.Parse(lb[0].ToString()) * 100 + int.Parse(lb[1].ToString()) * 10 + int.Parse(lb[2].ToString())); - byte g = (byte)(int.Parse(lb[3].ToString()) * 100 + int.Parse(lb[4].ToString()) * 10 + int.Parse(lb[5].ToString())); - byte b = (byte)(int.Parse(lb[6].ToString()) * 100 + int.Parse(lb[7].ToString()) * 10 + int.Parse(lb[8].ToString())); - AdvancedColorDialog advColorDialog = new AdvancedColorDialog(); - advColorDialog.Color = Color.FromArgb(r, g, b); - advColorDialog.OnUpdateColor += advColorDialog_OnUpdateColor; - if (advColorDialog.ShowDialog() == DialogResult.OK) - { - macros[selection] = 1000000000 + advColorDialog.Color.R * 1000000 + advColorDialog.Color.G * 1000 + advColorDialog.Color.B; - } - lVMacros.Items[selection].Text = ($"Lightbar Color: {advColorDialog.Color.R},{advColorDialog.Color.G},{advColorDialog.Color.B}"); - } - else if (macros[lVMacros.SelectedIndices[0]] > 1000000 && macros[lVMacros.SelectedIndices[0]] != 1000000000) - { - - lVMacros.MouseHover -= lVMacros_MouseHover; - string r = macros[lVMacros.SelectedIndices[0]].ToString().Substring(1); - byte heavy = (byte)(int.Parse(r[0].ToString()) * 100 + int.Parse(r[1].ToString()) * 10 + int.Parse(r[2].ToString())); - byte light = (byte)(int.Parse(r[3].ToString()) * 100 + int.Parse(r[4].ToString()) * 10 + int.Parse(r[5].ToString())); - selection = lVMacros.SelectedIndices[0]; - tb1 = new TextBox(); - tb2 = new TextBox(); - tb1.Name = "tBHeavy"; - tb1.Name = "tBLight"; - tb1.MaxLength = 3; - tb2.MaxLength = 3; - tb1.KeyDown += nud_KeyDown; - tb2.KeyDown += nud_KeyDown; - Controls.Add(tb1); - Controls.Add(tb2); - changingDelay = false; - tb1.Location = new Point(lVMacros.Location.X + lVMacros.SelectedItems[0].Position.X, lVMacros.Location.Y + lVMacros.SelectedItems[0].Position.Y); - tb1.Size = new Size(tb1.Size.Width / 2, tb1.Size.Height); - tb2.Location = new Point(lVMacros.Location.X + lVMacros.SelectedItems[0].Position.X + tb1.Size.Width, lVMacros.Location.Y + lVMacros.SelectedItems[0].Position.Y); - tb2.Size = tb1.Size; - tb1.BringToFront(); - tb2.BringToFront(); - tb1.Text = heavy.ToString(); - tb2.Text = light.ToString(); - tb1.TextChanged += tb_TextChanged; - tb2.TextChanged += tb_TextChanged; - tb1.Focus(); - } - } - } - - void tb_TextChanged(object sender, EventArgs e) - { - TextBox tb = (TextBox)sender; - //if (changingDelay) - { - for (int i = tb.Text.Length - 1; i >= 0; i--) - { - if (!char.IsDigit(tb.Text[i])) - tb.Text = tb.Text.Remove(i, 1); - } - } - } - - void nud_LostFocus(object sender, EventArgs e) - { - SaveMacroChange((TextBox)sender); - } - - void nud_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - SaveMacroChange((TextBox)sender); - } - - private void SaveMacroChange(TextBox tb) - { - int i, j; - if (!string.IsNullOrEmpty(tb.Text)) - { - if (changingDelay && int.TryParse(tb.Text, out i)) - { - lVMacros.Items[selection] = new ListViewItem(Properties.Resources.WaitMS.Replace("*number*", (tb.Text)).Replace("*ms*", "ms"), 2); - macros[selection] = i + 300; - Controls.Remove(tb); - saved = false; - } - else if (!changingDelay) - { - if (int.TryParse(tb1.Text, out i) && int.TryParse(tb2.Text, out j)) - { - if (i + j > 0) - { - byte heavy = (byte)i; - byte light = (byte)j; - lVMacros.Items[selection].Text = ($"Rumble {heavy}, {light} ({Math.Round((heavy * .75f + light * .25f) / 2.55f, 1)}%)"); - macros[selection] = 1000000 + heavy * 1000 + light; - saved = false; - Controls.Remove(tb1); - Controls.Remove(tb2); - tb1 = null; - tb2 = null; - } - } - } - } - - lVMacros.MouseHover += lVMacros_MouseHover; - } - - private void RecordBox_Resize(object sender, EventArgs e) - { - cHMacro.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize); - } - - private void advColorDialog_OnUpdateColor(Color color, EventArgs e) - { - if (Program.rootHub.DS4Controllers[0] != null) - { - DS4Color dcolor = new DS4Color { red = color.R, green = color.G, blue = color.B }; - DS4LightBar.forcedColor[0] = dcolor; - DS4LightBar.forcedFlash[0] = 0; - DS4LightBar.forcelight[0] = true; - } - } - - private void lVMacros_SelectedIndexChanged(object sender, EventArgs e) - { - if (btnRecord.Text != Properties.Resources.StopText) - { - if (lVMacros.SelectedIndices.Count > 0 && lVMacros.SelectedIndices[0] > -1) - { - recordAfter = true; - recordAfterInt = lVMacros.SelectedIndices[0]; - btnRecord.Text = "Record Before " + lVMacros.SelectedItems[0].Text; - } - else - { - recordAfter = false; - btnRecord.Text = "Record"; - } - } - } - } -} diff --git a/DS4Windows/DS4Forms/RecordBox.cs.resx b/DS4Windows/DS4Forms/RecordBox.cs.resx deleted file mode 100644 index 3b9d1be..0000000 --- a/DS4Windows/DS4Forms/RecordBox.cs.resx +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Zaznamenat - - - - 749, 149 - - - 167, 21 - - - Zaznamenat prodlevy - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAbABAQGwAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Přehrát jednou - - - Opakovat při držení - - - Uložit - - - Zrušit - - - Uložit předvolbu - - - 307, 17 - - - Použít klávesnici/myš + ovladač č.1 pro záznam - - - 5. tlačítko myši - - - 4. tlačítko myši - - - Načíst předvolbu - - - 92, 17 - - - Podaří makra - - - Dvojklik na tlačítko "počkat" pro změnu času - - - 180, 26 - - - Měnit programy - - - Upravit dobu čekání na změnu - - - 180, 26 - - - Načíst ze souboru... - - - 181, 56 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.de-DE.resx b/DS4Windows/DS4Forms/RecordBox.de-DE.resx deleted file mode 100644 index 02096ac..0000000 --- a/DS4Windows/DS4Forms/RecordBox.de-DE.resx +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Aufzeichnen - - - - 558, 110 - - - 159, 17 - - - Wartezeiten auch aufzeichnen - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAASABAQEgAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Einmalig abspielen - - - Wiederholen, solange die Taste gehalten wird. - - - Speichern - - - Abbrechen - - - Makro speichern - - - 263, 8 - - - 267, 13 - - - Benutze Tastatur/Maus + Controller 1 zum Aufzeichnen - - - 5. Maustaste gedrückt - - - 4. Maustaste gedrückt - - - Makro laden - - - 97, 13 - - - Makro Reihenfolge - - - 564, 130 - - - 145, 26 - - - Doppelklick, um die Wartezeiten zu bearbeiten. - - - 153, 22 - - - Programm wechseln (wie mit ALT + TAB) - - - Die Wartezeit bearbeiten, um die Taktrate zu ändern. - - - 153, 22 - - - Aus Datei ... - - - 154, 48 - - - Lightbar-Farbe ändern - - - Vibration hinzufügen - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.el.resx b/DS4Windows/DS4Forms/RecordBox.el.resx deleted file mode 100644 index f46f93e..0000000 --- a/DS4Windows/DS4Forms/RecordBox.el.resx +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Εγγραφή - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAbwBAQG8AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Αποθήκευση - - - Ακύρωση - - - - 289, 9 - - - 416, 17 - - - Χρησιμοποίησε Πληκρολόγιο/Ποντίκι + Χειριστήριο 1 για εγγραφή - - - Αλλαγή Χρώματος Μπάρας - - - 141, 17 - - - Σειρά Μακροεντολών - - - 253, 56 - - - 252, 26 - - - Επανάληψη Προγραμμάτων? - - - 252, 26 - - - Από αρχείο... - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.es.resx b/DS4Windows/DS4Forms/RecordBox.es.resx deleted file mode 100644 index 2c53672..0000000 --- a/DS4Windows/DS4Forms/RecordBox.es.resx +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Grabar - - - - 589, 121 - - - 98, 17 - - - Grabar retrasos - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAegBAAHoAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Guardar - - - Cancelar - - - Alternar los Programas - - - Editar el Tiempo de Espera para cambiar la velocidad de ciclo de alternación - - - Desde el archivo... - - - Doble click en la espera para editar el tiempo - - - Orden de macro - - - Usar Teclado/Mouse + Control 1 para grabar - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.fi.resx b/DS4Windows/DS4Forms/RecordBox.fi.resx deleted file mode 100644 index 85b768f..0000000 --- a/DS4Windows/DS4Forms/RecordBox.fi.resx +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nauhoita - - - - 749, 149 - - - 167, 21 - - - Nauhoita tauot/viiveet - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAbQBAQG0AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Aja kerran - - - Aja kun näppäin on pohjassa - - - Tallenna - - - Peruuta - - - Tallenna asetus - - - 350, 8 - - - 355, 17 - - - Käytä näppäimistöä/hiirtä ja 1. Ohjainta nauhottaaksesi - - - Vaihda valopalkin väriä - - - Lisää värinä - - - Hiiren 5. näppäin - - - Hiiren 4. näppäin - - - Lataa asetus - - - 122, 17 - - - Macrojen järjestys - - - Tuplaklikkaa taukoa muokataksesi aikaa - - - 184, 56 - - - 183, 26 - - - Valitse toiminnoista - - - Muokkaa Tauko-toimintoa säätääksesi syklin nopeutta - - - 183, 26 - - - Tiedostosta... - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.fr-FR.resx b/DS4Windows/DS4Forms/RecordBox.fr-FR.resx deleted file mode 100644 index 90a3a58..0000000 --- a/DS4Windows/DS4Forms/RecordBox.fr-FR.resx +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Enregistrer - - - - 773, 149 - - - 143, 21 - - - Enregistrer Délais - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAaABAQGgAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Jouer une fois - - - Répéter tant que maintenu - - - Sauvegarder - - - Annuler - - - Sauvegarder Préréglages - - - 385, 8 - - - 322, 17 - - - Utiliser Clavier/Souris + Manette 1 pour enregister - - - Changer la Couleur de la Barre de Lumière - - - Ajouter Vibrations - - - 5ème Bouton de Souris Bas - - - 4ème Bouton de Souris Bas - - - Charger Préréglages - - - 122, 17 - - - Ordre des macros - - - Double clicker sur une attente pour en éditer le temps - - - 216, 26 - - - Alterner les Programmes - - - Editer le Delais du cycle d'alternation - - - 216, 26 - - - A partir du fichier... - - - 217, 56 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.he.resx b/DS4Windows/DS4Forms/RecordBox.he.resx deleted file mode 100644 index 7df42cb..0000000 --- a/DS4Windows/DS4Forms/RecordBox.he.resx +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - הקלט - - - - 802, 149 - - - 114, 21 - - - המתנת הקלטות - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAZQBAQGUAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - נגן פעם אחת - - - חזור בזמן החזקה - - - שמור - - - ביטול - - - שמור תבנית - - - 472, 8 - - - 235, 17 - - - השתמש במקלדת/עכבר + בקר 1 להקלטה - - - שנה את צבע האור - - - הוסף רעש - - - לחיצת העכבר החמישית - - - לחיצת העכבר הרביעית - - - טען תבנית - - - 73, 17 - - - סדר Macro - - - 133, 26 - - - סובב תוכנות - - - ערוך את "המתן" כדי לשנות את מהירות הסיבוב - - - 133, 26 - - - מקובץ... - - - 134, 56 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.hu.resx b/DS4Windows/DS4Forms/RecordBox.hu.resx deleted file mode 100644 index 98a714a..0000000 --- a/DS4Windows/DS4Forms/RecordBox.hu.resx +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAcQBAQHEAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.id.resx b/DS4Windows/DS4Forms/RecordBox.id.resx deleted file mode 100644 index b8b14ce..0000000 --- a/DS4Windows/DS4Forms/RecordBox.id.resx +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAawBAQGsAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.it-IT.resx b/DS4Windows/DS4Forms/RecordBox.it-IT.resx deleted file mode 100644 index 98c2b57..0000000 --- a/DS4Windows/DS4Forms/RecordBox.it-IT.resx +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Registra - - - - 589, 121 - - - 98, 17 - - - Registra Ritardi - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAATQBAQE0AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Avvia una volta - - - Ripeti mentre tenuto - - - Salva - - - Annulla - - - Salva Preset - - - 297, 7 - - - 233, 13 - - - Usa Tastiera/Mouse + Controller 1 per registrare - - - 5° Pulsante del Mouse Giù - - - 4° Pulsante del Mouse Giù - - - Carica Preset - - - 71, 13 - - - Ordine Macro - - - 174, 13 - - - Doppio click per modificare il tempo - - - 138, 22 - - - Cicla Programmi - - - Modifica l'Attesa per cambiare il rateo del ciclo - - - 138, 22 - - - Da File... - - - 139, 48 - - - Aggiungi Vibrazione - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.ja.resx b/DS4Windows/DS4Forms/RecordBox.ja.resx deleted file mode 100644 index 668168f..0000000 --- a/DS4Windows/DS4Forms/RecordBox.ja.resx +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 536, 29 - - - 213, 46 - - - 591, 121 - - - 96, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAcwBAQHMAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - 3, 29 - - - 527, 342 - - - 578, 179 - - - 121, 21 - - - 536, 2 - - - 104, 23 - - - 保存 - - - 646, 2 - - - 103, 23 - - - 646, 81 - - - 103, 23 - - - プリセットを保存 - - - 309, 7 - - - 221, 13 - - - 152, 106 - - - 43, 23 - - - 152, 77 - - - 43, 23 - - - 17, 106 - - - 131, 23 - - - 17, 77 - - - 131, 23 - - - 39, 39 - - - 131, 23 - - - 39, 10 - - - 131, 23 - - - 539, 225 - - - 210, 138 - - - 536, 81 - - - 104, 23 - - - 3, 8 - - - 66, 13 - - - 536, 142 - - - 212, 33 - - - 132, 22 - - - 132, 22 - - - 133, 48 - - - 6, 13 - - - 750, 375 - - - 260, 205 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.ko.resx b/DS4Windows/DS4Forms/RecordBox.ko.resx deleted file mode 100644 index c39d327..0000000 --- a/DS4Windows/DS4Forms/RecordBox.ko.resx +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 반복 - - - 반복 지연시간 편집 - - - 마우스 4버튼 클릭 - - - 마우스 5버튼 클릭 - - - 취소 - - - 라이트 바 색 변경 - - - 프리셋 불러오기 - - - 녹화 - - - 진동 추가 - - - 저장 - - - 프리셋 저장 - - - 지연도 녹화 - - - 한번만 실행 - - - 누르고 있는동안 실행 - - - 가져오기.. - - - 더블클릭 후 기다려 시간을 설정 - - - 메크로 순서 - - - 키보드/마우스 + 컨트롤러 1 로 녹화 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.nl.resx b/DS4Windows/DS4Forms/RecordBox.nl.resx deleted file mode 100644 index 4ce531e..0000000 --- a/DS4Windows/DS4Forms/RecordBox.nl.resx +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4e Muisknop ingedrukt - - - 5e Muisknop ingedrukt - - - Annuleren - - - Kleur van Lightbar veranderen - - - Laad Preset - - - Opnemen - - - Voeg trillen toe - - - Opslaan - - - Preset Opslaan - - - Neem Vertragingen op - - - Eenmaals afspelen - - - Herhaal wanneer ingehouden - - - Uit bestand... - - - Macro-volgorde - - - Gebruik Toetsenbord/Muis + Controller 1 voor het opnemen - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.pl.resx b/DS4Windows/DS4Forms/RecordBox.pl.resx deleted file mode 100644 index a15a84f..0000000 --- a/DS4Windows/DS4Forms/RecordBox.pl.resx +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Cykl programów - 再循環程式 - - - - 編輯循環的等待週期 - - - Czwarty przycisk myszy - 第 4 滑鼠按鍵 按下 - - - Piąty przycisk myszy - 第 5 滑鼠按鍵 按下 - - - Anuluj - - - Wczytaj macro - 載入預設 - - - Nagraj - - - Zapisz - - - Zapisz macro - 保存預設 - - - Opuźnienie nagrania - 錄製延遲 - - - Odtwórz raz - 播放一次 - - - Powtarzaj podczas trzymania - 保持重複播放 - - - Z pliku... - - - Kolejność makra - 巨集命令 - - - Użyj Klawiatury/Myszki + Kontrollera 1 do nagrania - 使用鍵盤/滑鼠 + 控制器 1 來錄製 - - - Zmień kolor panelu świetlnego - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.pt-BR.resx b/DS4Windows/DS4Forms/RecordBox.pt-BR.resx deleted file mode 100644 index 4ca8063..0000000 --- a/DS4Windows/DS4Forms/RecordBox.pt-BR.resx +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Gravar - - - Gravar Atrasos - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO - CgAAAk1TRnQBSQFMAgEBAwIAAQEBAAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA - AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA - AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm - AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ - AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm - AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz - AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm - AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm - AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA - ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm - AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm - ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm - AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA - AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ - AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz - AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ - AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA - AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM - AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm - ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ - AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ - ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM - ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm - AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM - AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA - AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA - ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 - Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8iAAH/Ae8B9wH0BgAB/wLv - Af8YAAH/AQcOAALsAf8HAAH/AQcB8QEHAbwBkQKLAZEBvAEHAfEB7wH/FwAB/wLsAQcNAALsAf8IAAH0 - AfABBwaLAgcB9BcAAf8E7AEHDAAC7AH/CAAB8QGRAYsHtAGRAfEWAAH/BuwBBwsAAuwB/wcAAfQBtAGt - AbQBtQHxAv8B8QG1AbQBrQG0AfQVAALsAQcC7AH/AuwB/woAAuwB/wcAAbwBswG0AbUG/wK0AbMBvBUA - AewBBwEAAuwC/wHsAf8KAALsAf8HAAG1AbQBtQEZAvQBBwHzAf8BGQEJArQBtRUAAQcCAALsAf8BAAL/ - BwAB/wIAAuwB/wIAAf8EAAK0AbUD9ALsAbwB/wEZA7QYAALsAf8KAAHsAf8BAALsAf8BAAEHAf8EAAK0 - AbUB9AL/AewB7wHsAQcBGQO0GAAC7AH/CgAC7AH/AuwB/wEHAewB/wQAAbsBtAG7ARkB/wH0AZIB9AH/ - Ae8BGQG1AbQBuxgAAuwB/woAAQcE7AEHAuwB/wQAAfABtAG7AQkB/wH0AfID/wK7AbQB8BgAAuwB/wsA - AQcF7AH/BAAB9AFYAVIBuwIJAfMC9AHzAQkBuwEcAVIBeQH/FwAC7AH/DAABBwPsAf8FAAEaAZoBegFS - AwkCtQIJAbsBWAEaAXoB/xcAAuwB/w0AAQcB7AH/BgABGgF6AcMBegFYAdwECQG7AVICmgF6Af8XAAP/ - DgAB/wcAAf8BGgF6AcMBegGZAQkC3AEJAZkBegGaAXoB9jIAAf8BGgFZAXoB/wQAAf8BWQF6AfYSAAFC - AU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAE/wGHAeECAAH+AX8B/gE/AYABAQIA - AfwBPwH+AT8BwAEDAgAB+AEfAf4BPwHAAQMCAAHwAQ8B/gE/AYABAQIAAfABBwH+AT8BgAEBAgAB8gEH - Af4BPwGAAQECAAH2AScB9gE3AYABAQIAAf4BPwHyAScBgAEBAgAB/gE/AfABBwGAAQECAAH+AT8B8AEH - AYABAQIAAf4BPwH4AQ8EAAH+AT8B/AEfBAAB/gE/Af4BPwQAAf4BPwH/AX8BAAEBAgAE/wGDAcMCAAs= - - - - Jogar Uma Vez - - - Repetir Enquanto Mantido - - - Gravar - - - Cancelar - - - Gravar Predefinição - - - - 227, 13 - - - Usar Teclado/Rato + Controle 1 para Gravar - - - 5ª Botão do Rato Premido - - - 4ª Botão do Rato Premido - - - Carregar Padrão - - - 88, 13 - - - Ordem de Macro - - - 170, 13 - - - Duplo clique numa espera para editar o tempo - - - Editar a Espera para alterar a taxa de ciclo - - - Do arquivo... - - - Precorrer Programas - - - Mudar a Cor da Barra de Luz - - - Adicionar Vibração - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.resx b/DS4Windows/DS4Forms/RecordBox.resx deleted file mode 100644 index 9874e99..0000000 --- a/DS4Windows/DS4Forms/RecordBox.resx +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Right - - - - MiddleLeft - - - NoControl - - - 536, 29 - - - 213, 46 - - - - 322 - - - Record - - - btnRecord - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - - - Top, Right - - - True - - - 591, 121 - - - 96, 17 - - - 324 - - - Record Delays - - - cBRecordDelays - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - Top, Bottom, Left, Right - - - Macro Order - - - 200 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAdABAQHQAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - 3, 29 - - - 527, 342 - - - 326 - - - lVMacros - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - - - Top, Right - - - Play once - - - Repeat while held - - - 578, 179 - - - 121, 21 - - - 327 - - - cBStyle - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Top, Right - - - 536, 2 - - - 104, 23 - - - 328 - - - Save - - - btnSave - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 11 - - - Top, Right - - - 646, 2 - - - 103, 23 - - - 328 - - - Cancel - - - btnCancel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 10 - - - Top, Right - - - NoControl - - - 646, 81 - - - 103, 23 - - - 332 - - - Save Preset - - - btnSaveP - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Top, Right - - - True - - - 309, 7 - - - 221, 13 - - - 329 - - - Use Keyboard/Mouse + Controller 1 to record - - - MiddleCenter - - - lbRecordTip - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - Top, Right - - - NoControl - - - 152, 106 - - - 43, 23 - - - Zoom - - - 4 - - - pBRtouch - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - pnlMouseButtons - - - 0 - - - 152, 77 - - - 43, 23 - - - Zoom - - - 3 - - - pBLtouch - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - pnlMouseButtons - - - 1 - - - Top - - - NoControl - - - 17, 106 - - - 131, 23 - - - 1 - - - Change Lightbar Color - - - btnLightbar - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - pnlMouseButtons - - - 2 - - - Top - - - NoControl - - - 17, 77 - - - 131, 23 - - - 2 - - - Add Rumble - - - btnRumble - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - pnlMouseButtons - - - 3 - - - Top - - - 39, 39 - - - 131, 23 - - - 0 - - - 5th Mouse Button Down - - - btn5th - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - pnlMouseButtons - - - 4 - - - Top - - - 39, 10 - - - 131, 23 - - - 0 - - - 4th Mouse Button Down - - - btn4th - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - pnlMouseButtons - - - 5 - - - 539, 225 - - - 210, 138 - - - 331 - - - False - - - pnlMouseButtons - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 12 - - - Top, Right - - - 536, 81 - - - 104, 23 - - - 332 - - - Load Preset - - - btnLoadP - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - 102, 17 - - - Text Document (*.txt)|*.txt - - - 238, 17 - - - Text Document (*.txt)|*.txt - - - True - - - 3, 8 - - - 66, 13 - - - 333 - - - Macro Order - - - lbMacroOrder - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top, Right - - - NoControl - - - 536, 142 - - - 212, 33 - - - 329 - - - Double click on a wait to edit the time - - - MiddleCenter - - - False - - - lbDelayTip - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - - 356, 17 - - - 132, 22 - - - Cycle Programs - - - Edit the Wait to change the cycle rate - - - 132, 22 - - - From File... - - - 133, 48 - - - cMSLoadPresets - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - 6, 13 - - - 750, 375 - - - 260, 205 - - - Record a Macro - - - cHMacro - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - iLKeys - - - System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - savePresets - - - System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - openPresets - - - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - altTabToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - fromFileToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - RecordBox - - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.ro-RO.resx b/DS4Windows/DS4Forms/RecordBox.ro-RO.resx deleted file mode 100644 index 5d64b12..0000000 --- a/DS4Windows/DS4Forms/RecordBox.ro-RO.resx +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Înregistrează - - - - 550, 121 - - - 137, 17 - - - Înregistrează întărzierile - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAVABAQFQAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Repetă cât timp este ținut - - - Salvează - - - Anulează - - - Salvează presetări - - - 242, 7 - - - 288, 13 - - - Folosește tastatura/mouse-ul + maneta 1 pentru a înregistra - - - Butonul 5 de pe mouse Buton în jos - - - Butonul 4 de pe mouse Buton în jos - - - Încarcă presetări - - - Din fișierul... - - - Redă o singura dată - - - Ordinea macro-urilor - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.ru-RU.resx b/DS4Windows/DS4Forms/RecordBox.ru-RU.resx deleted file mode 100644 index 438d88a..0000000 --- a/DS4Windows/DS4Forms/RecordBox.ru-RU.resx +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Запись - - - - 565, 121 - - - 122, 17 - - - Записывать паузы - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAASwBAQEsAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Воспроизвести один раз - - - Повторять при удержании - - - Сохранить - - - Отмена - - - Сохранить настройки - - - 181, 7 - - - 349, 13 - - - Для записи использовать мышь, клавиатуру и первый контроллер - - - Нажатие 5-й кнопки мыши - - - Нажатие 4-й кнопки мыши - - - Загрузить настройки - - - 104, 13 - - - Порядок макросов - - - 165, 26 - - - Для редактирования времени кликните дважды по задержке - - - 224, 22 - - - Последовательность программ - - - Изменить время ожидания изменений - - - 224, 22 - - - Из файла... - - - 225, 48 - - - Изменить цвет световой панели - - - Добавить вибрацию - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.sl.resx b/DS4Windows/DS4Forms/RecordBox.sl.resx deleted file mode 100644 index 2a68d9d..0000000 --- a/DS4Windows/DS4Forms/RecordBox.sl.resx +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Snemaj - - - - 791, 149 - - - 125, 21 - - - Snemaj zamike - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAcgBAQHIAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Zavrti enkrat - - - Ponovi med držanjem - - - Shrani - - - Prekliči - - - Shrani podnastavljeno - - - Spremeni barvo lučke - - - Dodaj brundanje - - - 5. gumb miške - - - 4. gumb miške - - - Naloži prednastavljeno - - - 81, 17 - - - Macro ukaz - - - Dvojni klik; počakajte za urejanje časa - - - 188, 26 - - - Brskaj po programih - - - Uredi in počakaj, da se spremeni hitrost ciklusa - - - 188, 26 - - - Iz mape... - - - 189, 56 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.sv.resx b/DS4Windows/DS4Forms/RecordBox.sv.resx deleted file mode 100644 index d58980a..0000000 --- a/DS4Windows/DS4Forms/RecordBox.sv.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.tr.resx b/DS4Windows/DS4Forms/RecordBox.tr.resx deleted file mode 100644 index d46ee93..0000000 --- a/DS4Windows/DS4Forms/RecordBox.tr.resx +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Döngü Programları - - - Döngü oranını değiştirme için bekleme süresini ayarla - - - 4. Asağı Fare Düğmesi - - - 5. Asağı Fare Düğmesi - - - Iptal - - - Ön ayarı yükle - - - Kayıt - - - Kaydet - - - Ön ayarı kaydet - - - Kayıt Gecikmesi - - - Bir kere oynat - - - Uzun basılıyken tekrar et - - - Dosyadan... - - - Süreyi ayarlamak için çift tıklayın - - - Makro Düzeni - - - Kaydetmek için Klavye/Fare + Kol 1 kullan - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.uk.resx b/DS4Windows/DS4Forms/RecordBox.uk.resx deleted file mode 100644 index 6089077..0000000 --- a/DS4Windows/DS4Forms/RecordBox.uk.resx +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Запис - - - - 757, 149 - - - 159, 21 - - - Записати затримки - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - CgAAAk1TRnQBSQFMAgEBAwEAAagBAQGoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/ - Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA - AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0 - Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8 - FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA - Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA - ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0 - Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/ - CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6 - AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA - A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB - AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy - AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw - AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA - Cw== - - - - Зіграти раз - - - Повторювати при утриманні - - - Зберегти - - - Скасувати - - - Зберегти пресет - - - 298, 17 - - - Клавіатура/Миша + контролер 1 для запису - - - Зміна кольору світлопанелі - - - Додати вібрацію - - - 5-та кнопка миші натиснена - - - 4-та кнопка миші натиснена - - - Завантажити пресет - - - 128, 17 - - - Порядок Макросів - - - Подвійний клац на затримці для редагування часу - - - 158, 26 - - - Зміна програм - - - Редагувати затримку для зміни частоти зміни - - - 158, 26 - - - З файлу... - - - 159, 56 - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.vi.resx b/DS4Windows/DS4Forms/RecordBox.vi.resx deleted file mode 100644 index ada0cc4..0000000 --- a/DS4Windows/DS4Forms/RecordBox.vi.resx +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Thay Chuơng trình - - - Sửa Wait để thay mức xoay - - - Nhấn phím chuột số 4 - - - Nhấn phím chuột số 5 - - - Bỏ - - - Đổi màu dải màu - - - Load chế độ - - - Ghi - - - Thêm rung - - - Lưu - - - Lưu chế độ - - - Ghi độ trễ - - - Thưc thi một lần - - - Liên tục khi giữ - - - Từ file.... - - - Click đúp vào Wait để sửa - - - trình tự Macro - - - Dùng bàn phím và tay cầm 1 để ghi - - \ No newline at end of file diff --git a/DS4Windows/DS4Forms/RecordBox.xaml b/DS4Windows/DS4Forms/RecordBox.xaml new file mode 100644 index 0000000..903ed7c --- /dev/null +++ b/DS4Windows/DS4Forms/RecordBox.xaml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +