1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Fixed rename duplicating profiles, closes #362

Fixed delete leaving the profile select empty
Added a G810-specific keymap
This commit is contained in:
SpoinkyNL 2017-05-21 11:19:47 +02:00
parent 91e7f37d92
commit 7eec19eccf
14 changed files with 712 additions and 253 deletions

View File

@ -340,6 +340,7 @@
<Compile Include="DeviceProviders\Logitech\G810.cs" /> <Compile Include="DeviceProviders\Logitech\G810.cs" />
<Compile Include="DeviceProviders\Logitech\LogitechGeneric.cs" /> <Compile Include="DeviceProviders\Logitech\LogitechGeneric.cs" />
<Compile Include="DeviceProviders\Logitech\LogitechKeyboard.cs" /> <Compile Include="DeviceProviders\Logitech\LogitechKeyboard.cs" />
<Compile Include="DeviceProviders\Logitech\Utilities\KeyMapG810.cs" />
<Compile Include="Dialogs\MarkdownDialog.xaml.cs"> <Compile Include="Dialogs\MarkdownDialog.xaml.cs">
<DependentUpon>MarkdownDialog.xaml</DependentUpon> <DependentUpon>MarkdownDialog.xaml</DependentUpon>
</Compile> </Compile>

View File

@ -102,12 +102,16 @@ namespace Artemis.DAL
if (string.IsNullOrEmpty(name)) if (string.IsNullOrEmpty(name))
return; return;
// Remove the old profile // Store the profile path before it is renamed
DeleteProfile(profile); var oldPath = ProfileFolder + $@"\{profile.KeyboardSlug}\{profile.GameName}\{profile.Slug}.json";
// Update the profile, creating a new file // Update the profile, creating a new file
profile.Name = name; profile.Name = name;
AddOrUpdate(profile); AddOrUpdate(profile);
// Remove the file with the old name
if (File.Exists(oldPath))
File.Delete(oldPath);
} }
public static void DeleteProfile(ProfileModel prof) public static void DeleteProfile(ProfileModel prof)

View File

@ -23,9 +23,16 @@ namespace Artemis.DeviceProviders.Corsair
public override bool TryEnable() public override bool TryEnable()
{ {
CanUse = CanInitializeSdk(); try
if (CanUse && !CueSDK.IsInitialized) {
CueSDK.Initialize(); CanUse = CanInitializeSdk();
if (CanUse && !CueSDK.IsInitialized)
CueSDK.Initialize();
}
catch (Exception)
{
CanUse = false;
}
Logger.Debug("Attempted to enable Corsair headset. CanUse: {0}", CanUse); Logger.Debug("Attempted to enable Corsair headset. CanUse: {0}", CanUse);
@ -69,4 +76,4 @@ namespace Artemis.DeviceProviders.Corsair
return false; return false;
} }
} }
} }

View File

@ -23,9 +23,16 @@ namespace Artemis.DeviceProviders.Corsair
public override bool TryEnable() public override bool TryEnable()
{ {
CanUse = CanInitializeSdk(); try
if (CanUse && !CueSDK.IsInitialized) {
CueSDK.Initialize(); CanUse = CanInitializeSdk();
if (CanUse && !CueSDK.IsInitialized)
CueSDK.Initialize();
}
catch (Exception)
{
CanUse = false;
}
Logger.Debug("Attempted to enable Corsair mice. CanUse: {0}", CanUse); Logger.Debug("Attempted to enable Corsair mice. CanUse: {0}", CanUse);

View File

@ -23,9 +23,16 @@ namespace Artemis.DeviceProviders.Corsair
public override bool TryEnable() public override bool TryEnable()
{ {
CanUse = CanInitializeSdk(); try
if (CanUse && !CueSDK.IsInitialized) {
CueSDK.Initialize(); CanUse = CanInitializeSdk();
if (CanUse && !CueSDK.IsInitialized)
CueSDK.Initialize();
}
catch (Exception)
{
CanUse = false;
}
Logger.Debug("Attempted to enable Corsair mousemat. CanUse: {0}", CanUse); Logger.Debug("Attempted to enable Corsair mousemat. CanUse: {0}", CanUse);

View File

@ -1,4 +1,5 @@
using System.Linq; using System.Drawing;
using System.Linq;
using System.Windows; using System.Windows;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.DAL; using Artemis.DAL;
@ -20,23 +21,68 @@ namespace Artemis.DeviceProviders.Logitech
"Please check your cables and updating the Logitech Gaming Software\n" + "Please check your cables and updating the Logitech Gaming Software\n" +
"A minimum version of 8.81.15 is required.\n\n" + "A minimum version of 8.81.15 is required.\n\n" +
"If needed, you can select a different keyboard in Artemis under settings."; "If needed, you can select a different keyboard in Artemis under settings.";
Height = 6; Height = 7;
Width = 21; Width = 21;
PreviewSettings = new PreviewSettings(new Rect(19, 70, 1010, 269), Resources.g810); PreviewSettings = new PreviewSettings(new Rect(19, 36, 1010, 304), Resources.g810);
_generalSettings = SettingsProvider.Load<GeneralSettings>(); _generalSettings = SettingsProvider.Load<GeneralSettings>();
} }
/// <summary>
/// The G910 also updates the G-logo, G-badge and G-keys
/// </summary>
/// <param name="bitmap"></param>
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) public override KeyMatch? GetKeyPosition(Keys keyCode)
{ {
KeyMatch value;
switch (_generalSettings.Layout) switch (_generalSettings.Layout)
{ {
case "Qwerty": case "Qwerty":
return KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); value = KeyMap.QwertyLayout.FirstOrDefault(k => k.KeyCode == keyCode);
break;
case "Qwertz": case "Qwertz":
return KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode); value = KeyMap.QwertzLayout.FirstOrDefault(k => k.KeyCode == keyCode);
break;
default: default:
return KeyMap.AzertyLayout.FirstOrDefault(k => k.KeyCode == keyCode); 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);
} }
} }
} }

