From 8c34fb3c504c08d6b9cfee5dc19fa847cf17e52d Mon Sep 17 00:00:00 2001 From: Robert Beekman Date: Thu, 7 Dec 2017 12:51:54 +0100 Subject: [PATCH] 2.0 initial commit --- .gitattributes | 63 + .../Artemis.Installer.wixproj | 77 - .../HeatGeneratedFileList.wxs | 281 - Artemis/Artemis.Installer/Product.wxs | 84 - Artemis/Artemis.Installer/banner.bmp | Bin 85896 -> 0 bytes Artemis/Artemis.Installer/dialog.bmp | Bin 461814 -> 0 bytes Artemis/Artemis.Installer/logo.ico | Bin 370070 -> 0 bytes Artemis/Artemis.sln | 246 - Artemis/Artemis/App.config | 53 - Artemis/Artemis/App.xaml | 28 - Artemis/Artemis/App.xaml.cs | 57 - Artemis/Artemis/Artemis.csproj | 1111 -- Artemis/Artemis/ArtemisBootstrapper.cs | 146 - .../Artemis/Controls/Log/LoggingControl.xaml | 27 - .../Controls/Log/LoggingControl.xaml.cs | 37 - .../Artemis/Controls/Log/MemoryEventTarget.cs | 20 - Artemis/Artemis/DAL/ProfileProvider.cs | 254 - Artemis/Artemis/DAL/SettingsProvider.cs | 101 - .../DeviceProviders/Artemis/NoneKeyboard.cs | 42 - .../CoolerMaster/MasterkeysProL.cs | 96 - .../CoolerMaster/MasterkeysProM.cs | 96 - .../CoolerMaster/MasterkeysProS.cs | 93 - .../CoolerMaster/MastermouseProL.cs | 65 - .../CoolerMaster/MastermouseProS.cs | 61 - .../CoolerMaster/Utilities/CMSDK.cs | 101 - .../DeviceProviders/Corsair/CorsairHeadset.cs | 84 - .../Corsair/CorsairKeyboard.cs | 149 - .../DeviceProviders/Corsair/CorsairMouse.cs | 83 - .../Corsair/CorsairMousemat.cs | 83 - .../Corsair/Utilities/CorsairUtilities.cs | 72 - .../Artemis/DeviceProviders/DeviceProvider.cs | 52 - .../DeviceProviders/KeyboardProvider.cs | 132 - .../Artemis/DeviceProviders/Logitech/G810.cs | 88 - .../Artemis/DeviceProviders/Logitech/G910.cs | 235 - .../Logitech/LogitechGeneric.cs | 55 - .../Logitech/LogitechKeyboard.cs | 61 - .../Logitech/Utilities/KeyMap.cs | 392 - .../Logitech/Utilities/KeyMapG810.cs | 392 - .../Logitech/Utilities/KeyboardNames.cs | 121 - .../Logitech/Utilities/LogitechGSDK.cs | 116 - .../Logitech/Utilities/OrionUtilities.cs | 95 - .../DeviceProviders/Razer/BlackWidow.cs | 78 - .../Artemis/DeviceProviders/Razer/Firefly.cs | 50 - .../Artemis/DeviceProviders/Razer/Mamba.cs | 50 - .../Razer/Utilities/RazerUtilities.cs | 86 - Artemis/Artemis/Dialogs/MarkdownDialog.xaml | 57 - .../Artemis/Dialogs/MarkdownDialog.xaml.cs | 54 - .../Events/AudioDeviceChangedEventArgs.cs | 17 - .../Artemis/Events/EnabledChangedEventArgs.cs | 14 - .../Events/KeyboardChangedEventArgs.cs | 17 - .../Artemis/Events/ModuleChangedEventArgs.cs | 15 - .../Artemis/Events/ProfileChangedEventArgs.cs | 15 - .../Artemis/Events/ProfileDeviceEventsArg.cs | 23 - .../Artemis/Events/RazerColorArrayChanged.cs | 14 - .../Events/RazerColorsChangedEventArgs.cs | 15 - .../Artemis/InjectionModules/BaseModules.cs | 127 - .../InjectionModules/ManagerModules.cs | 20 - .../BindableSelectedItemBehavior.cs | 97 - Artemis/Artemis/LogitechLedEnginesWrapper.dll | Bin 20088 -> 0 bytes .../Artemis/Managers/AudioCaptureManager.cs | 67 - Artemis/Artemis/Managers/DeviceManager.cs | 185 - Artemis/Artemis/Managers/KeybindManager.cs | 98 - Artemis/Artemis/Managers/LoopManager.cs | 211 - Artemis/Artemis/Managers/LuaManager.cs | 181 - Artemis/Artemis/Managers/MainManager.cs | 181 - Artemis/Artemis/Managers/MigrationManager.cs | 40 - Artemis/Artemis/Managers/ModuleManager.cs | 191 - Artemis/Artemis/Managers/PreviewManager.cs | 91 - Artemis/Artemis/Models/DeviceVisualModel.cs | 74 - Artemis/Artemis/Models/FrameModel.cs | 122 - Artemis/Artemis/Models/KeybindModel.cs | 55 - Artemis/Artemis/Models/LayerEditorModel.cs | 12 - Artemis/Artemis/Models/ProfileEditorModel.cs | 370 - .../Modules/Abstract/ModuleDataModel.cs | 6 - .../Artemis/Modules/Abstract/ModuleModel.cs | 206 - .../Modules/Abstract/ModuleSettings.cs | 34 - .../Modules/Abstract/ModuleViewModel.cs | 168 - .../AssettoCorsa/AssettoCorsaDataModel.cs | 164 - .../Games/AssettoCorsa/AssettoCorsaModel.cs | 173 - .../AssettoCorsa/AssettoCorsaSettings.cs | 8 - .../Games/AssettoCorsa/AssettoCorsaView.xaml | 50 - .../AssettoCorsa/AssettoCorsaView.xaml.cs | 18 - .../AssettoCorsa/AssettoCorsaViewModel.cs | 17 - .../CounterStrike/CounterStrikeDataModel.cs | 130 - .../Games/CounterStrike/CounterStrikeModel.cs | 166 - .../CounterStrike/CounterStrikeSettings.cs | 10 - .../CounterStrike/CounterStrikeView.xaml | 55 - .../CounterStrike/CounterStrikeView.xaml.cs | 15 - .../CounterStrike/CounterStrikeViewModel.cs | 37 - .../Modules/Games/Dota2/Dota2DataModel.cs | 256 - .../Artemis/Modules/Games/Dota2/Dota2Model.cs | 123 - .../Modules/Games/Dota2/Dota2Settings.cs | 9 - .../Modules/Games/Dota2/Dota2View.xaml | 55 - .../Modules/Games/Dota2/Dota2View.xaml.cs | 15 - .../Modules/Games/Dota2/Dota2ViewModel.cs | 37 - .../Data/Ets2TelemetryData.cs | 367 - .../Data/Ets2TelemetryDataReader.cs | 44 - .../Data/IEts2TelemetryData.cs | 763 - .../Data/Reader/Ets2TelemetryStructure.cs | 214 - .../Data/Reader/SharedProcessMemory.cs | 84 - .../EurotruckSimulator2DataModel.cs | 33 - .../EurotruckSimulator2Model.cs | 136 - .../EurotruckSimulator2Settings.cs | 10 - .../EurotruckSimulator2View.xaml | 75 - .../EurotruckSimulator2View.xaml.cs | 21 - .../EurotruckSimulator2ViewModel.cs | 63 - .../Resources/Win32/ets2-telemetry-server.dll | Bin 79872 -> 0 bytes .../Resources/Win64/ets2-telemetry-server.dll | Bin 93696 -> 0 bytes .../FormulaOne2017/FormulaOne2017DataModel.cs | 309 - .../FormulaOne2017/FormulaOne2017Model.cs | 136 - .../FormulaOne2017/FormulaOne2017Settings.cs | 8 - .../FormulaOne2017/FormulaOne2017View.xaml | 53 - .../FormulaOne2017/FormulaOne2017View.xaml.cs | 18 - .../FormulaOne2017/FormulaOne2017ViewModel.cs | 17 - .../Modules/Games/GtaV/GtaVDataModel.cs | 12 - .../Artemis/Modules/Games/GtaV/GtaVModel.cs | 84 - .../Modules/Games/GtaV/GtaVSettings.cs | 8 - .../Artemis/Modules/Games/GtaV/GtaVView.xaml | 45 - .../Modules/Games/GtaV/GtaVView.xaml.cs | 15 - .../Modules/Games/GtaV/GtaVViewModel.cs | 17 - .../Games/LightFx/Data/LightFxState.cs | 40 - .../Modules/Games/LightFx/LightFxDataModel.cs | 19 - .../Modules/Games/LightFx/LightFxModel.cs | 55 - .../Modules/Games/LightFx/LightFxSettings.cs | 8 - .../Modules/Games/LightFx/LightFxView.xaml | 45 - .../Modules/Games/LightFx/LightFxView.xaml.cs | 18 - .../Modules/Games/LightFx/LightFxViewModel.cs | 17 - .../Games/Overwatch/OverwatchDataModel.cs | 56 - .../Modules/Games/Overwatch/OverwatchModel.cs | 326 - .../Games/Overwatch/OverwatchSettings.cs | 9 - .../Games/Overwatch/OverwatchView.xaml | 60 - .../Games/Overwatch/OverwatchView.xaml.cs | 21 - .../Games/Overwatch/OverwatchViewModel.cs | 36 - .../Data/_eNums/_EnumGetDescription.cs | 28 - .../Data/_eNums/eAPIStructLengths.cs | 8 - .../ProjectCars/Data/_eNums/eCarFlags.cs | 17 - .../Data/_eNums/eCrashDamageState.cs | 13 - .../ProjectCars/Data/_eNums/eCurrentSector.cs | 16 - .../ProjectCars/Data/_eNums/eFlagColors.cs | 19 - .../ProjectCars/Data/_eNums/eFlagReason.cs | 14 - .../ProjectCars/Data/_eNums/eGameState.cs | 16 - .../ProjectCars/Data/_eNums/eHeaderVersion.cs | 7 - .../Games/ProjectCars/Data/_eNums/ePitMode.cs | 15 - .../ProjectCars/Data/_eNums/ePitSchedule.cs | 14 - .../ProjectCars/Data/_eNums/eRaceState.cs | 17 - .../ProjectCars/Data/_eNums/eSessionState.cs | 17 - .../Games/ProjectCars/Data/_eNums/eTerrain.cs | 45 - .../ProjectCars/Data/_eNums/eTyreFlags.cs | 9 - .../Games/ProjectCars/Data/_eNums/eTyres.cs | 12 - .../Games/ProjectCars/Data/_eNums/eVector.cs | 11 - .../Data/_pCarsAPIClass/CarDamage.cs | 44 - .../Data/_pCarsAPIClass/CarState.cs | 288 - .../_pCarsAPIClass/Classes/LapTimeClass.cs | 74 - .../Classes/ParticipantClass.cs | 123 - .../Data/_pCarsAPIClass/EventInfo.cs | 58 - .../ProjectCars/Data/_pCarsAPIClass/Flags.cs | 32 - .../Data/_pCarsAPIClass/GameState.cs | 46 - .../Methods/pCarsAPI-MapStructToClass.cs | 219 - .../Data/_pCarsAPIClass/MotionDevice.cs | 94 - .../Data/_pCarsAPIClass/ParticipantInfo.cs | 59 - .../Data/_pCarsAPIClass/PitInfo.cs | 32 - .../Data/_pCarsAPIClass/Timings.cs | 155 - .../Data/_pCarsAPIClass/UnfilteredInput.cs | 58 - .../Data/_pCarsAPIClass/Vehicle.cs | 34 - .../Data/_pCarsAPIClass/Version.cs | 32 - .../Data/_pCarsAPIClass/Weather.cs | 92 - .../Data/_pCarsAPIClass/WheelTyre.cs | 226 - .../Data/_pCarsAPIClass/pCarsAPI-Class.cs | 28 - .../Data/_pCarsAPIStruct/pCarsAPI-ReadAPI.cs | 63 - .../Data/_pCarsAPIStruct/pCarsAPI-Struct.cs | 215 - .../Games/ProjectCars/ProjectCarsDataModel.cs | 17 - .../Games/ProjectCars/ProjectCarsModel.cs | 31 - .../Games/ProjectCars/ProjectCarsSettings.cs | 8 - .../Games/ProjectCars/ProjectCarsView.xaml | 50 - .../Games/ProjectCars/ProjectCarsView.xaml.cs | 18 - .../Games/ProjectCars/ProjectCarsViewModel.cs | 17 - .../RocketLeague/RocketLeagueDataModel.cs | 11 - .../Games/RocketLeague/RocketLeagueModel.cs | 88 - .../RocketLeague/RocketLeagueSettings.cs | 8 - .../Games/RocketLeague/RocketLeagueView.xaml | 48 - .../RocketLeague/RocketLeagueView.xaml.cs | 15 - .../RocketLeague/RocketLeagueViewModel.cs | 48 - .../Games/Terraria/TerrariaDataModel.cs | 18 - .../Modules/Games/Terraria/TerrariaModel.cs | 91 - .../Games/Terraria/TerrariaSettings.cs | 8 - .../Modules/Games/Terraria/TerrariaView.xaml | 48 - .../Games/Terraria/TerrariaView.xaml.cs | 28 - .../Games/Terraria/TerrariaViewModel.cs | 47 - .../Games/TheDivision/TheDivisionDataModel.cs | 31 - .../Games/TheDivision/TheDivisionModel.cs | 143 - .../Games/TheDivision/TheDivisionSettings.cs | 8 - .../Games/TheDivision/TheDivisionView.xaml | 51 - .../Games/TheDivision/TheDivisionView.xaml.cs | 15 - .../Games/TheDivision/TheDivisionViewModel.cs | 17 - .../UnrealTournament/Resources/redeemer.gif | Bin 8167 -> 0 bytes .../UnrealTournament/Resources/ut-plugin.zip | Bin 93567 -> 0 bytes .../UnrealTournamentDataModel.cs | 132 - .../UnrealTournament/UnrealTournamentModel.cs | 176 - .../UnrealTournamentSettings.cs | 9 - .../UnrealTournamentView.xaml | 56 - .../UnrealTournamentView.xaml.cs | 15 - .../UnrealTournamentViewModel.cs | 52 - .../Games/Witcher3/Resources/witcher3-mod.zip | Bin 75164 -> 0 bytes .../Games/Witcher3/Witcher3DataModel.cs | 25 - .../Modules/Games/Witcher3/Witcher3Model.cs | 135 - .../Games/Witcher3/Witcher3Settings.cs | 10 - .../Modules/Games/Witcher3/Witcher3View.xaml | 55 - .../Games/Witcher3/Witcher3View.xaml.cs | 15 - .../Games/Witcher3/Witcher3ViewModel.cs | 81 - .../Modules/Games/WoW/Models/WoWAura.cs | 45 - .../Modules/Games/WoW/Models/WoWCastBar.cs | 64 - .../Modules/Games/WoW/Models/WoWEnums.cs | 44 - .../Games/WoW/Models/WoWSpecialization.cs | 20 - .../Modules/Games/WoW/Models/WoWSpell.cs | 11 - .../Modules/Games/WoW/Models/WoWUnit.cs | 134 - .../WoW/Resources/Addon source/Artemis.toc | 9 - .../Games/WoW/Resources/Addon source/Core.lua | 398 - .../Libs/AceAddon-3.0/AceAddon-3.0.lua | 674 - .../Libs/AceAddon-3.0/AceAddon-3.0.xml | 4 - .../Libs/AceComm-3.0/AceComm-3.0.lua | 301 - .../Libs/AceComm-3.0/AceComm-3.0.xml | 5 - .../Libs/AceComm-3.0/ChatThrottleLib.lua | 524 - .../Libs/AceConsole-3.0/AceConsole-3.0.lua | 250 - .../Libs/AceConsole-3.0/AceConsole-3.0.xml | 4 - .../Libs/AceEvent-3.0/AceEvent-3.0.lua | 126 - .../Libs/AceEvent-3.0/AceEvent-3.0.xml | 4 - .../Libs/AceTimer-3.0/AceTimer-3.0.lua | 276 - .../Libs/AceTimer-3.0/AceTimer-3.0.xml | 4 - .../Addon source/Libs/LibStub/LibStub.lua | 30 - .../WoW/Resources/Addon source/Libs/json.lua | 382 - .../WoW/Resources/Addon source/embeds.xml | 9 - .../Modules/Games/WoW/Resources/wow-addon.zip | Bin 33708 -> 0 bytes .../Artemis/Modules/Games/WoW/WoWDataModel.cs | 33 - Artemis/Artemis/Modules/Games/WoW/WoWModel.cs | 261 - .../Modules/Games/WoW/WoWPacketScanner.cs | 127 - .../Artemis/Modules/Games/WoW/WoWSettings.cs | 9 - .../Artemis/Modules/Games/WoW/WoWView.xaml | 54 - .../Artemis/Modules/Games/WoW/WoWView.xaml.cs | 15 - .../Artemis/Modules/Games/WoW/WoWViewModel.cs | 36 - .../Artemis/Modules/General/Bubbles/Bubble.cs | 68 - .../Modules/General/Bubbles/BubblesModel.cs | 103 - .../General/Bubbles/BubblesSettings.cs | 54 - .../Modules/General/Bubbles/BubblesView.xaml | 135 - .../General/Bubbles/BubblesView.xaml.cs | 12 - .../General/Bubbles/BubblesViewModel.cs | 37 - .../GeneralProfile/GeneralProfileDataModel.cs | 142 - .../GeneralProfile/GeneralProfileModel.cs | 323 - .../GeneralProfile/GeneralProfileSettings.cs | 8 - .../GeneralProfile/GeneralProfileView.xaml | 39 - .../GeneralProfile/GeneralProfileView.xaml.cs | 15 - .../GeneralProfile/GeneralProfileViewModel.cs | 17 - .../General/GeneralProfile/PerformanceInfo.cs | 31 - .../OverlayProfile/OverlayProfileDataModel.cs | 24 - .../OverlayProfile/OverlayProfileModel.cs | 66 - .../OverlayProfile/OverlayProfileSettings.cs | 8 - .../OverlayProfile/OverlayProfileView.xaml | 45 - .../OverlayProfile/OverlayProfileView.xaml.cs | 15 - .../OverlayProfile/OverlayProfileViewModel.cs | 17 - Artemis/Artemis/NLog.xsd | 3103 ---- .../Layers/Abstract/LayerCondition.cs | 10 - .../Abstract/LayerPropertiesViewModel.cs | 54 - .../Layers/Animations/GrowAnimation.cs | 65 - .../Layers/Animations/NoneAnimation.cs | 24 - .../Layers/Animations/PulseAnimation.cs | 74 - .../Animations/RotateClockwiseAnimation.cs | 46 - .../RotateCounterclockwiseAnimation.cs | 46 - .../Layers/Animations/ShrinkAnimation.cs | 65 - .../Layers/Animations/SlideDownAnimation.cs | 53 - .../Layers/Animations/SlideLeftAnimation.cs | 53 - .../Layers/Animations/SlideRightAnimation.cs | 53 - .../Layers/Animations/SlideUpAnimation.cs | 52 - .../Layers/Conditions/DataModelCondition.cs | 30 - .../Layers/Conditions/EventCondition.cs | 50 - .../Layers/Interfaces/ILayerAnimation.cs | 16 - .../Profiles/Layers/Interfaces/ILayerType.cs | 83 - .../Layers/Models/DynamicPropertiesModel.cs | 130 - .../Layers/Models/EventPropertiesModel.cs | 106 - .../Models/KeyboardEventPropertiesModel.cs | 27 - .../Layers/Models/LayerConditionModel.cs | 174 - .../Layers/Models/LayerKeybindModel.cs | 132 - .../Profiles/Layers/Models/LayerModel.cs | 507 - .../Layers/Models/LayerPropertiesModel.cs | 98 - .../Layers/Models/SimplePropertiesModel.cs | 12 - .../Profiles/Layers/Models/TweenModel.cs | 144 - .../AmbienceCreator/AmbienceCreatorExtend.cs | 85 - .../AmbienceCreator/AmbienceCreatorMirror.cs | 90 - .../AmbientLight/AmbienceCreator/AvgColor.cs | 42 - .../AmbienceCreator/IAmbienceCreator.cs | 8 - .../AmbientLightPropertiesModel.cs | 42 - .../AmbientLightPropertiesView.xaml | 129 - .../AmbientLightPropertiesView.xaml.cs | 12 - .../AmbientLightPropertiesViewModel.cs | 26 - .../Types/AmbientLight/AmbientLightType.cs | 113 - .../ToggleSwitchButtonEnumFlagHelper.cs | 101 - .../AmbientLight/Model/AmbienceCreatorType.cs | 11 - .../Model/BlackBarDetectionMode.cs | 14 - .../Model/Extensions/AvgColorExtension.cs | 74 - .../Model/Extensions/EnumExtension.cs | 26 - .../Model/Extensions/PixelDataExtension.cs | 117 - .../Types/AmbientLight/Model/FlipMode.cs | 12 - .../AmbientLight/Model/ScreenCaptureMode.cs | 9 - .../Types/AmbientLight/Model/SmoothMode.cs | 15 - .../ScreenCapturing/DX9ScreenCapture.cs | 87 - .../ScreenCapturing/IScreenCapture.cs | 18 - .../ScreenCapturing/ScreenCaptureManager.cs | 119 - .../Audio/AudioCapturing/AudioCapture.cs | 230 - .../AudioCapturing/BaseSpectrumProvider.cs | 54 - .../Audio/AudioCapturing/ISpectrumProvider.cs | 8 - .../Audio/AudioCapturing/LineSpectrum.cs | 43 - .../Audio/AudioCapturing/SingleSpectrum.cs | 31 - .../Audio/AudioCapturing/SpectrumBase.cs | 189 - .../Types/Audio/AudioPropertiesModel.cs | 45 - .../Types/Audio/AudioPropertiesView.xaml | 89 - .../Types/Audio/AudioPropertiesView.xaml.cs | 15 - .../Types/Audio/AudioPropertiesViewModel.cs | 86 - .../Profiles/Layers/Types/Audio/AudioType.cs | 255 - .../ConicalBrushPropertiesModel.cs | 24 - .../ConicalBrushPropertiesView.xaml | 63 - .../ConicalBrushPropertiesView.xaml.cs | 12 - .../ConicalBrushPropertiesViewModel.cs | 70 - .../Types/ConicalBrush/ConicalBrushType.cs | 132 - .../Drawing/ConicalGradientDrawer.cs | 201 - .../Types/Folder/FolderPropertiesView.xaml | 14 - .../Types/Folder/FolderPropertiesView.xaml.cs | 15 - .../Types/Folder/FolderPropertiesViewModel.cs | 17 - .../Layers/Types/Folder/FolderType.cs | 57 - .../Types/Generic/GenericPropertiesView.xaml | 63 - .../Generic/GenericPropertiesView.xaml.cs | 15 - .../Generic/GenericPropertiesViewModel.cs | 45 - .../Layers/Types/Generic/GenericType.cs | 96 - .../Types/Headset/HeadsetPropertiesView.xaml | 57 - .../Headset/HeadsetPropertiesView.xaml.cs | 15 - .../Headset/HeadsetPropertiesViewModel.cs | 45 - .../Layers/Types/Headset/HeadsetType.cs | 95 - .../Types/KeyPress/KeyPressPropertiesModel.cs | 14 - .../KeyPress/KeyPressPropertiesView.xaml | 60 - .../KeyPress/KeyPressPropertiesView.xaml.cs | 15 - .../KeyPress/KeyPressPropertiesViewModel.cs | 18 - .../Layers/Types/KeyPress/KeyPressType.cs | 163 - .../Types/Keyboard/KeyboardPropertiesModel.cs | 13 - .../Keyboard/KeyboardPropertiesView.xaml | 86 - .../Keyboard/KeyboardPropertiesView.xaml.cs | 15 - .../Keyboard/KeyboardPropertiesViewModel.cs | 83 - .../Layers/Types/Keyboard/KeyboardType.cs | 97 - .../Types/KeyboardGif/KeyboardGifType.cs | 98 - .../Types/Mouse/MousePropertiesView.xaml | 56 - .../Types/Mouse/MousePropertiesView.xaml.cs | 15 - .../Types/Mouse/MousePropertiesViewModel.cs | 45 - .../Profiles/Layers/Types/Mouse/MouseType.cs | 97 - .../Mousemat/MousematPropertiesView.xaml | 56 - .../Mousemat/MousematPropertiesView.xaml.cs | 15 - .../Mousemat/MousematPropertiesViewModel.cs | 45 - .../Layers/Types/Mousemat/MousematType.cs | 95 - Artemis/Artemis/Profiles/Lua/LuaModule.cs | 36 - .../Profiles/Lua/Modules/Brushes/LuaBrush.cs | 23 - .../Profiles/Lua/Modules/Brushes/LuaColor.cs | 59 - .../Modules/Brushes/LuaLinearGradientBrush.cs | 64 - .../Modules/Brushes/LuaRadialGradientBrush.cs | 68 - .../Lua/Modules/Brushes/LuaSolidColorBrush.cs | 29 - .../Events/LuaDeviceDrawingEventArgs.cs | 25 - .../Events/LuaDeviceUpdatingEventArgs.cs | 21 - .../Modules/Events/LuaKeyPressEventArgs.cs | 23 - .../Profiles/Lua/Modules/Gui/EditorButton.cs | 25 - .../Profiles/Lua/Modules/Gui/LuaButton.cs | 49 - .../Profiles/Lua/Modules/Gui/LuaCheckBox.cs | 55 - .../Profiles/Lua/Modules/Gui/LuaComboBox.cs | 70 - .../Profiles/Lua/Modules/Gui/LuaLabel.cs | 30 - .../Profiles/Lua/Modules/Gui/LuaSlider.cs | 57 - .../Profiles/Lua/Modules/Gui/LuaTextBox.cs | 48 - .../Lua/Modules/Gui/LuaWindowView.xaml | 8 - .../Lua/Modules/Gui/LuaWindowView.xaml.cs | 15 - .../Lua/Modules/Gui/LuaWindowViewModel.cs | 105 - .../Profiles/Lua/Modules/LuaBrushesModule.cs | 84 - .../Profiles/Lua/Modules/LuaEventsModule.cs | 126 - .../Profiles/Lua/Modules/LuaGuiModule.cs | 64 - .../Profiles/Lua/Modules/LuaKeybindModule.cs | 95 - .../Profiles/Lua/Modules/LuaKeyboardModule.cs | 49 - .../Profiles/Lua/Modules/LuaLayerModule.cs | 183 - .../Profiles/Lua/Modules/LuaMouseModule.cs | 39 - .../Profiles/Lua/Modules/LuaProfileModule.cs | 42 - .../Profiles/Lua/Modules/LuaStorageModule.cs | 68 - .../Profiles/Lua/Modules/LuaTimerModule.cs | 43 - .../Profiles/Lua/Modules/Timer/LuaTimer.cs | 59 - .../Profiles/Lua/Wrappers/LuaDrawWrapper.cs | 75 - .../Profiles/Lua/Wrappers/LuaLayerWrapper.cs | 182 - Artemis/Artemis/Profiles/ProfileModel.cs | 275 - Artemis/Artemis/Properties/Annotations.cs | 1118 -- .../Artemis/Properties/Resources.Designer.cs | 495 - Artemis/Artemis/Properties/Resources.resx | 238 - Artemis/Artemis/Resources/Artemis autorun.xml | Bin 3650 -> 0 bytes .../csgoGamestateConfiguration.txt | 16 - .../Dota2/dotaGamestateConfiguration.txt | 17 - Artemis/Artemis/Resources/Entypo-license.txt | 3 - Artemis/Artemis/Resources/Entypo.ttf | Bin 36376 -> 0 bytes Artemis/Artemis/Resources/Icons.xaml | 5138 ------- Artemis/Artemis/Resources/IconsNonShared.xaml | 5138 ------- .../Resources/Keyboards/blackwidow.png | Bin 176893 -> 0 bytes .../Resources/Keyboards/default-profiles.zip | Bin 559413 -> 0 bytes .../Artemis/Resources/Keyboards/demo-gif.gif | Bin 8077 -> 0 bytes Artemis/Artemis/Resources/Keyboards/g810.png | Bin 293619 -> 0 bytes Artemis/Artemis/Resources/Keyboards/g910.png | Bin 299359 -> 0 bytes Artemis/Artemis/Resources/Keyboards/k65.png | Bin 234617 -> 0 bytes Artemis/Artemis/Resources/Keyboards/k70.png | Bin 291184 -> 0 bytes .../Resources/Keyboards/k95-platinum.png | Bin 307003 -> 0 bytes Artemis/Artemis/Resources/Keyboards/k95.png | Bin 315402 -> 0 bytes .../Resources/Keyboards/masterkeys-pro-l.png | Bin 144985 -> 0 bytes .../Resources/Keyboards/masterkeys-pro-m.png | Bin 110299 -> 0 bytes .../Resources/Keyboards/masterkeys-pro-s.png | Bin 165542 -> 0 bytes Artemis/Artemis/Resources/Keyboards/none.png | Bin 69237 -> 0 bytes .../Artemis/Resources/Keyboards/strafe.png | Bin 235077 -> 0 bytes .../Resources/Kottke Silkscreen License.txt | 25 - Artemis/Artemis/Resources/LogitechLED.dll | Bin 43520 -> 0 bytes Artemis/Artemis/Resources/RzChromaSDK64.dll | Bin 18944 -> 0 bytes .../Resources/WindowsIcons-license.txt | 62 - Artemis/Artemis/Resources/ambilight.png | Bin 871 -> 0 bytes Artemis/Artemis/Resources/audio.png | Bin 15010 -> 0 bytes Artemis/Artemis/Resources/bow.png | Bin 32044 -> 0 bytes Artemis/Artemis/Resources/folder.png | Bin 147 -> 0 bytes Artemis/Artemis/Resources/generic.png | Bin 15359 -> 0 bytes Artemis/Artemis/Resources/gif.png | Bin 203 -> 0 bytes Artemis/Artemis/Resources/headset.png | Bin 559 -> 0 bytes Artemis/Artemis/Resources/keypress.png | Bin 15297 -> 0 bytes Artemis/Artemis/Resources/logo-disabled.ico | Bin 370070 -> 0 bytes Artemis/Artemis/Resources/logo.ico | Bin 370070 -> 0 bytes Artemis/Artemis/Resources/lua-placeholder.lua | 53 - Artemis/Artemis/Resources/mouse.png | Bin 14692 -> 0 bytes Artemis/Artemis/Resources/mousemat.png | Bin 17826 -> 0 bytes Artemis/Artemis/Resources/slkscr.ttf | Bin 18336 -> 0 bytes .../Artemis/Services/CompatibilityService.cs | 41 - Artemis/Artemis/Services/DialogService.cs | 49 - .../Artemis/Services/MetroDialogService.cs | 142 - Artemis/Artemis/Services/WindowService.cs | 41 - Artemis/Artemis/Settings/GeneralSettings.cs | 181 - Artemis/Artemis/Settings/IArtemisSettings.cs | 17 - Artemis/Artemis/Settings/OffsetSettings.cs | 29 - .../Artemis/Styles/Accents/CorsairYellow.xaml | 63 - Artemis/Artemis/Styles/ColorBox.xaml | 825 -- .../DropTargetMetroHighlightAdorner.cs | 75 - .../DropTargetMetroInsertionAdorner.cs | 169 - Artemis/Artemis/Styles/MarkdownStyles.xaml | 57 - .../ActiveWindowDetectionType.cs | 9 - .../ActiveWindowHelper.cs | 48 - .../EventActiveWindowDetector.cs | 182 - .../IActiveWindowDetector.cs | 12 - .../TimerActiveWindowDetector.cs | 91 - Artemis/Artemis/Utilities/ColorHelpers.cs | 150 - .../Utilities/Converters/JsonConverters.cs | 43 - .../Converters/NinjectCustomConverter.cs | 26 - .../Utilities/Converters/ValueConverters.cs | 79 - .../Utilities/DataReaders/DllManager.cs | 67 - .../Utilities/DataReaders/PipeServer.cs | 94 - Artemis/Artemis/Utilities/ExtensionMethods.cs | 105 - .../GameState/GameDataReceivedEventArgs.cs | 14 - .../Utilities/GameState/GameStateWebServer.cs | 124 - Artemis/Artemis/Utilities/GeneralHelpers.cs | 212 - Artemis/Artemis/Utilities/GifImage.cs | 87 - Artemis/Artemis/Utilities/ImageUtilities.cs | 123 - Artemis/Artemis/Utilities/InputHook.cs | 73 - Artemis/Artemis/Utilities/Logging.cs | 78 - .../Artemis/Utilities/Markdown/Markdown.cs | 1051 -- .../Markdown/TextToFlowDocumentConverter.cs | 62 - .../Artemis/Utilities/Memory/GamePointer.cs | 26 - Artemis/Artemis/Utilities/Memory/Memory.cs | 433 - .../Artemis/Utilities/Memory/MemoryHelpers.cs | 50 - Artemis/Artemis/Utilities/Memory/Win32.cs | 43 - .../ParentChild/ChildItemCollection.cs | 138 - .../Utilities/ParentChild/IChildItem.cs | 12 - Artemis/Artemis/Utilities/StickyValue.cs | 64 - Artemis/Artemis/Utilities/Updater.cs | 243 - .../ViewModels/Abstract/BaseViewModel.cs | 8 - Artemis/Artemis/ViewModels/DebugViewModel.cs | 149 - .../Artemis/ViewModels/FlyoutBaseViewModel.cs | 57 - .../Flyouts/FlyoutSettingsViewModel.cs | 277 - Artemis/Artemis/ViewModels/GamesViewModel.cs | 26 - .../Artemis/ViewModels/GeneralViewModel.cs | 31 - .../ViewModels/LayerEditorViewModel.cs | 264 - .../Artemis/ViewModels/OverlaysViewModel.cs | 25 - .../ViewModels/ProfileEditorViewModel.cs | 961 -- .../Events/EventPropertiesViewModel.cs | 41 - .../Profiles/LayerConditionViewModel.cs | 313 - .../LayerDynamicPropertiesViewModel.cs | 225 - .../Profiles/LayerKeybindViewModel.cs | 160 - .../Profiles/LayerTweenViewModel.cs | 18 - Artemis/Artemis/ViewModels/ShellViewModel.cs | 261 - .../Artemis/ViewModels/WelcomeViewModel.cs | 18 - Artemis/Artemis/Views/DebugView.xaml | 84 - Artemis/Artemis/Views/DebugView.xaml.cs | 15 - .../Views/Flyouts/FlyoutSettingsView.xaml | 150 - .../Views/Flyouts/FlyoutSettingsView.xaml.cs | 15 - Artemis/Artemis/Views/GamesView.xaml | 17 - Artemis/Artemis/Views/GamesView.xaml.cs | 15 - Artemis/Artemis/Views/GeneralView.xaml | 20 - Artemis/Artemis/Views/GeneralView.xaml.cs | 15 - Artemis/Artemis/Views/LayerEditorView.xaml | 145 - Artemis/Artemis/Views/LayerEditorView.xaml.cs | 15 - Artemis/Artemis/Views/OverlaysView.xaml | 17 - Artemis/Artemis/Views/OverlaysView.xaml.cs | 15 - Artemis/Artemis/Views/ProfileEditorView.xaml | 240 - .../Artemis/Views/ProfileEditorView.xaml.cs | 15 - .../Profiles/Events/EventPropertiesView.xaml | 66 - .../Events/EventPropertiesView.xaml.cs | 15 - .../Views/Profiles/LayerConditionView.xaml | 69 - .../Views/Profiles/LayerConditionView.xaml.cs | 15 - .../Profiles/LayerDynamicPropertiesView.xaml | 88 - .../LayerDynamicPropertiesView.xaml.cs | 15 - .../Views/Profiles/LayerKeybindView.xaml | 77 - .../Views/Profiles/LayerKeybindView.xaml.cs | 15 - .../Views/Profiles/LayerTweenView.xaml | 58 - Artemis/Artemis/Views/ShellView.xaml | 126 - Artemis/Artemis/Views/ShellView.xaml.cs | 13 - Artemis/Artemis/Views/SystemTrayView.xaml | 37 - Artemis/Artemis/Views/SystemTrayView.xaml.cs | 15 - Artemis/Artemis/Views/WelcomeView.xaml | 39 - Artemis/Artemis/Views/WelcomeView.xaml.cs | 21 - Artemis/Artemis/app.manifest | 70 - .../Artemis/lib/AssettoCorsaSharedMemory.dll | Bin 14336 -> 0 bytes Artemis/Artemis/lib/Ets2SdkClient.dll | Bin 35328 -> 0 bytes Artemis/Artemis/lib/SDKDLL.dll | Bin 538624 -> 0 bytes Artemis/Artemis/logo.ico | Bin 370070 -> 0 bytes Artemis/Artemis/packages.config | 30 - Artemis/Artemis86Wrapper/App.config | 7 - .../Artemis86Wrapper/Artemis86Wrapper.csproj | 102 - .../Intergrations/IIntergrationManager.cs | 10 - .../Intergrations/IIntergrationModel.cs | 6 - .../Intergrations/Skype/SkypeManager.cs | 59 - .../Intergrations/Skype/SkypeModel.cs | 13 - Artemis/Artemis86Wrapper/Program.cs | 17 - .../Properties/AssemblyInfo.cs | 39 - Artemis/Artemis86Wrapper/packages.config | 4 - Artemis/ColorBox/AlphaSelector.cs | 134 - Artemis/ColorBox/BaseSelector.cs | 39 - Artemis/ColorBox/BrushTypes.cs | 24 - Artemis/ColorBox/ColorBox.cs | 1024 -- Artemis/ColorBox/ColorBox.csproj | 93 - Artemis/ColorBox/ColorBox.snk | Bin 596 -> 0 bytes Artemis/ColorBox/ColorChangedEventArgs.cs | 27 - Artemis/ColorBox/DoubleUpDown.cs | 201 - Artemis/ColorBox/Enums.cs | 43 - Artemis/ColorBox/GradientStopAdder.cs | 86 - Artemis/ColorBox/GradientStopSlider.cs | 74 - Artemis/ColorBox/HueSelector.cs | 138 - Artemis/ColorBox/Properties/AssemblyInfo.cs | 38 - .../ColorBox/SaturationBrightnessSelector.cs | 189 - Artemis/ColorBox/SpinEventArgs .cs | 30 - Artemis/ColorBox/Spinner.cs | 56 - Artemis/ColorBox/Themes/Generic.xaml | 759 - Artemis/ColorBox/UpDownBase.cs | 653 - Artemis/ColorBox/Utils/ColorHelper.cs | 209 - .../Utils/InputValidationErrorEventArgs .cs | 41 - Artemis/ColorBox/Utils/TextBoxBehavior.cs | 61 - Artemis/LightFX2Artemis/LightFX2Artemis.def | 23 - .../LightFX2Artemis/LightFX2Artemis.vcxproj | 167 - .../LightFX2Artemis.vcxproj.filters | 42 - Artemis/LightFX2Artemis/LightFxDevice.cpp | 33 - Artemis/LightFX2Artemis/LightFxDevice.h | 15 - Artemis/LightFX2Artemis/LightFxLight.cpp | 32 - Artemis/LightFX2Artemis/LightFxLight.h | 15 - Artemis/LightFX2Artemis/LightFxState.cpp | 36 - Artemis/LightFX2Artemis/LightFxState.h | 17 - Artemis/LightFX2Artemis/Source.cpp | 222 - Artemis/LightFX2Artemis/includes/LFX2.h | 439 - Artemis/LightFX2Artemis/includes/LFXDecl.h | 238 - Artemis/LightFX2Artemis/includes/json.hpp | 12201 ---------------- Artemis/LightFX2Artemis/includes/log.h | 172 - Artemis/LogiLed2Artemis/Logger.cpp | 104 - Artemis/LogiLed2Artemis/Logger.h | 82 - Artemis/LogiLed2Artemis/LogiLed2Artemis.def | 49 - .../LogiLed2Artemis/LogiLed2Artemis.vcxproj | 171 - .../LogiLed2Artemis.vcxproj.filters | 35 - Artemis/LogiLed2Artemis/LogiLedDefs.h | 135 - Artemis/LogiLed2Artemis/main.cpp | 372 - Artemis/LogiLed2Artemis/main.h | 2 - Artemis/Razer2Artemis/Log.h | 67 - Artemis/Razer2Artemis/Razer2Artemis.def | 17 - Artemis/Razer2Artemis/Razer2Artemis.vcxproj | 144 - .../Razer2Artemis.vcxproj.filters | 41 - Artemis/Razer2Artemis/RzChromaSDKDefines.h | 146 - Artemis/Razer2Artemis/RzChromaSDKTypes.h | 788 - Artemis/Razer2Artemis/RzErrors.h | 45 - Artemis/Razer2Artemis/main.cpp | 223 - Artemis/Razer2Artemis/main.h | 48 - Artemis/Razer2Artemis/utils.cpp | 15 - Artemis/Razer2Artemis/utils.h | 12 - .../UnrealTournament2Artemis/Artemis.uplugin | 21 - .../Win64/UE4-Artemis-Win64-Shipping.dll | Bin 199680 -> 0 bytes .../Binaries/Win64/UE4-Win64-Shipping.modules | 8 - .../Source/Artemis.Build.cs | 23 - .../Source/Private/Artemis.cpp | 228 - .../Source/Private/Artemis.h | 41 - src/Artemis.Core/Artemis.Core.csproj | 7 + src/Artemis.Core/Class1.cs | 8 + src/Artemis.Storage/Artemis.Storage.csproj | 12 + src/Artemis.Storage/Entities/Condition.cs | 10 + src/Artemis.Storage/Entities/Layer.cs | 10 + src/Artemis.Storage/Entities/Profile.cs | 10 + src/Artemis.UI/App.config | 6 + src/Artemis.UI/App.xaml | 9 + src/Artemis.UI/App.xaml.cs | 17 + src/Artemis.UI/Artemis.UI.csproj | 97 + src/Artemis.UI/MainWindow.xaml | 12 + .../Artemis.UI/MainWindow.xaml.cs | 8 +- .../Artemis.UI}/Properties/AssemblyInfo.cs | 113 +- .../Properties/Resources.Designer.cs | 71 + src/Artemis.UI/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + src/Artemis.UI/Properties/Settings.settings | 7 + src/Artemis.sln | 37 + 607 files changed, 582 insertions(+), 76331 deletions(-) create mode 100644 .gitattributes delete mode 100644 Artemis/Artemis.Installer/Artemis.Installer.wixproj delete mode 100644 Artemis/Artemis.Installer/HeatGeneratedFileList.wxs delete mode 100644 Artemis/Artemis.Installer/Product.wxs delete mode 100644 Artemis/Artemis.Installer/banner.bmp delete mode 100644 Artemis/Artemis.Installer/dialog.bmp delete mode 100644 Artemis/Artemis.Installer/logo.ico delete mode 100644 Artemis/Artemis.sln delete mode 100644 Artemis/Artemis/App.config delete mode 100644 Artemis/Artemis/App.xaml delete mode 100644 Artemis/Artemis/App.xaml.cs delete mode 100644 Artemis/Artemis/Artemis.csproj delete mode 100644 Artemis/Artemis/ArtemisBootstrapper.cs delete mode 100644 Artemis/Artemis/Controls/Log/LoggingControl.xaml delete mode 100644 Artemis/Artemis/Controls/Log/LoggingControl.xaml.cs delete mode 100644 Artemis/Artemis/Controls/Log/MemoryEventTarget.cs delete mode 100644 Artemis/Artemis/DAL/ProfileProvider.cs delete mode 100644 Artemis/Artemis/DAL/SettingsProvider.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs delete mode 100644 Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProL.cs delete mode 100644 Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProM.cs delete mode 100644 Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProS.cs delete mode 100644 Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProL.cs delete mode 100644 Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProS.cs delete mode 100644 Artemis/Artemis/DeviceProviders/CoolerMaster/Utilities/CMSDK.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboard.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Corsair/Utilities/CorsairUtilities.cs delete mode 100644 Artemis/Artemis/DeviceProviders/DeviceProvider.cs delete mode 100644 Artemis/Artemis/DeviceProviders/KeyboardProvider.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/G810.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/G910.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/LogitechKeyboard.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMap.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMapG810.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyboardNames.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/Utilities/LogitechGSDK.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Razer/Firefly.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Razer/Mamba.cs delete mode 100644 Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs delete mode 100644 Artemis/Artemis/Dialogs/MarkdownDialog.xaml delete mode 100644 Artemis/Artemis/Dialogs/MarkdownDialog.xaml.cs delete mode 100644 Artemis/Artemis/Events/AudioDeviceChangedEventArgs.cs delete mode 100644 Artemis/Artemis/Events/EnabledChangedEventArgs.cs delete mode 100644 Artemis/Artemis/Events/KeyboardChangedEventArgs.cs delete mode 100644 Artemis/Artemis/Events/ModuleChangedEventArgs.cs delete mode 100644 Artemis/Artemis/Events/ProfileChangedEventArgs.cs delete mode 100644 Artemis/Artemis/Events/ProfileDeviceEventsArg.cs delete mode 100644 Artemis/Artemis/Events/RazerColorArrayChanged.cs delete mode 100644 Artemis/Artemis/Events/RazerColorsChangedEventArgs.cs delete mode 100644 Artemis/Artemis/InjectionModules/BaseModules.cs delete mode 100644 Artemis/Artemis/InjectionModules/ManagerModules.cs delete mode 100644 Artemis/Artemis/ItemBehaviours/BindableSelectedItemBehavior.cs delete mode 100644 Artemis/Artemis/LogitechLedEnginesWrapper.dll delete mode 100644 Artemis/Artemis/Managers/AudioCaptureManager.cs delete mode 100644 Artemis/Artemis/Managers/DeviceManager.cs delete mode 100644 Artemis/Artemis/Managers/KeybindManager.cs delete mode 100644 Artemis/Artemis/Managers/LoopManager.cs delete mode 100644 Artemis/Artemis/Managers/LuaManager.cs delete mode 100644 Artemis/Artemis/Managers/MainManager.cs delete mode 100644 Artemis/Artemis/Managers/MigrationManager.cs delete mode 100644 Artemis/Artemis/Managers/ModuleManager.cs delete mode 100644 Artemis/Artemis/Managers/PreviewManager.cs delete mode 100644 Artemis/Artemis/Models/DeviceVisualModel.cs delete mode 100644 Artemis/Artemis/Models/FrameModel.cs delete mode 100644 Artemis/Artemis/Models/KeybindModel.cs delete mode 100644 Artemis/Artemis/Models/LayerEditorModel.cs delete mode 100644 Artemis/Artemis/Models/ProfileEditorModel.cs delete mode 100644 Artemis/Artemis/Modules/Abstract/ModuleDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Abstract/ModuleModel.cs delete mode 100644 Artemis/Artemis/Modules/Abstract/ModuleSettings.cs delete mode 100644 Artemis/Artemis/Modules/Abstract/ModuleViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/AssettoCorsa/AssettoCorsaDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/AssettoCorsa/AssettoCorsaModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/AssettoCorsa/AssettoCorsaSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/AssettoCorsa/AssettoCorsaView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/AssettoCorsa/AssettoCorsaView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/AssettoCorsa/AssettoCorsaViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Dota2/Dota2DataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs delete mode 100644 Artemis/Artemis/Modules/Games/Dota2/Dota2Settings.cs delete mode 100644 Artemis/Artemis/Modules/Games/Dota2/Dota2View.xaml delete mode 100644 Artemis/Artemis/Modules/Games/Dota2/Dota2View.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Data/Ets2TelemetryData.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Data/Ets2TelemetryDataReader.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Data/IEts2TelemetryData.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Data/Reader/Ets2TelemetryStructure.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Data/Reader/SharedProcessMemory.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2DataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2Model.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2Settings.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2View.xaml delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2View.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2ViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Resources/Win32/ets2-telemetry-server.dll delete mode 100644 Artemis/Artemis/Modules/Games/EurotruckSimulator2/Resources/Win64/ets2-telemetry-server.dll delete mode 100644 Artemis/Artemis/Modules/Games/FormulaOne2017/FormulaOne2017DataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/FormulaOne2017/FormulaOne2017Model.cs delete mode 100644 Artemis/Artemis/Modules/Games/FormulaOne2017/FormulaOne2017Settings.cs delete mode 100644 Artemis/Artemis/Modules/Games/FormulaOne2017/FormulaOne2017View.xaml delete mode 100644 Artemis/Artemis/Modules/Games/FormulaOne2017/FormulaOne2017View.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/FormulaOne2017/FormulaOne2017ViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/GtaV/GtaVDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/GtaV/GtaVModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/GtaV/GtaVSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/GtaV/GtaVView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/GtaV/GtaVView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/GtaV/GtaVViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/Data/LightFxState.cs delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/LightFxDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/LightFxModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/LightFxSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/LightFxView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/LightFxView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/LightFx/LightFxViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Overwatch/OverwatchDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Overwatch/OverwatchSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/Overwatch/OverwatchViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/_EnumGetDescription.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eAPIStructLengths.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eCarFlags.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eCrashDamageState.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eCurrentSector.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eFlagColors.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eFlagReason.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eGameState.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eHeaderVersion.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/ePitMode.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/ePitSchedule.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eRaceState.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eSessionState.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eTerrain.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eTyreFlags.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eTyres.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_eNums/eVector.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/CarDamage.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/CarState.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Classes/LapTimeClass.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Classes/ParticipantClass.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/EventInfo.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Flags.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/GameState.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Methods/pCarsAPI-MapStructToClass.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/MotionDevice.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/ParticipantInfo.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/PitInfo.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Timings.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/UnfilteredInput.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Vehicle.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Version.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/Weather.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/WheelTyre.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIClass/pCarsAPI-Class.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIStruct/pCarsAPI-ReadAPI.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/Data/_pCarsAPIStruct/pCarsAPI-Struct.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/ProjectCarsDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/ProjectCarsModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/ProjectCarsSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/ProjectCarsView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/ProjectCarsView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/ProjectCars/ProjectCarsViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Terraria/TerrariaDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Terraria/TerrariaModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Terraria/TerrariaSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/Terraria/TerrariaView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/Terraria/TerrariaView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/Terraria/TerrariaViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/Resources/redeemer.gif delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/Resources/ut-plugin.zip delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Resources/witcher3-mod.zip delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Witcher3DataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Witcher3Settings.cs delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Witcher3View.xaml delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Witcher3View.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Models/WoWAura.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Models/WoWCastBar.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Models/WoWEnums.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Models/WoWSpecialization.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Models/WoWSpell.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Models/WoWUnit.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Artemis.toc delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Core.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceAddon-3.0/AceAddon-3.0.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceAddon-3.0/AceAddon-3.0.xml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceComm-3.0/AceComm-3.0.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceComm-3.0/AceComm-3.0.xml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceComm-3.0/ChatThrottleLib.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceConsole-3.0/AceConsole-3.0.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceConsole-3.0/AceConsole-3.0.xml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceEvent-3.0/AceEvent-3.0.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceEvent-3.0/AceEvent-3.0.xml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceTimer-3.0/AceTimer-3.0.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/AceTimer-3.0/AceTimer-3.0.xml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/LibStub/LibStub.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/Libs/json.lua delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/Addon source/embeds.xml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/Resources/wow-addon.zip delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWModel.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWPacketScanner.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWSettings.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWView.xaml delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Games/WoW/WoWViewModel.cs delete mode 100644 Artemis/Artemis/Modules/General/Bubbles/Bubble.cs delete mode 100644 Artemis/Artemis/Modules/General/Bubbles/BubblesModel.cs delete mode 100644 Artemis/Artemis/Modules/General/Bubbles/BubblesSettings.cs delete mode 100644 Artemis/Artemis/Modules/General/Bubbles/BubblesView.xaml delete mode 100644 Artemis/Artemis/Modules/General/Bubbles/BubblesView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/General/Bubbles/BubblesViewModel.cs delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/GeneralProfileDataModel.cs delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/GeneralProfileModel.cs delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/GeneralProfileSettings.cs delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/GeneralProfileView.xaml delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/GeneralProfileView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/GeneralProfileViewModel.cs delete mode 100644 Artemis/Artemis/Modules/General/GeneralProfile/PerformanceInfo.cs delete mode 100644 Artemis/Artemis/Modules/Overlays/OverlayProfile/OverlayProfileDataModel.cs delete mode 100644 Artemis/Artemis/Modules/Overlays/OverlayProfile/OverlayProfileModel.cs delete mode 100644 Artemis/Artemis/Modules/Overlays/OverlayProfile/OverlayProfileSettings.cs delete mode 100644 Artemis/Artemis/Modules/Overlays/OverlayProfile/OverlayProfileView.xaml delete mode 100644 Artemis/Artemis/Modules/Overlays/OverlayProfile/OverlayProfileView.xaml.cs delete mode 100644 Artemis/Artemis/Modules/Overlays/OverlayProfile/OverlayProfileViewModel.cs delete mode 100644 Artemis/Artemis/NLog.xsd delete mode 100644 Artemis/Artemis/Profiles/Layers/Abstract/LayerCondition.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Abstract/LayerPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/GrowAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/NoneAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/PulseAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/RotateClockwiseAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/RotateCounterclockwiseAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/ShrinkAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/SlideDownAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/SlideLeftAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/SlideRightAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Animations/SlideUpAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Conditions/DataModelCondition.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Conditions/EventCondition.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Interfaces/ILayerAnimation.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Interfaces/ILayerType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/DynamicPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/EventPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/KeyboardEventPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/LayerConditionModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/LayerKeybindModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/LayerModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/LayerPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/SimplePropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Models/TweenModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbienceCreator/AmbienceCreatorExtend.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbienceCreator/AmbienceCreatorMirror.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbienceCreator/AvgColor.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbienceCreator/IAmbienceCreator.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbientLightPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbientLightPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbientLightPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbientLightPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/AmbientLightType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Helper/ToggleSwitchButtonEnumFlagHelper.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/AmbienceCreatorType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/BlackBarDetectionMode.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/Extensions/AvgColorExtension.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/Extensions/EnumExtension.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/Extensions/PixelDataExtension.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/FlipMode.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/ScreenCaptureMode.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/Model/SmoothMode.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/ScreenCapturing/DX9ScreenCapture.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/ScreenCapturing/IScreenCapture.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/AmbientLight/ScreenCapturing/ScreenCaptureManager.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/AudioCapture.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/BaseSpectrumProvider.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/ISpectrumProvider.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/LineSpectrum.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/SingleSpectrum.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/SpectrumBase.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/ConicalBrush/ConicalBrushPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/ConicalBrush/ConicalBrushPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/ConicalBrush/ConicalBrushPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/ConicalBrush/ConicalBrushPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/ConicalBrush/ConicalBrushType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/ConicalBrush/Drawing/ConicalGradientDrawer.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematPropertiesView.xaml delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematType.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/LuaModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Brushes/LuaBrush.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Brushes/LuaColor.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Brushes/LuaLinearGradientBrush.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Brushes/LuaRadialGradientBrush.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Brushes/LuaSolidColorBrush.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Events/LuaDeviceDrawingEventArgs.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Events/LuaDeviceUpdatingEventArgs.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Events/LuaKeyPressEventArgs.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/EditorButton.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaButton.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaCheckBox.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaComboBox.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaLabel.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaSlider.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaTextBox.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowView.xaml delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowView.xaml.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Gui/LuaWindowViewModel.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaBrushesModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaEventsModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaGuiModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaKeybindModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaKeyboardModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaLayerModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaMouseModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaProfileModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaStorageModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/LuaTimerModule.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Modules/Timer/LuaTimer.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Wrappers/LuaDrawWrapper.cs delete mode 100644 Artemis/Artemis/Profiles/Lua/Wrappers/LuaLayerWrapper.cs delete mode 100644 Artemis/Artemis/Profiles/ProfileModel.cs delete mode 100644 Artemis/Artemis/Properties/Annotations.cs delete mode 100644 Artemis/Artemis/Properties/Resources.Designer.cs delete mode 100644 Artemis/Artemis/Properties/Resources.resx delete mode 100644 Artemis/Artemis/Resources/Artemis autorun.xml delete mode 100644 Artemis/Artemis/Resources/CounterStrike/csgoGamestateConfiguration.txt delete mode 100644 Artemis/Artemis/Resources/Dota2/dotaGamestateConfiguration.txt delete mode 100644 Artemis/Artemis/Resources/Entypo-license.txt delete mode 100644 Artemis/Artemis/Resources/Entypo.ttf delete mode 100644 Artemis/Artemis/Resources/Icons.xaml delete mode 100644 Artemis/Artemis/Resources/IconsNonShared.xaml delete mode 100644 Artemis/Artemis/Resources/Keyboards/blackwidow.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/default-profiles.zip delete mode 100644 Artemis/Artemis/Resources/Keyboards/demo-gif.gif delete mode 100644 Artemis/Artemis/Resources/Keyboards/g810.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/g910.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/k65.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/k70.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/k95-platinum.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/k95.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/masterkeys-pro-l.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/masterkeys-pro-m.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/masterkeys-pro-s.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/none.png delete mode 100644 Artemis/Artemis/Resources/Keyboards/strafe.png delete mode 100644 Artemis/Artemis/Resources/Kottke Silkscreen License.txt delete mode 100644 Artemis/Artemis/Resources/LogitechLED.dll delete mode 100644 Artemis/Artemis/Resources/RzChromaSDK64.dll delete mode 100644 Artemis/Artemis/Resources/WindowsIcons-license.txt delete mode 100644 Artemis/Artemis/Resources/ambilight.png delete mode 100644 Artemis/Artemis/Resources/audio.png delete mode 100644 Artemis/Artemis/Resources/bow.png delete mode 100644 Artemis/Artemis/Resources/folder.png delete mode 100644 Artemis/Artemis/Resources/generic.png delete mode 100644 Artemis/Artemis/Resources/gif.png delete mode 100644 Artemis/Artemis/Resources/headset.png delete mode 100644 Artemis/Artemis/Resources/keypress.png delete mode 100644 Artemis/Artemis/Resources/logo-disabled.ico delete mode 100644 Artemis/Artemis/Resources/logo.ico delete mode 100644 Artemis/Artemis/Resources/lua-placeholder.lua delete mode 100644 Artemis/Artemis/Resources/mouse.png delete mode 100644 Artemis/Artemis/Resources/mousemat.png delete mode 100644 Artemis/Artemis/Resources/slkscr.ttf delete mode 100644 Artemis/Artemis/Services/CompatibilityService.cs delete mode 100644 Artemis/Artemis/Services/DialogService.cs delete mode 100644 Artemis/Artemis/Services/MetroDialogService.cs delete mode 100644 Artemis/Artemis/Services/WindowService.cs delete mode 100644 Artemis/Artemis/Settings/GeneralSettings.cs delete mode 100644 Artemis/Artemis/Settings/IArtemisSettings.cs delete mode 100644 Artemis/Artemis/Settings/OffsetSettings.cs delete mode 100644 Artemis/Artemis/Styles/Accents/CorsairYellow.xaml delete mode 100644 Artemis/Artemis/Styles/ColorBox.xaml delete mode 100644 Artemis/Artemis/Styles/DropTargetAdorners/DropTargetMetroHighlightAdorner.cs delete mode 100644 Artemis/Artemis/Styles/DropTargetAdorners/DropTargetMetroInsertionAdorner.cs delete mode 100644 Artemis/Artemis/Styles/MarkdownStyles.xaml delete mode 100644 Artemis/Artemis/Utilities/ActiveWindowDetection/ActiveWindowDetectionType.cs delete mode 100644 Artemis/Artemis/Utilities/ActiveWindowDetection/ActiveWindowHelper.cs delete mode 100644 Artemis/Artemis/Utilities/ActiveWindowDetection/EventActiveWindowDetector.cs delete mode 100644 Artemis/Artemis/Utilities/ActiveWindowDetection/IActiveWindowDetector.cs delete mode 100644 Artemis/Artemis/Utilities/ActiveWindowDetection/TimerActiveWindowDetector.cs delete mode 100644 Artemis/Artemis/Utilities/ColorHelpers.cs delete mode 100644 Artemis/Artemis/Utilities/Converters/JsonConverters.cs delete mode 100644 Artemis/Artemis/Utilities/Converters/NinjectCustomConverter.cs delete mode 100644 Artemis/Artemis/Utilities/Converters/ValueConverters.cs delete mode 100644 Artemis/Artemis/Utilities/DataReaders/DllManager.cs delete mode 100644 Artemis/Artemis/Utilities/DataReaders/PipeServer.cs delete mode 100644 Artemis/Artemis/Utilities/ExtensionMethods.cs delete mode 100644 Artemis/Artemis/Utilities/GameState/GameDataReceivedEventArgs.cs delete mode 100644 Artemis/Artemis/Utilities/GameState/GameStateWebServer.cs delete mode 100644 Artemis/Artemis/Utilities/GeneralHelpers.cs delete mode 100644 Artemis/Artemis/Utilities/GifImage.cs delete mode 100644 Artemis/Artemis/Utilities/ImageUtilities.cs delete mode 100644 Artemis/Artemis/Utilities/InputHook.cs delete mode 100644 Artemis/Artemis/Utilities/Logging.cs delete mode 100644 Artemis/Artemis/Utilities/Markdown/Markdown.cs delete mode 100644 Artemis/Artemis/Utilities/Markdown/TextToFlowDocumentConverter.cs delete mode 100644 Artemis/Artemis/Utilities/Memory/GamePointer.cs delete mode 100644 Artemis/Artemis/Utilities/Memory/Memory.cs delete mode 100644 Artemis/Artemis/Utilities/Memory/MemoryHelpers.cs delete mode 100644 Artemis/Artemis/Utilities/Memory/Win32.cs delete mode 100644 Artemis/Artemis/Utilities/ParentChild/ChildItemCollection.cs delete mode 100644 Artemis/Artemis/Utilities/ParentChild/IChildItem.cs delete mode 100644 Artemis/Artemis/Utilities/StickyValue.cs delete mode 100644 Artemis/Artemis/Utilities/Updater.cs delete mode 100644 Artemis/Artemis/ViewModels/Abstract/BaseViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/DebugViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/FlyoutBaseViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/GamesViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/GeneralViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/LayerEditorViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/OverlaysViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/Profiles/Events/EventPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/Profiles/LayerDynamicPropertiesViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/Profiles/LayerKeybindViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/Profiles/LayerTweenViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/ShellViewModel.cs delete mode 100644 Artemis/Artemis/ViewModels/WelcomeViewModel.cs delete mode 100644 Artemis/Artemis/Views/DebugView.xaml delete mode 100644 Artemis/Artemis/Views/DebugView.xaml.cs delete mode 100644 Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml delete mode 100644 Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml.cs delete mode 100644 Artemis/Artemis/Views/GamesView.xaml delete mode 100644 Artemis/Artemis/Views/GamesView.xaml.cs delete mode 100644 Artemis/Artemis/Views/GeneralView.xaml delete mode 100644 Artemis/Artemis/Views/GeneralView.xaml.cs delete mode 100644 Artemis/Artemis/Views/LayerEditorView.xaml delete mode 100644 Artemis/Artemis/Views/LayerEditorView.xaml.cs delete mode 100644 Artemis/Artemis/Views/OverlaysView.xaml delete mode 100644 Artemis/Artemis/Views/OverlaysView.xaml.cs delete mode 100644 Artemis/Artemis/Views/ProfileEditorView.xaml delete mode 100644 Artemis/Artemis/Views/ProfileEditorView.xaml.cs delete mode 100644 Artemis/Artemis/Views/Profiles/Events/EventPropertiesView.xaml delete mode 100644 Artemis/Artemis/Views/Profiles/Events/EventPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Views/Profiles/LayerConditionView.xaml delete mode 100644 Artemis/Artemis/Views/Profiles/LayerConditionView.xaml.cs delete mode 100644 Artemis/Artemis/Views/Profiles/LayerDynamicPropertiesView.xaml delete mode 100644 Artemis/Artemis/Views/Profiles/LayerDynamicPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Views/Profiles/LayerKeybindView.xaml delete mode 100644 Artemis/Artemis/Views/Profiles/LayerKeybindView.xaml.cs delete mode 100644 Artemis/Artemis/Views/Profiles/LayerTweenView.xaml delete mode 100644 Artemis/Artemis/Views/ShellView.xaml delete mode 100644 Artemis/Artemis/Views/ShellView.xaml.cs delete mode 100644 Artemis/Artemis/Views/SystemTrayView.xaml delete mode 100644 Artemis/Artemis/Views/SystemTrayView.xaml.cs delete mode 100644 Artemis/Artemis/Views/WelcomeView.xaml delete mode 100644 Artemis/Artemis/Views/WelcomeView.xaml.cs delete mode 100644 Artemis/Artemis/app.manifest delete mode 100644 Artemis/Artemis/lib/AssettoCorsaSharedMemory.dll delete mode 100644 Artemis/Artemis/lib/Ets2SdkClient.dll delete mode 100644 Artemis/Artemis/lib/SDKDLL.dll delete mode 100644 Artemis/Artemis/logo.ico delete mode 100644 Artemis/Artemis/packages.config delete mode 100644 Artemis/Artemis86Wrapper/App.config delete mode 100644 Artemis/Artemis86Wrapper/Artemis86Wrapper.csproj delete mode 100644 Artemis/Artemis86Wrapper/Intergrations/IIntergrationManager.cs delete mode 100644 Artemis/Artemis86Wrapper/Intergrations/IIntergrationModel.cs delete mode 100644 Artemis/Artemis86Wrapper/Intergrations/Skype/SkypeManager.cs delete mode 100644 Artemis/Artemis86Wrapper/Intergrations/Skype/SkypeModel.cs delete mode 100644 Artemis/Artemis86Wrapper/Program.cs delete mode 100644 Artemis/Artemis86Wrapper/Properties/AssemblyInfo.cs delete mode 100644 Artemis/Artemis86Wrapper/packages.config delete mode 100644 Artemis/ColorBox/AlphaSelector.cs delete mode 100644 Artemis/ColorBox/BaseSelector.cs delete mode 100644 Artemis/ColorBox/BrushTypes.cs delete mode 100644 Artemis/ColorBox/ColorBox.cs delete mode 100644 Artemis/ColorBox/ColorBox.csproj delete mode 100644 Artemis/ColorBox/ColorBox.snk delete mode 100644 Artemis/ColorBox/ColorChangedEventArgs.cs delete mode 100644 Artemis/ColorBox/DoubleUpDown.cs delete mode 100644 Artemis/ColorBox/Enums.cs delete mode 100644 Artemis/ColorBox/GradientStopAdder.cs delete mode 100644 Artemis/ColorBox/GradientStopSlider.cs delete mode 100644 Artemis/ColorBox/HueSelector.cs delete mode 100644 Artemis/ColorBox/Properties/AssemblyInfo.cs delete mode 100644 Artemis/ColorBox/SaturationBrightnessSelector.cs delete mode 100644 Artemis/ColorBox/SpinEventArgs .cs delete mode 100644 Artemis/ColorBox/Spinner.cs delete mode 100644 Artemis/ColorBox/Themes/Generic.xaml delete mode 100644 Artemis/ColorBox/UpDownBase.cs delete mode 100644 Artemis/ColorBox/Utils/ColorHelper.cs delete mode 100644 Artemis/ColorBox/Utils/InputValidationErrorEventArgs .cs delete mode 100644 Artemis/ColorBox/Utils/TextBoxBehavior.cs delete mode 100644 Artemis/LightFX2Artemis/LightFX2Artemis.def delete mode 100644 Artemis/LightFX2Artemis/LightFX2Artemis.vcxproj delete mode 100644 Artemis/LightFX2Artemis/LightFX2Artemis.vcxproj.filters delete mode 100644 Artemis/LightFX2Artemis/LightFxDevice.cpp delete mode 100644 Artemis/LightFX2Artemis/LightFxDevice.h delete mode 100644 Artemis/LightFX2Artemis/LightFxLight.cpp delete mode 100644 Artemis/LightFX2Artemis/LightFxLight.h delete mode 100644 Artemis/LightFX2Artemis/LightFxState.cpp delete mode 100644 Artemis/LightFX2Artemis/LightFxState.h delete mode 100644 Artemis/LightFX2Artemis/Source.cpp delete mode 100644 Artemis/LightFX2Artemis/includes/LFX2.h delete mode 100644 Artemis/LightFX2Artemis/includes/LFXDecl.h delete mode 100644 Artemis/LightFX2Artemis/includes/json.hpp delete mode 100644 Artemis/LightFX2Artemis/includes/log.h delete mode 100644 Artemis/LogiLed2Artemis/Logger.cpp delete mode 100644 Artemis/LogiLed2Artemis/Logger.h delete mode 100644 Artemis/LogiLed2Artemis/LogiLed2Artemis.def delete mode 100644 Artemis/LogiLed2Artemis/LogiLed2Artemis.vcxproj delete mode 100644 Artemis/LogiLed2Artemis/LogiLed2Artemis.vcxproj.filters delete mode 100644 Artemis/LogiLed2Artemis/LogiLedDefs.h delete mode 100644 Artemis/LogiLed2Artemis/main.cpp delete mode 100644 Artemis/LogiLed2Artemis/main.h delete mode 100644 Artemis/Razer2Artemis/Log.h delete mode 100644 Artemis/Razer2Artemis/Razer2Artemis.def delete mode 100644 Artemis/Razer2Artemis/Razer2Artemis.vcxproj delete mode 100644 Artemis/Razer2Artemis/Razer2Artemis.vcxproj.filters delete mode 100644 Artemis/Razer2Artemis/RzChromaSDKDefines.h delete mode 100644 Artemis/Razer2Artemis/RzChromaSDKTypes.h delete mode 100644 Artemis/Razer2Artemis/RzErrors.h delete mode 100644 Artemis/Razer2Artemis/main.cpp delete mode 100644 Artemis/Razer2Artemis/main.h delete mode 100644 Artemis/Razer2Artemis/utils.cpp delete mode 100644 Artemis/Razer2Artemis/utils.h delete mode 100644 Artemis/UnrealTournament2Artemis/Artemis.uplugin delete mode 100644 Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Artemis-Win64-Shipping.dll delete mode 100644 Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Win64-Shipping.modules delete mode 100644 Artemis/UnrealTournament2Artemis/Source/Artemis.Build.cs delete mode 100644 Artemis/UnrealTournament2Artemis/Source/Private/Artemis.cpp delete mode 100644 Artemis/UnrealTournament2Artemis/Source/Private/Artemis.h create mode 100644 src/Artemis.Core/Artemis.Core.csproj create mode 100644 src/Artemis.Core/Class1.cs create mode 100644 src/Artemis.Storage/Artemis.Storage.csproj create mode 100644 src/Artemis.Storage/Entities/Condition.cs create mode 100644 src/Artemis.Storage/Entities/Layer.cs create mode 100644 src/Artemis.Storage/Entities/Profile.cs create mode 100644 src/Artemis.UI/App.config create mode 100644 src/Artemis.UI/App.xaml create mode 100644 src/Artemis.UI/App.xaml.cs create mode 100644 src/Artemis.UI/Artemis.UI.csproj create mode 100644 src/Artemis.UI/MainWindow.xaml rename Artemis/Artemis/Views/Profiles/LayerTweenView.xaml.cs => src/Artemis.UI/MainWindow.xaml.cs (74%) rename {Artemis/Artemis => src/Artemis.UI}/Properties/AssemblyInfo.cs (62%) create mode 100644 src/Artemis.UI/Properties/Resources.Designer.cs create mode 100644 src/Artemis.UI/Properties/Resources.resx create mode 100644 src/Artemis.UI/Properties/Settings.Designer.cs create mode 100644 src/Artemis.UI/Properties/Settings.settings create mode 100644 src/Artemis.sln diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1ff0c4230 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/Artemis/Artemis.Installer/Artemis.Installer.wixproj b/Artemis/Artemis.Installer/Artemis.Installer.wixproj deleted file mode 100644 index 4ecebec55..000000000 --- a/Artemis/Artemis.Installer/Artemis.Installer.wixproj +++ /dev/null @@ -1,77 +0,0 @@ - - - - Debug - x86 - 3.10 - a34f9047-8464-4423-89ef-a2f43e089e93 - 2.0 - Artemis - Package - - - bin\$(Configuration)\ - obj\$(Configuration)\ - Debug - - - bin\$(Configuration)\ - obj\$(Configuration)\ - -arch x64 - False - - - HarvestPath=..\Artemis\bin\Release - - - - - - - - Artemis - {ed9997a2-e54c-4e9f-9350-62be672c3abe} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - - - $(WixExtDir)\WixUtilExtension.dll - WixUtilExtension - - - $(WixExtDir)\WixUIExtension.dll - WixUIExtension - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Artemis/Artemis.Installer/HeatGeneratedFileList.wxs b/Artemis/Artemis.Installer/HeatGeneratedFileList.wxs deleted file mode 100644 index 1148775d8..000000000 --- a/Artemis/Artemis.Installer/HeatGeneratedFileList.wxs +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Artemis/Artemis.Installer/Product.wxs b/Artemis/Artemis.Installer/Product.wxs deleted file mode 100644 index 5620cb154..000000000 --- a/Artemis/Artemis.Installer/Product.wxs +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - REMOVE="ALL" - - - - - - - - \ No newline at end of file diff --git a/Artemis/Artemis.Installer/banner.bmp b/Artemis/Artemis.Installer/banner.bmp deleted file mode 100644 index c8c5a43ce1f08d37b3ecac82262f560311b0da59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85896 zcmeI533wD$x`r#D$T;3nkbUzyj#oxyP?0SqXWtV# zd%Dx<>8l ztv}!S{{OuC_K|f~4Eb4vKXdWtIySBGw-qxDuMD#R?@#E<)j)q94E*9>RR z8P2gMfJHrYO`^Lql~cvS#z}8)=x*3V!&^82hvDGO zb_D47xPu#^IUWf(Elv)Z1@XQSjpd&L;y4{@S?yMlrz3a=iiyVZhFW70h-jXgvuubpvP%fl+T+MN%?Fdp#yfnQ7d8KQp#*!`sl&9wYcGPfO za0KUQ9;=CJb>JwtO{nLGl3zNQXdM}|AUI;KXTWR{hPx3J#ldZI)c*e{D7nA6oiU{~ zwJ}wS`$Bd5wNRiZby_BNaqO55$QuQhsM$y$_2)8NGs)ab|Osqa0d#7 zqp_ssygUjxE?k0Bl*eZ*7aX$n2h2fyU)<6?2Np^8E({ER!Odr`ci{BYjPVUER;J*a z9s`J201+`|~k zPYFvOuW59utQR@XF9&^IDeGg&Th3dQCuJ=bD94kstW$DcO)C_@Os4Uti?railw3hh zb#hM{HN=yw_XFaG)DYiy_;GpNxB){P;PwwB5Z@EYwg^IVN%$B$$A{ir^C+Zqh~^u% zOa{u~P^2h_zyhsYXWH{iVR0Ozt!i)-V`0AC0cb241+Vhfj|g*~;5eR?wN#qN#^Cva zhd7J)*QNO@IVK9RLlu<+@k^r*FWJ3sVNm!BDVfvyOK==dp+~MJd#A^VY{t7 zyvDz=W+G4y#rz!>qW1Iv}q87V&99$_CPY*dQ3k+-6Lo_1@Se;rkZ_M=Z!Io;WCo zM=(7iaSg<2U=Fbbfw_9r=!(8|ewmOKtW3@kIV7LRs$HL_bjWo@9ULi{;iS;^A9@u7To*<_>)gG1DB`_MM z<;)x~#G#2hyD|9%o9?kcxp^x+ycqQiXD=Mb6ev*c?lm6Mo~zeSLgpuOKB>Bb#C_CY zp^kFl>En=ADpWf}T=M@8sC_K?BV3P#m=1ZVkH@9a#QIgEI}Fz$ew_5T+PX9U`&1dn z^k&qd#fK7qJs5~%0(0|L=FHhRVEkYI`;Qdqyj@E2csDTEYP-WjR49kKf^1Ku z9g&b6-W7Jj^9Ld7Divb&T7eYrMa|pv!V&hdBxNq*p;;v*=jHTKt)l4Q8=L8@don&l zU{jqW7*8UGaVX<;P51Se<7#(G8?!rtSPWg=nfeBgpMJV??b=5LMe9Q)%TpE;{xG0)mSo%Xg!u? zBjRI;P32dmL!qZ->I1r8dy=w*RQQn2aK|RnTum1rR@Vju;K$KLNy}_Ysau z_KdrB?c=}y{p&wnYzzoy!glw~am4I!B6|8ffNW2AS7=C%%7_TbQDhOul^ZRm!&*rT ztv}``Z*~<3%|#12zfytv6nREUV@b_jp2(X_PD1efRhAZp_n>_Ks#HN0KBS_`{&*B3 zUogN(oXyw_BpI8Gy(6>lz|22fkbV2@x$nRKJUw%%lM8XJ^r@?m16U{G`b`h3Lvp*R zC~}K>)H$_9c{g@`J#OA2LE`o(cB*$0wHP_R`{2;<J0Yzgy%TH5{auISWV17@`D7?M^~VD0+CBM6^K!9ztpGVrfAh#I`yGLJ-f;L> zM$mNFomfB6&~*sW$*WT(3a9WPI1Z;kU0*NBUdPc zYAjgd-E105!tgH3nV7MNrz_U?g4E%U(_xlR5lA)=I1X|AK*FM?HdCvLA3Mp^Hg#LG8%s9uYS{4|bnBpTv^<|Bl2yX`+`L(#kgbU)nm(b@F&- zm;b!rJqvd4TR`VIsb$5aSJu|zHsZ0lm2yg*j0=N0i2gpdtHIi6QC+eD5x zv@)m9&O3WHr@iCgA1;)D%g|DE!fkbrGZ_F%O zNqsCsSY6B9%W`TG>#<_JFcz)n56TmTkPSpRezbCu=^R%!-cO4_1aMqlGCS7ZYk?y89I%{tfs@{oZs>Xi-H>o7CGX-v_d&vAvdW+?Xi*Q2s`;8y{K4bqv$<7pZ5>G2564RTx^iThh+=2`*bP;W{rAJE}=U-O(A z?~1{wobGIXmz@Yb5lr&?hjAjbv{tNMJE}MinzKHZSB7fZ(@bU+npkg9#jS??Igy$t zfVF`r$CVA^`;5n7Q>kwmbMCzV*I$2m`}PkU$G^JVv3(~4I){ZbkyGwRRL7;1r`=OqP)F1Oz3`>50d7W6j zcC>LEC}%a6RX}-4?qGc^NtsKAwn7#qxJ4({4~6fAJ_7ll4MaKK*gB?9j^h9-MhCrly}|yx{uUi38%ema1utt;1aHdCoF}Tpsw&PPOSpiTwT+^XB(gsO*HL0*j+H{SM>}g~pPQ zK4i;sii!0@9+D^UJ{ySo4jWs?n!@px4yIDUe0jyT^GxQR$XRXelA_|*Q>50Hubcy^ zfBf;fvd$mI6~y330&;O@$}6^T1V`s|XA+i`fTxh-xH=N|>k*05k*J!-5Z~dhXS@RE z!*__P=tL4RM{7PsCPGyme&(~aREidIfm_IpW4*9^Evd&c2op=JbO@H^Bm~ca)YH90 z*^m>>GEbPC&G)r|XdX~)!_Q3NIF3=&Gnc-y`Q#JX_8p9~D@omS+r>D!BHw4;#fv2F z{`bG{Hn&8FN*?&#+stQwBytM&eEhMzsCbR1HxnG%ZBNwK#Azf>N1{;O$L0Y&>mBr5 zNaO+()cwvJ5Lch`RA>`R^ZH}{=CHMh)oYD&a1^}D`B(;^n8S29$mJuDSf859u2?@5 zVuEGD+Q_#~$rZpGGRO~ts1mjJ;r5Q0+qeI6qwCw7 zH~$d`K=AJ4uU>f>$v)I4-l?UDYjZre=plQzr`>($`AeRc>|Gdrc*&Sy z;5fO&sj#LK>iqut4&NbIwxWSlS&=D3>)|Mz>eMGYa)r_hSRYG)sf7|#b6y(2BqtK< zQL_<+(`KlVJ~Hy(`|$D4FO^EdAJAVN0yK}>OV;N^a?r(# zsvm#+{?@H;Zr%Fs(ihE$(7*Vi5tE$$K|~^lPh8ubqJPDt^a)7H_Y9a%lQ~gVw|tm5 z&c^1PtpyitIPRxt8AN_R%kfghR{j6;;-1lY2dX#FTp<$`^M0ES(-xA_D54HNjK6>I ze{CR07<%^rjId_qX`S0xKUB9Bd7YNGY9v6VS~ zYV74JvV(`73<@>Cao+&uNGw@F0zYTZrGVP)9g#P0UjOMQy6>J!B{^`IECt6|47Ksi z^*#Ll3z?h&8d2pyf_264b6kBz;!q52QWrY+uWcL1vK197(L!!n90$<5H5Q{)664eQ zHXX*&(kSfuzr##1@p8BW(!AFMk=0otpU5%PNC)9_>v87lH^uP@&qE^T!f>vGs#rkz zmtS=N+g)A%b0luMBz$^AYi2<)01eHtY(;6C6iKe)XHowDi|tS>f=_bx<=4;&{ig2pWFZ$erKW$VfAp zMv|h*$W^4~EjX@oTAj_9xM>K+{llIQi+(Zc&|)leaVYtvA;`-gnkPZ0r0E1*wt~&? zH_g^kuCli%eu-aJ`wrxmzQy_x4Xi{V&0A)K@EZeM zD~)X?WpyeWnQy*LE-c#S<=cbf#Ih2_U?&P3UcPdIa=fa__fRZz_WeEra2<~C@_QP# zadj{ryX0V^HHJ69dWS>9Zmp19>x3kMsO2=t@0a(L-(OWPR zOK+w_npkgv(B$n`7R1^>2+51fXX)_N;3iUm{_@wvib^l6$%$1rk=lbCPEQ|_76j8_ zK+w3(GlwX|@7}#vt(b$87*|nru98#uFlvqm?0x}u!>GgRU>v5JpKAfsEQy_iJioHd z+jxHeQL%dMsLtxtrnbR;agD~uq9vD;WjQl?By)<1_54IRGOhS8k+UOQs)JPhO%S=l42xS-Q6s?B_>1Js=bJ<*>G)>K0ZPOtL zE~aJj6XF<^v_JsaK;Sr7nJ;_XAX~As1??EoxMLF;Wu4#Wms&1eI(7Z}U+;9+%i;ij z@6MgSd~(65y0(7=$5qm@C&6n7MFk50?LD$2CczrYID&Bu?+bH-cqq;<(M*KG)}p&? zMQN>QA-8C0g?nPY|}YVHc&B1{|@tsEJjzDy7yIf$ujG+e_L zMY0fFcb;2)_3DTJ{q3iJ``cv}+jswc@7kSzUA*;=k8gCnf1~Sz>p#4E@lsH8+k=&I z0&#q*w+Dm%epS<0cvP_Z&+dIBfs;;eQi$X3@n)XWuvXqf>cLvicq-H%53FnN&hIa) zv*rFLi=Cml1By*Y6`N#=&6>6ad9z$At=%HiG(1GPR#v;UyD7KA+K*OVXN!LzorZ$L z+O48)ySl0DP{We6`W~&aeg|rz>9nebot5flU)7*)I0k1fQ`#nFE=((Ujet_j>*4)` zD*v;A=wk*Ud2-hC`h>+Ec^z}^{a0zo-F2hu#*Lrk%3szsF{)+;GoNTEy@ITLbgF7e zzh4BWSB#2z0uYBRj%q4M{DIeyDk^krUkydP+=I5}K4CM>@2AUFG`S36)k7>4M_NyQ zX=97>3wsR1t9EO-(iRZW!4@`wGi`FAPspX(Ud}c(yfhT6Q~_IDQ}YYh(jpf@7zZzO zs@X<9SckT=vd+G;p0skdv3-ZidWVX7hpGlgH1w-zYj8w)19_8UO_QU%*_kIzfsr&h zVMsNNj@4}9E_rQm(hT0Qs?mvSSgEz=u$|=1PWV?is@RrSwoZ(B`F;oTS0?8OMItBa zN>1^wbWo1S8Wn51ZhlBPuB_X1{(}ujv@Vkex4+D+%PCT^x=PE$kt;9??+vmO-; zhWkC{uDP*muJdaOohw@12)tA~D^>Qi!Hfug5qLEKTL$4pC_pg5CwKuybVxOggjr;r zJS}+Pi*V#(JC5=eXGM#KyiJ;pE{g#*@)pQQ;Mk+N;0&a3J2ibpvkNdPH*iiDAhP>- z1LxE_AwI5k215g&mu82-jR76aFtjgZVjnjID^k_Ax{#+S+ls3;<;vdXJIi<3W>xu5a(oZ zZd5$<9hw^5qbP3M8AP_()#+ufDz9@T6-4vyp3Bbgiuk8NS)#;lUJ z%nBp%N*}?*CNy!# zDKrw-hd72LSdO0wYdIs0_=-TZs5{`KfjBts4wb2_RvnMis2oeVqLWt! zhvFLp#EoT#%;vsn2^qqe>f~r{Fe=yP?~wEhWfNgBggXTjn?w^&>^7)yBcUB3&2v(T z1~GUGAbyra;%FW0YhA}K5#^S72Wneg>qr>x#s=er;}vyw6yMyddfq~5TdK6pFBe5~ z9_6x9%SuxA3LP-cLRVG^Xav zm#ZE!2;u?nl&i+araXljSO~+RrNppdxVAe*pW|PeYaY@BAED`&=A>|KeCza8$Gj{V zYL@oh5r$)4M2Fzml()EX(YHZ}v!eMHyj4_blXY~pxfKKP{HELi)LPMJlOXm04naepU3A95(=G3K`1y7aL zOloMkuQz0C?{8=sTUI?GE$4~-@e2`v?~h*^lVA-g95Fa6q>$PvrreF;TA#C@G7C~S zHDUN}4%5av9p@#O{8Y5KS`O4K?VD;$DIWTA3bzMl72~=}Z%mifY{@HIYu1ocJh_oO zAfRj@<6s4Op|r$Gmq>Hw4S+2 z!EQv~5WzWo8<)ZjUY#*1F779V2YXJ~QCJts0A3qU`dJ#?EaCf-1fN#dTD>Vv4&Pj- zw3g)M51`59L^Lm~+>}$g#t3f2x6E`0gq00s5T-giDbN9BG{o0vAhmv@p*I(On;3xW zT#H|R6~y4pXTyjqd=O39=3xnFvz+fprZhX;m2KV5LXO({oj%Pf#t~o2<_#58Y!LH? z%*1Phr^Q;G*dLo_l7^szFhOjxOeb-=Uc=5I_}09M$2-G_rx4o6AP7!B+jvq;3mPR! zK&YKUoP~h636VIC0r8Dv+QfJ16lh`PI~ii$&@hVTg3AWt&m&~yIZi!=1mc?1p24GB zObZ$X(K?_^gcOq@4vwP+gNdZ>`!JMgMBY&CRxxkLU<7TBorzh(%Ld{J${B|Fe~Hul AQ~&?~ diff --git a/Artemis/Artemis.Installer/dialog.bmp b/Artemis/Artemis.Installer/dialog.bmp deleted file mode 100644 index 9be6abf766f1bce6def382a54a86b18841b3e81e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461814 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 N63`OR63BQ7{C^p=3t0dF diff --git a/Artemis/Artemis.sln b/Artemis/Artemis.sln deleted file mode 100644 index bf3546036..000000000 --- a/Artemis/Artemis.sln +++ /dev/null @@ -1,246 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.12 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis", "Artemis\Artemis.csproj", "{ED9997A2-E54C-4E9F-9350-62BE672C3ABE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Razer2Artemis", "Razer2Artemis\Razer2Artemis.vcxproj", "{39711909-C1D5-46CE-A9EA-2D561692EA47}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorBox", "ColorBox\ColorBox.csproj", "{40085232-ACED-4CBE-945B-90BA8153C151}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LogiLed2Artemis", "LogiLed2Artemis\LogiLed2Artemis.vcxproj", "{D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis86Wrapper", "Artemis86Wrapper\Artemis86Wrapper.csproj", "{47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LightFX2Artemis", "LightFX2Artemis\LightFX2Artemis.vcxproj", "{1A349CF5-2008-41E8-AC13-874CBBCDFA0A}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Artemis.Installer", "Artemis.Installer\Artemis.Installer.wixproj", "{A34F9047-8464-4423-89EF-A2F43E089E93}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - CD_ROM|Any CPU = CD_ROM|Any CPU - CD_ROM|x64 = CD_ROM|x64 - CD_ROM|x86 = CD_ROM|x86 - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - DVD-5|Any CPU = DVD-5|Any CPU - DVD-5|x64 = DVD-5|x64 - DVD-5|x86 = DVD-5|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - SingleImage|Any CPU = SingleImage|Any CPU - SingleImage|x64 = SingleImage|x64 - SingleImage|x86 = SingleImage|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|Any CPU.Build.0 = Release|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x64.ActiveCfg = Release|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x64.Build.0 = Release|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x86.ActiveCfg = Release|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.CD_ROM|x86.Build.0 = Release|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x64.ActiveCfg = Debug|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x64.Build.0 = Debug|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x86.ActiveCfg = Debug|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Debug|x86.Build.0 = Debug|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x64.ActiveCfg = Debug|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x64.Build.0 = Debug|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x86.ActiveCfg = Debug|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.DVD-5|x86.Build.0 = Debug|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|Any CPU.Build.0 = Release|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x64.ActiveCfg = Release|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x64.Build.0 = Release|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x86.ActiveCfg = Release|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.Release|x86.Build.0 = Release|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|Any CPU.Build.0 = Release|Any CPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.ActiveCfg = Release|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x64.Build.0 = Release|x64 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.ActiveCfg = Release|x86 - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE}.SingleImage|x86.Build.0 = Release|x86 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.CD_ROM|Any CPU.ActiveCfg = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.CD_ROM|Any CPU.Build.0 = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.CD_ROM|x64.ActiveCfg = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.CD_ROM|x64.Build.0 = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.CD_ROM|x86.ActiveCfg = Release|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.CD_ROM|x86.Build.0 = Release|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Debug|x64.ActiveCfg = Debug|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Debug|x64.Build.0 = Debug|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Debug|x86.ActiveCfg = Debug|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Debug|x86.Build.0 = Debug|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.DVD-5|Any CPU.ActiveCfg = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.DVD-5|Any CPU.Build.0 = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.DVD-5|x64.ActiveCfg = Debug|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.DVD-5|x64.Build.0 = Debug|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.DVD-5|x86.ActiveCfg = Debug|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.DVD-5|x86.Build.0 = Debug|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Release|Any CPU.ActiveCfg = Release|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Release|x64.ActiveCfg = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Release|x64.Build.0 = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Release|x86.ActiveCfg = Release|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.Release|x86.Build.0 = Release|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|Any CPU.ActiveCfg = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|Any CPU.Build.0 = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x64.ActiveCfg = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x64.Build.0 = Release|x64 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x86.ActiveCfg = Release|Win32 - {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x86.Build.0 = Release|Win32 - {40085232-ACED-4CBE-945B-90BA8153C151}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.CD_ROM|Any CPU.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.CD_ROM|x64.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.CD_ROM|x64.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.CD_ROM|x86.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.CD_ROM|x86.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Debug|Any CPU.Build.0 = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Debug|x64.ActiveCfg = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Debug|x64.Build.0 = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Debug|x86.ActiveCfg = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Debug|x86.Build.0 = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.DVD-5|x64.ActiveCfg = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.DVD-5|x64.Build.0 = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.DVD-5|x86.ActiveCfg = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.DVD-5|x86.Build.0 = Debug|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Release|Any CPU.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Release|x64.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Release|x64.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Release|x86.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.Release|x86.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.SingleImage|Any CPU.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.SingleImage|x64.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.SingleImage|x64.Build.0 = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.SingleImage|x86.ActiveCfg = Release|Any CPU - {40085232-ACED-4CBE-945B-90BA8153C151}.SingleImage|x86.Build.0 = Release|Any CPU - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|Any CPU.ActiveCfg = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|Any CPU.Build.0 = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x64.ActiveCfg = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x64.Build.0 = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x86.ActiveCfg = Release|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.CD_ROM|x86.Build.0 = Release|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x64.ActiveCfg = Debug|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x64.Build.0 = Debug|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x86.ActiveCfg = Debug|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Debug|x86.Build.0 = Debug|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|Any CPU.ActiveCfg = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|Any CPU.Build.0 = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x64.ActiveCfg = Debug|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x64.Build.0 = Debug|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x86.ActiveCfg = Debug|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.DVD-5|x86.Build.0 = Debug|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|Any CPU.ActiveCfg = Release|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x64.ActiveCfg = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x64.Build.0 = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x86.ActiveCfg = Release|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.Release|x86.Build.0 = Release|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|Any CPU.ActiveCfg = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|Any CPU.Build.0 = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x64.ActiveCfg = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x64.Build.0 = Release|x64 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x86.ActiveCfg = Release|Win32 - {D2EDB8F3-F0CB-4670-B472-0B46D5800D2C}.SingleImage|x86.Build.0 = Release|Win32 - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.CD_ROM|Any CPU.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.CD_ROM|x64.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.CD_ROM|x64.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.CD_ROM|x86.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.CD_ROM|x86.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Debug|x64.Build.0 = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Debug|x86.Build.0 = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.DVD-5|x64.ActiveCfg = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.DVD-5|x64.Build.0 = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.DVD-5|x86.ActiveCfg = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.DVD-5|x86.Build.0 = Debug|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Release|Any CPU.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Release|x64.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Release|x64.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Release|x86.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.Release|x86.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.SingleImage|Any CPU.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.SingleImage|x64.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.SingleImage|x64.Build.0 = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.SingleImage|x86.ActiveCfg = Release|Any CPU - {47A9BBFD-4BEA-4D7D-8AB7-896E760B2CF2}.SingleImage|x86.Build.0 = Release|Any CPU - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.CD_ROM|Any CPU.ActiveCfg = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.CD_ROM|Any CPU.Build.0 = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.CD_ROM|x64.ActiveCfg = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.CD_ROM|x64.Build.0 = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.CD_ROM|x86.ActiveCfg = Release|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.CD_ROM|x86.Build.0 = Release|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Debug|x64.ActiveCfg = Debug|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Debug|x64.Build.0 = Debug|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Debug|x86.ActiveCfg = Debug|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Debug|x86.Build.0 = Debug|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.DVD-5|Any CPU.ActiveCfg = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.DVD-5|Any CPU.Build.0 = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.DVD-5|x64.ActiveCfg = Debug|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.DVD-5|x64.Build.0 = Debug|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.DVD-5|x86.ActiveCfg = Debug|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.DVD-5|x86.Build.0 = Debug|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Release|Any CPU.ActiveCfg = Release|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Release|x64.ActiveCfg = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Release|x64.Build.0 = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Release|x86.ActiveCfg = Release|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.Release|x86.Build.0 = Release|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.SingleImage|Any CPU.ActiveCfg = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.SingleImage|Any CPU.Build.0 = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.SingleImage|x64.ActiveCfg = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.SingleImage|x64.Build.0 = Release|x64 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.SingleImage|x86.ActiveCfg = Release|Win32 - {1A349CF5-2008-41E8-AC13-874CBBCDFA0A}.SingleImage|x86.Build.0 = Release|Win32 - {A34F9047-8464-4423-89EF-A2F43E089E93}.CD_ROM|Any CPU.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.CD_ROM|Any CPU.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.CD_ROM|x64.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.CD_ROM|x64.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.CD_ROM|x86.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.CD_ROM|x86.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Debug|Any CPU.ActiveCfg = Debug|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Debug|x64.ActiveCfg = Debug|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Debug|x86.ActiveCfg = Debug|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Debug|x86.Build.0 = Debug|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.DVD-5|Any CPU.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.DVD-5|Any CPU.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.DVD-5|x64.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.DVD-5|x64.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.DVD-5|x86.ActiveCfg = Debug|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.DVD-5|x86.Build.0 = Debug|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Release|Any CPU.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Release|x64.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Release|x86.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.Release|x86.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.SingleImage|Any CPU.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.SingleImage|Any CPU.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.SingleImage|x64.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.SingleImage|x64.Build.0 = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.SingleImage|x86.ActiveCfg = Release|x86 - {A34F9047-8464-4423-89EF-A2F43E089E93}.SingleImage|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7F70A235-016F-4E1A-85B7-B66102F15535} - EndGlobalSection -EndGlobal diff --git a/Artemis/Artemis/App.config b/Artemis/Artemis/App.config deleted file mode 100644 index cedff3614..000000000 --- a/Artemis/Artemis/App.config +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Artemis/Artemis/App.xaml b/Artemis/Artemis/App.xaml deleted file mode 100644 index 15a67464a..000000000 --- a/Artemis/Artemis/App.xaml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Artemis/Artemis/App.xaml.cs b/Artemis/Artemis/App.xaml.cs deleted file mode 100644 index f7f13e188..000000000 --- a/Artemis/Artemis/App.xaml.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Windows; -using System.Windows.Threading; -using Artemis.Utilities; -using NLog; -using WpfExceptionViewer; - -namespace Artemis -{ - /// - /// Interaction logic for App.xaml - /// - public partial class App : Application - { - public App() - { - InitializeComponent(); - } - - public bool DoHandle { get; set; } - - protected override void OnExit(ExitEventArgs e) - { - base.OnExit(e); - Environment.Exit(0); - } - - private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) - { - // Get rid of the keyboard hook in case of a crash, otherwise input freezes up system wide until Artemis is gone - InputHook.Stop(); - - if (DoHandle) - { - GetArtemisExceptionViewer(e.Exception).ShowDialog(); - e.Handled = true; - } - else - { - GetArtemisExceptionViewer(e.Exception).ShowDialog(); - e.Handled = false; - } - } - - public static ExceptionViewer GetArtemisExceptionViewer(Exception e) - { - var logger = LogManager.GetCurrentClassLogger(); - logger.Fatal(e, "Unhandled exception, showing dialog and shutting down."); - return new ExceptionViewer("An unexpected error occurred in Artemis.", e) - { - Title = "Artemis - Exception :c", - Height = 400, - Width = 800 - }; - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj deleted file mode 100644 index df418eb0a..000000000 --- a/Artemis/Artemis/Artemis.csproj +++ /dev/null @@ -1,1111 +0,0 @@ - - - - - Debug - AnyCPU - {ED9997A2-E54C-4E9F-9350-62BE672C3ABE} - WinExe - Properties - Artemis - Artemis - v4.6.1 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - true - - - - - - - - - false - - - - C:\Users\Robert\Desktop\Artemis builds\ - true - Disk - false - Foreground - 7 - Days - false - false - true - https://github.com/SpoinkyNL/Artemis/wiki/Frequently-Asked-Questions-%28FAQ%29 - Artemis - Artemis - 0 - 1.3.3.0 - false - true - true - true - - - x64 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - true - - - x64 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - - - EAC088BE27A2DE790AE6F37A020409F4A1B5EC0E - - - Artemis_TemporaryKey.pfx - - - false - - - false - - - Resources\logo.ico - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - true - bin\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - true - true - Auto - true - - - - app.manifest - - - LocalIntranet - - - - False - lib\AssettoCorsaSharedMemory.dll - - - ..\packages\Betwixt.1.4.1\lib\net35\Betwixt.dll - True - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\Colore.5.2.0\lib\net35\Corale.Colore.dll - - - ..\packages\CSCore.1.2.1.2\lib\net35-client\CSCore.dll - - - ..\packages\CUE.NET.1.2.0\lib\net45\CUE.NET.dll - - - ..\packages\DynamicExpresso.Core.1.3.4.7\lib\net40\DynamicExpresso.Core.dll - - - ..\packages\MouseKeyHook.5.4.0\lib\net40\Gma.System.MouseKeyHook.dll - True - - - ..\packages\gong-wpf-dragdrop.0.1.4.3\lib\net40\GongSolutions.Wpf.DragDrop.dll - True - - - ..\packages\Hardcodet.NotifyIcon.Wpf.1.0.8\lib\net451\Hardcodet.Wpf.TaskbarNotification.dll - True - - - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll - True - - - ..\packages\MahApps.Metro.1.4.3\lib\net45\MahApps.Metro.dll - - - ..\packages\MoonSharp.2.0.0.0\lib\net40-client\MoonSharp.Interpreter.dll - True - - - ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - - - ..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll - True - - - ..\packages\Ninject.Extensions.Conventions.3.2.0.0\lib\net45-full\Ninject.Extensions.Conventions.dll - True - - - ..\packages\Ninject.Extensions.Logging.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.dll - True - - - ..\packages\Ninject.Extensions.Logging.nlog4.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.NLog4.dll - True - - - ..\packages\NLog.4.4.12\lib\net45\NLog.dll - - - ..\packages\Pcap.Net.x64.1.0.4.1\lib\net45\PcapDotNet.Base.dll - - - ..\packages\Pcap.Net.x64.1.0.4.1\lib\net45\PcapDotNet.Core.dll - - - ..\packages\Pcap.Net.x64.1.0.4.1\lib\net45\PcapDotNet.Core.Extensions.dll - - - ..\packages\Pcap.Net.x64.1.0.4.1\lib\net45\PcapDotNet.Packets.dll - - - ..\packages\Process.NET.1.0.8\lib\Process.NET.dll - True - - - ..\packages\SharpDX.4.0.1\lib\net45\SharpDX.dll - - - ..\packages\SharpDX.Direct3D9.4.0.1\lib\net45\SharpDX.Direct3D9.dll - - - ..\packages\SpotifyAPI-NET.2.17.0\lib\SpotifyAPI.dll - - - - - - - - - - - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - - - - - - - - - 4.0 - - - ..\packages\WpfExceptionViewer.1.0.0.0\lib\VioletTape.WpfExceptionViewer.dll - True - - - - - - - - MSBuild:Compile - Designer - - - App.xaml - Code - - - - LoggingControl.xaml - - - - - - - - - - - - - - - - - - - - - - - - MarkdownDialog.xaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AssettoCorsaView.xaml - - - - - - FormulaOne2017View.xaml - - - - - - - - TerrariaView.xaml - - - - - - - - - - - - - - - - - - - - EurotruckSimulator2View.xaml - - - - - - - GtaVView.xaml - - - - - - - - LightFxView.xaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ProjectCarsView.xaml - - - - - - - UnrealTournamentView.xaml - - - - WoWView.xaml - - - - - - - - - - OverlayProfileView.xaml - - - - - - - - - - - - - - - - - AmbientLightPropertiesView.xaml - - - - - - - - - - - - - - - - - - ConicalBrushPropertiesView.xaml - - - - - - - - - - - - - - - AudioPropertiesView.xaml - - - - - GenericPropertiesView.xaml - - - - - - KeyPressPropertiesView.xaml - - - - - MousematPropertiesView.xaml - - - - - - - - - - - - - - - - - - - LuaWindowView.xaml - - - - - - - - - - - - - - - - - - - - - - - - - BubblesView.xaml - - - - - GeneralProfileView.xaml - - - - - - - - - - - - OverwatchView.xaml - - - - - - - - TheDivisionView.xaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DebugView.xaml - - - GeneralView.xaml - - - FlyoutSettingsView.xaml - - - GamesView.xaml - - - CounterStrikeView.xaml - - - Dota2View.xaml - - - RocketLeagueView.xaml - - - Witcher3View.xaml - - - EventPropertiesView.xaml - - - FolderPropertiesView.xaml - - - HeadsetPropertiesView.xaml - - - KeyboardPropertiesView.xaml - - - LayerKeybindView.xaml - - - LayerConditionView.xaml - - - LayerDynamicPropertiesView.xaml - - - LayerEditorView.xaml - - - MousePropertiesView.xaml - - - OverlaysView.xaml - - - LayerTweenView.xaml - - - ProfileEditorView.xaml - - - ShellView.xaml - - - SystemTrayView.xaml - - - WelcomeView.xaml - - - - - Code - - - - - - - - - - - - - - - Designer - - - - - - - - - - - - Designer - - - - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - - - Designer - - - - - - - - Always - - - Always - - - PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - - - - - - - - - - - Designer - - - - - - False - Microsoft .NET Framework 4.5.2 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - {40085232-aced-4cbe-945b-90ba8153c151} - ColorBox - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - if $(ConfigurationName) == Release ( - attrib +r Artemis.pdb - del *.pdb - attrib -r Artemis.pdb - echo Access denied is intended, see post build event -) - - - \ No newline at end of file diff --git a/Artemis/Artemis/ArtemisBootstrapper.cs b/Artemis/Artemis/ArtemisBootstrapper.cs deleted file mode 100644 index 65b9c478c..000000000 --- a/Artemis/Artemis/ArtemisBootstrapper.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Input; -using Artemis.DAL; -using Artemis.InjectionModules; -using Artemis.Services; -using Artemis.Settings; -using Artemis.Utilities; -using Artemis.Utilities.ActiveWindowDetection; -using Artemis.Utilities.Converters; -using Artemis.Utilities.DataReaders; -using Artemis.ViewModels; -using Caliburn.Micro; -using Newtonsoft.Json; -using Ninject; - -namespace Artemis -{ - public class ArtemisBootstrapper : BootstrapperBase - { - private IKernel _kernel; - - public ArtemisBootstrapper() - { - // Make sure the data folder exists - GeneralHelpers.SetupDataFolder(); - - // Start logging before anything else - Logging.SetupLogging(SettingsProvider.Load().LogLevel); - // Restore DDLs before interacting with any SDKs - DllManager.RestoreLogitechDll(); - // Check compatibility before trying to boot further - CompatibilityService.CheckRivaTuner(); - Updater.CleanSquirrel(); - - Initialize(); - BindSpecialValues(); - - AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; - } - - private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) - { - // Get rid of the keyboard hook in case of a crash, otherwise input freezes up system wide until Artemis is gone - InputHook.Stop(); - } - - private void BindSpecialValues() - { - MessageBinder.SpecialValues.Add("$scaledmousex", ctx => - { - var img = ctx.Source as Image; - var input = ctx.Source as IInputElement; - var e = ctx.EventArgs as MouseEventArgs; - - // If there is an image control, get the scaled position - if (img != null && e != null) - { - var position = e.GetPosition(img); - return (int) (img.Source.Width * (position.X / img.ActualWidth)); - } - - // If there is another type of of IInputControl get the non-scaled position - or do some processing to get a scaled position, whatever needs to happen - if (e != null && input != null) - return e.GetPosition(input).X; - - // Return 0 if no processing could be done - return 0; - }); - MessageBinder.SpecialValues.Add("$scaledmousey", ctx => - { - var img = ctx.Source as Image; - var input = ctx.Source as IInputElement; - var e = ctx.EventArgs as MouseEventArgs; - - // If there is an image control, get the scaled position - if (img != null && e != null) - { - var position = e.GetPosition(img); - return (int) (img.Source.Width * (position.Y / img.ActualWidth)); - } - - // If there is another type of of IInputControl get the non-scaled position - or do some processing to get a scaled position, whatever needs to happen - if (e != null && input != null) - return e.GetPosition(input).Y; - - // Return 0 if no processing could be done - return 0; - }); - } - - protected override void Configure() - { - _kernel = new StandardKernel(new BaseModules(), new ManagerModules()); - - _kernel.Bind().To().InSingletonScope(); - _kernel.Bind().To().InSingletonScope(); - - // Configure JSON.NET - var settings = new JsonSerializerSettings - { - TypeNameHandling = TypeNameHandling.Auto, - ContractResolver = _kernel.Get() - }; - JsonConvert.DefaultSettings = () => settings; - - //TODO DarthAffe 17.12.2016: Is this the right location for this? - //TODO Move to Mainmanager and make disposable - ActiveWindowHelper.SetActiveWindowDetectionType(SettingsProvider.Load().ActiveWindowDetection); - } - - protected override void OnExit(object sender, EventArgs e) - { - _kernel.Dispose(); - ActiveWindowHelper.Dispose(); - base.OnExit(sender, e); - } - - protected override object GetInstance(Type service, string key) - { - if (service == null) - throw new ArgumentNullException(nameof(service)); - - return _kernel.Get(service); - } - - protected override IEnumerable GetAllInstances(Type service) - { - return _kernel.GetAll(service); - } - - protected override void BuildUp(object instance) - { - _kernel.Inject(instance); - } - - protected override void OnStartup(object sender, StartupEventArgs e) - { - DisplayRootViewFor(); - InputHook.Start(); - } - } -} diff --git a/Artemis/Artemis/Controls/Log/LoggingControl.xaml b/Artemis/Artemis/Controls/Log/LoggingControl.xaml deleted file mode 100644 index 85c8b6ff9..000000000 --- a/Artemis/Artemis/Controls/Log/LoggingControl.xaml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Artemis/Artemis/Controls/Log/LoggingControl.xaml.cs b/Artemis/Artemis/Controls/Log/LoggingControl.xaml.cs deleted file mode 100644 index 6809192cf..000000000 --- a/Artemis/Artemis/Controls/Log/LoggingControl.xaml.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections.ObjectModel; -using System.Windows.Controls; -using Artemis.Utilities; -using NLog; - -namespace Artemis.Controls.Log -{ - /// - /// Interaction logic for LoggingControl.xaml - /// - public partial class LoggingControl : UserControl - { - public LoggingControl() - { - LogCollection = new ObservableCollection(); - - InitializeComponent(); - - // init memory queue - Logging.ClearLoggingEvent(); - Logging.MemoryEvent += EventReceived; - } - - public static ObservableCollection LogCollection { get; set; } - - private async void EventReceived(LogEventInfo message) - { - await Dispatcher.InvokeAsync(() => - { - if (LogCollection.Count >= 50) - LogCollection.RemoveAt(0); - - LogCollection.Add(message); - }); - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/Controls/Log/MemoryEventTarget.cs b/Artemis/Artemis/Controls/Log/MemoryEventTarget.cs deleted file mode 100644 index acbe7690e..000000000 --- a/Artemis/Artemis/Controls/Log/MemoryEventTarget.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using NLog; -using NLog.Targets; - -namespace Artemis.Controls.Log -{ - public class MemoryEventTarget : Target - { - public event Action EventReceived; - - /// - /// Notifies listeners about new event - /// - /// The logging event. - protected override void Write(LogEventInfo logEvent) - { - EventReceived?.Invoke(logEvent); - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DAL/ProfileProvider.cs b/Artemis/Artemis/DAL/ProfileProvider.cs deleted file mode 100644 index 476482dba..000000000 --- a/Artemis/Artemis/DAL/ProfileProvider.cs +++ /dev/null @@ -1,254 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Reflection; -using Artemis.DeviceProviders; -using Artemis.Modules.Abstract; -using Artemis.Profiles; -using Artemis.Profiles.Layers.Types.Keyboard; -using Artemis.Properties; -using Artemis.Utilities; -using MoonSharp.Interpreter; -using Newtonsoft.Json; -using NLog; - -namespace Artemis.DAL -{ - public static class ProfileProvider - { - public static readonly string ProfileFolder = GeneralHelpers.DataFolder + "profiles\\"; - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private static bool _installedDefaults; - - static ProfileProvider() - { - // Configure MoonSharp - UserData.RegisterAssembly(); - CheckProfiles(); - InstallDefaults(); - } - - public static List GetProfileNames(KeyboardProvider keyboard, ModuleModel module) - { - if (keyboard == null || module == null) - return null; - return ReadProfiles(keyboard.Slug + "/" + module.Name).Select(p => p.Name).ToList(); - } - - public static ProfileModel GetProfile(KeyboardProvider keyboard, ModuleModel module, string name) - { - if (keyboard == null || module == null) - return null; - return ReadProfiles(keyboard.Slug + "/" + module.Name).FirstOrDefault(p => p.Name == name); - } - - public static bool IsProfileUnique(ProfileModel profileModel) - { - var existing = ReadProfiles(profileModel.KeyboardSlug + "/" + profileModel.GameName); - return !existing.Contains(profileModel); - } - - /// - /// Adds or update the given profile. - /// Updates occur when a profile with the same name and game exist. - /// - /// The profile to add or update - public static void AddOrUpdate(ProfileModel prof) - { - if (prof == null) - throw new ArgumentNullException(nameof(prof)); - - lock (prof) - { - // Store the file - if (!(prof.GameName?.Length > 1) || !(prof.KeyboardSlug?.Length > 1) || !(prof.Slug?.Length > 1)) - throw new ArgumentException("Profile is invalid. Name, GameName and KeyboardSlug are required"); - - var path = ProfileFolder + $"{prof.KeyboardSlug}\\{prof.GameName}"; - if (!Directory.Exists(path)) - Directory.CreateDirectory(path); - - string json; - - // Should saving fail for whatever reason, catch the exception and log it - // But DON'T touch the profile file. - try - { - json = JsonConvert.SerializeObject(prof, Formatting.Indented); - } - catch (Exception e) - { - Logger.Error(e, "Couldn't save profile '{0}.json'", prof.Slug); - return; - } - - File.WriteAllText(path + $"\\{prof.Slug}.json", json); - Logger.Debug("Saved profile {0}/{1}/{2}", prof.KeyboardSlug, prof.GameName, prof.Name); - } - } - - /// - /// Renames the profile on the model and filesystem - /// - /// The profile to rename - /// The new name - public static void RenameProfile(ProfileModel profile, string name) - { - if (string.IsNullOrEmpty(name)) - return; - - // Store the profile path before it is renamed - var oldPath = ProfileFolder + $"{profile.KeyboardSlug}\\{profile.GameName}\\{profile.Slug}.json"; - - // Update the profile, creating a new file - profile.Name = name; - AddOrUpdate(profile); - - // Remove the file with the old name - if (File.Exists(oldPath)) - File.Delete(oldPath); - } - - public static void DeleteProfile(ProfileModel prof) - { - // Remove the file - var path = ProfileFolder + $"{prof.KeyboardSlug}\\{prof.GameName}\\{prof.Slug}.json"; - if (File.Exists(path)) - File.Delete(path); - } - - /// - /// Attempts to load a profile from a given path - /// - /// The absolute path to load the profile from - /// The loaded profile, or null if invalid - public static ProfileModel LoadProfileIfValid(string path) - { - try - { - var prof = JsonConvert.DeserializeObject(File.ReadAllText(path)); - if (prof == null) - return null; - if (prof.GameName.Length < 1 || prof.KeyboardSlug.Length < 1 || prof.Name.Length < 1) - return null; - return prof; - } - catch (JsonException) - { - return null; - } - } - - /// - /// Exports the given profile to the provided path in JSON - /// - /// The profile to export - /// The path to save the profile to - public static void ExportProfile(ProfileModel prof, string path) - { - var json = JsonConvert.SerializeObject(prof); - File.WriteAllText(path, json); - } - - public static void InsertGif(string moduleName, string profileName, string layerName, Bitmap gifFile, string fileName) - { - var directories = new DirectoryInfo(ProfileFolder).GetDirectories(); - var profiles = new List(); - foreach (var directoryInfo in directories) - profiles.AddRange(ReadProfiles(directoryInfo.Name + "\\" + moduleName).Where(d => d.Name == profileName)); - - // Extract the GIF file - var gifDir = GeneralHelpers.DataFolder + "gifs"; - Directory.CreateDirectory(gifDir); - var gifPath = gifDir + $"\\{fileName}.gif"; - if (!File.Exists(gifPath)) - gifFile.Save(gifPath); - - foreach (var profile in profiles) - { - var gifLayer = profile.GetLayers().FirstOrDefault(l => l.Name == layerName); - if (gifLayer == null) - continue; - - ((KeyboardPropertiesModel) gifLayer.Properties).GifFile = gifPath; - AddOrUpdate(profile); - } - } - - public static List ReadProfiles(string subDirectory) - { - var profiles = new List(); - var directory = ProfileFolder + subDirectory; - if (!Directory.Exists(directory)) - return profiles; - - // Create the directory structure - var profilePaths = Directory.GetFiles(directory, "*.json", SearchOption.AllDirectories); - - // Parse the JSON files into objects and add them if they are valid - foreach (var path in profilePaths) - try - { - var prof = LoadProfileIfValid(path); - if (prof == null) - continue; - - // Only add unique profiles - if (profiles.Any(p => p.GameName == prof.GameName && p.Name == prof.Name && p.KeyboardSlug == prof.KeyboardSlug)) - Logger.Info("Didn't load duplicate profile: {0}", path); - else - profiles.Add(prof); - } - catch (Exception e) - { - Logger.Error("Failed to load profile: {0} - {1}", path, e); - } - return profiles; - } - - /// - /// Unpacks the default profiles into the profile directory - /// - private static void InstallDefaults() - { - try - { - // Only install the defaults once per session - if (_installedDefaults) - return; - _installedDefaults = true; - - // Load the ZIP from resources - var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Artemis.Resources.Keyboards.default-profiles.zip"); - - // Extract it over the old defaults in case one was updated - if (stream == null) - return; - var archive = new ZipArchive(stream); - archive.ExtractToDirectory(ProfileFolder, true); - - InsertGif("GeneralProfile", "Demo (duplicate to keep changes)", "GIF", Resources.demo_gif, "demo-gif"); - } - catch (IOException e) - { - Logger.Warn(e, "Failed to place default profiles, perhaps there are two instances of Artemis " + - "starting at the same time?"); - } - } - - /// - /// Makes sure the profile directory structure is in order and places default profiles - /// - private static void CheckProfiles() - { - // Create the directory structure - if (Directory.Exists(ProfileFolder)) - return; - - Directory.CreateDirectory(ProfileFolder); - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DAL/SettingsProvider.cs b/Artemis/Artemis/DAL/SettingsProvider.cs deleted file mode 100644 index 32330d863..000000000 --- a/Artemis/Artemis/DAL/SettingsProvider.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Artemis.Settings; -using Artemis.Utilities; -using Newtonsoft.Json; -using NLog; - -namespace Artemis.DAL -{ - public static class SettingsProvider - { - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private static readonly string SettingsFolder = GeneralHelpers.DataFolder + "settings\\"; - private static readonly List Settings = new List(); - - /// - /// Loads settings with the given name from the filesystem - /// - /// - public static T Load() where T : new() - { - if (!AreSettings(typeof(T))) - throw new ArgumentException("Type doesn't implement IArtemisSettings"); - - // Attempt to load from memory first - var inMemory = Settings.FirstOrDefault(s => s.GetType() == typeof(T)); - if (inMemory != null) - return (T) inMemory; - - CheckSettings(); - - try - { - var loadSettings = (IArtemisSettings) JsonConvert.DeserializeObject(File.ReadAllText(SettingsFolder + $"{typeof(T)}.json")); - if (loadSettings == null) - { - loadSettings = (IArtemisSettings) new T(); - loadSettings.Reset(true); - } - - Settings.Add(loadSettings); - return (T) loadSettings; - } - catch (Exception e) - { - Logger.Error(e, "Couldn't load settings '{0}.json'", typeof(T)); - - // Not sure about this, I've seen prettier code - var loadSettings = (IArtemisSettings) new T(); - loadSettings.Reset(true); - Settings.Add(loadSettings); - return (T) loadSettings; - } - } - - /// - /// Saves the settings object to the filesystem - /// - /// - public static void Save(IArtemisSettings artemisSettings) - { - CheckSettings(); - - string json; - // Should saving fail for whatever reason, catch the exception and log it - // But DON'T touch the settings file. - try - { - json = JsonConvert.SerializeObject(artemisSettings, Formatting.Indented); - } - catch (Exception e) - { - Logger.Error(e, "Couldn't save settings '{0}.json'", artemisSettings.GetType()); - return; - } - - File.WriteAllText(SettingsFolder + $"{artemisSettings.GetType()}.json", json); - } - - /// - /// Ensures the settings folder exists - /// - private static void CheckSettings() - { - if (!Directory.Exists(SettingsFolder)) - Directory.CreateDirectory(SettingsFolder); - } - - /// - /// Checks to see if the given type is a setting - /// - /// - /// - private static bool AreSettings(Type t) - { - return typeof(IArtemisSettings).IsAssignableFrom(t); - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs b/Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs deleted file mode 100644 index c2221c6c7..000000000 --- a/Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Drawing; -using System.Windows; -using System.Windows.Forms; -using Artemis.Properties; - -namespace Artemis.DeviceProviders.Artemis -{ - public class NoneKeyboard : KeyboardProvider - { - public NoneKeyboard() - { - Name = "None"; - Slug = "none"; - CantEnableText = "Waaaaah, this should not be happening!"; - Height = 1; - Width = 1; - PreviewSettings = new PreviewSettings(new Rect(), Resources.none); - } - - public override void Disable() - { - } - - public override bool CanEnable() - { - return true; - } - - public override void Enable() - { - } - - public override void DrawBitmap(Bitmap bitmap) - { - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - return null; - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProL.cs b/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProL.cs deleted file mode 100644 index c84f7d4d4..000000000 --- a/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProL.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Drawing; -using System.Linq; -using System.Threading; -using System.Windows; -using System.Windows.Forms; -using Artemis.DAL; -using Artemis.DeviceProviders.CoolerMaster.Utilities; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.Properties; -using Artemis.Settings; -using Artemis.Utilities; - -namespace Artemis.DeviceProviders.CoolerMaster -{ - public class MasterkeysProL : KeyboardProvider - { - private GeneralSettings _generalSettings; - - public MasterkeysProL() - { - Name = "CM Masterkeys Pro L"; - Slug = "cm-masterkeys-pro-l"; - - CantEnableText = "Couldn't connect to your CM Masterkeys Pro L.\n" + - "Please check your cables and try updating your CM software.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - - Height = 6; - Width = 22; - - PreviewSettings = new PreviewSettings(new Rect(17, 13, 812, 219), Resources.masterkeys_pro_l); - _generalSettings = SettingsProvider.Load(); - } - - public override void Disable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_L); - CmSdk.EnableLedControl(false); - Thread.Sleep(500); - } - - public override bool CanEnable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_L); - - // Doesn't seem reliable but better than nothing I suppose - return CmSdk.IsDevicePlug(); - } - - public override void Enable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_L); - CmSdk.EnableLedControl(true); - } - - public override void DrawBitmap(Bitmap bitmap) - { - // Resize the bitmap - using (var b = ImageUtilities.ResizeImage(bitmap, Width, Height)) - { - // Create an empty matrix - var matrix = new COLOR_MATRIX {KeyColor = new KEY_COLOR[6, 22]}; - - // Map the bytes to the matix - for (var x = 0; x < Width; x++) - { - for (var y = 0; y < Height; y++) - { - var c = b.GetPixel(x, y); - if (c.R != 0) - Console.WriteLine(); - matrix.KeyColor[y, x] = new KEY_COLOR(c.R, c.G, c.B); - } - } - - // Send the matrix to the keyboard - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_L); - CmSdk.SetAllLedColor(matrix); - } - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - switch (_generalSettings.Layout) - { - case "Qwerty": - return KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - case "Qwertz": - return KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); - default: - return KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - } - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProM.cs b/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProM.cs deleted file mode 100644 index 580da1e0a..000000000 --- a/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProM.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Drawing; -using System.Linq; -using System.Threading; -using System.Windows; -using System.Windows.Forms; -using Artemis.DAL; -using Artemis.DeviceProviders.CoolerMaster.Utilities; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.Properties; -using Artemis.Settings; -using Artemis.Utilities; - -namespace Artemis.DeviceProviders.CoolerMaster -{ - public class MasterkeysProM : KeyboardProvider - { - private GeneralSettings _generalSettings; - - public MasterkeysProM() - { - Name = "CM Masterkeys Pro M"; - Slug = "cm-masterkeys-pro-m"; - - CantEnableText = "Couldn't connect to your CM Masterkeys Pro M.\n" + - "Please check your cables and try updating your CM software.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - - Height = 6; - Width = 19; - - PreviewSettings = new PreviewSettings(new Rect(11, 10, 634, 215), Resources.masterkeys_pro_m); - _generalSettings = SettingsProvider.Load(); - } - - public override void Disable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_M); - CmSdk.EnableLedControl(false); - Thread.Sleep(500); - } - - public override bool CanEnable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_M); - - // Doesn't seem reliable but better than nothing I suppose - return CmSdk.IsDevicePlug(); - } - - public override void Enable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_M); - CmSdk.EnableLedControl(true); - } - - public override void DrawBitmap(Bitmap bitmap) - { - // Resize the bitmap - using (var b = ImageUtilities.ResizeImage(bitmap, Width, Height)) - { - // Create an empty matrix - var matrix = new COLOR_MATRIX {KeyColor = new KEY_COLOR[6, 22]}; - - // Map the bytes to the matix - for (var x = 0; x < Width; x++) - { - for (var y = 0; y < Height; y++) - { - var c = b.GetPixel(x, y); - if (c.R != 0) - Console.WriteLine(); - matrix.KeyColor[y, x] = new KEY_COLOR(c.R, c.G, c.B); - } - } - - // Send the matrix to the keyboard - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_M); - CmSdk.SetAllLedColor(matrix); - } - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - switch (_generalSettings.Layout) - { - case "Qwerty": - return KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - case "Qwertz": - return KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); - default: - return KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - } - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProS.cs b/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProS.cs deleted file mode 100644 index 22bf231e0..000000000 --- a/Artemis/Artemis/DeviceProviders/CoolerMaster/MasterkeysProS.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System.Drawing; -using System.Linq; -using System.Threading; -using System.Windows; -using System.Windows.Forms; -using Artemis.DAL; -using Artemis.DeviceProviders.CoolerMaster.Utilities; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.Properties; -using Artemis.Settings; -using Artemis.Utilities; - -namespace Artemis.DeviceProviders.CoolerMaster -{ - public class MasterkeysProS : KeyboardProvider - { - private GeneralSettings _generalSettings; - - public MasterkeysProS() - { - Name = "CM Masterkeys Pro S"; - Slug = "cm-masterkeys-pro-s"; - - CantEnableText = "Couldn't connect to your CM Masterkeys Pro S.\n" + - "Please check your cables and try updating your CM software.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - - Height = 6; - Width = 18; - - PreviewSettings = new PreviewSettings(new Rect(13, 12, 657, 219), Resources.masterkeys_pro_s); - _generalSettings = SettingsProvider.Load(); - } - - public override void Disable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_S); - CmSdk.EnableLedControl(false); - Thread.Sleep(500); - } - - public override bool CanEnable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_S); - - // Doesn't seem reliable but better than nothing I suppose - return CmSdk.IsDevicePlug(); - } - - public override void Enable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_S); - CmSdk.EnableLedControl(true); - } - - public override void DrawBitmap(Bitmap bitmap) - { - // Resize the bitmap - using (var b = ImageUtilities.ResizeImage(bitmap, Width, Height)) - { - // Create an empty matrix - var matrix = new COLOR_MATRIX {KeyColor = new KEY_COLOR[6, 22]}; - - // Map the bytes to the matix - for (var x = 0; x < Width; x++) - { - for (var y = 0; y < Height; y++) - { - var c = b.GetPixel(x, y); - matrix.KeyColor[y, x] = new KEY_COLOR(c.R, c.G, c.B); - } - } - - // Send the matrix to the keyboard - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MKeys_S); - CmSdk.SetAllLedColor(matrix); - } - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - switch (_generalSettings.Layout) - { - case "Qwerty": - return KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - case "Qwertz": - return KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); - default: - return KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - } - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProL.cs b/Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProL.cs deleted file mode 100644 index 057439fb9..000000000 --- a/Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProL.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Drawing; -using Artemis.DeviceProviders.CoolerMaster.Utilities; -using Ninject.Extensions.Logging; - -namespace Artemis.DeviceProviders.CoolerMaster -{ - public class MastermouseProL : DeviceProvider - { - public MastermouseProL(ILogger logger) - { - Logger = logger; - Type = DeviceType.Mouse; - } - - public ILogger Logger { get; } - - public override void UpdateDevice(Bitmap bitmap) - { - // Create an empty matrix - var matrix = new COLOR_MATRIX { KeyColor = new KEY_COLOR[6, 22] }; - - // Get colors from the bitmap's center X and on 2/5th, 3/5th and 4/5th Y - var x = bitmap.Width / 2; - var y = bitmap.Width / 5; - var led1Color = bitmap.GetPixel(x, y); - var led2Color = bitmap.GetPixel(x, y * 2); - var led3Color = bitmap.GetPixel(x, y * 3); - var led4Color = bitmap.GetPixel(x, y * 4); - matrix.KeyColor[0, 0] = new KEY_COLOR(led1Color.R, led1Color.G, led1Color.B); - matrix.KeyColor[0, 1] = new KEY_COLOR(led2Color.R, led2Color.G, led2Color.B); - matrix.KeyColor[0, 2] = new KEY_COLOR(led3Color.R, led3Color.G, led3Color.B); - matrix.KeyColor[0, 3] = new KEY_COLOR(led4Color.R, led4Color.G, led4Color.B); - - // Send the matrix to the mouse - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MMouse_L); - CmSdk.SetAllLedColor(matrix); - } - - public override bool TryEnable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MMouse_L); - - // Doesn't seem reliable but better than nothing I suppose - try - { - CanUse = CmSdk.IsDevicePlug(); - if (CanUse) - CmSdk.EnableLedControl(true); - } - catch (Exception) - { - CanUse = false; - } - - Logger.Debug("Attempted to enable Mastermouse Pro L. CanUse: {0}", CanUse); - return CanUse; - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProS.cs b/Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProS.cs deleted file mode 100644 index ebb07185c..000000000 --- a/Artemis/Artemis/DeviceProviders/CoolerMaster/MastermouseProS.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Drawing; -using Artemis.DeviceProviders.CoolerMaster.Utilities; -using Ninject.Extensions.Logging; - -namespace Artemis.DeviceProviders.CoolerMaster -{ - public class MastermouseProS : DeviceProvider - { - public MastermouseProS(ILogger logger) - { - Logger = logger; - Type = DeviceType.Mouse; - } - - public ILogger Logger { get; } - - public override void UpdateDevice(Bitmap bitmap) - { - // Create an empty matrix - var matrix = new COLOR_MATRIX {KeyColor = new KEY_COLOR[6, 22]}; - - // Get colors from the bitmap's center X and on 1/3rd and 2/3rd Y - var x = bitmap.Width / 2; - var y = bitmap.Width / 3; - var led1Color = bitmap.GetPixel(x, y); - var led2Color = bitmap.GetPixel(x, y * 2); - matrix.KeyColor[0, 0] = new KEY_COLOR(led1Color.R, led1Color.G, led1Color.B); - matrix.KeyColor[0, 1] = new KEY_COLOR(led2Color.R, led2Color.G, led2Color.B); - - // Send the matrix to the mouse - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MMouse_S); - CmSdk.SetAllLedColor(matrix); - } - - public override bool TryEnable() - { - CmSdk.SetControlDevice(DEVICE_INDEX.DEV_MMouse_S); - - // Doesn't seem reliable but better than nothing I suppose - try - { - CanUse = CmSdk.IsDevicePlug(); - if (CanUse) - CmSdk.EnableLedControl(true); - } - catch (Exception) - { - CanUse = false; - } - - Logger.Debug("Attempted to enable Mastermouse Pro S. CanUse: {0}", CanUse); - return CanUse; - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/CoolerMaster/Utilities/CMSDK.cs b/Artemis/Artemis/DeviceProviders/CoolerMaster/Utilities/CMSDK.cs deleted file mode 100644 index f9ffc25fa..000000000 --- a/Artemis/Artemis/DeviceProviders/CoolerMaster/Utilities/CMSDK.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Runtime.InteropServices; - -namespace Artemis.DeviceProviders.CoolerMaster.Utilities -{ - public struct KEY_COLOR - { - public byte r; - public byte g; - public byte b; - - public KEY_COLOR(byte colR, byte colG, byte colB) - { - r = colR; - g = colG; - b = colB; - } - } - - public struct COLOR_MATRIX - { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 132)] public KEY_COLOR[,] KeyColor; - } - - //Enumeration of device list - public enum DEVICE_INDEX - { - DEV_MKeys_L = 0, - DEV_MKeys_S = 1, - DEV_MKeys_L_White = 2, - DEV_MKeys_M_White = 3, - DEV_MMouse_L = 4, - DEV_MMouse_S = 5, - DEV_MKeys_M = 6, - DEV_MKeys_S_White = 7 - } - - //Enumeration of device layout - public enum LAYOUT_KEYBOARD - { - LAYOUT_UNINIT = 0, - LAYOUT_US = 1, - LAYOUT_EU = 2 - } - - public static class CmSdk - { - /// - /// Sets the control device which all following actions are targetted to - /// - /// - [DllImport("lib\\SDKDLL ", CallingConvention = CallingConvention.Cdecl)] - public static extern void SetControlDevice(DEVICE_INDEX devIndex); - - /// - /// Obtain current device layout - /// - /// - [DllImport("lib\\SDKDLL ", CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.I1)] - public static extern LAYOUT_KEYBOARD GetDeviceLayout(); - - /// - /// Verify if the currently conrolled device is plugged in - /// - /// - [DllImport("lib\\SDKDLL ", CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.I1)] - public static extern bool IsDevicePlug(); - - /// - /// Enables led control on the currently controlled device - /// - /// - /// - [DllImport("lib\\SDKDLL ", CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.I1)] - public static extern bool EnableLedControl(bool bEnable); - - /// - /// Sets the LED of the currently controlled device - /// - /// - /// - /// - /// - /// - /// - [DllImport("lib\\SDKDLL ", CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.I1)] - public static extern bool SetLedColor(int iRow, int iColumn, byte r, byte g, byte b); - - /// - /// Sets all LEDS using the given color matrix - /// - /// - /// - [DllImport("lib\\SDKDLL ", CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.I1)] - public static extern bool SetAllLedColor(COLOR_MATRIX colorMatrix); - } -} diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs deleted file mode 100644 index 138f7957f..000000000 --- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Drawing; -using System.Threading; -using Artemis.DeviceProviders.Corsair.Utilities; -using CUE.NET; -using CUE.NET.Brushes; -using CUE.NET.Devices.Generic.Enums; -using Ninject.Extensions.Logging; - -namespace Artemis.DeviceProviders.Corsair -{ - public class CorsairHeadset : DeviceProvider - { - private readonly ImageBrush _headsetBrush; - - public CorsairHeadset(ILogger logger) - { - Logger = logger; - Type = DeviceType.Headset; - _headsetBrush = new ImageBrush(); - } - - public ILogger Logger { get; set; } - - public override bool TryEnable() - { - try - { - lock (CorsairUtilities.SDKLock) - { - CanUse = CanInitializeSdk(); - if (CanUse && !CueSDK.IsInitialized) - CueSDK.Initialize(true); - } - - } - catch (Exception) - { - CanUse = false; - } - - Logger.Debug("Attempted to enable Corsair headset. CanUse: {0}", CanUse); - - if (CanUse) - { - CueSDK.UpdateMode = UpdateMode.Manual; - CueSDK.HeadsetSDK.Brush = _headsetBrush; - } - - return CanUse; - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - - public override void UpdateDevice(Bitmap bitmap) - { - if (!CanUse || bitmap == null) - return; - if (bitmap.Width != bitmap.Height) - throw new ArgumentException("Bitmap must be a perfect square"); - - _headsetBrush.Image = bitmap; - CueSDK.HeadsetSDK.Update(); - } - - private static bool CanInitializeSdk() - { - // This will skip the check-loop if the SDK is initialized - if (CueSDK.IsInitialized) - return CueSDK.IsSDKAvailable(CorsairDeviceType.Headset); - - for (var tries = 0; tries < 9; tries++) - { - if (CueSDK.IsSDKAvailable(CorsairDeviceType.Headset)) - return true; - Thread.Sleep(2000); - } - return false; - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboard.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboard.cs deleted file mode 100644 index 92af0fab2..000000000 --- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboard.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System; -using System.Drawing; -using System.Linq; -using System.Windows; -using System.Windows.Forms; -using Artemis.DeviceProviders.Corsair.Utilities; -using Artemis.Properties; -using Artemis.Utilities; -using CUE.NET; -using CUE.NET.Brushes; -using CUE.NET.Devices.Generic; -using CUE.NET.Devices.Generic.Enums; -using CUE.NET.Exceptions; -using CUE.NET.Helper; -using Ninject.Extensions.Logging; -using Point = System.Drawing.Point; - -namespace Artemis.DeviceProviders.Corsair -{ - public class CorsairKeyboard : KeyboardProvider - { - private CUE.NET.Devices.Keyboard.CorsairKeyboard _keyboard; - private ImageBrush _keyboardBrush; - - public CorsairKeyboard(ILogger logger) - { - Logger = logger; - Name = "Corsair RGB Keyboard"; - CantEnableText = "Couldn't connect to your Corsair keyboard.\n" + - "Please check your cables and/or drivers (could be outdated) and that Corsair Utility Engine is running.\n" + - "In CUE, make sure \"Enable SDK\" is checked under Global Settings.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - } - - public ILogger Logger { get; set; } - - public override bool CanEnable() - { - return CueSDK.IsSDKAvailable(CorsairDeviceType.Keyboard); - } - - /// - /// Enables the SDK and sets updatemode to manual as well as the color of the background to black. - /// - public override void Enable() - { - lock (CorsairUtilities.SDKLock) - { - if (!CueSDK.IsInitialized) - CueSDK.Initialize(true); - } - - CueSDK.UpdateMode = UpdateMode.Manual; - _keyboard = CueSDK.KeyboardSDK; - switch (_keyboard.DeviceInfo.Model) - { - case "K95 RGB": - Height = 7; - Width = 25; - Slug = "corsair-k95-rgb"; - PreviewSettings = new PreviewSettings(new Rect(20, 26, 1066, 282), Resources.k95); - break; - case "K95 RGB PLATINUM": - Height = 9; - Width = 22; - Slug = "corsair-k95-rgb-platinum"; - PreviewSettings = new PreviewSettings(new Rect(12, 1, 1075, 346), Resources.k95_platinum); - break; - case "K70 RGB": - case "K70 RGB RAPIDFIRE": - case "K70 LUX RGB": - Height = 7; - Width = 21; - Slug = "corsair-k70-rgb"; - PreviewSettings = new PreviewSettings(new Rect(15, 26, 929, 282), Resources.k70); - break; - case "K65 RGB": - case "CGK65 RGB": - case "K65 LUX RGB": - case "K65 RGB RAPIDFIRE": - Height = 7; - Width = 18; - Slug = "corsair-k65-rgb"; - PreviewSettings = new PreviewSettings(new Rect(15, 30, 751, 284), Resources.k65); - break; - case "STRAFE RGB": - Height = 8; - Width = 22; - Slug = "corsair-strafe-rgb"; - PreviewSettings = new PreviewSettings(new Rect(23, 12, 937, 324), Resources.strafe); - break; - } - - Logger.Debug("Corsair SDK reported device as: {0}", _keyboard.DeviceInfo.Model); - - _keyboard.Brush = _keyboardBrush ?? (_keyboardBrush = new ImageBrush()); - } - - public override void Disable() - { - try - { - CueSDK.Reset(); - } - catch (WrapperException e) - { - // This occurs when releasing the SDK after sleep, ignore it - if (e.Message != "The previously loaded Keyboard got disconnected.") - throw; - } - } - - /// - /// Properly resizes any size bitmap to the keyboard by creating a rectangle whose size is dependent on the bitmap - /// size. - /// - /// - public override void DrawBitmap(Bitmap bitmap) - { - _keyboardBrush.Image = bitmap; - _keyboard.Update(); - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - var widthMultiplier = Width / _keyboard.Brush.RenderedRectangle.Width; - var heightMultiplier = Height / _keyboard.Brush.RenderedRectangle.Height; - - CorsairLed cueLed = null; - try - { - cueLed = _keyboard.Leds.FirstOrDefault(k => k.Id.ToString() == keyCode.ToString()) ?? - _keyboard.Leds.FirstOrDefault(k => k.Id == CorsairUtilities.FormsKeys[keyCode]); - - Logger.Trace("Keycode: {0} resolved to CUE LED: {1}", keyCode, cueLed); - } - catch (Exception) - { - // ignored - } - - if (cueLed == null) - return null; - - var center = cueLed.LedRectangle.GetCenter(); - return new KeyMatch(keyCode, (int) (center.X * widthMultiplier), (int) (center.Y * heightMultiplier)); - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs deleted file mode 100644 index 31a0249b5..000000000 --- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Drawing; -using System.Threading; -using Artemis.DeviceProviders.Corsair.Utilities; -using CUE.NET; -using CUE.NET.Brushes; -using CUE.NET.Devices.Generic.Enums; -using Ninject.Extensions.Logging; - -namespace Artemis.DeviceProviders.Corsair -{ - public class CorsairMouse : DeviceProvider - { - private readonly ImageBrush _mouseBrush; - - public CorsairMouse(ILogger logger) - { - Logger = logger; - Type = DeviceType.Mouse; - _mouseBrush = new ImageBrush(); - } - - public ILogger Logger { get; set; } - - public override bool TryEnable() - { - try - { - lock (CorsairUtilities.SDKLock) - { - CanUse = CanInitializeSdk(); - if (CanUse && !CueSDK.IsInitialized) - CueSDK.Initialize(true); - } - } - catch (Exception) - { - CanUse = false; - } - - Logger.Debug("Attempted to enable Corsair mice. CanUse: {0}", CanUse); - - if (CanUse) - { - CueSDK.UpdateMode = UpdateMode.Manual; - CueSDK.MouseSDK.Brush = _mouseBrush; - } - - return CanUse; - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - - public override void UpdateDevice(Bitmap bitmap) - { - if (!CanUse || bitmap == null) - return; - if (bitmap.Width != bitmap.Height) - throw new ArgumentException("Bitmap must be a perfect square"); - - _mouseBrush.Image = bitmap; - CueSDK.MouseSDK.Update(); - } - - private static bool CanInitializeSdk() - { - // This will skip the check-loop if the SDK is initialized - if (CueSDK.IsInitialized) - return CueSDK.IsSDKAvailable(CorsairDeviceType.Mouse); - - for (var tries = 0; tries < 9; tries++) - { - if (CueSDK.IsSDKAvailable(CorsairDeviceType.Mouse)) - return true; - Thread.Sleep(2000); - } - return false; - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs deleted file mode 100644 index b08435c0d..000000000 --- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Drawing; -using System.Threading; -using Artemis.DeviceProviders.Corsair.Utilities; -using CUE.NET; -using CUE.NET.Brushes; -using CUE.NET.Devices.Generic.Enums; -using Ninject.Extensions.Logging; - -namespace Artemis.DeviceProviders.Corsair -{ - public class CorsairMousemat : DeviceProvider - { - private readonly ImageBrush _mousematBrush; - - public CorsairMousemat(ILogger logger) - { - Logger = logger; - Type = DeviceType.Mousemat; - _mousematBrush = new ImageBrush(); - } - - public ILogger Logger { get; set; } - - public override bool TryEnable() - { - try - { - lock (CorsairUtilities.SDKLock) - { - CanUse = CanInitializeSdk(); - if (CanUse && !CueSDK.IsInitialized) - CueSDK.Initialize(true); - } - } - catch (Exception) - { - CanUse = false; - } - - Logger.Debug("Attempted to enable Corsair mousemat. CanUse: {0}", CanUse); - - if (CanUse) - { - CueSDK.UpdateMode = UpdateMode.Manual; - CueSDK.MousematSDK.Brush = _mousematBrush; - } - - return CanUse; - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - - public override void UpdateDevice(Bitmap bitmap) - { - if (!CanUse || bitmap == null) - return; - if (bitmap.Width != bitmap.Height) - throw new ArgumentException("Bitmap must be a perfect square"); - - _mousematBrush.Image = bitmap; - CueSDK.MousematSDK.Update(); - } - - private static bool CanInitializeSdk() - { - // This will skip the check-loop if the SDK is initialized - if (CueSDK.IsInitialized) - return CueSDK.IsSDKAvailable(CorsairDeviceType.Mousemat); - - for (var tries = 0; tries < 9; tries++) - { - if (CueSDK.IsSDKAvailable(CorsairDeviceType.Mousemat)) - return true; - Thread.Sleep(2000); - } - return false; - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Corsair/Utilities/CorsairUtilities.cs b/Artemis/Artemis/DeviceProviders/Corsair/Utilities/CorsairUtilities.cs deleted file mode 100644 index 27eead69a..000000000 --- a/Artemis/Artemis/DeviceProviders/Corsair/Utilities/CorsairUtilities.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using System.Windows.Forms; -using CUE.NET.Devices.Generic.Enums; - -namespace Artemis.DeviceProviders.Corsair.Utilities -{ - public static class CorsairUtilities - { - static CorsairUtilities() - { - FormsKeys = new Dictionary - { - {Keys.Scroll, CorsairLedId.ScrollLock}, - {Keys.Pause, CorsairLedId.PauseBreak}, - {Keys.Back, CorsairLedId.Backspace}, - {Keys.Oemtilde, CorsairLedId.GraveAccentAndTilde}, - {Keys.OemMinus, CorsairLedId.MinusAndUnderscore}, - {Keys.Oemplus, CorsairLedId.EqualsAndPlus}, - {Keys.OemOpenBrackets, CorsairLedId.BracketLeft}, - {Keys.Oem6, CorsairLedId.BracketRight}, - {Keys.Return, CorsairLedId.Enter}, - {Keys.Next, CorsairLedId.PageDown}, - {Keys.Capital, CorsairLedId.CapsLock}, - {Keys.Oem1, CorsairLedId.SemicolonAndColon}, - {Keys.Oem7, CorsairLedId.ApostropheAndDoubleQuote}, - {Keys.OemBackslash, CorsairLedId.NonUsBackslash}, - {Keys.LShiftKey, CorsairLedId.LeftShift}, - {Keys.Oem5, CorsairLedId.NonUsTilde}, - {Keys.Oemcomma, CorsairLedId.CommaAndLessThan}, - {Keys.OemPeriod, CorsairLedId.PeriodAndBiggerThan}, - {Keys.OemQuestion, CorsairLedId.SlashAndQuestionMark}, - {Keys.RShiftKey, CorsairLedId.RightShift}, - {Keys.LControlKey, CorsairLedId.LeftCtrl}, - {Keys.LWin, CorsairLedId.LeftGui}, - {Keys.LMenu, CorsairLedId.LeftAlt}, - {Keys.RMenu, CorsairLedId.RightAlt}, - {Keys.RWin, CorsairLedId.RightGui}, - {Keys.Apps, CorsairLedId.Application}, - {Keys.RControlKey, CorsairLedId.RightCtrl}, - {Keys.Left, CorsairLedId.LeftArrow}, - {Keys.Down, CorsairLedId.DownArrow}, - {Keys.Right, CorsairLedId.RightArrow}, - {Keys.Up, CorsairLedId.UpArrow}, - {Keys.NumPad0, CorsairLedId.Keypad0}, - {Keys.NumPad1, CorsairLedId.Keypad1}, - {Keys.NumPad2, CorsairLedId.Keypad2}, - {Keys.NumPad3, CorsairLedId.Keypad3}, - {Keys.NumPad4, CorsairLedId.Keypad4}, - {Keys.NumPad5, CorsairLedId.Keypad5}, - {Keys.NumPad6, CorsairLedId.Keypad6}, - {Keys.NumPad7, CorsairLedId.Keypad7}, - {Keys.NumPad8, CorsairLedId.Keypad8}, - {Keys.NumPad9, CorsairLedId.Keypad9}, - {Keys.Divide, CorsairLedId.KeypadSlash}, - {Keys.Multiply, CorsairLedId.KeypadAsterisk}, - {Keys.Subtract, CorsairLedId.KeypadMinus}, - {Keys.Add, CorsairLedId.KeypadPlus}, - {Keys.Decimal, CorsairLedId.KeypadPeriodAndDelete}, - {Keys.MediaStop, CorsairLedId.Stop}, - {Keys.MediaPreviousTrack, CorsairLedId.ScanPreviousTrack}, - {Keys.MediaNextTrack, CorsairLedId.ScanNextTrack}, - {Keys.MediaPlayPause, CorsairLedId.PlayPause}, - {Keys.VolumeMute, CorsairLedId.Mute}, - {Keys.VolumeUp, CorsairLedId.VolumeUp}, - {Keys.VolumeDown, CorsairLedId.VolumeDown} - }; - } - - public static Dictionary FormsKeys { get; set; } - public static object SDKLock { get; set; } = new object(); - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/DeviceProvider.cs b/Artemis/Artemis/DeviceProviders/DeviceProvider.cs deleted file mode 100644 index 9399328e0..000000000 --- a/Artemis/Artemis/DeviceProviders/DeviceProvider.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Drawing; -using System.Threading.Tasks; - -namespace Artemis.DeviceProviders -{ - public abstract class DeviceProvider - { - /// - /// Indicates the device type - /// - public DeviceType Type { get; set; } - - /// - /// Indicates whether or not the device can be updated - /// - public bool CanUse { get; set; } - - /// - /// Updates a non-keyboard to take the colours found in the provided bitmap - /// - /// - public abstract void UpdateDevice(Bitmap bitmap); - - /// - /// Tries to enable the device and updates CanUse accordingly - /// - public abstract bool TryEnable(); - - /// - /// Disables the device - /// - public abstract void Disable(); - - /// - /// Tries to enable the device and updates CanUse accordingly asynchronously - /// - /// - public Task TryEnableAsync() - { - return Task.Run(() => TryEnable()); - } - } - - public enum DeviceType - { - Keyboard, - Mouse, - Headset, - Generic, - Mousemat - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/KeyboardProvider.cs b/Artemis/Artemis/DeviceProviders/KeyboardProvider.cs deleted file mode 100644 index c2d767bca..000000000 --- a/Artemis/Artemis/DeviceProviders/KeyboardProvider.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using System.Drawing; -using System.Threading; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Forms; -using System.Windows.Media.Imaging; -using Artemis.Utilities; -using MahApps.Metro.Controls.Dialogs; -using Size = System.Windows.Size; - -namespace Artemis.DeviceProviders -{ - public abstract class KeyboardProvider : DeviceProvider - { - protected KeyboardProvider() - { - Type = DeviceType.Keyboard; - } - - public string Name { get; set; } - public string Slug { get; set; } - public int Height { get; set; } - public int Width { get; set; } - public string CantEnableText { get; set; } - public PreviewSettings PreviewSettings { get; set; } - - public abstract bool CanEnable(); - public abstract void Enable(); - public abstract void DrawBitmap(Bitmap bitmap); - - /// - /// Returns a bitmap matching the keyboard's dimensions using the provided scale - /// - /// - public Bitmap KeyboardBitmap(int scale = 4) => new Bitmap(Width * scale, Height * scale); - - public Rect KeyboardRectangle(int scale = 4) => new Rect(new Size(Width * scale, Height * scale)); - - /// - /// Runs CanEnable asynchronously multiple times until successful, cancelled or max tries reached - /// - /// - /// - public Task CanEnableAsync(ProgressDialogController dialog) - { - return Task.Run(() => - { - for (var tries = 1; tries <= 10; tries++) - { - // Dialog interaction - if (dialog != null) - { - // Stop if cancelled by user - if (dialog.IsCanceled) - { - dialog.SetIndeterminate(); - return false; - } - // Updated progress to indicate how much tries are left - dialog.SetProgress(0.1 * tries); - } - - if (CanEnable()) - { - dialog?.SetIndeterminate(); - return true; - } - Thread.Sleep(2000); - } - dialog?.SetIndeterminate(); - return false; - }); - } - - /// - /// Runs CanEnable asynchronously - /// - /// - /// - public Task EnableAsync(ProgressDialogController dialog) - { - return Task.Run(() => Enable()); - } - - public override void UpdateDevice(Bitmap bitmap) - { - throw new NotSupportedException("KeyboardProvider doesn't implement UpdateDevice, use DrawBitmap instead."); - } - - public override bool TryEnable() - { - throw new NotSupportedException("KeyboardProvider doesn't implement TryEnable, use CanEnableAsync instead."); - } - - /// - /// Returns the real life X and Y coordinates of the given key - /// - /// - /// - public abstract KeyMatch? GetKeyPosition(Keys keyCode); - } - - public struct KeyMatch - { - public KeyMatch(Keys keyCode, int x, int y) - { - KeyCode = keyCode; - X = x; - Y = y; - } - - public Keys KeyCode { get; set; } - public int X { get; set; } - public int Y { get; set; } - } - - public struct PreviewSettings - { - public Rect OverlayRectangle { get; set; } - public Rect BackgroundRectangle { get; set; } - public BitmapImage Image { get; set; } - - public PreviewSettings(Rect overlayRectangle, Bitmap bitmap) - { - OverlayRectangle = overlayRectangle; - BackgroundRectangle = new Rect(0, 0, bitmap.Width, bitmap.Height); - Image = ImageUtilities.BitmapToBitmapImage(bitmap); - Image.Freeze(); - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Logitech/G810.cs b/Artemis/Artemis/DeviceProviders/Logitech/G810.cs deleted file mode 100644 index d6d7538c8..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/G810.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Drawing; -using System.Linq; -using System.Windows; -using System.Windows.Forms; -using Artemis.DAL; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.Properties; -using Artemis.Settings; - -namespace Artemis.DeviceProviders.Logitech -{ - public class G810 : LogitechKeyboard - { - private GeneralSettings _generalSettings; - - public G810() - { - Name = "Logitech G810 RGB"; - Slug = "logitech-g810"; - CantEnableText = "Couldn't connect to your Logitech G810.\n" + - "Please check your cables and updating the Logitech Gaming Software\n" + - "A minimum version of 8.81.15 is required.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - Height = 7; - Width = 21; - PreviewSettings = new PreviewSettings(new Rect(19, 36, 1010, 304), Resources.g810); - _generalSettings = SettingsProvider.Load(); - } - - /// - /// The G910 also updates the G-logo, G-badge and G-keys - /// - /// - public override void DrawBitmap(Bitmap bitmap) - { - using (var croppedBitmap = new Bitmap(21 * 4, 6 * 4)) - { - // Deal with non-standard DPI - croppedBitmap.SetResolution(96, 96); - // Don't forget that the image is upscaled 4 times - using (var g = Graphics.FromImage(croppedBitmap)) - { - g.DrawImage(bitmap, new Rectangle(0, 0, 84, 24), new Rectangle(4, 4, 84, 24), GraphicsUnit.Pixel); - } - - LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB); - // TODO: Remapping - LogitechGSDK.LogiLedSetLightingFromBitmap(OrionUtilities.BitmapToByteArray(bitmap)); - } - - using (var resized = OrionUtilities.ResizeImage(bitmap, 21, 7)) - { - // Color G-logo, lets also try some other values to see what happens - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_LOGO, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_BADGE, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_1, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_2, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_3, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_4, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_5, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_6, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_7, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_8, 0, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_9, 0, 0); - } - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - KeyMatch value; - switch (_generalSettings.Layout) - { - case "Qwerty": - value = KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - break; - case "Qwertz": - value = KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); - break; - default: - value = KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - break; - } - - // Adjust the distance by 1 on y for the G810 - return new KeyMatch(value.KeyCode, value.X, value.Y + 1); - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Logitech/G910.cs b/Artemis/Artemis/DeviceProviders/Logitech/G910.cs deleted file mode 100644 index 295c5be3c..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/G910.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.Drawing; -using System.Linq; -using System.Windows; -using System.Windows.Forms; -using Artemis.DAL; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.Properties; -using Artemis.Settings; - -namespace Artemis.DeviceProviders.Logitech -{ - public class G910 : LogitechKeyboard - { - private readonly GeneralSettings _generalSettings; - - public G910() - { - Name = "Logitech G910 RGB"; - Slug = "logitech-g910"; - CantEnableText = "Couldn't connect to your Logitech G910.\n" + - "Please check your cables and updating the Logitech Gaming Software\n" + - "A minimum version of 8.81.15 is required.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - Height = 7; - Width = 22; - PreviewSettings = new PreviewSettings(new Rect(34, 18, 916, 272), Resources.g910); - _generalSettings = SettingsProvider.Load(); - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - KeyMatch value; - switch (_generalSettings.Layout) - { - case "Qwerty": - value = KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - break; - case "Qwertz": - value = KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); - break; - default: - value = KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - break; - } - - // Adjust the distance by 1 on both x and y for the G910 - return new KeyMatch(value.KeyCode, value.X + 1, value.Y + 1); - } - - /// - /// The G910 also updates the G-logo, G-badge and G-keys - /// - /// - public override void DrawBitmap(Bitmap bitmap) - { - using (var croppedBitmap = new Bitmap(21 * 4, 6 * 4)) - { - // Deal with non-standard DPI - croppedBitmap.SetResolution(96, 96); - // Don't forget that the image is upscaled 4 times - using (var g = Graphics.FromImage(croppedBitmap)) - { - g.DrawImage(bitmap, new Rectangle(0, 0, 84, 24), new Rectangle(4, 4, 84, 24), GraphicsUnit.Pixel); - } - - LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB); - LogitechGSDK.LogiLedSetLightingFromBitmap(OrionUtilities.BitmapToByteArray(bitmap, G910Keymappings)); - } - - using (var resized = OrionUtilities.ResizeImage(bitmap, 22, 7)) - { - // Color the extra keys on the left side of the keyboard - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_LOGO, 0, 1); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_1, 0, 2); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_2, 0, 3); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_3, 0, 4); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_4, 0, 5); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_5, 0, 6); - - // Color the extra keys on the top of the keyboard - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_6, 3, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_7, 4, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_8, 5, 0); - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_9, 6, 0); - - // Color the G-badge - SetLogitechColorFromCoordinates(resized, KeyboardNames.G_BADGE, 5, 6); - } - } - - // These mappings are used by the G910 to fix alignments - public static OrionUtilities.KeyMapping[] G910Keymappings = - { - // First row - new OrionUtilities.KeyMapping(0, 0), - new OrionUtilities.KeyMapping(1, 1), - new OrionUtilities.KeyMapping(2, 1), - new OrionUtilities.KeyMapping(3, 2), - new OrionUtilities.KeyMapping(4, 3), - new OrionUtilities.KeyMapping(5, 4), - new OrionUtilities.KeyMapping(6, 5), - new OrionUtilities.KeyMapping(7, 6), - new OrionUtilities.KeyMapping(8, 7), - new OrionUtilities.KeyMapping(9, 8), - new OrionUtilities.KeyMapping(10, 9), - new OrionUtilities.KeyMapping(11, 9), - new OrionUtilities.KeyMapping(12, 10), - new OrionUtilities.KeyMapping(13, 11), - new OrionUtilities.KeyMapping(13, 12), - new OrionUtilities.KeyMapping(14, 13), - new OrionUtilities.KeyMapping(15, 14), - new OrionUtilities.KeyMapping(16, 15), - new OrionUtilities.KeyMapping(17, 16), - new OrionUtilities.KeyMapping(18, 17), - new OrionUtilities.KeyMapping(19, 18), - - // Second row - new OrionUtilities.KeyMapping(21, 21), - new OrionUtilities.KeyMapping(22, 22), - new OrionUtilities.KeyMapping(23, 23), - new OrionUtilities.KeyMapping(24, 24), - new OrionUtilities.KeyMapping(25, 25), - new OrionUtilities.KeyMapping(26, 26), - new OrionUtilities.KeyMapping(27, 27), - new OrionUtilities.KeyMapping(28, 28), - new OrionUtilities.KeyMapping(29, 29), - new OrionUtilities.KeyMapping(30, 30), - new OrionUtilities.KeyMapping(31, 31), - new OrionUtilities.KeyMapping(32, 32), - new OrionUtilities.KeyMapping(33, 33), - new OrionUtilities.KeyMapping(34, 34), - new OrionUtilities.KeyMapping(35, 35), - new OrionUtilities.KeyMapping(36, 36), - new OrionUtilities.KeyMapping(37, 37), - new OrionUtilities.KeyMapping(38, 38), - new OrionUtilities.KeyMapping(39, 39), - new OrionUtilities.KeyMapping(40, 40), - new OrionUtilities.KeyMapping(41, 41), - - // Third row - new OrionUtilities.KeyMapping(42, 42), - new OrionUtilities.KeyMapping(43, 43), - new OrionUtilities.KeyMapping(44, 44), - new OrionUtilities.KeyMapping(45, 45), - new OrionUtilities.KeyMapping(46, 46), - new OrionUtilities.KeyMapping(47, 46), - new OrionUtilities.KeyMapping(48, 47), - new OrionUtilities.KeyMapping(49, 48), - new OrionUtilities.KeyMapping(50, 49), - new OrionUtilities.KeyMapping(51, 50), - new OrionUtilities.KeyMapping(52, 51), - new OrionUtilities.KeyMapping(53, 52), - new OrionUtilities.KeyMapping(54, 53), - new OrionUtilities.KeyMapping(54, 54), - new OrionUtilities.KeyMapping(55, 55), - new OrionUtilities.KeyMapping(56, 56), - new OrionUtilities.KeyMapping(57, 57), - new OrionUtilities.KeyMapping(58, 58), - new OrionUtilities.KeyMapping(59, 59), - new OrionUtilities.KeyMapping(60, 60), - new OrionUtilities.KeyMapping(61, 61), - new OrionUtilities.KeyMapping(62, 62), - - // Fourth row - new OrionUtilities.KeyMapping(63, 63), - new OrionUtilities.KeyMapping(64, 64), - new OrionUtilities.KeyMapping(65, 65), - new OrionUtilities.KeyMapping(66, 65), - new OrionUtilities.KeyMapping(67, 66), - new OrionUtilities.KeyMapping(68, 67), - new OrionUtilities.KeyMapping(69, 68), - new OrionUtilities.KeyMapping(70, 69), - new OrionUtilities.KeyMapping(71, 70), - new OrionUtilities.KeyMapping(72, 71), - new OrionUtilities.KeyMapping(73, 72), - new OrionUtilities.KeyMapping(74, 73), - new OrionUtilities.KeyMapping(75, 74), - new OrionUtilities.KeyMapping(76, 75), - new OrionUtilities.KeyMapping(76, 76), - new OrionUtilities.KeyMapping(78, 77), - new OrionUtilities.KeyMapping(79, 78), - new OrionUtilities.KeyMapping(79, 79), - new OrionUtilities.KeyMapping(80, 80), - new OrionUtilities.KeyMapping(81, 81), - new OrionUtilities.KeyMapping(82, 82), - - // Fifth row - new OrionUtilities.KeyMapping(84, 84), - new OrionUtilities.KeyMapping(85, 85), - new OrionUtilities.KeyMapping(86, 86), - new OrionUtilities.KeyMapping(87, 87), - new OrionUtilities.KeyMapping(88, 88), - new OrionUtilities.KeyMapping(89, 89), - new OrionUtilities.KeyMapping(90, 90), - new OrionUtilities.KeyMapping(91, 91), - new OrionUtilities.KeyMapping(92, 92), - new OrionUtilities.KeyMapping(93, 93), - new OrionUtilities.KeyMapping(94, 94), - new OrionUtilities.KeyMapping(95, 95), - new OrionUtilities.KeyMapping(96, 96), - new OrionUtilities.KeyMapping(97, 97), - new OrionUtilities.KeyMapping(98, 98), - new OrionUtilities.KeyMapping(99, 99), - new OrionUtilities.KeyMapping(100, 100), - new OrionUtilities.KeyMapping(101, 101), - new OrionUtilities.KeyMapping(102, 102), - new OrionUtilities.KeyMapping(103, 103), - new OrionUtilities.KeyMapping(104, 104), - - // Sixth row - new OrionUtilities.KeyMapping(105, 105), - new OrionUtilities.KeyMapping(106, 106), - new OrionUtilities.KeyMapping(107, 107), - new OrionUtilities.KeyMapping(108, 107), - new OrionUtilities.KeyMapping(109, 109), - new OrionUtilities.KeyMapping(110, 110), - new OrionUtilities.KeyMapping(111, 110), - new OrionUtilities.KeyMapping(112, 111), - new OrionUtilities.KeyMapping(113, 112), - new OrionUtilities.KeyMapping(114, 113), - new OrionUtilities.KeyMapping(115, 114), - new OrionUtilities.KeyMapping(116, 115), - new OrionUtilities.KeyMapping(115, 116), // ALTGR - new OrionUtilities.KeyMapping(116, 117), - new OrionUtilities.KeyMapping(117, 118), - new OrionUtilities.KeyMapping(118, 119), - new OrionUtilities.KeyMapping(119, 120), - new OrionUtilities.KeyMapping(120, 121), - new OrionUtilities.KeyMapping(121, 122), - new OrionUtilities.KeyMapping(122, 123), - new OrionUtilities.KeyMapping(124, 124) - }; - } -} diff --git a/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs b/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs deleted file mode 100644 index c0fc32556..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs +++ /dev/null @@ -1,55 +0,0 @@ -//using System; -//using System.Drawing; -//using Artemis.DeviceProviders.Logitech.Utilities; -//using Ninject.Extensions.Logging; -// -//namespace Artemis.DeviceProviders.Logitech -//{ -// // TODO: Handle shutdown, maybe implement Disable() afterall? -// public class LogitechGeneric : DeviceProvider -// { -// /// -// /// A generic Logitech DeviceProvider. Because the Logitech SDK currently doesn't allow specific -// /// device targeting (only very broad per-key-RGB and full RGB etc..) -// /// -// public LogitechGeneric(ILogger logger) -// { -// Logger = logger; -// Type = DeviceType.Generic; -// } -// -// public ILogger Logger { get; set; } -// -// public override void UpdateDevice(Bitmap bitmap) -// { -// if (!CanUse || bitmap == null) -// return; -// -// var col = bitmap.GetPixel(bitmap.Width/2, bitmap.Height/2); -// LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_RGB); -// LogitechGSDK.LogiLedSetLighting((int) (col.R/2.55), (int) (col.G/2.55), (int) (col.B/2.55)); -// } -// -// public override bool TryEnable() -// { -// var majorNum = 0; -// var minorNum = 0; -// var buildNum = 0; -// -// LogitechGSDK.LogiLedInit(); -// LogitechGSDK.LogiLedGetSdkVersion(ref majorNum, ref minorNum, ref buildNum); -// -// // Turn it into one long number... -// var version = int.Parse($"{majorNum}{minorNum}{buildNum}"); -// CanUse = version >= 88115; -// Logger.Debug("Attempted to enable Logitech generic device. CanUse: {0}", CanUse); -// -// return CanUse; -// } -// -// public override void Disable() -// { -// throw new NotSupportedException("Can only disable a keyboard"); -// } -// } -//} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Logitech/LogitechKeyboard.cs b/Artemis/Artemis/DeviceProviders/Logitech/LogitechKeyboard.cs deleted file mode 100644 index 72ffe9926..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/LogitechKeyboard.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Drawing; -using System.Threading; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.Utilities.DataReaders; -using Microsoft.Win32; - -namespace Artemis.DeviceProviders.Logitech -{ - public abstract class LogitechKeyboard : KeyboardProvider - { - public override bool CanEnable() - { - // Just to be sure, restore the Logitech DLL registry key - DllManager.RestoreLogitechDll(); - - int majorNum = 0, minorNum = 0, buildNum = 0; - - LogitechGSDK.LogiLedInit(); - LogitechGSDK.LogiLedGetSdkVersion(ref majorNum, ref minorNum, ref buildNum); - LogitechGSDK.LogiLedShutdown(); - - // Turn it into one long number... - var version = int.Parse($"{majorNum}{minorNum}{buildNum}"); - CantEnableText = "Couldn't connect to your Logitech keyboard.\n" + - "Please check your cables and updating the Logitech Gaming Software\n" + - $"A minimum version of 8.81.15 is required (detected {majorNum}.{minorNum}.{buildNum}).\n\n" + - "If the detected version differs from the version LGS is reporting, reinstall LGS or see the FAQ.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - - return version >= 88115; - } - - public override void Enable() - { - // Initialize the SDK - LogitechGSDK.LogiLedInit(); - Thread.Sleep(200); - - LogitechGSDK.LogiLedSaveCurrentLighting(); - LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB); - } - - public override void Disable() - { - // Shutdown the SDK - LogitechGSDK.LogiLedRestoreLighting(); - LogitechGSDK.LogiLedShutdown(); - } - - protected void SetLogitechColorFromCoordinates(Bitmap bitmap, KeyboardNames key, int x, int y) - { - var color = bitmap.GetPixel(x, y); - var rPer = (int)Math.Round(color.R / 2.55); - var gPer = (int)Math.Round(color.G / 2.55); - var bPer = (int)Math.Round(color.B / 2.55); - - LogitechGSDK.LogiLedSetLightingForKeyWithKeyName(key, rPer, gPer, bPer); - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMap.cs b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMap.cs deleted file mode 100644 index eb31a9669..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMap.cs +++ /dev/null @@ -1,392 +0,0 @@ -using System.Collections.Generic; -using System.Windows.Forms; - -namespace Artemis.DeviceProviders.Logitech.Utilities -{ - public static class KeyMap - { - static KeyMap() - { - // There are several keyboard layouts - - #region Qwerty - - QwertyLayout = new List - { - // Row 1 - new KeyMatch(Keys.Escape, 0, 0), - new KeyMatch(Keys.F1, 2, 0), - new KeyMatch(Keys.F2, 3, 0), - new KeyMatch(Keys.F3, 4, 0), - new KeyMatch(Keys.F4, 5, 0), - new KeyMatch(Keys.F5, 6, 0), - new KeyMatch(Keys.F6, 7, 0), - new KeyMatch(Keys.F7, 8, 0), - new KeyMatch(Keys.F8, 9, 0), - new KeyMatch(Keys.F9, 11, 0), - new KeyMatch(Keys.F10, 12, 0), - new KeyMatch(Keys.F11, 13, 0), - new KeyMatch(Keys.F12, 14, 0), - new KeyMatch(Keys.PrintScreen, 15, 0), - new KeyMatch(Keys.Scroll, 16, 0), - new KeyMatch(Keys.Pause, 17, 0), - - // Row 2 - new KeyMatch(Keys.Oemtilde, 0, 1), - new KeyMatch(Keys.D1, 1, 1), - new KeyMatch(Keys.D2, 2, 1), - new KeyMatch(Keys.D3, 3, 1), - new KeyMatch(Keys.D4, 4, 1), - new KeyMatch(Keys.D5, 5, 1), - new KeyMatch(Keys.D6, 6, 1), - new KeyMatch(Keys.D7, 7, 1), - new KeyMatch(Keys.D8, 8, 1), - new KeyMatch(Keys.D9, 9, 1), - new KeyMatch(Keys.D0, 10, 1), - new KeyMatch(Keys.OemMinus, 11, 1), - new KeyMatch(Keys.Oemplus, 12, 1), - new KeyMatch(Keys.Back, 13, 1), - new KeyMatch(Keys.Insert, 14, 1), - new KeyMatch(Keys.Home, 15, 1), - new KeyMatch(Keys.PageUp, 16, 1), - new KeyMatch(Keys.NumLock, 17, 1), - new KeyMatch(Keys.Divide, 18, 1), - new KeyMatch(Keys.Multiply, 19, 1), - new KeyMatch(Keys.Subtract, 20, 1), - - // Row 3 - new KeyMatch(Keys.Tab, 0, 2), - new KeyMatch(Keys.Q, 1, 2), - new KeyMatch(Keys.W, 2, 2), - new KeyMatch(Keys.E, 3, 2), - new KeyMatch(Keys.R, 5, 2), - new KeyMatch(Keys.T, 6, 2), - new KeyMatch(Keys.Y, 7, 2), - new KeyMatch(Keys.U, 8, 2), - new KeyMatch(Keys.I, 9, 2), - new KeyMatch(Keys.O, 10, 2), - new KeyMatch(Keys.P, 11, 2), - new KeyMatch(Keys.OemOpenBrackets, 12, 2), - new KeyMatch(Keys.Oem6, 13, 2), - new KeyMatch(Keys.Delete, 14, 2), - new KeyMatch(Keys.End, 15, 2), - new KeyMatch(Keys.Next, 16, 2), - new KeyMatch(Keys.NumPad7, 17, 2), - new KeyMatch(Keys.NumPad8, 18, 2), - new KeyMatch(Keys.NumPad9, 19, 2), - new KeyMatch(Keys.Add, 20, 2), - - // Row 4 - new KeyMatch(Keys.Capital, 0, 3), - new KeyMatch(Keys.A, 1, 3), - new KeyMatch(Keys.S, 3, 3), - new KeyMatch(Keys.D, 4, 3), - new KeyMatch(Keys.F, 5, 3), - new KeyMatch(Keys.G, 6, 3), - new KeyMatch(Keys.H, 7, 3), - new KeyMatch(Keys.J, 8, 3), - new KeyMatch(Keys.K, 9, 3), - new KeyMatch(Keys.L, 10, 3), - new KeyMatch(Keys.Oem1, 11, 3), - new KeyMatch(Keys.Oem7, 12, 3), - new KeyMatch(Keys.Oem5, 13, 3), - new KeyMatch(Keys.Return, 14, 3), - new KeyMatch(Keys.NumPad4, 17, 3), - new KeyMatch(Keys.NumPad5, 18, 3), - new KeyMatch(Keys.NumPad6, 19, 3), - - // Row 5 - new KeyMatch(Keys.LShiftKey, 1, 4), - new KeyMatch(Keys.OemBackslash, 2, 4), - new KeyMatch(Keys.Z, 2, 4), - new KeyMatch(Keys.X, 3, 4), - new KeyMatch(Keys.C, 4, 4), - new KeyMatch(Keys.V, 5, 4), - new KeyMatch(Keys.B, 6, 4), - new KeyMatch(Keys.N, 7, 4), - new KeyMatch(Keys.M, 8, 4), - new KeyMatch(Keys.Oemcomma, 9, 4), - new KeyMatch(Keys.OemPeriod, 10, 4), - new KeyMatch(Keys.OemQuestion, 11, 4), - new KeyMatch(Keys.RShiftKey, 13, 4), - new KeyMatch(Keys.Up, 15, 4), - new KeyMatch(Keys.NumPad1, 17, 4), - new KeyMatch(Keys.NumPad2, 18, 4), - new KeyMatch(Keys.NumPad3, 19, 4), - // Both returns return "Return" (Yes...) - // new OrionKey(System.Windows.Forms.Keys.Return, 20, 4), - - // Row 6 - new KeyMatch(Keys.LControlKey, 0, 5), - new KeyMatch(Keys.LWin, 1, 5), - new KeyMatch(Keys.LMenu, 3, 5), - new KeyMatch(Keys.Space, 6, 5), - new KeyMatch(Keys.RMenu, 11, 5), - new KeyMatch(Keys.RWin, 12, 5), - new KeyMatch(Keys.Apps, 13, 5), - new KeyMatch(Keys.RControlKey, 14, 5), - new KeyMatch(Keys.Left, 15, 5), - new KeyMatch(Keys.Down, 16, 5), - new KeyMatch(Keys.Right, 17, 5), - new KeyMatch(Keys.NumPad0, 18, 5), - new KeyMatch(Keys.Decimal, 19, 5) - }; - - #endregion - - #region Qwertz - - QwertzLayout = new List - { - // Row 1 - new KeyMatch(Keys.Escape, 0, 0), - new KeyMatch(Keys.F1, 2, 0), - new KeyMatch(Keys.F2, 3, 0), - new KeyMatch(Keys.F3, 4, 0), - new KeyMatch(Keys.F4, 5, 0), - new KeyMatch(Keys.F5, 6, 0), - new KeyMatch(Keys.F6, 7, 0), - new KeyMatch(Keys.F7, 8, 0), - new KeyMatch(Keys.F8, 9, 0), - new KeyMatch(Keys.F9, 11, 0), - new KeyMatch(Keys.F10, 12, 0), // returns 'None' - new KeyMatch(Keys.F11, 13, 0), - new KeyMatch(Keys.F12, 14, 0), - new KeyMatch(Keys.PrintScreen, 15, 0), - new KeyMatch(Keys.Scroll, 16, 0), - new KeyMatch(Keys.Pause, 17, 0), - - // Row 2 - new KeyMatch(Keys.Oem5, 0, 1), - new KeyMatch(Keys.D1, 1, 1), - new KeyMatch(Keys.D2, 2, 1), - new KeyMatch(Keys.D3, 3, 1), - new KeyMatch(Keys.D4, 4, 1), - new KeyMatch(Keys.D5, 5, 1), - new KeyMatch(Keys.D6, 6, 1), - new KeyMatch(Keys.D7, 7, 1), - new KeyMatch(Keys.D8, 8, 1), - new KeyMatch(Keys.D9, 9, 1), - new KeyMatch(Keys.D0, 10, 1), - new KeyMatch(Keys.OemOpenBrackets, 11, 1), - new KeyMatch(Keys.Oem6, 12, 1), - new KeyMatch(Keys.Back, 13, 1), - new KeyMatch(Keys.Insert, 14, 1), - new KeyMatch(Keys.Home, 15, 1), - new KeyMatch(Keys.PageUp, 16, 1), - new KeyMatch(Keys.NumLock, 17, 1), - new KeyMatch(Keys.Divide, 18, 1), - new KeyMatch(Keys.Multiply, 19, 1), - new KeyMatch(Keys.Subtract, 20, 1), - - // Row 3 - new KeyMatch(Keys.Tab, 0, 2), - new KeyMatch(Keys.Q, 1, 2), - new KeyMatch(Keys.W, 2, 2), - new KeyMatch(Keys.E, 3, 2), - new KeyMatch(Keys.R, 5, 2), - new KeyMatch(Keys.T, 6, 2), - new KeyMatch(Keys.Z, 7, 2), - new KeyMatch(Keys.U, 8, 2), - new KeyMatch(Keys.I, 9, 2), - new KeyMatch(Keys.O, 10, 2), - new KeyMatch(Keys.P, 11, 2), - new KeyMatch(Keys.Oem1, 12, 2), - new KeyMatch(Keys.Oemplus, 13, 2), - new KeyMatch(Keys.Delete, 14, 2), - new KeyMatch(Keys.End, 15, 2), - new KeyMatch(Keys.Next, 16, 2), - new KeyMatch(Keys.NumPad7, 17, 2), - new KeyMatch(Keys.NumPad8, 18, 2), - new KeyMatch(Keys.NumPad9, 19, 2), - new KeyMatch(Keys.Add, 20, 2), - - // Row 4 - new KeyMatch(Keys.Capital, 0, 3), - new KeyMatch(Keys.A, 1, 3), - new KeyMatch(Keys.S, 3, 3), - new KeyMatch(Keys.D, 4, 3), - new KeyMatch(Keys.F, 5, 3), - new KeyMatch(Keys.G, 6, 3), - new KeyMatch(Keys.H, 7, 3), - new KeyMatch(Keys.J, 8, 3), - new KeyMatch(Keys.K, 9, 3), - new KeyMatch(Keys.L, 10, 3), - new KeyMatch(Keys.Oemtilde, 11, 3), - new KeyMatch(Keys.Oem7, 12, 3), - new KeyMatch(Keys.OemQuestion, 13, 3), - new KeyMatch(Keys.Return, 14, 3), - new KeyMatch(Keys.NumPad4, 17, 3), - new KeyMatch(Keys.NumPad5, 18, 3), - new KeyMatch(Keys.NumPad6, 19, 3), - - // Row 5 - new KeyMatch(Keys.LShiftKey, 1, 4), - new KeyMatch(Keys.OemBackslash, 2, 4), - new KeyMatch(Keys.Y, 2, 4), - new KeyMatch(Keys.X, 3, 4), - new KeyMatch(Keys.C, 4, 4), - new KeyMatch(Keys.V, 5, 4), - new KeyMatch(Keys.B, 6, 4), - new KeyMatch(Keys.N, 7, 4), - new KeyMatch(Keys.M, 8, 4), - new KeyMatch(Keys.Oemcomma, 9, 4), - new KeyMatch(Keys.OemPeriod, 10, 4), - new KeyMatch(Keys.OemMinus, 11, 4), - new KeyMatch(Keys.RShiftKey, 13, 4), - new KeyMatch(Keys.Up, 15, 4), - new KeyMatch(Keys.NumPad1, 17, 4), - new KeyMatch(Keys.NumPad2, 18, 4), - new KeyMatch(Keys.NumPad3, 19, 4), - // Both returns return "Return" (Yes...) - // new OrionKey(System.Windows.Forms.Keys.Return, 20, 4), - - // Row 6 - new KeyMatch(Keys.LControlKey, 0, 5), - new KeyMatch(Keys.LWin, 1, 5), - new KeyMatch(Keys.Menu, 3, 5), // returns 'None' - new KeyMatch(Keys.Space, 6, 5), - new KeyMatch(Keys.RMenu, 11, 5), - new KeyMatch(Keys.RWin, 12, 5), - new KeyMatch(Keys.Apps, 13, 5), - new KeyMatch(Keys.RControlKey, 14, 5), - new KeyMatch(Keys.Left, 15, 5), - new KeyMatch(Keys.Down, 16, 5), - new KeyMatch(Keys.Right, 17, 5), - new KeyMatch(Keys.NumPad0, 18, 5), - new KeyMatch(Keys.Decimal, 19, 5) - }; - - #endregion - - #region Azerty - - AzertyLayout = new List - { - // Row 1 - new KeyMatch(Keys.Escape, 0, 0), - new KeyMatch(Keys.F1, 2, 0), - new KeyMatch(Keys.F2, 3, 0), - new KeyMatch(Keys.F3, 4, 0), - new KeyMatch(Keys.F4, 5, 0), - new KeyMatch(Keys.F5, 6, 0), - new KeyMatch(Keys.F6, 7, 0), - new KeyMatch(Keys.F7, 8, 0), - new KeyMatch(Keys.F8, 9, 0), - new KeyMatch(Keys.F9, 11, 0), - new KeyMatch(Keys.F10, 12, 0), - new KeyMatch(Keys.F11, 13, 0), - new KeyMatch(Keys.F12, 14, 0), - new KeyMatch(Keys.PrintScreen, 15, 0), - new KeyMatch(Keys.Scroll, 16, 0), - new KeyMatch(Keys.Pause, 17, 0), - - // Row 2 - new KeyMatch(Keys.Oemtilde, 0, 1), - new KeyMatch(Keys.D1, 1, 1), - new KeyMatch(Keys.D2, 2, 1), - new KeyMatch(Keys.D3, 3, 1), - new KeyMatch(Keys.D4, 4, 1), - new KeyMatch(Keys.D5, 5, 1), - new KeyMatch(Keys.D6, 6, 1), - new KeyMatch(Keys.D7, 7, 1), - new KeyMatch(Keys.D8, 8, 1), - new KeyMatch(Keys.D9, 9, 1), - new KeyMatch(Keys.D0, 10, 1), - new KeyMatch(Keys.OemMinus, 11, 1), - new KeyMatch(Keys.Oemplus, 12, 1), - new KeyMatch(Keys.Back, 13, 1), - new KeyMatch(Keys.Insert, 14, 1), - new KeyMatch(Keys.Home, 15, 1), - new KeyMatch(Keys.PageUp, 16, 1), - new KeyMatch(Keys.NumLock, 17, 1), - new KeyMatch(Keys.Divide, 18, 1), - new KeyMatch(Keys.Multiply, 19, 1), - new KeyMatch(Keys.Subtract, 20, 1), - - // Row 3 - new KeyMatch(Keys.Tab, 0, 2), - new KeyMatch(Keys.A, 1, 2), - new KeyMatch(Keys.Z, 2, 2), - new KeyMatch(Keys.E, 3, 2), - new KeyMatch(Keys.R, 5, 2), - new KeyMatch(Keys.T, 6, 2), - new KeyMatch(Keys.Y, 7, 2), - new KeyMatch(Keys.U, 8, 2), - new KeyMatch(Keys.I, 9, 2), - new KeyMatch(Keys.O, 10, 2), - new KeyMatch(Keys.P, 11, 2), - new KeyMatch(Keys.OemQuotes, 12, 2), - new KeyMatch(Keys.Oem6, 13, 2), - new KeyMatch(Keys.Delete, 14, 2), - new KeyMatch(Keys.End, 15, 2), - new KeyMatch(Keys.Next, 16, 2), - new KeyMatch(Keys.NumPad7, 17, 2), - new KeyMatch(Keys.NumPad8, 18, 2), - new KeyMatch(Keys.NumPad9, 19, 2), - new KeyMatch(Keys.Add, 20, 2), - - // Row 4 - new KeyMatch(Keys.Capital, 0, 3), - new KeyMatch(Keys.Q, 1, 3), - new KeyMatch(Keys.S, 3, 3), - new KeyMatch(Keys.D, 4, 3), - new KeyMatch(Keys.F, 5, 3), - new KeyMatch(Keys.G, 6, 3), - new KeyMatch(Keys.H, 7, 3), - new KeyMatch(Keys.J, 8, 3), - new KeyMatch(Keys.K, 9, 3), - new KeyMatch(Keys.L, 10, 3), - new KeyMatch(Keys.M, 11, 3), - new KeyMatch(Keys.Oem7, 12, 3), - new KeyMatch(Keys.Oem5, 13, 3), - new KeyMatch(Keys.Return, 14, 3), - new KeyMatch(Keys.NumPad4, 17, 3), - new KeyMatch(Keys.NumPad5, 18, 3), - new KeyMatch(Keys.NumPad6, 19, 3), - - // Row 5 - new KeyMatch(Keys.LShiftKey, 1, 4), - new KeyMatch(Keys.OemBackslash, 2, 4), - new KeyMatch(Keys.W, 2, 4), - new KeyMatch(Keys.X, 3, 4), - new KeyMatch(Keys.C, 4, 4), - new KeyMatch(Keys.V, 5, 4), - new KeyMatch(Keys.B, 6, 4), - new KeyMatch(Keys.N, 7, 4), - new KeyMatch(Keys.OemQuestion, 8, 4), - new KeyMatch(Keys.Oemcomma, 9, 4), - new KeyMatch(Keys.OemPeriod, 10, 4), - new KeyMatch(Keys.OemQuestion, 11, 4), - new KeyMatch(Keys.RShiftKey, 13, 4), - new KeyMatch(Keys.Up, 15, 4), - new KeyMatch(Keys.NumPad1, 17, 4), - new KeyMatch(Keys.NumPad2, 18, 4), - new KeyMatch(Keys.NumPad3, 19, 4), - // Both returns return "Return" (Yes...) - // new OrionKey(System.Windows.Forms.Keys.Return, 20, 4), - - // Row 6 - new KeyMatch(Keys.LControlKey, 0, 5), - new KeyMatch(Keys.LWin, 1, 5), - new KeyMatch(Keys.LMenu, 3, 5), - new KeyMatch(Keys.Space, 6, 5), - new KeyMatch(Keys.RMenu, 11, 5), - new KeyMatch(Keys.RWin, 12, 5), - new KeyMatch(Keys.Apps, 13, 5), - new KeyMatch(Keys.RControlKey, 14, 5), - new KeyMatch(Keys.Left, 15, 5), - new KeyMatch(Keys.Down, 16, 5), - new KeyMatch(Keys.Right, 17, 5), - new KeyMatch(Keys.NumPad0, 18, 5), - new KeyMatch(Keys.Decimal, 19, 5) - }; - - #endregion - } - - public static List QwertyLayout { get; set; } - public static List QwertzLayout { get; set; } - public static List AzertyLayout { get; set; } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMapG810.cs b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMapG810.cs deleted file mode 100644 index 35b38389c..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyMapG810.cs +++ /dev/null @@ -1,392 +0,0 @@ -using System.Collections.Generic; -using System.Windows.Forms; - -namespace Artemis.DeviceProviders.Logitech.Utilities -{ - public static class KeyMapG810 - { - static KeyMapG810() - { - // There are several keyboard layouts - - #region Qwerty - - QwertyLayout = new List - { - // Row 1 - new KeyMatch(Keys.Escape, 0, 0), - new KeyMatch(Keys.F1, 2, 0), - new KeyMatch(Keys.F2, 3, 0), - new KeyMatch(Keys.F3, 4, 0), - new KeyMatch(Keys.F4, 5, 0), - new KeyMatch(Keys.F5, 6, 0), - new KeyMatch(Keys.F6, 7, 0), - new KeyMatch(Keys.F7, 8, 0), - new KeyMatch(Keys.F8, 9, 0), - new KeyMatch(Keys.F9, 11, 0), - new KeyMatch(Keys.F10, 12, 0), - new KeyMatch(Keys.F11, 13, 0), - new KeyMatch(Keys.F12, 14, 0), - new KeyMatch(Keys.PrintScreen, 15, 0), - new KeyMatch(Keys.Scroll, 16, 0), - new KeyMatch(Keys.Pause, 17, 0), - - // Row 2 - new KeyMatch(Keys.Oemtilde, 0, 1), - new KeyMatch(Keys.D1, 1, 1), - new KeyMatch(Keys.D2, 2, 1), - new KeyMatch(Keys.D3, 3, 1), - new KeyMatch(Keys.D4, 4, 1), - new KeyMatch(Keys.D5, 5, 1), - new KeyMatch(Keys.D6, 6, 1), - new KeyMatch(Keys.D7, 7, 1), - new KeyMatch(Keys.D8, 8, 1), - new KeyMatch(Keys.D9, 9, 1), - new KeyMatch(Keys.D0, 10, 1), - new KeyMatch(Keys.OemMinus, 11, 1), - new KeyMatch(Keys.Oemplus, 12, 1), - new KeyMatch(Keys.Back, 13, 1), - new KeyMatch(Keys.Insert, 14, 1), - new KeyMatch(Keys.Home, 15, 1), - new KeyMatch(Keys.PageUp, 16, 1), - new KeyMatch(Keys.NumLock, 17, 1), - new KeyMatch(Keys.Divide, 18, 1), - new KeyMatch(Keys.Multiply, 19, 1), - new KeyMatch(Keys.Subtract, 20, 1), - - // Row 3 - new KeyMatch(Keys.Tab, 0, 2), - new KeyMatch(Keys.Q, 1, 2), - new KeyMatch(Keys.W, 2, 2), - new KeyMatch(Keys.E, 3, 2), - new KeyMatch(Keys.R, 5, 2), - new KeyMatch(Keys.T, 6, 2), - new KeyMatch(Keys.Y, 7, 2), - new KeyMatch(Keys.U, 8, 2), - new KeyMatch(Keys.I, 9, 2), - new KeyMatch(Keys.O, 10, 2), - new KeyMatch(Keys.P, 11, 2), - new KeyMatch(Keys.OemOpenBrackets, 12, 2), - new KeyMatch(Keys.Oem6, 13, 2), - new KeyMatch(Keys.Delete, 14, 2), - new KeyMatch(Keys.End, 15, 2), - new KeyMatch(Keys.Next, 16, 2), - new KeyMatch(Keys.NumPad7, 17, 2), - new KeyMatch(Keys.NumPad8, 18, 2), - new KeyMatch(Keys.NumPad9, 19, 2), - new KeyMatch(Keys.Add, 20, 2), - - // Row 4 - new KeyMatch(Keys.Capital, 0, 3), - new KeyMatch(Keys.A, 1, 3), - new KeyMatch(Keys.S, 3, 3), - new KeyMatch(Keys.D, 4, 3), - new KeyMatch(Keys.F, 5, 3), - new KeyMatch(Keys.G, 6, 3), - new KeyMatch(Keys.H, 7, 3), - new KeyMatch(Keys.J, 8, 3), - new KeyMatch(Keys.K, 9, 3), - new KeyMatch(Keys.L, 10, 3), - new KeyMatch(Keys.Oem1, 11, 3), - new KeyMatch(Keys.Oem7, 12, 3), - new KeyMatch(Keys.Oem5, 13, 3), - new KeyMatch(Keys.Return, 14, 3), - new KeyMatch(Keys.NumPad4, 17, 3), - new KeyMatch(Keys.NumPad5, 18, 3), - new KeyMatch(Keys.NumPad6, 19, 3), - - // Row 5 - new KeyMatch(Keys.LShiftKey, 1, 4), - new KeyMatch(Keys.OemBackslash, 2, 4), - new KeyMatch(Keys.Z, 2, 4), - new KeyMatch(Keys.X, 3, 4), - new KeyMatch(Keys.C, 4, 4), - new KeyMatch(Keys.V, 5, 4), - new KeyMatch(Keys.B, 6, 4), - new KeyMatch(Keys.N, 7, 4), - new KeyMatch(Keys.M, 8, 4), - new KeyMatch(Keys.Oemcomma, 9, 4), - new KeyMatch(Keys.OemPeriod, 10, 4), - new KeyMatch(Keys.OemQuestion, 11, 4), - new KeyMatch(Keys.RShiftKey, 13, 4), - new KeyMatch(Keys.Up, 15, 4), - new KeyMatch(Keys.NumPad1, 17, 4), - new KeyMatch(Keys.NumPad2, 18, 4), - new KeyMatch(Keys.NumPad3, 19, 4), - // Both returns return "Return" (Yes...) - // new OrionKey(System.Windows.Forms.Keys.Return, 20, 4), - - // Row 6 - new KeyMatch(Keys.LControlKey, 0, 5), - new KeyMatch(Keys.LWin, 1, 5), - new KeyMatch(Keys.LMenu, 3, 5), - new KeyMatch(Keys.Space, 6, 5), - new KeyMatch(Keys.RMenu, 11, 5), - new KeyMatch(Keys.RWin, 12, 5), - new KeyMatch(Keys.Apps, 13, 5), - new KeyMatch(Keys.RControlKey, 14, 5), - new KeyMatch(Keys.Left, 15, 5), - new KeyMatch(Keys.Down, 16, 5), - new KeyMatch(Keys.Right, 17, 5), - new KeyMatch(Keys.NumPad0, 18, 5), - new KeyMatch(Keys.Decimal, 19, 5) - }; - - #endregion - - #region Qwertz - - QwertzLayout = new List - { - // Row 1 - new KeyMatch(Keys.Escape, 0, 0), - new KeyMatch(Keys.F1, 2, 0), - new KeyMatch(Keys.F2, 3, 0), - new KeyMatch(Keys.F3, 4, 0), - new KeyMatch(Keys.F4, 5, 0), - new KeyMatch(Keys.F5, 6, 0), - new KeyMatch(Keys.F6, 7, 0), - new KeyMatch(Keys.F7, 8, 0), - new KeyMatch(Keys.F8, 9, 0), - new KeyMatch(Keys.F9, 11, 0), - new KeyMatch(Keys.F10, 12, 0), // returns 'None' - new KeyMatch(Keys.F11, 13, 0), - new KeyMatch(Keys.F12, 14, 0), - new KeyMatch(Keys.PrintScreen, 15, 0), - new KeyMatch(Keys.Scroll, 16, 0), - new KeyMatch(Keys.Pause, 17, 0), - - // Row 2 - new KeyMatch(Keys.Oem5, 0, 1), - new KeyMatch(Keys.D1, 1, 1), - new KeyMatch(Keys.D2, 2, 1), - new KeyMatch(Keys.D3, 3, 1), - new KeyMatch(Keys.D4, 4, 1), - new KeyMatch(Keys.D5, 5, 1), - new KeyMatch(Keys.D6, 6, 1), - new KeyMatch(Keys.D7, 7, 1), - new KeyMatch(Keys.D8, 8, 1), - new KeyMatch(Keys.D9, 9, 1), - new KeyMatch(Keys.D0, 10, 1), - new KeyMatch(Keys.OemOpenBrackets, 11, 1), - new KeyMatch(Keys.Oem6, 12, 1), - new KeyMatch(Keys.Back, 13, 1), - new KeyMatch(Keys.Insert, 14, 1), - new KeyMatch(Keys.Home, 15, 1), - new KeyMatch(Keys.PageUp, 16, 1), - new KeyMatch(Keys.NumLock, 17, 1), - new KeyMatch(Keys.Divide, 18, 1), - new KeyMatch(Keys.Multiply, 19, 1), - new KeyMatch(Keys.Subtract, 20, 1), - - // Row 3 - new KeyMatch(Keys.Tab, 0, 2), - new KeyMatch(Keys.Q, 1, 2), - new KeyMatch(Keys.W, 2, 2), - new KeyMatch(Keys.E, 3, 2), - new KeyMatch(Keys.R, 5, 2), - new KeyMatch(Keys.T, 6, 2), - new KeyMatch(Keys.Z, 7, 2), - new KeyMatch(Keys.U, 8, 2), - new KeyMatch(Keys.I, 9, 2), - new KeyMatch(Keys.O, 10, 2), - new KeyMatch(Keys.P, 11, 2), - new KeyMatch(Keys.Oem1, 12, 2), - new KeyMatch(Keys.Oemplus, 13, 2), - new KeyMatch(Keys.Delete, 14, 2), - new KeyMatch(Keys.End, 15, 2), - new KeyMatch(Keys.Next, 16, 2), - new KeyMatch(Keys.NumPad7, 17, 2), - new KeyMatch(Keys.NumPad8, 18, 2), - new KeyMatch(Keys.NumPad9, 19, 2), - new KeyMatch(Keys.Add, 20, 2), - - // Row 4 - new KeyMatch(Keys.Capital, 0, 3), - new KeyMatch(Keys.A, 1, 3), - new KeyMatch(Keys.S, 3, 3), - new KeyMatch(Keys.D, 4, 3), - new KeyMatch(Keys.F, 5, 3), - new KeyMatch(Keys.G, 6, 3), - new KeyMatch(Keys.H, 7, 3), - new KeyMatch(Keys.J, 8, 3), - new KeyMatch(Keys.K, 9, 3), - new KeyMatch(Keys.L, 10, 3), - new KeyMatch(Keys.Oemtilde, 11, 3), - new KeyMatch(Keys.Oem7, 12, 3), - new KeyMatch(Keys.OemQuestion, 13, 3), - new KeyMatch(Keys.Return, 14, 3), - new KeyMatch(Keys.NumPad4, 17, 3), - new KeyMatch(Keys.NumPad5, 18, 3), - new KeyMatch(Keys.NumPad6, 19, 3), - - // Row 5 - new KeyMatch(Keys.LShiftKey, 1, 4), - new KeyMatch(Keys.OemBackslash, 2, 4), - new KeyMatch(Keys.Y, 2, 4), - new KeyMatch(Keys.X, 3, 4), - new KeyMatch(Keys.C, 4, 4), - new KeyMatch(Keys.V, 5, 4), - new KeyMatch(Keys.B, 6, 4), - new KeyMatch(Keys.N, 7, 4), - new KeyMatch(Keys.M, 8, 4), - new KeyMatch(Keys.Oemcomma, 9, 4), - new KeyMatch(Keys.OemPeriod, 10, 4), - new KeyMatch(Keys.OemMinus, 11, 4), - new KeyMatch(Keys.RShiftKey, 13, 4), - new KeyMatch(Keys.Up, 15, 4), - new KeyMatch(Keys.NumPad1, 17, 4), - new KeyMatch(Keys.NumPad2, 18, 4), - new KeyMatch(Keys.NumPad3, 19, 4), - // Both returns return "Return" (Yes...) - // new OrionKey(System.Windows.Forms.Keys.Return, 20, 4), - - // Row 6 - new KeyMatch(Keys.LControlKey, 0, 5), - new KeyMatch(Keys.LWin, 1, 5), - new KeyMatch(Keys.Menu, 3, 5), // returns 'None' - new KeyMatch(Keys.Space, 6, 5), - new KeyMatch(Keys.RMenu, 11, 5), - new KeyMatch(Keys.RWin, 12, 5), - new KeyMatch(Keys.Apps, 13, 5), - new KeyMatch(Keys.RControlKey, 14, 5), - new KeyMatch(Keys.Left, 15, 5), - new KeyMatch(Keys.Down, 16, 5), - new KeyMatch(Keys.Right, 17, 5), - new KeyMatch(Keys.NumPad0, 18, 5), - new KeyMatch(Keys.Decimal, 19, 5) - }; - - #endregion - - #region Azerty - - AzertyLayout = new List - { - // Row 1 - new KeyMatch(Keys.Escape, 0, 0), - new KeyMatch(Keys.F1, 2, 0), - new KeyMatch(Keys.F2, 3, 0), - new KeyMatch(Keys.F3, 4, 0), - new KeyMatch(Keys.F4, 5, 0), - new KeyMatch(Keys.F5, 6, 0), - new KeyMatch(Keys.F6, 7, 0), - new KeyMatch(Keys.F7, 8, 0), - new KeyMatch(Keys.F8, 9, 0), - new KeyMatch(Keys.F9, 11, 0), - new KeyMatch(Keys.F10, 12, 0), - new KeyMatch(Keys.F11, 13, 0), - new KeyMatch(Keys.F12, 14, 0), - new KeyMatch(Keys.PrintScreen, 15, 0), - new KeyMatch(Keys.Scroll, 16, 0), - new KeyMatch(Keys.Pause, 17, 0), - - // Row 2 - new KeyMatch(Keys.Oemtilde, 0, 1), - new KeyMatch(Keys.D1, 1, 1), - new KeyMatch(Keys.D2, 2, 1), - new KeyMatch(Keys.D3, 3, 1), - new KeyMatch(Keys.D4, 4, 1), - new KeyMatch(Keys.D5, 5, 1), - new KeyMatch(Keys.D6, 6, 1), - new KeyMatch(Keys.D7, 7, 1), - new KeyMatch(Keys.D8, 8, 1), - new KeyMatch(Keys.D9, 9, 1), - new KeyMatch(Keys.D0, 10, 1), - new KeyMatch(Keys.OemMinus, 11, 1), - new KeyMatch(Keys.Oemplus, 12, 1), - new KeyMatch(Keys.Back, 13, 1), - new KeyMatch(Keys.Insert, 14, 1), - new KeyMatch(Keys.Home, 15, 1), - new KeyMatch(Keys.PageUp, 16, 1), - new KeyMatch(Keys.NumLock, 17, 1), - new KeyMatch(Keys.Divide, 18, 1), - new KeyMatch(Keys.Multiply, 19, 1), - new KeyMatch(Keys.Subtract, 20, 1), - - // Row 3 - new KeyMatch(Keys.Tab, 0, 2), - new KeyMatch(Keys.A, 1, 2), - new KeyMatch(Keys.Z, 2, 2), - new KeyMatch(Keys.E, 3, 2), - new KeyMatch(Keys.R, 5, 2), - new KeyMatch(Keys.T, 6, 2), - new KeyMatch(Keys.Y, 7, 2), - new KeyMatch(Keys.U, 8, 2), - new KeyMatch(Keys.I, 9, 2), - new KeyMatch(Keys.O, 10, 2), - new KeyMatch(Keys.P, 11, 2), - new KeyMatch(Keys.OemQuotes, 12, 2), - new KeyMatch(Keys.Oem6, 13, 2), - new KeyMatch(Keys.Delete, 14, 2), - new KeyMatch(Keys.End, 15, 2), - new KeyMatch(Keys.Next, 16, 2), - new KeyMatch(Keys.NumPad7, 17, 2), - new KeyMatch(Keys.NumPad8, 18, 2), - new KeyMatch(Keys.NumPad9, 19, 2), - new KeyMatch(Keys.Add, 20, 2), - - // Row 4 - new KeyMatch(Keys.Capital, 0, 3), - new KeyMatch(Keys.Q, 1, 3), - new KeyMatch(Keys.S, 3, 3), - new KeyMatch(Keys.D, 4, 3), - new KeyMatch(Keys.F, 5, 3), - new KeyMatch(Keys.G, 6, 3), - new KeyMatch(Keys.H, 7, 3), - new KeyMatch(Keys.J, 8, 3), - new KeyMatch(Keys.K, 9, 3), - new KeyMatch(Keys.L, 10, 3), - new KeyMatch(Keys.M, 11, 3), - new KeyMatch(Keys.Oem7, 12, 3), - new KeyMatch(Keys.Oem5, 13, 3), - new KeyMatch(Keys.Return, 14, 3), - new KeyMatch(Keys.NumPad4, 17, 3), - new KeyMatch(Keys.NumPad5, 18, 3), - new KeyMatch(Keys.NumPad6, 19, 3), - - // Row 5 - new KeyMatch(Keys.LShiftKey, 1, 4), - new KeyMatch(Keys.OemBackslash, 2, 4), - new KeyMatch(Keys.W, 2, 4), - new KeyMatch(Keys.X, 3, 4), - new KeyMatch(Keys.C, 4, 4), - new KeyMatch(Keys.V, 5, 4), - new KeyMatch(Keys.B, 6, 4), - new KeyMatch(Keys.N, 7, 4), - new KeyMatch(Keys.OemQuestion, 8, 4), - new KeyMatch(Keys.Oemcomma, 9, 4), - new KeyMatch(Keys.OemPeriod, 10, 4), - new KeyMatch(Keys.OemQuestion, 11, 4), - new KeyMatch(Keys.RShiftKey, 13, 4), - new KeyMatch(Keys.Up, 15, 4), - new KeyMatch(Keys.NumPad1, 17, 4), - new KeyMatch(Keys.NumPad2, 18, 4), - new KeyMatch(Keys.NumPad3, 19, 4), - // Both returns return "Return" (Yes...) - // new OrionKey(System.Windows.Forms.Keys.Return, 20, 4), - - // Row 6 - new KeyMatch(Keys.LControlKey, 0, 5), - new KeyMatch(Keys.LWin, 1, 5), - new KeyMatch(Keys.LMenu, 3, 5), - new KeyMatch(Keys.Space, 6, 5), - new KeyMatch(Keys.RMenu, 11, 5), - new KeyMatch(Keys.RWin, 12, 5), - new KeyMatch(Keys.Apps, 13, 5), - new KeyMatch(Keys.RControlKey, 14, 5), - new KeyMatch(Keys.Left, 15, 5), - new KeyMatch(Keys.Down, 16, 5), - new KeyMatch(Keys.Right, 17, 5), - new KeyMatch(Keys.NumPad0, 18, 5), - new KeyMatch(Keys.Decimal, 19, 5) - }; - - #endregion - } - - public static List QwertyLayout { get; set; } - public static List QwertzLayout { get; set; } - public static List AzertyLayout { get; set; } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyboardNames.cs b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyboardNames.cs deleted file mode 100644 index 2d8758d5f..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/KeyboardNames.cs +++ /dev/null @@ -1,121 +0,0 @@ -namespace Artemis.DeviceProviders.Logitech.Utilities -{ - public enum KeyboardNames - { - ESC = 0x01, - F1 = 0x3b, - F2 = 0x3c, - F3 = 0x3d, - F4 = 0x3e, - F5 = 0x3f, - F6 = 0x40, - F7 = 0x41, - F8 = 0x42, - F9 = 0x43, - F10 = 0x44, - F11 = 0x57, - F12 = 0x58, - PRINT_SCREEN = 0x137, - SCROLL_LOCK = 0x46, - PAUSE_BREAK = 0x45, - TILDE = 0x29, - ONE = 0x02, - TWO = 0x03, - THREE = 0x04, - FOUR = 0x05, - FIVE = 0x06, - SIX = 0x07, - SEVEN = 0x08, - EIGHT = 0x09, - NINE = 0x0A, - ZERO = 0x0B, - MINUS = 0x0C, - EQUALS = 0x0D, - BACKSPACE = 0x0E, - INSERT = 0x152, - HOME = 0x147, - PAGE_UP = 0x149, - NUM_LOCK = 0x145, - NUM_SLASH = 0x135, - NUM_ASTERISK = 0x37, - NUM_MINUS = 0x4A, - TAB = 0x0F, - Q = 0x10, - W = 0x11, - E = 0x12, - R = 0x13, - T = 0x14, - Y = 0x15, - U = 0x16, - I = 0x17, - O = 0x18, - P = 0x19, - OPEN_BRACKET = 0x1A, - CLOSE_BRACKET = 0x1B, - BACKSLASH = 0x2B, - KEYBOARD_DELETE = 0x153, - END = 0x14F, - PAGE_DOWN = 0x151, - NUM_SEVEN = 0x47, - NUM_EIGHT = 0x48, - NUM_NINE = 0x49, - NUM_PLUS = 0x4E, - CAPS_LOCK = 0x3A, - A = 0x1E, - S = 0x1F, - D = 0x20, - F = 0x21, - G = 0x22, - H = 0x23, - J = 0x24, - K = 0x25, - L = 0x26, - SEMICOLON = 0x27, - APOSTROPHE = 0x28, - ENTER = 0x1C, - NUM_FOUR = 0x4B, - NUM_FIVE = 0x4C, - NUM_SIX = 0x4D, - LEFT_SHIFT = 0x2A, - Z = 0x2C, - X = 0x2D, - C = 0x2E, - V = 0x2F, - B = 0x30, - N = 0x31, - M = 0x32, - COMMA = 0x33, - PERIOD = 0x34, - FORWARD_SLASH = 0x35, - RIGHT_SHIFT = 0x36, - ARROW_UP = 0x148, - NUM_ONE = 0x4F, - NUM_TWO = 0x50, - NUM_THREE = 0x51, - NUM_ENTER = 0x11C, - LEFT_CONTROL = 0x1D, - LEFT_WINDOWS = 0x15B, - LEFT_ALT = 0x38, - SPACE = 0x39, - RIGHT_ALT = 0x138, - RIGHT_WINDOWS = 0x15C, - APPLICATION_SELECT = 0x15D, - RIGHT_CONTROL = 0x11D, - ARROW_LEFT = 0x14B, - ARROW_DOWN = 0x150, - ARROW_RIGHT = 0x14D, - NUM_ZERO = 0x52, - NUM_PERIOD = 0x53, - G_1 = 0xFFF1, - G_2 = 0xFFF2, - G_3 = 0xFFF3, - G_4 = 0xFFF4, - G_5 = 0xFFF5, - G_6 = 0xFFF6, - G_7 = 0xFFF7, - G_8 = 0xFFF8, - G_9 = 0xFFF9, - G_LOGO = 0xFFFF1, - G_BADGE = 0xFFFF2 - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/LogitechGSDK.cs b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/LogitechGSDK.cs deleted file mode 100644 index a5a81a558..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/LogitechGSDK.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System.Runtime.InteropServices; -using System.Text; - -namespace Artemis.DeviceProviders.Logitech.Utilities -{ - public class LogitechGSDK - { - //LED SDK - private const int LOGI_DEVICETYPE_MONOCHROME_ORD = 0; - private const int LOGI_DEVICETYPE_RGB_ORD = 1; - private const int LOGI_DEVICETYPE_PERKEY_RGB_ORD = 2; - - public const int LOGI_DEVICETYPE_MONOCHROME = 1 << LOGI_DEVICETYPE_MONOCHROME_ORD; - public const int LOGI_DEVICETYPE_RGB = 1 << LOGI_DEVICETYPE_RGB_ORD; - public const int LOGI_DEVICETYPE_PERKEY_RGB = 1 << LOGI_DEVICETYPE_PERKEY_RGB_ORD; - public const int LOGI_LED_BITMAP_WIDTH = 21; - public const int LOGI_LED_BITMAP_HEIGHT = 6; - public const int LOGI_LED_BITMAP_BYTES_PER_KEY = 4; - - public const int LOGI_LED_BITMAP_SIZE = - LOGI_LED_BITMAP_WIDTH*LOGI_LED_BITMAP_HEIGHT*LOGI_LED_BITMAP_BYTES_PER_KEY; - - public const int LOGI_LED_DURATION_INFINITE = 0; - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedInit(); - - //Config option functions - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedGetConfigOptionNumber([MarshalAs(UnmanagedType.LPWStr)] string configPath, - ref double defaultNumber); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedGetConfigOptionBool([MarshalAs(UnmanagedType.LPWStr)] string configPath, - ref bool defaultRed); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedGetConfigOptionColor([MarshalAs(UnmanagedType.LPWStr)] string configPath, - ref int defaultRed, ref int defaultGreen, ref int defaultBlue); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedGetConfigOptionKeyInput([MarshalAs(UnmanagedType.LPWStr)] string configPath, - StringBuilder buffer, int bufsize); - - ///////////////////// - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetTargetDevice(int targetDevice); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedGetSdkVersion(ref int majorNum, ref int minorNum, ref int buildNum); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSaveCurrentLighting(); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetLighting(int redPercentage, int greenPercentage, int bluePercentage); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedRestoreLighting(); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedFlashLighting(int redPercentage, int greenPercentage, int bluePercentage, - int milliSecondsDuration, int milliSecondsInterval); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedPulseLighting(int redPercentage, int greenPercentage, int bluePercentage, - int milliSecondsDuration, int milliSecondsInterval); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedStopEffects(); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedExcludeKeysFromBitmap(KeyboardNames[] keyList, int listCount); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetLightingFromBitmap(byte[] bitmap); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetLightingForKeyWithScanCode(int keyCode, int redPercentage, - int greenPercentage, int bluePercentage); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetLightingForKeyWithHidCode(int keyCode, int redPercentage, - int greenPercentage, int bluePercentage); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetLightingForKeyWithQuartzCode(int keyCode, int redPercentage, - int greenPercentage, int bluePercentage); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSetLightingForKeyWithKeyName(KeyboardNames keyCode, int redPercentage, - int greenPercentage, int bluePercentage); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedSaveLightingForKey(KeyboardNames keyName); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedRestoreLightingForKey(KeyboardNames keyName); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedFlashSingleKey(KeyboardNames keyName, int redPercentage, int greenPercentage, - int bluePercentage, int msDuration, int msInterval); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedPulseSingleKey(KeyboardNames keyName, int startRedPercentage, - int startGreenPercentage, int startBluePercentage, int finishRedPercentage, int finishGreenPercentage, - int finishBluePercentage, int msDuration, bool isInfinite); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern bool LogiLedStopEffectsOnKey(KeyboardNames keyName); - - [DllImport("LogitechLedEnginesWrapper ", CallingConvention = CallingConvention.Cdecl)] - public static extern void LogiLedShutdown(); - } -} \ No newline at end of file diff --git a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs deleted file mode 100644 index 8057695f0..000000000 --- a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.Runtime.InteropServices; - -namespace Artemis.DeviceProviders.Logitech.Utilities -{ - public static class OrionUtilities - { - public static byte[] BitmapToByteArray(Bitmap b, KeyMapping[] keymappings = null) - { - if (b.Width > 21 || b.Height > 6) - b = ResizeImage(b, 21, 6); - - var rect = new Rectangle(0, 0, b.Width, b.Height); - var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat); - - var depth = Image.GetPixelFormatSize(b.PixelFormat); - var step = depth / 8; - var pixels = new byte[21 * 6 * step]; - var iptr = bitmapData.Scan0; - - // Copy data from pointer to array - Marshal.Copy(iptr, pixels, 0, pixels.Length); - - if (keymappings == null) - return pixels; - - var remapped = new byte[pixels.Length]; - - // Every key is 4 bytes - for (var i = 0; i <= pixels.Length / 4; i++) - { - var firstSByte = keymappings[i].Source * 4; - var firstTByte = keymappings[i].Target * 4; - - for (var j = 0; j < 4; j++) - remapped[firstTByte + j] = pixels[firstSByte + j]; - } - - b.Dispose(); - return remapped; - } - - /// - /// Resize the image to the specified width and height. - /// - /// The image to resize. - /// The width to resize to. - /// The height to resize to. - /// The resized image. - public static Bitmap ResizeImage(Image image, int width, int height) - { - var destRect = new Rectangle(0, 0, width, height); - var destImage = new Bitmap(width, height); - - destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - - using (var graphics = Graphics.FromImage(destImage)) - { - graphics.CompositingMode = CompositingMode.SourceCopy; - graphics.CompositingQuality = CompositingQuality.HighQuality; - - graphics.SmoothingMode = SmoothingMode.AntiAlias; - graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; - - // TODO: Make configurable - // Prevents light bleed - graphics.InterpolationMode = InterpolationMode.NearestNeighbor; - // Soft/semi-transparent keys - //graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; - - using (var wrapMode = new ImageAttributes()) - { - wrapMode.SetWrapMode(WrapMode.TileFlipXY); - graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); - } - } - - return destImage; - } - - public struct KeyMapping - { - public KeyMapping(int source, int target) - { - Source = source; - Target = target; - } - - public int Source { get; set; } - public int Target { get; set; } - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs b/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs deleted file mode 100644 index e2e89924f..000000000 --- a/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System.Drawing; -using System.Linq; -using System.Windows; -using System.Windows.Forms; -using Artemis.DAL; -using Artemis.DeviceProviders.Logitech.Utilities; -using Artemis.DeviceProviders.Razer.Utilities; -using Artemis.Properties; -using Artemis.Settings; -using Corale.Colore.Core; -using Corale.Colore.Razer; -using Constants = Corale.Colore.Razer.Keyboard.Constants; - -namespace Artemis.DeviceProviders.Razer -{ - public class BlackWidow : KeyboardProvider - { - private GeneralSettings _generalSettings; - - public BlackWidow() - { - Name = "Razer BlackWidow Chroma"; - Slug = "razer-blackwidow-chroma"; - CantEnableText = "Couldn't connect to your Razer BlackWidow Chroma.\n" + - "Please check your cables and try updating Razer Synapse.\n\n" + - "If needed, you can select a different keyboard in Artemis under settings."; - - Height = Constants.MaxRows; - Width = Constants.MaxColumns; - PreviewSettings = new PreviewSettings(new Rect(26, 56, 906, 234), Resources.blackwidow); - _generalSettings = SettingsProvider.Load(); - } - - public override bool CanEnable() - { - if (!Chroma.SdkAvailable) - return false; - - // Some people have Synapse installed, but not a Chroma keyboard, deal with this - Chroma.Instance.Initialize(); - var blackWidowFound = Chroma.Instance.Query(Devices.Blackwidow).Connected; - var blackWidowTeFound = Chroma.Instance.Query(Devices.BlackwidowTe).Connected; - Chroma.Instance.Uninitialize(); - - return blackWidowFound || blackWidowTeFound; - } - - public override void Enable() - { - Chroma.Instance.Initialize(); - } - - public override void Disable() - { - Chroma.Instance.Uninitialize(); - } - - public override void DrawBitmap(Bitmap bitmap) - { - var razerArray = RazerUtilities.BitmaptoKeyboardEffect(bitmap, Height, Width); - Chroma.Instance.Keyboard.SetCustom(razerArray); - } - - public override KeyMatch? GetKeyPosition(Keys keyCode) - { - // TODO: Needs it's own keymap or a way to get it from the Chroma SDK - switch (_generalSettings.Layout) - { - case "Qwerty": - return KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - case "Qwertz": - return KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); - default: - return KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); - } - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Razer/Firefly.cs b/Artemis/Artemis/DeviceProviders/Razer/Firefly.cs deleted file mode 100644 index 224783e2a..000000000 --- a/Artemis/Artemis/DeviceProviders/Razer/Firefly.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Artemis.Settings; -using Artemis.DAL; -using System; -using System.Drawing; -using Corale.Colore.Core; -using Corale.Colore.Razer; -using Ninject.Extensions.Logging; -using Artemis.DeviceProviders.Razer.Utilities; - -namespace Artemis.DeviceProviders.Razer -{ - public class Firefly : DeviceProvider - { - private GeneralSettings _generalSettings; - public ILogger Logger { get; set; } - public Firefly(ILogger logger) - { - Logger = logger; - Type = DeviceType.Mousemat; - _generalSettings = SettingsProvider.Load(); - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - - public override bool TryEnable() - { - if (!Chroma.SdkAvailable) - return false; - - - // Some people have Synapse installed, but not a Chroma keyboard, deal with this - Chroma.Instance.Initialize(); - CanUse = Chroma.Instance.Query(Devices.Firefly).Connected; - return CanUse; - } - - public override void UpdateDevice(Bitmap bitmap) - { - if (Chroma.SdkAvailable && Chroma.Instance.Initialized) - { - var razerArray = RazerUtilities.BitmaptoMousePadEffect(bitmap); - Chroma.Instance.Mousepad.SetCustom(razerArray); - } - return; - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Razer/Mamba.cs b/Artemis/Artemis/DeviceProviders/Razer/Mamba.cs deleted file mode 100644 index f7054f682..000000000 --- a/Artemis/Artemis/DeviceProviders/Razer/Mamba.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Artemis.Settings; -using Artemis.DAL; -using System; -using System.Drawing; -using Corale.Colore.Core; -using Corale.Colore.Razer; -using Ninject.Extensions.Logging; -using Artemis.DeviceProviders.Razer.Utilities; - -namespace Artemis.DeviceProviders.Razer -{ - public class Mamba : DeviceProvider - { - private GeneralSettings _generalSettings; - public ILogger Logger { get; set; } - public Mamba(ILogger logger) - { - Logger = logger; - Type = DeviceType.Mouse; - _generalSettings = SettingsProvider.Load(); - } - - public override void Disable() - { - throw new NotSupportedException("Can only disable a keyboard"); - } - - public override bool TryEnable() - { - if (!Chroma.SdkAvailable) - return false; - - - // Some people have Synapse installed, but not a Chroma keyboard, deal with this - Chroma.Instance.Initialize(); - CanUse = Chroma.Instance.Query(Devices.Mamba).Connected || Chroma.Instance.Query(Devices.MambaTe).Connected; - return CanUse; - } - - public override void UpdateDevice(Bitmap bitmap) - { - if (Chroma.SdkAvailable && Chroma.Instance.Initialized) - { - var razerArray = RazerUtilities.BitmaptoMouseEffect(bitmap); - Chroma.Instance.Mouse.SetCustom(razerArray); - } - return; - } - } -} diff --git a/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs b/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs deleted file mode 100644 index 2b2265b16..000000000 --- a/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Drawing; -using Artemis.Utilities; -using Color = Corale.Colore.Core.Color; -using Corale.Colore; - -namespace Artemis.DeviceProviders.Razer.Utilities -{ - public static class RazerUtilities - { - public static Corale.Colore.Razer.Keyboard.Effects.Custom BitmaptoKeyboardEffect(Bitmap b, int height, int width) - { - - var keyboardGrid = Corale.Colore.Razer.Keyboard.Effects.Custom.Create(); - // Resize the bitmap - using (b = ImageUtilities.ResizeImage(b, width, height)) - { - // Map the bytes to the grid - for (var x = 0; x < b.Width; x++) - { - for (var y = 0; y < b.Height; y++) - { - var c = b.GetPixel(x, y); - keyboardGrid[y, x] = new Color(c.R, c.G, c.B); - } - } - - return keyboardGrid; - } - } - - public static Corale.Colore.Razer.Mousepad.Effects.Custom BitmaptoMousePadEffect(Bitmap b) - { - var mousePadGrid = Corale.Colore.Razer.Mousepad.Effects.Custom.Create(); - int pos = 0; - using (b = ImageUtilities.ResizeImage(b, 5, 5)) - { - b.RotateFlip(RotateFlipType.RotateNoneFlipX); - for (var x = 0; x < 5; x++) - { - var c = b.GetPixel(4, x); - mousePadGrid[pos++] = new Color(c.R, c.G, c.B); - } - for (var x = 0; x < 5; x++) - { - var c = b.GetPixel(x , 4); - mousePadGrid[pos++] = new Color(c.R, c.G, c.B); - } - for (var x = 0; x < 5; x++) - { - var c = b.GetPixel(0, x); - mousePadGrid[pos++] = new Color(c.R, c.G, c.B); - } - } - - return mousePadGrid; - } - - public static Corale.Colore.Razer.Mouse.Effects.Custom BitmaptoMouseEffect(Bitmap b) - { - var mouseGrid = Corale.Colore.Razer.Mouse.Effects.Custom.Create(); - using (b = ImageUtilities.ResizeImage(b, 3, 7)) - { - var c = b.GetPixel(1, 0); - int pos = 0; - mouseGrid[pos++] = new Color(c.R, c.G, c.B); - mouseGrid[pos++] = new Color(c.R, c.G, c.B); - mouseGrid[pos++] = new Color(c.R, c.G, c.B); - mouseGrid[pos++] = new Color(c.R, c.G, c.B); - - for (var x = 0; x < 7; x++) - { - c = b.GetPixel(0, x); - mouseGrid[pos++] = new Color(c.R, c.G, c.B); - } - b.RotateFlip(RotateFlipType.RotateNoneFlipX); - for (var x = 0; x < 7; x++) - { - c = b.GetPixel(2, x); - mouseGrid[pos++] = new Color(c.R, c.G, c.B); - } - - } - return mouseGrid; - } - } -} \ No newline at end of file diff --git a/Artemis/Artemis/Dialogs/MarkdownDialog.xaml b/Artemis/Artemis/Dialogs/MarkdownDialog.xaml deleted file mode 100644 index a038df3a8..000000000 --- a/Artemis/Artemis/Dialogs/MarkdownDialog.xaml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - -