diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index c9319d4da..2fcff35a3 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -274,7 +274,7 @@
-
+
@@ -383,6 +383,7 @@
+
@@ -409,6 +410,7 @@
+
@@ -448,6 +450,9 @@
Witcher3View.xaml
+
+ LayerEditorView.xaml
+
OverlaysView.xaml
@@ -597,6 +602,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/Artemis/Artemis/ArtemisBootstrapper.cs b/Artemis/Artemis/ArtemisBootstrapper.cs
index e0f82e4b6..dc80755b4 100644
--- a/Artemis/Artemis/ArtemisBootstrapper.cs
+++ b/Artemis/Artemis/ArtemisBootstrapper.cs
@@ -2,8 +2,6 @@
using System.Linq;
using System.Windows;
using System.Windows.Forms;
-using Artemis.Utilities;
-using Artemis.Utilities.LogitechDll;
using Artemis.ViewModels;
using Autofac;
using Caliburn.Micro;
diff --git a/Artemis/Artemis/Models/Interfaces/IGameDataModel.cs b/Artemis/Artemis/Models/Interfaces/GameDataModel.cs
similarity index 100%
rename from Artemis/Artemis/Models/Interfaces/IGameDataModel.cs
rename to Artemis/Artemis/Models/Interfaces/GameDataModel.cs
diff --git a/Artemis/Artemis/Models/Profiles/LayerModel.cs b/Artemis/Artemis/Models/Profiles/LayerModel.cs
index df4fd4186..1f254544b 100644
--- a/Artemis/Artemis/Models/Profiles/LayerModel.cs
+++ b/Artemis/Artemis/Models/Profiles/LayerModel.cs
@@ -1,22 +1,18 @@
using System;
using System.Collections.Generic;
using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Drawing.Imaging;
-using System.IO;
using System.Linq;
using System.Windows.Media;
-using System.Windows.Media.Imaging;
using Artemis.Models.Interfaces;
-using Artemis.Properties;
+using Artemis.Utilities;
using Newtonsoft.Json;
-using Color = System.Drawing.Color;
-using Pen = System.Drawing.Pen;
namespace Artemis.Models.Profiles
{
public class LayerModel
{
+ [JsonIgnore] private readonly LayerDrawer _drawer;
+
public LayerModel(string name, LayerType layerType)
{
Name = name;
@@ -27,56 +23,23 @@ namespace Artemis.Models.Profiles
Children = new List();
LayerConditions = new List();
LayerProperties = new List();
+
+ _drawer = new LayerDrawer(this);
}
public string Name { get; set; }
public LayerType LayerType { get; set; }
public LayerPropertiesModel LayerUserProperties { get; set; }
- [JsonIgnore]
- public LayerPropertiesModel LayerCalculatedProperties { get; }
-
public List Children { get; set; }
public List LayerConditions { get; set; }
public List LayerProperties { get; set; }
- public ImageSource LayerImage => GetPreviewImage();
- private BitmapImage GetPreviewImage()
- {
- var bitmap = new Bitmap(18, 18);
- using (var g = Graphics.FromImage(bitmap))
- {
- g.SmoothingMode = SmoothingMode.AntiAlias;
- if (LayerType == LayerType.Ellipse)
- {
- g.FillEllipse(new SolidBrush(LayerUserProperties.Colors.FirstOrDefault()), 0, 0, 18, 18);
- g.DrawEllipse(new Pen(Color.Black, 1), 0, 0, 17, 17);
- }
- else if (LayerType == LayerType.Rectangle)
- {
- g.FillRectangle(new SolidBrush(LayerUserProperties.Colors.FirstOrDefault()), 0, 0, 18, 18);
- g.DrawRectangle(new Pen(Color.Black, 1), 0, 0, 17, 17);
- }
- else
- {
- bitmap = Resources.folder;
- }
- }
+ [JsonIgnore]
+ public LayerPropertiesModel LayerCalculatedProperties { get; }
- using (var memory = new MemoryStream())
- {
- bitmap.Save(memory, ImageFormat.Png);
- memory.Position = 0;
-
- var bitmapImage = new BitmapImage();
- bitmapImage.BeginInit();
- bitmapImage.StreamSource = memory;
- bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
- bitmapImage.EndInit();
-
- return bitmapImage;
- }
- }
+ [JsonIgnore]
+ public ImageSource LayerImage => _drawer.GetPreviewImage();
public bool ConditionsMet(IGameDataModel dataModel)
{
@@ -95,10 +58,10 @@ namespace Artemis.Models.Profiles
DrawChildren(dataModel, g);
break;
case LayerType.Rectangle:
- DrawRectangle(g);
+ _drawer.DrawRectangle(g);
break;
case LayerType.Ellipse:
- DrawEllipse(g);
+ _drawer.DrawEllipse(g);
break;
default:
throw new ArgumentOutOfRangeException();
@@ -107,6 +70,7 @@ namespace Artemis.Models.Profiles
private void Update(IGameDataModel dataModel)
{
+ GeneralHelpers.CopyProperties(LayerCalculatedProperties, LayerUserProperties);
foreach (var dynamicProperty in LayerProperties)
dynamicProperty.ApplyProperty(dataModel, LayerUserProperties, LayerCalculatedProperties);
}
@@ -116,14 +80,6 @@ namespace Artemis.Models.Profiles
foreach (var layerModel in Children)
layerModel.Draw(dataModel, g);
}
-
- private void DrawRectangle(Graphics g)
- {
- }
-
- private void DrawEllipse(Graphics g)
- {
- }
}
public enum LayerType
diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs
index 63b8522f5..d85980ab8 100644
--- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs
+++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueDataModel.cs
@@ -1,9 +1,12 @@
-using Artemis.Models.Interfaces;
+using System.Collections.Generic;
+using Artemis.Models.Interfaces;
+using Artemis.Utilities;
namespace Artemis.Modules.Games.RocketLeague
{
internal class RocketLeagueDataModel : IGameDataModel
{
public int Boost { get; set; }
+ public List Properties { get; }
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs
index 301676bfb..f42a89928 100644
--- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs
+++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionDataModel.cs
@@ -1,30 +1,29 @@
- using System.Collections.Generic;
-using Artemis.Models.Interfaces;
+using Artemis.Models.Interfaces;
namespace Artemis.Modules.Games.TheDivision
{
public class TheDivisionDataModel : IGameDataModel
{
- public List DivisionPlayers { get; set; }
- public GrenadeState GrenadeState { get; set; }
- public bool LowAmmo { get; set; }
- public bool LowHp { get; set; }
-
public TheDivisionDataModel()
{
- DivisionPlayers = new List();
+ TestyTest = new TestTest();
}
+
+ public PlayerState PartyMember1 { get; set; }
+ public PlayerState PartyMember2 { get; set; }
+ public PlayerState PartyMember3 { get; set; }
+
+ public bool LowAmmo { get; set; }
+ public bool LowHp { get; set; }
+ public GrenadeState GrenadeState { get; set; }
+
+ public TestTest TestyTest { get; set; }
}
- public class DivisionPlayer
+ public class TestTest
{
- public int Id { get; set; }
- public PlayerState PlayerState { get; set; }
-
- public DivisionPlayer(int id)
- {
- Id = id;
- }
+ public string TestS { get; set; }
+ public int TestI { get; set; }
}
public enum GrenadeState
diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs
index b5b025e87..c231113d0 100644
--- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs
+++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs
@@ -1,14 +1,12 @@
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
-using System.Linq;
using Artemis.Managers;
using Artemis.Models;
using Artemis.Modules.Effects.TypeWave;
using Artemis.Utilities;
using Artemis.Utilities.Keyboard;
using Artemis.Utilities.LogitechDll;
-using CUE.NET;
namespace Artemis.Modules.Games.TheDivision
{
@@ -95,8 +93,6 @@ namespace Artemis.Modules.Games.TheDivision
DllManager.PlaceDll();
_dataModel = new TheDivisionDataModel();
- for (var i = 1; i < 5; i++)
- _dataModel.DivisionPlayers.Add(new DivisionPlayer(i));
MainManager.PipeServer.PipeMessage += PipeServerOnPipeMessage;
Initialized = true;
@@ -129,16 +125,21 @@ namespace Artemis.Modules.Games.TheDivision
if (keyCode >= 59 && keyCode <= 62)
{
var playerId = keyCode - 58;
- var playerDataModel = _dataModel.DivisionPlayers.FirstOrDefault(p => p.Id == playerId);
- if (playerDataModel == null)
- return;
+ PlayerState newState;
if (gPer > 10)
- playerDataModel.PlayerState = PlayerState.Online;
+ newState = PlayerState.Online;
else if (rPer > 10)
- playerDataModel.PlayerState = PlayerState.Hit;
+ newState = PlayerState.Hit;
else
- playerDataModel.PlayerState = PlayerState.Offline;
+ newState = PlayerState.Offline;
+
+ if (playerId == 1)
+ _dataModel.PartyMember1 = newState;
+ else if (playerId == 2)
+ _dataModel.PartyMember2 = newState;
+ else if (playerId == 3)
+ _dataModel.PartyMember3 = newState;
}
// R blinks white when low on ammo
else if (keyCode == 19)
@@ -180,26 +181,26 @@ namespace Artemis.Modules.Games.TheDivision
_hpRect.Colors = _dataModel.LowHp
? new List {Color.Red, Color.Orange}
- : new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) };
+ : new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
- if (_dataModel.DivisionPlayers[1].PlayerState == PlayerState.Offline)
+ if (_dataModel.PartyMember1 == PlayerState.Offline)
_p2.Colors = new List {Color.Gray, Color.White};
- else if (_dataModel.DivisionPlayers[1].PlayerState == PlayerState.Online)
- _p2.Colors = new List { Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) };
+ else if (_dataModel.PartyMember1 == PlayerState.Online)
+ _p2.Colors = new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
else
_p2.Colors = new List {Color.Red, Color.Orange};
- if (_dataModel.DivisionPlayers[2].PlayerState == PlayerState.Offline)
+ if (_dataModel.PartyMember2 == PlayerState.Offline)
_p3.Colors = new List {Color.Gray, Color.White};
- else if (_dataModel.DivisionPlayers[2].PlayerState == PlayerState.Online)
- _p3.Colors = new List { Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) };
+ else if (_dataModel.PartyMember2 == PlayerState.Online)
+ _p3.Colors = new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
else
_p3.Colors = new List {Color.Red, Color.Orange};
- if (_dataModel.DivisionPlayers[3].PlayerState == PlayerState.Offline)
+ if (_dataModel.PartyMember3 == PlayerState.Offline)
_p4.Colors = new List {Color.Gray, Color.White};
- else if (_dataModel.DivisionPlayers[3].PlayerState == PlayerState.Online)
- _p4.Colors = new List { Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45) };
+ else if (_dataModel.PartyMember3 == PlayerState.Online)
+ _p4.Colors = new List {Color.FromArgb(10, 255, 0), Color.FromArgb(80, 255, 45)};
else
_p4.Colors = new List {Color.Red, Color.Orange};
}
diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs
index 01f98cc6d..2f2c5383e 100644
--- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs
+++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs
@@ -17,10 +17,10 @@ namespace Artemis.Modules.Games.TheDivision
GameModel = new TheDivisionModel(mainManager, (TheDivisionSettings) GameSettings);
MainManager.EffectManager.EffectModels.Add(GameModel);
- ProfileEditor = new ProfileEditorViewModel(MainManager, GameModel);
+ ProfileEditor = new ProfileEditorViewModel(MainManager, GameModel);
}
- public ProfileEditorViewModel ProfileEditor { get; set; }
+ public ProfileEditorViewModel ProfileEditor { get; set; }
public static string Name => "The Division";
}
diff --git a/Artemis/Artemis/Utilities/GeneralHelpers.cs b/Artemis/Artemis/Utilities/GeneralHelpers.cs
index b83ed3751..cec2042fc 100644
--- a/Artemis/Artemis/Utilities/GeneralHelpers.cs
+++ b/Artemis/Artemis/Utilities/GeneralHelpers.cs
@@ -1,12 +1,12 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Diagnostics;
-using System.Linq;
using System.Reflection;
using System.Security.Principal;
-using System.Text;
-using System.Threading.Tasks;
using System.Windows;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Artemis.Utilities
{
@@ -37,12 +37,50 @@ namespace Artemis.Utilities
Environment.Exit(0);
}
- public static bool IsRunAsAdministrator()
- {
- var wi = WindowsIdentity.GetCurrent();
- var wp = new WindowsPrincipal(wi);
-
- return wp.IsInRole(WindowsBuiltInRole.Administrator);
+ public static bool IsRunAsAdministrator()
+ {
+ var wi = WindowsIdentity.GetCurrent();
+ var wp = new WindowsPrincipal(wi);
+
+ return wp.IsInRole(WindowsBuiltInRole.Administrator);
+ }
+
+ public static void CopyProperties(object dest, object src)
+ {
+ foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(src))
+ {
+ item.SetValue(dest, item.GetValue(src));
+ }
+ }
+
+ public static List GetPropertyMap(object o)
+ {
+ var res = new List();
+ // No point reinventing the wheel, just serialize it to JSON and parse that
+ var json = JObject.FromObject(o, JsonSerializer.CreateDefault());
+ res.AddRange(JObjectToPropertyCollection(json));
+
+ return res;
+ }
+
+ private static List JObjectToPropertyCollection(JObject json)
+ {
+ var res = new List();
+ foreach (var property in json.Properties())
+ {
+ var parent = new PropertyCollection {Name = property.Name};
+ foreach (var child in property.Children())
+ parent.Children = JObjectToPropertyCollection(child);
+
+ res.Add(parent);
+ }
+ return res;
+ }
+
+ public struct PropertyCollection
+ {
+ public string Name { get; set; }
+ public List Children { get; set; }
}
}
-}
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/Utilities/LayerDrawer.cs b/Artemis/Artemis/Utilities/LayerDrawer.cs
new file mode 100644
index 000000000..e37ec462f
--- /dev/null
+++ b/Artemis/Artemis/Utilities/LayerDrawer.cs
@@ -0,0 +1,173 @@
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Windows.Media.Imaging;
+using Artemis.Models.Profiles;
+using Artemis.Properties;
+
+namespace Artemis.Utilities
+{
+ internal class LayerDrawer
+ {
+ private readonly LayerModel _layerModel;
+ private Rectangle _rectangle;
+ private double _rotationProgress;
+ private Rectangle _userRectangle;
+
+ public LayerDrawer(LayerModel layerModel)
+ {
+ _layerModel = layerModel;
+ _rotationProgress = 0;
+ }
+
+ public void Draw(Graphics graphics)
+ {
+ _rectangle = new Rectangle(
+ _layerModel.LayerCalculatedProperties.X,
+ _layerModel.LayerCalculatedProperties.Y,
+ _layerModel.LayerCalculatedProperties.Width,
+ _layerModel.LayerCalculatedProperties.Height);
+ _userRectangle = new Rectangle(
+ _layerModel.LayerUserProperties.X,
+ _layerModel.LayerUserProperties.Y,
+ _layerModel.LayerUserProperties.Width,
+ _layerModel.LayerUserProperties.Height);
+
+ if (_layerModel.LayerType == LayerType.Ellipse)
+ DrawEllipse(graphics);
+ else if (_layerModel.LayerType == LayerType.Ellipse)
+ DrawRectangle(graphics);
+
+ // Update the rotation progress
+ _rotationProgress = _rotationProgress + _layerModel.LayerCalculatedProperties.RotateSpeed;
+
+ if (_layerModel.LayerCalculatedProperties.ContainedBrush && _rotationProgress > _rectangle.Width)
+ _rotationProgress = _layerModel.LayerCalculatedProperties.RotateSpeed;
+ else if (!_layerModel.LayerCalculatedProperties.ContainedBrush && _rotationProgress > _userRectangle.Width)
+ _rotationProgress = _layerModel.LayerCalculatedProperties.RotateSpeed;
+ }
+
+ public BitmapImage GetPreviewImage()
+ {
+ _rectangle = new Rectangle(0, 0, 18, 18);
+ _userRectangle = new Rectangle(0, 0, 18, 18);
+ _layerModel.LayerCalculatedProperties.Opacity = 255;
+ var brush = CreateGradientBrush(_layerModel.LayerUserProperties.Colors);
+ var bitmap = new Bitmap(18, 18);
+
+ using (var g = Graphics.FromImage(bitmap))
+ {
+ g.SmoothingMode = SmoothingMode.AntiAlias;
+ if (_layerModel.LayerType == LayerType.Ellipse)
+ {
+ g.FillEllipse(brush, _rectangle);
+ g.DrawEllipse(new Pen(Color.Black, 1), 0, 0, 17, 17);
+ }
+ else if (_layerModel.LayerType == LayerType.Rectangle)
+ {
+ g.FillRectangle(brush, _rectangle);
+ g.DrawRectangle(new Pen(Color.Black, 1), 0, 0, 17, 17);
+ }
+ else
+ bitmap = Resources.folder;
+ }
+
+ using (var memory = new MemoryStream())
+ {
+ bitmap.Save(memory, ImageFormat.Png);
+ memory.Position = 0;
+
+ var bitmapImage = new BitmapImage();
+ bitmapImage.BeginInit();
+ bitmapImage.StreamSource = memory;
+ bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
+ bitmapImage.EndInit();
+
+ return bitmapImage;
+ }
+ }
+
+ public void DrawRectangle(Graphics graphics)
+ {
+ }
+
+ public void DrawEllipse(Graphics graphics)
+ {
+ }
+
+ private LinearGradientBrush CreateGradientBrush(List colors)
+ {
+ ColorBlend colorBlend;
+ var props = _layerModel.LayerCalculatedProperties;
+ // Create a ColorBlend
+ if (colors.Count == 0)
+ {
+ colorBlend = new ColorBlend
+ {
+ Colors = new[] {Color.Transparent, Color.Transparent},
+ Positions = new[] {0F, 1F}
+ };
+ }
+ else if (colors.Count == 1)
+ {
+ colorBlend = new ColorBlend
+ {
+ Colors = new[] {colors[0], colors[0]},
+ Positions = new[] {0F, 1F}
+ };
+ }
+ else
+ {
+ colorBlend = props.Rotate
+ ? new ColorBlend {Colors = CreateTilebleColors(colors).ToArray()}
+ : new ColorBlend {Colors = colors.ToArray()};
+ }
+
+ // If needed, apply opacity to the colors in the blend
+ if (props.Opacity < 255)
+ for (var i = 0; i < colorBlend.Colors.Length; i++)
+ colorBlend.Colors[i] = Color.FromArgb(props.Opacity, colorBlend.Colors[i]);
+
+ // Devide the colors over the colorblend
+ var devider = (float) colorBlend.Colors.Length - 1;
+ var positions = new List();
+ for (var i = 0; i < colorBlend.Colors.Length; i++)
+ positions.Add(i/devider);
+
+ // Apply the devided positions
+ colorBlend.Positions = positions.ToArray();
+
+ RectangleF rect;
+ if (props.Rotate)
+ rect = _layerModel.LayerCalculatedProperties.ContainedBrush
+ ? new Rectangle((int) _rotationProgress + _rectangle.X, _rectangle.Y, _rectangle.Width*2,
+ _rectangle.Height*2)
+ : new Rectangle((int) _rotationProgress + _userRectangle.X, _userRectangle.Y, _userRectangle.Width*2,
+ _userRectangle.Height*2);
+ else
+ rect = _layerModel.LayerCalculatedProperties.ContainedBrush
+ ? new Rectangle(_rectangle.X, _rectangle.Y, _rectangle.Width, _rectangle.Height)
+ : new Rectangle(_userRectangle.X, _userRectangle.Y, _userRectangle.Width, _userRectangle.Height);
+
+ return new LinearGradientBrush(rect, Color.Transparent, Color.Transparent,
+ _layerModel.LayerCalculatedProperties.GradientMode)
+ {
+ InterpolationColors = colorBlend
+ };
+ }
+
+ private List CreateTilebleColors(List sourceColors)
+ {
+ // Create a list using the original colors
+ var tilebleColors = new List(sourceColors);
+ // Add the original colors again
+ tilebleColors.AddRange(sourceColors);
+ // Add the first color, smoothing the transition
+ tilebleColors.Add(sourceColors.FirstOrDefault());
+ return tilebleColors;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/ViewModels/LayerEditorViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditorViewModel.cs
new file mode 100644
index 000000000..dca5791f4
--- /dev/null
+++ b/Artemis/Artemis/ViewModels/LayerEditorViewModel.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections;
+using System.Diagnostics;
+using System.Reflection;
+using Artemis.Models.Profiles;
+using Artemis.Utilities;
+using Caliburn.Micro;
+
+namespace Artemis.ViewModels
+{
+ public class LayerEditorViewModel : Screen
+ {
+ private LayerModel _layer;
+
+ public LayerEditorViewModel(LayerModel layer)
+ {
+ Layer = layer;
+
+ DataModelProps = new BindableCollection();
+ DataModelProps.AddRange(GeneralHelpers.GetPropertyMap((T)Activator.CreateInstance(typeof(T), new object[] { })));
+ ProposedProperties = new LayerPropertiesModel();
+ GeneralHelpers.CopyProperties(ProposedProperties, Layer.LayerUserProperties);
+ }
+
+ public LayerModel Layer
+ {
+ get { return _layer; }
+ set
+ {
+ if (Equals(value, _layer)) return;
+ _layer = value;
+ NotifyOfPropertyChange(() => Layer);
+ }
+ }
+
+ public BindableCollection DataModelProps { get; set; }
+
+ public LayerPropertiesModel ProposedProperties { get; set; }
+
+ public void Apply()
+ {
+ GeneralHelpers.CopyProperties(Layer.LayerUserProperties, ProposedProperties);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs
index 2fb888568..bd8b07218 100644
--- a/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs
+++ b/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs
@@ -1,25 +1,21 @@
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Drawing2D;
+using System.Dynamic;
using System.Linq;
using System.Windows.Media;
using Artemis.DAL;
using Artemis.Managers;
using Artemis.Models;
using Artemis.Models.Profiles;
-using Artemis.Modules.Games.RocketLeague;
-using Artemis.Modules.Games.TheDivision;
using Caliburn.Micro;
-using Color = System.Drawing.Color;
namespace Artemis.ViewModels
{
- public class ProfileEditorViewModel : Screen
+ public class ProfileEditorViewModel : Screen
{
private readonly GameModel _gameModel;
private readonly MainManager _mainManager;
private BindableCollection _profileModels;
private ProfileModel _selectedProfileModel;
+ private LayerEditorViewModel _editorVm;
public ProfileEditorViewModel(MainManager mainManager, GameModel gameModel)
{
@@ -82,50 +78,22 @@ namespace Artemis.ViewModels
return;
}
- // Test
- profile.Layers = new List();
- var layerFolder = new LayerModel("[VM TEST] Folder 1", LayerType.Folder);
-
- var layer1 = new LayerModel("[VM TEST] Rectangle 1", LayerType.Rectangle);
- layer1.LayerConditions.Add(new LayerConditionModel {Field = "Boost", Operator = ">", Value = "0"});
- layer1.LayerProperties.Add(new LayerDynamicPropertiesModel
- {
- LayerProperty = "Width",
- LayerPopertyType = LayerPopertyType.PercentageOf,
- GameProperty = "Boost",
- PercentageSource = "100"
- });
- layer1.LayerUserProperties = new LayerPropertiesModel
- {
- Colors = new List {Color.Red, Color.OrangeRed},
- ContainedBrush = true,
- GradientMode = LinearGradientMode.Vertical,
- Width = 21,
- Height = 7,
- Opacity = 100,
- Rotate = true,
- RotateSpeed = 1,
- X = 0,
- Y = 0
- };
- layerFolder.Children.Add(layer1);
- layerFolder.Children.Add(new LayerModel("[VM TEST] Ellipse 1", LayerType.Ellipse));
-
- var testData = new RocketLeagueDataModel {Boost = 20};
- var bitmap = _mainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4);
- using (var g = Graphics.FromImage(bitmap))
- {
- layerFolder.Draw(testData, g);
- }
- // End test
-
- profile.Layers.Add(layerFolder);
ProfileProvider.AddOrUpdate(profile);
LoadProfiles();
SelectedProfileModel = profile;
}
+ public void LayerEditor(LayerModel layer)
+ {
+ IWindowManager manager = new WindowManager();
+ _editorVm = new LayerEditorViewModel(layer);
+ dynamic settings = new ExpandoObject();
+
+ settings.Title = "Artemis | Edit " + layer.Name;
+ manager.ShowDialog(_editorVm, null, settings);
+ }
+
private ImageSource GenerateKeyboardImage()
{
return null;
diff --git a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
index 1b9bc164d..bda3ecf4f 100644
--- a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
+++ b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs
@@ -1,54 +1,53 @@
-using System;
-using System.Windows;
-using Artemis.Events;
-using Artemis.Properties;
-using Artemis.Settings;
-using Artemis.Utilities;
-using Caliburn.Micro;
-
-namespace Artemis.ViewModels
-{
- public class SystemTrayViewModel : Screen, IHandle
- {
- private readonly ShellViewModel _shellViewModel;
-
- private readonly IWindowManager _windowManager;
- private string _activeIcon;
- private bool _checkedForUpdate;
- private bool _enabled;
- private string _toggleText;
-
- public SystemTrayViewModel(IWindowManager windowManager, ShellViewModel shellViewModel)
- {
- _windowManager = windowManager;
- _shellViewModel = shellViewModel;
- _shellViewModel.MainManager.Events.Subscribe(this);
- _shellViewModel.MainManager.EnableProgram();
- _checkedForUpdate = false;
- //ActiveIcon = "../logo.ico";
-
- if (General.Default.ShowOnStartup)
- ShowWindow();
- }
-
- public bool CanShowWindow => !_shellViewModel.IsActive;
-
- public bool CanHideWindow => _shellViewModel.IsActive;
-
- public bool Enabled
- {
- get { return _enabled; }
- set
- {
- if (value == _enabled) return;
- _enabled = value;
-
- ToggleText = _enabled ? "Disable Artemis" : "Enable Artemis";
- ActiveIcon = _enabled ? "../Resources/logo.ico" : "../Resources/logo-disabled.ico";
- NotifyOfPropertyChange(() => Enabled);
- }
- }
-
+using System;
+using System.Windows;
+using Artemis.Events;
+using Artemis.Properties;
+using Artemis.Settings;
+using Artemis.Utilities;
+using Caliburn.Micro;
+
+namespace Artemis.ViewModels
+{
+ public class SystemTrayViewModel : Screen, IHandle
+ {
+ private readonly ShellViewModel _shellViewModel;
+
+ private readonly IWindowManager _windowManager;
+ private string _activeIcon;
+ private bool _checkedForUpdate;
+ private bool _enabled;
+ private string _toggleText;
+
+ public SystemTrayViewModel(IWindowManager windowManager, ShellViewModel shellViewModel)
+ {
+ _windowManager = windowManager;
+ _shellViewModel = shellViewModel;
+ _shellViewModel.MainManager.Events.Subscribe(this);
+ _shellViewModel.MainManager.EnableProgram();
+ _checkedForUpdate = false;
+
+ if (General.Default.ShowOnStartup)
+ ShowWindow();
+ }
+
+ public bool CanShowWindow => !_shellViewModel.IsActive;
+
+ public bool CanHideWindow => _shellViewModel.IsActive;
+
+ public bool Enabled
+ {
+ get { return _enabled; }
+ set
+ {
+ if (value == _enabled) return;
+ _enabled = value;
+
+ ToggleText = _enabled ? "Disable Artemis" : "Enable Artemis";
+ ActiveIcon = _enabled ? "../Resources/logo.ico" : "../Resources/logo-disabled.ico";
+ NotifyOfPropertyChange(() => Enabled);
+ }
+ }
+
public string ActiveIcon
{
get { return _activeIcon; }
@@ -57,77 +56,77 @@ namespace Artemis.ViewModels
_activeIcon = value;
NotifyOfPropertyChange();
}
- }
-
- public string ToggleText
- {
- get { return _toggleText; }
- set
- {
- if (value == _toggleText) return;
- _toggleText = value;
- NotifyOfPropertyChange(() => ToggleText);
- }
- }
-
- public void Handle(ToggleEnabled message)
- {
- Enabled = message.Enabled;
- }
-
- public void ToggleEnabled()
- {
- if (Enabled)
- _shellViewModel.MainManager.DisableProgram();
- else
- _shellViewModel.MainManager.EnableProgram();
- }
-
- protected override void OnActivate()
- {
- base.OnActivate();
-
- NotifyOfPropertyChange(() => CanShowWindow);
- NotifyOfPropertyChange(() => CanHideWindow);
- }
-
- public void ShowWindow()
- {
- if (!CanShowWindow)
- return;
-
- // manually show the next window view-model
- _windowManager.ShowWindow(_shellViewModel);
-
- NotifyOfPropertyChange(() => CanShowWindow);
- NotifyOfPropertyChange(() => CanHideWindow);
-
- if (_checkedForUpdate)
- return;
-
- _checkedForUpdate = true;
- Updater.CheckForUpdate(_shellViewModel.MainManager.DialogService);
- }
-
-
- public void HideWindow()
- {
- if (!CanHideWindow)
- return;
-
- _shellViewModel.TryClose();
-
- NotifyOfPropertyChange(() => CanShowWindow);
- NotifyOfPropertyChange(() => CanHideWindow);
- }
-
- public void ExitApplication()
- {
- _shellViewModel.MainManager.Shutdown();
- Application.Current.Shutdown();
-
- // Sometimes you need to be rough.
- Environment.Exit(0);
- }
- }
+ }
+
+ public string ToggleText
+ {
+ get { return _toggleText; }
+ set
+ {
+ if (value == _toggleText) return;
+ _toggleText = value;
+ NotifyOfPropertyChange(() => ToggleText);
+ }
+ }
+
+ public void Handle(ToggleEnabled message)
+ {
+ Enabled = message.Enabled;
+ }
+
+ public void ToggleEnabled()
+ {
+ if (Enabled)
+ _shellViewModel.MainManager.DisableProgram();
+ else
+ _shellViewModel.MainManager.EnableProgram();
+ }
+
+ protected override void OnActivate()
+ {
+ base.OnActivate();
+
+ NotifyOfPropertyChange(() => CanShowWindow);
+ NotifyOfPropertyChange(() => CanHideWindow);
+ }
+
+ public void ShowWindow()
+ {
+ if (!CanShowWindow)
+ return;
+
+ // manually show the next window view-model
+ _windowManager.ShowWindow(_shellViewModel);
+
+ NotifyOfPropertyChange(() => CanShowWindow);
+ NotifyOfPropertyChange(() => CanHideWindow);
+
+ if (_checkedForUpdate)
+ return;
+
+ _checkedForUpdate = true;
+ Updater.CheckForUpdate(_shellViewModel.MainManager.DialogService);
+ }
+
+
+ public void HideWindow()
+ {
+ if (!CanHideWindow)
+ return;
+
+ _shellViewModel.TryClose();
+
+ NotifyOfPropertyChange(() => CanShowWindow);
+ NotifyOfPropertyChange(() => CanHideWindow);
+ }
+
+ public void ExitApplication()
+ {
+ _shellViewModel.MainManager.Shutdown();
+ Application.Current.Shutdown();
+
+ // Sometimes you need to be rough.
+ Environment.Exit(0);
+ }
+ }
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Views/LayerEditorView.xaml b/Artemis/Artemis/Views/LayerEditorView.xaml
new file mode 100644
index 000000000..b51d4d04b
--- /dev/null
+++ b/Artemis/Artemis/Views/LayerEditorView.xaml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Artemis/Artemis/Views/LayerEditorView.xaml.cs b/Artemis/Artemis/Views/LayerEditorView.xaml.cs
new file mode 100644
index 000000000..ea8195886
--- /dev/null
+++ b/Artemis/Artemis/Views/LayerEditorView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using MahApps.Metro.Controls;
+
+namespace Artemis.Views
+{
+ ///
+ /// Interaction logic for LayerEditorView.xaml
+ ///
+ public partial class LayerEditorView : MetroWindow
+ {
+ public LayerEditorView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Artemis/Artemis/Views/ProfileEditorView.xaml b/Artemis/Artemis/Views/ProfileEditorView.xaml
index 99f90af1e..813cb7f82 100644
--- a/Artemis/Artemis/Views/ProfileEditorView.xaml
+++ b/Artemis/Artemis/Views/ProfileEditorView.xaml
@@ -4,6 +4,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Artemis.Views"
+ xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d"
d:DesignHeight="772.5" d:DesignWidth="1335">
@@ -38,29 +40,31 @@
+ Style="{DynamicResource SquareButtonStyle}" Width="95" HorizontalAlignment="Left"
+ Margin="10,0,0,0" />
-
+
-
+
-
+
-
+
-
+