View File

@ -64,7 +64,8 @@ namespace Artemis.DeviceProviders.Logitech
g.DrawImage(bitmap, new Rectangle(0, 0, 84, 24), new Rectangle(4, 4, 84, 24), GraphicsUnit.Pixel); g.DrawImage(bitmap, new Rectangle(0, 0, 84, 24), new Rectangle(4, 4, 84, 24), GraphicsUnit.Pixel);
} }
base.DrawBitmap(croppedBitmap); LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB);
LogitechGSDK.LogiLedSetLightingFromBitmap(OrionUtilities.BitmapToByteArray(bitmap, G910Keymappings));
} }
using (var resized = OrionUtilities.ResizeImage(bitmap, 22, 7)) using (var resized = OrionUtilities.ResizeImage(bitmap, 22, 7))
@ -88,14 +89,147 @@ namespace Artemis.DeviceProviders.Logitech
} }
} }
private void SetLogitechColorFromCoordinates(Bitmap bitmap, KeyboardNames key, int x, int y) // These mappings are used by the G910 to fix alignments
public static OrionUtilities.KeyMapping[] G910Keymappings =
{ {
var color = bitmap.GetPixel(x, y); // First row
var rPer = (int) Math.Round(color.R / 2.55); new OrionUtilities.KeyMapping(0, 0),
var gPer = (int) Math.Round(color.G / 2.55); new OrionUtilities.KeyMapping(1, 1),
var bPer = (int) Math.Round(color.B / 2.55); 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),
LogitechGSDK.LogiLedSetLightingForKeyWithKeyName(key, rPer, gPer, bPer); // 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)
};
} }
} }

View File

@ -1,55 +1,55 @@
using System; //using System;
using System.Drawing; //using System.Drawing;
using Artemis.DeviceProviders.Logitech.Utilities; //using Artemis.DeviceProviders.Logitech.Utilities;
using Ninject.Extensions.Logging; //using Ninject.Extensions.Logging;
//
namespace Artemis.DeviceProviders.Logitech //namespace Artemis.DeviceProviders.Logitech
{ //{
// TODO: Handle shutdown, maybe implement Disable() afterall? // // TODO: Handle shutdown, maybe implement Disable() afterall?
public class LogitechGeneric : DeviceProvider // public class LogitechGeneric : DeviceProvider
{ // {
/// <summary> // /// <summary>
/// A generic Logitech DeviceProvider. Because the Logitech SDK currently doesn't allow specific // /// 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..) // /// device targeting (only very broad per-key-RGB and full RGB etc..)
/// </summary> // /// </summary>
public LogitechGeneric(ILogger logger) // public LogitechGeneric(ILogger logger)
{ // {
Logger = logger; // Logger = logger;
Type = DeviceType.Generic; // Type = DeviceType.Generic;
} // }
//
public ILogger Logger { get; set; } // public ILogger Logger { get; set; }
//
public override void UpdateDevice(Bitmap bitmap) // public override void UpdateDevice(Bitmap bitmap)
{ // {
if (!CanUse || bitmap == null) // if (!CanUse || bitmap == null)
return; // return;
//
var col = bitmap.GetPixel(bitmap.Width/2, bitmap.Height/2); // var col = bitmap.GetPixel(bitmap.Width/2, bitmap.Height/2);
LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_RGB); // LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_RGB);
LogitechGSDK.LogiLedSetLighting((int) (col.R/2.55), (int) (col.G/2.55), (int) (col.B/2.55)); // LogitechGSDK.LogiLedSetLighting((int) (col.R/2.55), (int) (col.G/2.55), (int) (col.B/2.55));
} // }
//
public override bool TryEnable() // public override bool TryEnable()
{ // {
var majorNum = 0; // var majorNum = 0;
var minorNum = 0; // var minorNum = 0;
var buildNum = 0; // var buildNum = 0;
//
LogitechGSDK.LogiLedInit(); // LogitechGSDK.LogiLedInit();
LogitechGSDK.LogiLedGetSdkVersion(ref majorNum, ref minorNum, ref buildNum); // LogitechGSDK.LogiLedGetSdkVersion(ref majorNum, ref minorNum, ref buildNum);
//
// Turn it into one long number... // // Turn it into one long number...
var version = int.Parse($"{majorNum}{minorNum}{buildNum}"); // var version = int.Parse($"{majorNum}{minorNum}{buildNum}");
CanUse = version >= 88115; // CanUse = version >= 88115;
Logger.Debug("Attempted to enable Logitech generic device. CanUse: {0}", CanUse); // Logger.Debug("Attempted to enable Logitech generic device. CanUse: {0}", CanUse);
//
return CanUse; // return CanUse;
} // }
//
public override void Disable() // public override void Disable()
{ // {
throw new NotSupportedException("Can only disable a keyboard"); // throw new NotSupportedException("Can only disable a keyboard");
} // }
} // }
} //}

View File

@ -1,4 +1,5 @@
using System.Drawing; using System;
using System.Drawing;
using System.Threading; using System.Threading;
using Artemis.DeviceProviders.Logitech.Utilities; using Artemis.DeviceProviders.Logitech.Utilities;
using Artemis.Utilities.DataReaders; using Artemis.Utilities.DataReaders;
@ -12,18 +13,7 @@ namespace Artemis.DeviceProviders.Logitech
{ {
// Just to be sure, restore the Logitech DLL registry key // Just to be sure, restore the Logitech DLL registry key
DllManager.RestoreLogitechDll(); DllManager.RestoreLogitechDll();
// Check to see if VC++ 2012 x64 is installed.
if (Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}") == null)
{
CantEnableText = "Couldn't connect to your Logitech keyboard.\n" +
"The Visual C++ 2012 Redistributable v11.0.61030.0 could not be found, which is required.\n" +
"Please download it by going to the following URL (link also in wiki):\n\n" +
"https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe";
return false;
}
int majorNum = 0, minorNum = 0, buildNum = 0; int majorNum = 0, minorNum = 0, buildNum = 0;
LogitechGSDK.LogiLedInit(); LogitechGSDK.LogiLedInit();
@ -58,10 +48,14 @@ namespace Artemis.DeviceProviders.Logitech
LogitechGSDK.LogiLedShutdown(); LogitechGSDK.LogiLedShutdown();
} }
public override void DrawBitmap(Bitmap bitmap) protected void SetLogitechColorFromCoordinates(Bitmap bitmap, KeyboardNames key, int x, int y)
{ {
LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_PERKEY_RGB); var color = bitmap.GetPixel(x, y);
LogitechGSDK.LogiLedSetLightingFromBitmap(OrionUtilities.BitmapToByteArray(bitmap)); 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);
} }
} }
} }

View File

@ -132,7 +132,7 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
new KeyMatch(Keys.Decimal, 19, 5) new KeyMatch(Keys.Decimal, 19, 5)
}; };
#endregion #endregion
#region Qwertz #region Qwertz
@ -257,7 +257,7 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
new KeyMatch(Keys.Decimal, 19, 5) new KeyMatch(Keys.Decimal, 19, 5)
}; };
#endregion #endregion
#region Azerty #region Azerty
@ -384,9 +384,9 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
#endregion #endregion
} }
public static List<KeyMatch> QwertyLayout { get; set; } public static List<KeyMatch> QwertyLayout { get; set; }
public static List<KeyMatch> QwertzLayout { get; set; } public static List<KeyMatch> QwertzLayout { get; set; }
public static List<KeyMatch> AzertyLayout { get; set; } public static List<KeyMatch> AzertyLayout { get; set; }
} }
} }

View File

@ -0,0 +1,392 @@
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<KeyMatch>
{
// 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<KeyMatch>
{
// 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<KeyMatch>
{
// 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<KeyMatch> QwertyLayout { get; set; }
public static List<KeyMatch> QwertzLayout { get; set; }
public static List<KeyMatch> AzertyLayout { get; set; }
}
}

View File

@ -7,149 +7,7 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
{ {
public static class OrionUtilities public static class OrionUtilities
{ {
public static KeyMapping[] Keymappings = public static byte[] BitmapToByteArray(Bitmap b, KeyMapping[] keymappings = null)
{
// First row
new KeyMapping(0, 0),
new KeyMapping(1, 1),
new KeyMapping(2, 1),
new KeyMapping(3, 2),
new KeyMapping(4, 3),
new KeyMapping(5, 4),
new KeyMapping(6, 5),
new KeyMapping(7, 6),
new KeyMapping(8, 7),
new KeyMapping(9, 8),
new KeyMapping(10, 9),
new KeyMapping(11, 9),
new KeyMapping(12, 10),
new KeyMapping(13, 11),
new KeyMapping(13, 12),
new KeyMapping(14, 13),
new KeyMapping(15, 14),
new KeyMapping(16, 15),
new KeyMapping(17, 16),
new KeyMapping(18, 17),
new KeyMapping(19, 18),
// Second row
new KeyMapping(21, 21),
new KeyMapping(22, 22),
new KeyMapping(23, 23),
new KeyMapping(24, 24),
new KeyMapping(25, 25),
new KeyMapping(26, 26),
new KeyMapping(27, 27),
new KeyMapping(28, 28),
new KeyMapping(29, 29),
new KeyMapping(30, 30),
new KeyMapping(31, 31),
new KeyMapping(32, 32),
new KeyMapping(33, 33),
new KeyMapping(34, 34),
new KeyMapping(35, 35),
new KeyMapping(36, 36),
new KeyMapping(37, 37),
new KeyMapping(38, 38),
new KeyMapping(39, 39),
new KeyMapping(40, 40),
new KeyMapping(41, 41),
// Third row
new KeyMapping(42, 42),
new KeyMapping(43, 43),
new KeyMapping(44, 44),
new KeyMapping(45, 45),
new KeyMapping(46, 46),
new KeyMapping(47, 46),
new KeyMapping(48, 47),
new KeyMapping(49, 48),
new KeyMapping(50, 49),
new KeyMapping(51, 50),
new KeyMapping(52, 51),
new KeyMapping(53, 52),
new KeyMapping(54, 53),
new KeyMapping(54, 54),
new KeyMapping(55, 55),
new KeyMapping(56, 56),
new KeyMapping(57, 57),
new KeyMapping(58, 58),
new KeyMapping(59, 59),
new KeyMapping(60, 60),
new KeyMapping(61, 61),
new KeyMapping(62, 62),
// Fourth row
new KeyMapping(63, 63),
new KeyMapping(64, 64),
new KeyMapping(65, 65),
new KeyMapping(66, 65),
new KeyMapping(67, 66),
new KeyMapping(68, 67),
new KeyMapping(69, 68),
new KeyMapping(70, 69),
new KeyMapping(71, 70),
new KeyMapping(72, 71),
new KeyMapping(73, 72),
new KeyMapping(74, 73),
new KeyMapping(75, 74),
new KeyMapping(76, 75),
new KeyMapping(76, 76),
new KeyMapping(78, 77),
new KeyMapping(79, 78),
new KeyMapping(79, 79),
new KeyMapping(80, 80),
new KeyMapping(81, 81),
new KeyMapping(82, 82),
// Fifth row
new KeyMapping(84, 84),
new KeyMapping(85, 85),
new KeyMapping(86, 86),
new KeyMapping(87, 87),
new KeyMapping(88, 88),
new KeyMapping(89, 89),
new KeyMapping(90, 90),
new KeyMapping(91, 91),
new KeyMapping(92, 92),
new KeyMapping(93, 93),
new KeyMapping(94, 94),
new KeyMapping(95, 95),
new KeyMapping(96, 96),
new KeyMapping(97, 97),
new KeyMapping(98, 98),
new KeyMapping(99, 99),
new KeyMapping(100, 100),
new KeyMapping(101, 101),
new KeyMapping(102, 102),
new KeyMapping(103, 103),
new KeyMapping(104, 104),
// Sixth row
new KeyMapping(105, 105),
new KeyMapping(106, 106),
new KeyMapping(107, 107),
new KeyMapping(108, 107),
new KeyMapping(109, 109),
new KeyMapping(110, 110),
new KeyMapping(111, 110),
new KeyMapping(112, 111),
new KeyMapping(113, 112),
new KeyMapping(114, 113),
new KeyMapping(115, 114),
new KeyMapping(116, 115),
new KeyMapping(115, 116), // ALTGR
new KeyMapping(116, 117),
new KeyMapping(117, 118),
new KeyMapping(118, 119),
new KeyMapping(119, 120),
new KeyMapping(120, 121),
new KeyMapping(121, 122),
new KeyMapping(122, 123),
new KeyMapping(124, 124)
};
public static byte[] BitmapToByteArray(Bitmap b, bool remap = true)
{ {
if (b.Width > 21 || b.Height > 6) if (b.Width > 21 || b.Height > 6)
b = ResizeImage(b, 21, 6); b = ResizeImage(b, 21, 6);
@ -158,23 +16,23 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat); var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat);
var depth = Image.GetPixelFormatSize(b.PixelFormat); var depth = Image.GetPixelFormatSize(b.PixelFormat);
var step = depth/8; var step = depth / 8;
var pixels = new byte[21*6*step]; var pixels = new byte[21 * 6 * step];
var iptr = bitmapData.Scan0; var iptr = bitmapData.Scan0;
// Copy data from pointer to array // Copy data from pointer to array
Marshal.Copy(iptr, pixels, 0, pixels.Length); Marshal.Copy(iptr, pixels, 0, pixels.Length);
if (!remap) if (keymappings == null)
return pixels; return pixels;
var remapped = new byte[pixels.Length]; var remapped = new byte[pixels.Length];
// Every key is 4 bytes // Every key is 4 bytes
for (var i = 0; i <= pixels.Length/4; i++) for (var i = 0; i <= pixels.Length / 4; i++)
{ {
var firstSByte = Keymappings[i].Source*4; var firstSByte = keymappings[i].Source * 4;
var firstTByte = Keymappings[i].Target*4; var firstTByte = keymappings[i].Target * 4;
for (var j = 0; j < 4; j++) for (var j = 0; j < 4; j++)
remapped[firstTByte + j] = pixels[firstSByte + j]; remapped[firstTByte + j] = pixels[firstSByte + j];
@ -234,4 +92,4 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
public int Target { get; set; } public int Target { get; set; }
} }
} }
} }

View File

@ -141,15 +141,22 @@ namespace Artemis.Models
public async Task RenameProfile(ProfileModel profileModel) public async Task RenameProfile(ProfileModel profileModel)
{ {
// Store the old name
var oldName = profileModel.Name;
var name = await GetValidProfileName("Rename profile", "Please enter a unique new profile name"); var name = await GetValidProfileName("Rename profile", "Please enter a unique new profile name");
// User cancelled // User cancelled
if (name == null) if (name == null)
return; return;
// MakeProfileUnique does a check but also modifies the profile, set the old name back
var doRename = await MakeProfileUnique(profileModel, name, profileModel.Name); var doRename = await MakeProfileUnique(profileModel, name, profileModel.Name);
var newName = profileModel.Name;
profileModel.Name = oldName;
if (!doRename) if (!doRename)
return; return;
ProfileProvider.RenameProfile(profileModel, profileModel.Name); ProfileProvider.RenameProfile(profileModel, newName);
} }
public async Task<ProfileModel> DuplicateProfile(ProfileModel selectedProfile) public async Task<ProfileModel> DuplicateProfile(ProfileModel selectedProfile)

View File

@ -96,10 +96,12 @@ namespace Artemis.Modules.Abstract
public void ChangeProfile(ProfileModel profileModel) public void ChangeProfile(ProfileModel profileModel)
{ {
if (!IsInitialized || Equals(profileModel, ProfileModel)) if (!IsInitialized)
return; return;
ProfileModel?.Deactivate(_luaManager);
ProfileModel = profileModel; ProfileModel = profileModel;
if (!IsOverlay) if (!IsOverlay)
ProfileModel?.Activate(_luaManager); ProfileModel?.Activate(_luaManager);
if (ProfileModel != null) if (ProfileModel != null)