From 2ab1c3d94aca5cc723742aa47314878fffa70d9f Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Mon, 29 Aug 2016 21:10:23 +0200 Subject: [PATCH] Cleaned up VM constructors Fixed rounding issue in dynamic properties Fixed multiple duplicate dynamic properties being saved in JSON --- .../Abstract/LayerPropertiesViewModel.cs | 19 ++++-- .../Profiles/Layers/Interfaces/ILayerType.cs | 8 +-- .../Layers/Models/DynamicPropertiesModel.cs | 13 +++- .../Types/Audio/AudioPropertiesViewModel.cs | 7 +-- .../Profiles/Layers/Types/Audio/AudioType.cs | 7 ++- .../Types/Folder/FolderPropertiesViewModel.cs | 7 +-- .../Layers/Types/Folder/FolderType.cs | 7 ++- .../Generic/GenericPropertiesViewModel.cs | 20 +++---- .../Layers/Types/Generic/GenericType.cs | 7 ++- .../Headset/HeadsetPropertiesViewModel.cs | 20 +++---- .../Layers/Types/Headset/HeadsetType.cs | 7 ++- .../KeyPress/KeyPressPropertiesViewModel.cs | 7 +-- .../Layers/Types/KeyPress/KeyPressType.cs | 7 ++- .../Keyboard/KeyboardPropertiesViewModel.cs | 23 +++---- .../Layers/Types/Keyboard/KeyboardType.cs | 7 ++- .../Types/KeyboardGif/KeyboardGifType.cs | 7 ++- .../Types/Mouse/MousePropertiesViewModel.cs | 20 +++---- .../Profiles/Layers/Types/Mouse/MouseType.cs | 7 ++- .../Profiles/LayerConditionViewModel.cs | 5 +- .../LayerDynamicPropertiesViewModel.cs | 33 ++++++---- .../Profiles/LayerEditorViewModel.cs | 60 +++++++++---------- 21 files changed, 148 insertions(+), 150 deletions(-) diff --git a/Artemis/Artemis/Profiles/Layers/Abstract/LayerPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Abstract/LayerPropertiesViewModel.cs index ef03980cd..33ea330e7 100644 --- a/Artemis/Artemis/Profiles/Layers/Abstract/LayerPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Abstract/LayerPropertiesViewModel.cs @@ -1,6 +1,6 @@ using System.Windows.Media; -using Artemis.Models.Interfaces; using Artemis.Profiles.Layers.Models; +using Artemis.ViewModels.Profiles; using Caliburn.Micro; namespace Artemis.Profiles.Layers.Abstract @@ -10,13 +10,19 @@ namespace Artemis.Profiles.Layers.Abstract private Brush _brush; private LayerModel _layerModel; - protected LayerPropertiesViewModel(LayerModel layerModel, IDataModel dataModel) + protected LayerPropertiesViewModel(LayerEditorViewModel layerEditorViewModel) { - LayerModel = layerModel; - DataModel = dataModel; + LayerEditorViewModel = layerEditorViewModel; + LayerModel = layerEditorViewModel.ProposedLayer; + Brush = LayerModel.Properties.Brush.Clone(); } + public LayerEditorViewModel LayerEditorViewModel { get; set; } + + /// + /// The proposed brush + /// public Brush Brush { get { return _brush; } @@ -28,6 +34,9 @@ namespace Artemis.Profiles.Layers.Abstract } } + /// + /// The proposed layer + /// public LayerModel LayerModel { get { return _layerModel; } @@ -39,8 +48,6 @@ namespace Artemis.Profiles.Layers.Abstract } } - public IDataModel DataModel { get; set; } - public abstract void ApplyProperties(); } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Layers/Interfaces/ILayerType.cs b/Artemis/Artemis/Profiles/Layers/Interfaces/ILayerType.cs index 4630d6680..02a5bfb56 100644 --- a/Artemis/Artemis/Profiles/Layers/Interfaces/ILayerType.cs +++ b/Artemis/Artemis/Profiles/Layers/Interfaces/ILayerType.cs @@ -3,6 +3,7 @@ using System.Windows.Media; using Artemis.Models.Interfaces; using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Models; +using Artemis.ViewModels.Profiles; using Newtonsoft.Json; namespace Artemis.Profiles.Layers.Interfaces @@ -58,12 +59,9 @@ namespace Artemis.Profiles.Layers.Interfaces /// /// Sets up a viewmodel to accomodate this layerType /// + /// The layer editor VM this type resides in /// The current viewmodel - /// - /// The datamodel to use in the new viewmodel - /// The layer to use in the new viewmodel - LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer); + LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, LayerPropertiesViewModel layerPropertiesViewModel); } public enum DrawType diff --git a/Artemis/Artemis/Profiles/Layers/Models/DynamicPropertiesModel.cs b/Artemis/Artemis/Profiles/Layers/Models/DynamicPropertiesModel.cs index fc3ba8ee1..8cbf2ca6c 100644 --- a/Artemis/Artemis/Profiles/Layers/Models/DynamicPropertiesModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Models/DynamicPropertiesModel.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System; +using System.ComponentModel; using Artemis.Models.Interfaces; using Artemis.Utilities; @@ -62,8 +63,11 @@ namespace Artemis.Profiles.Layers.Models private void ApplyWidth(LayerPropertiesModel properties, float percentage) { - var newWidth = percentage*(float) properties.Width; + var newWidth = Math.Round(percentage*(float) properties.Width, 2); var difference = properties.Width - newWidth; + if (newWidth < 0) + newWidth = 0; + properties.Width = newWidth; // Apply the right to left option @@ -73,8 +77,11 @@ namespace Artemis.Profiles.Layers.Models private void ApplyHeight(LayerPropertiesModel properties, float percentage) { - var newHeight = percentage*(float) properties.Height; + var newHeight = Math.Round(percentage*(float) properties.Height, 2); var difference = properties.Height - newHeight; + if (newHeight < 0) + newHeight = 0; + properties.Height = newHeight; if (LayerPropertyOptions == LayerPropertyOptions.Downwards) diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesViewModel.cs index f3ce5015b..cc502a220 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesViewModel.cs @@ -1,12 +1,11 @@ -using Artemis.Models.Interfaces; -using Artemis.Profiles.Layers.Abstract; -using Artemis.Profiles.Layers.Models; +using Artemis.Profiles.Layers.Abstract; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Audio { public class AudioPropertiesViewModel : LayerPropertiesViewModel { - public AudioPropertiesViewModel(LayerModel layerModel, IDataModel dataModel) : base(layerModel, dataModel) + public AudioPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { } diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs index ca2b50c73..0b455fe7b 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs @@ -12,6 +12,7 @@ using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; using Artemis.Properties; using Artemis.Utilities; +using Artemis.ViewModels.Profiles; using NAudio.CoreAudioApi; using NAudio.Wave; using Newtonsoft.Json; @@ -119,12 +120,12 @@ namespace Artemis.Profiles.Layers.Types.Audio }; } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { if (layerPropertiesViewModel is AudioPropertiesViewModel) return layerPropertiesViewModel; - return new AudioPropertiesViewModel(proposedLayer, dataModel); + return new AudioPropertiesViewModel(layerEditorViewModel); } private void ApplyVertical(AudioPropertiesModel settings) diff --git a/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesViewModel.cs index de809f0e1..318662690 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderPropertiesViewModel.cs @@ -1,12 +1,11 @@ -using Artemis.Models.Interfaces; -using Artemis.Profiles.Layers.Abstract; -using Artemis.Profiles.Layers.Models; +using Artemis.Profiles.Layers.Abstract; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Folder { public class FolderPropertiesViewModel : LayerPropertiesViewModel { - public FolderPropertiesViewModel(LayerModel layerModel, IDataModel dataModel) : base(layerModel, dataModel) + public FolderPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { } diff --git a/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs b/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs index 40bf854fb..7856f0e40 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs @@ -7,6 +7,7 @@ using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; using Artemis.Properties; using Artemis.Utilities; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Folder { @@ -44,12 +45,12 @@ namespace Artemis.Profiles.Layers.Types.Folder layerModel.Properties = new SimplePropertiesModel(layerModel.Properties); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { if (layerPropertiesViewModel is FolderPropertiesViewModel) return layerPropertiesViewModel; - return new FolderPropertiesViewModel(proposedLayer, dataModel); + return new FolderPropertiesViewModel(layerEditorViewModel); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs index 42dcc8d09..ebe5ee700 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs @@ -1,10 +1,6 @@ -using System.Collections.Generic; -using System.Linq; -using Artemis.Models.Interfaces; +using System.Linq; using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Interfaces; -using Artemis.Profiles.Layers.Models; -using Artemis.Utilities; using Artemis.ViewModels.Profiles; using Caliburn.Micro; @@ -14,16 +10,14 @@ namespace Artemis.Profiles.Layers.Types.Generic { private ILayerAnimation _selectedLayerAnimation; - public GenericPropertiesViewModel(LayerModel layerModel, IDataModel dataModel, - IEnumerable layerAnimations) : base(layerModel, dataModel) + public GenericPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { - LayerAnimations = new BindableCollection(layerAnimations); - OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", - new BindableCollection(GeneralHelpers.GenerateTypeMap(dataModel)), - layerModel.Properties); + LayerAnimations = new BindableCollection(editorVm.Animations); + OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", editorVm); - SelectedLayerAnimation = LayerAnimations.FirstOrDefault(l => l.Name == layerModel.LayerAnimation?.Name) ?? - LayerAnimations.First(l => l.Name == "None"); + SelectedLayerAnimation = + LayerAnimations.FirstOrDefault(l => l.Name == editorVm.ProposedLayer.LayerAnimation?.Name) ?? + LayerAnimations.First(l => l.Name == "None"); } public BindableCollection LayerAnimations { get; set; } diff --git a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs index 0155ce658..94181f4ee 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs @@ -9,6 +9,7 @@ using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; using Artemis.Properties; using Artemis.Utilities; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Generic { @@ -85,12 +86,12 @@ namespace Artemis.Profiles.Layers.Types.Generic layerModel.Properties.DynamicProperties.FirstOrDefault(d => d.LayerProperty == "Width")); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { if (layerPropertiesViewModel is GenericPropertiesViewModel) return layerPropertiesViewModel; - return new GenericPropertiesViewModel(proposedLayer, dataModel, layerAnimations); + return new GenericPropertiesViewModel(layerEditorViewModel); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesViewModel.cs index 76ac3cae1..88bb4c0b5 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetPropertiesViewModel.cs @@ -1,10 +1,6 @@ -using System.Collections.Generic; -using System.Linq; -using Artemis.Models.Interfaces; +using System.Linq; using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Interfaces; -using Artemis.Profiles.Layers.Models; -using Artemis.Utilities; using Artemis.ViewModels.Profiles; using Caliburn.Micro; @@ -14,16 +10,14 @@ namespace Artemis.Profiles.Layers.Types.Headset { private ILayerAnimation _selectedLayerAnimation; - public HeadsetPropertiesViewModel(LayerModel layerModel, IDataModel dataModel, - IEnumerable layerAnimations) : base(layerModel, dataModel) + public HeadsetPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { - LayerAnimations = new BindableCollection(layerAnimations); - OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", - new BindableCollection(GeneralHelpers.GenerateTypeMap(dataModel)), - layerModel.Properties); + LayerAnimations = new BindableCollection(editorVm.Animations); + OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", editorVm); - SelectedLayerAnimation = LayerAnimations.FirstOrDefault(l => l.Name == layerModel.LayerAnimation?.Name) ?? - LayerAnimations.First(l => l.Name == "None"); + SelectedLayerAnimation = + LayerAnimations.FirstOrDefault(l => l.Name == editorVm.ProposedLayer.LayerAnimation?.Name) ?? + LayerAnimations.First(l => l.Name == "None"); } public BindableCollection LayerAnimations { get; set; } diff --git a/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs b/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs index 0b5b6382e..5cef2d84c 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs @@ -9,6 +9,7 @@ using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; using Artemis.Properties; using Artemis.Utilities; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Headset { @@ -83,12 +84,12 @@ namespace Artemis.Profiles.Layers.Types.Headset layerModel.Properties.DynamicProperties.FirstOrDefault(d => d.LayerProperty == "Width")); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { if (layerPropertiesViewModel is HeadsetPropertiesViewModel) return layerPropertiesViewModel; - return new HeadsetPropertiesViewModel(proposedLayer, dataModel, layerAnimations); + return new HeadsetPropertiesViewModel(layerEditorViewModel); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesViewModel.cs index 6ea9c2e6c..9efbd9907 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressPropertiesViewModel.cs @@ -1,12 +1,11 @@ -using Artemis.Models.Interfaces; -using Artemis.Profiles.Layers.Abstract; -using Artemis.Profiles.Layers.Models; +using Artemis.Profiles.Layers.Abstract; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.KeyPress { public class KeyPressPropertiesViewModel : LayerPropertiesViewModel { - public KeyPressPropertiesViewModel(LayerModel layerModel, IDataModel dataModel) : base(layerModel, dataModel) + public KeyPressPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { } diff --git a/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs b/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs index 43d0ac4e0..d67996403 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs @@ -13,6 +13,7 @@ using Artemis.Profiles.Layers.Models; using Artemis.Properties; using Artemis.Utilities; using Artemis.Utilities.Keyboard; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.KeyPress { @@ -89,12 +90,12 @@ namespace Artemis.Profiles.Layers.Types.KeyPress layerModel.Properties = new KeyPressPropertiesModel(layerModel.Properties); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { if (layerPropertiesViewModel is KeyPressPropertiesViewModel) return layerPropertiesViewModel; - return new KeyPressPropertiesViewModel(proposedLayer, dataModel); + return new KeyPressPropertiesViewModel(layerEditorViewModel); } private void KeyboardHookOnKeyDownCallback(KeyEventArgs e) diff --git a/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesViewModel.cs index 69a1f08d0..86ed34c81 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardPropertiesViewModel.cs @@ -1,10 +1,7 @@ -using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Windows.Forms; -using Artemis.Models.Interfaces; using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Interfaces; -using Artemis.Profiles.Layers.Models; using Artemis.Utilities; using Artemis.ViewModels.Profiles; using Caliburn.Micro; @@ -16,19 +13,17 @@ namespace Artemis.Profiles.Layers.Types.Keyboard private bool _isGif; private ILayerAnimation _selectedLayerAnimation; - public KeyboardPropertiesViewModel(LayerModel layerModel, IDataModel dataModel, - IEnumerable layerAnimations) : base(layerModel, dataModel) + public KeyboardPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { - LayerAnimations = new BindableCollection(layerAnimations); + LayerAnimations = new BindableCollection(editorVm.Animations); - var dataModelProps = - new BindableCollection(GeneralHelpers.GenerateTypeMap(dataModel)); - HeightProperties = new LayerDynamicPropertiesViewModel("Height", dataModelProps, layerModel.Properties); - WidthProperties = new LayerDynamicPropertiesViewModel("Width", dataModelProps, layerModel.Properties); - OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", dataModelProps, layerModel.Properties); + HeightProperties = new LayerDynamicPropertiesViewModel("Height", editorVm); + WidthProperties = new LayerDynamicPropertiesViewModel("Width", editorVm); + OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", editorVm); - SelectedLayerAnimation = LayerAnimations.FirstOrDefault(l => l.Name == layerModel.LayerAnimation?.Name) ?? - LayerAnimations.First(l => l.Name == "None"); + SelectedLayerAnimation = + LayerAnimations.FirstOrDefault(l => l.Name == editorVm.ProposedLayer.LayerAnimation?.Name) ?? + LayerAnimations.First(l => l.Name == "None"); } public bool ShowGif => IsGif; diff --git a/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs b/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs index 1b510d03d..7a570c644 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs @@ -6,6 +6,7 @@ using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Animations; using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Keyboard { @@ -82,12 +83,12 @@ namespace Artemis.Profiles.Layers.Types.Keyboard layerModel.Properties = new KeyboardPropertiesModel(layerModel.Properties); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { var model = layerPropertiesViewModel as KeyboardPropertiesViewModel; if (model == null) - return new KeyboardPropertiesViewModel(proposedLayer, dataModel, layerAnimations) + return new KeyboardPropertiesViewModel(layerEditorViewModel) { IsGif = false }; diff --git a/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs b/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs index c280b3adc..de0e3b1a2 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs @@ -10,6 +10,7 @@ using Artemis.Profiles.Layers.Models; using Artemis.Profiles.Layers.Types.Keyboard; using Artemis.Properties; using Artemis.Utilities; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.KeyboardGif { @@ -76,12 +77,12 @@ namespace Artemis.Profiles.Layers.Types.KeyboardGif layerModel.Properties = new KeyboardPropertiesModel(layerModel.Properties); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { var model = layerPropertiesViewModel as KeyboardPropertiesViewModel; if (model == null) - return new KeyboardPropertiesViewModel(proposedLayer, dataModel, layerAnimations) + return new KeyboardPropertiesViewModel(layerEditorViewModel) { IsGif = true }; diff --git a/Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesViewModel.cs index aba7a1a1f..6363ec67d 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesViewModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Mouse/MousePropertiesViewModel.cs @@ -1,10 +1,6 @@ -using System.Collections.Generic; -using System.Linq; -using Artemis.Models.Interfaces; +using System.Linq; using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Interfaces; -using Artemis.Profiles.Layers.Models; -using Artemis.Utilities; using Artemis.ViewModels.Profiles; using Caliburn.Micro; @@ -14,16 +10,14 @@ namespace Artemis.Profiles.Layers.Types.Mouse { private ILayerAnimation _selectedLayerAnimation; - public MousePropertiesViewModel(LayerModel layerModel, IDataModel dataModel, - IEnumerable layerAnimations) : base(layerModel, dataModel) + public MousePropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm) { - LayerAnimations = new BindableCollection(layerAnimations); - OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", - new BindableCollection(GeneralHelpers.GenerateTypeMap(dataModel)), - layerModel.Properties); + LayerAnimations = new BindableCollection(editorVm.Animations); + OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", editorVm); - SelectedLayerAnimation = LayerAnimations.FirstOrDefault(l => l.Name == layerModel.LayerAnimation?.Name) ?? - LayerAnimations.First(l => l.Name == "None"); + SelectedLayerAnimation = + LayerAnimations.FirstOrDefault(l => l.Name == editorVm.ProposedLayer.LayerAnimation?.Name) ?? + LayerAnimations.First(l => l.Name == "None"); } public BindableCollection LayerAnimations { get; set; } diff --git a/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs b/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs index fdc0e7418..eb9723a13 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs @@ -9,6 +9,7 @@ using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; using Artemis.Properties; using Artemis.Utilities; +using Artemis.ViewModels.Profiles; namespace Artemis.Profiles.Layers.Types.Mouse { @@ -85,12 +86,12 @@ namespace Artemis.Profiles.Layers.Types.Mouse layerModel.Properties.DynamicProperties.FirstOrDefault(d => d.LayerProperty == "Width")); } - public LayerPropertiesViewModel SetupViewModel(LayerPropertiesViewModel layerPropertiesViewModel, - List layerAnimations, IDataModel dataModel, LayerModel proposedLayer) + public LayerPropertiesViewModel SetupViewModel(LayerEditorViewModel layerEditorViewModel, + LayerPropertiesViewModel layerPropertiesViewModel) { if (layerPropertiesViewModel is MousePropertiesViewModel) return layerPropertiesViewModel; - return new MousePropertiesViewModel(proposedLayer, dataModel, layerAnimations); + return new MousePropertiesViewModel(layerEditorViewModel); } } } \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs index 60ec72358..fe8ad7a78 100644 --- a/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs @@ -48,14 +48,13 @@ namespace Artemis.ViewModels.Profiles private string _userValue; private bool _userValueIsVisible; - public LayerConditionViewModel(LayerEditorViewModel conditionModel, LayerConditionModel layerConditionModel, - BindableCollection dataModelProps) + public LayerConditionViewModel(LayerEditorViewModel conditionModel, LayerConditionModel layerConditionModel) { _conditionModel = conditionModel; _preselecting = false; LayerConditionModel = layerConditionModel; - DataModelProps = dataModelProps; + DataModelProps = conditionModel.DataModelProps; Operators = new BindableCollection(); Enums = new BindableCollection(); diff --git a/Artemis/Artemis/ViewModels/Profiles/LayerDynamicPropertiesViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/LayerDynamicPropertiesViewModel.cs index a080953aa..54e056009 100644 --- a/Artemis/Artemis/ViewModels/Profiles/LayerDynamicPropertiesViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/LayerDynamicPropertiesViewModel.cs @@ -9,6 +9,7 @@ namespace Artemis.ViewModels.Profiles { public sealed class LayerDynamicPropertiesViewModel : PropertyChangedBase { + private readonly LayerEditorViewModel _layerEditorViewModel; private readonly string _property; private BindableCollection _layerPropertyOptions; private LayerPropertyType _layerPropertyType; @@ -19,15 +20,19 @@ namespace Artemis.ViewModels.Profiles private bool _sourcesIsVisible; private bool _userSourceIsVisible; - public LayerDynamicPropertiesViewModel(string property, - BindableCollection dataModelProps, - LayerPropertiesModel layerPropertiesModel) + public LayerDynamicPropertiesViewModel(string property, LayerEditorViewModel layerEditorViewModel) { _property = property; + _layerEditorViewModel = layerEditorViewModel; // Look for the existing property model Proposed = new DynamicPropertiesModel(); - var original = layerPropertiesModel.DynamicProperties.FirstOrDefault(lp => lp.LayerProperty == _property); + var original = layerEditorViewModel + .ProposedLayer + .Properties + .DynamicProperties + .FirstOrDefault(lp => lp.LayerProperty == _property); + if (original == null) { Proposed.LayerProperty = property; @@ -37,7 +42,7 @@ namespace Artemis.ViewModels.Profiles Proposed = GeneralHelpers.Clone(original); PropertyChanged += OnPropertyChanged; - SetupControls(dataModelProps); + SetupControls(); } public LayerPropertyType LayerPropertyType @@ -129,14 +134,15 @@ namespace Artemis.ViewModels.Profiles } } - public bool ControlsEnabled => SelectedTarget.Display != "None" && SelectedTarget.Path != null; + public bool ControlsEnabled => (SelectedTarget.Display != "None") && (SelectedTarget.Path != null); public BindableCollection Targets { get; set; } public BindableCollection Sources { get; set; } - private void SetupControls(BindableCollection dataModelProps) + private void SetupControls() { + var dataModelProps = _layerEditorViewModel.DataModelProps; Name = _property + ":"; // Populate target combobox @@ -144,11 +150,11 @@ namespace Artemis.ViewModels.Profiles { new GeneralHelpers.PropertyCollection {Display = "None"} }; - Targets.AddRange(dataModelProps.Where(p => p.Type == "Int32" || p.Type == "Single")); + Targets.AddRange(dataModelProps.Where(p => (p.Type == "Int32") || (p.Type == "Single"))); // Populate sources combobox Sources = new BindableCollection(); - Sources.AddRange(dataModelProps.Where(p => p.Type == "Int32" || p.Type == "Single")); + Sources.AddRange(dataModelProps.Where(p => (p.Type == "Int32") || (p.Type == "Single"))); // Preselect according to the model SelectedTarget = dataModelProps.FirstOrDefault(p => p.Path == Proposed.GameProperty); @@ -208,12 +214,13 @@ namespace Artemis.ViewModels.Profiles public void Apply(LayerModel layerModel) { - var original = layerModel.Properties.DynamicProperties.FirstOrDefault(lp => lp.LayerProperty == _property); - if (original != null) - layerModel.Properties.DynamicProperties.Remove(original); + var proposedProperties = _layerEditorViewModel.ProposedLayer.Properties; + proposedProperties.DynamicProperties = proposedProperties + .DynamicProperties + .Where(p => p.LayerProperty != _property).ToList(); if (!Proposed.GameProperty.IsNullOrEmpty()) - layerModel.Properties.DynamicProperties.Add(Proposed); + proposedProperties.DynamicProperties.Add(Proposed); } } } \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs index 87920681f..cd7dbfaf9 100644 --- a/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs @@ -10,57 +10,53 @@ using Artemis.Profiles.Layers.Models; using Artemis.Profiles.Layers.Types.Keyboard; using Artemis.Profiles.Layers.Types.KeyboardGif; using Artemis.Services; -using Artemis.Utilities; using Artemis.ViewModels.Profiles.Events; using Caliburn.Micro; using Newtonsoft.Json; using Ninject; -using NuGet; +using static Artemis.Utilities.GeneralHelpers; namespace Artemis.ViewModels.Profiles { public sealed class LayerEditorViewModel : Screen { - private readonly IDataModel _dataModel; - private readonly List _layerAnimations; private EventPropertiesViewModel _eventPropertiesViewModel; private LayerModel _layer; private LayerPropertiesViewModel _layerPropertiesViewModel; private LayerModel _proposedLayer; private ILayerType _selectedLayerType; - public LayerEditorViewModel(IDataModel dataModel, LayerModel layer, IEnumerable layerTypes, - List layerAnimations) + public LayerEditorViewModel(LayerModel layer, IDataModel dataModel, IEnumerable types, + List animations) { - _dataModel = dataModel; - _layerAnimations = layerAnimations; - - LayerTypes = new BindableCollection(layerTypes); - DataModelProps = new BindableCollection( - GeneralHelpers.GenerateTypeMap(dataModel)); - Layer = layer; - ProposedLayer = GeneralHelpers.Clone(layer); - ProposedLayer.Children.Clear(); + ProposedLayer = Clone(layer); + DataModel = DataModel; + Types = new BindableCollection(types); + Animations = animations; + + DataModelProps = new BindableCollection(GenerateTypeMap(dataModel)); if (Layer.Properties == null) Layer.SetupProperties(); - LayerConditionVms = new BindableCollection( - layer.Properties.Conditions.Select(c => new LayerConditionViewModel(this, c, DataModelProps))); + // Setup existing conditions + var conditions = layer.Properties.Conditions.Select(c => new LayerConditionViewModel(this, c)); + LayerConditionVms = new BindableCollection(conditions); PropertyChanged += PropertiesViewModelHandler; + + // Setup existiing properties PreSelect(); } - - public bool ModelChanged { get; set; } + public object DataModel { get; set; } [Inject] public MetroDialogService DialogService { get; set; } - public BindableCollection LayerTypes { get; set; } - public BindableCollection DataModelProps { get; set; } + public BindableCollection Types { get; set; } + public BindableCollection DataModelProps { get; set; } public BindableCollection LayerConditionVms { get; set; } public bool KeyboardGridIsVisible => ProposedLayer.LayerType is KeyboardType; public bool GifGridIsVisible => ProposedLayer.LayerType is KeyboardGifType; @@ -76,6 +72,8 @@ namespace Artemis.ViewModels.Profiles } } + public List Animations { get; set; } + public LayerModel ProposedLayer { get { return _proposedLayer; } @@ -122,7 +120,7 @@ namespace Artemis.ViewModels.Profiles public void PreSelect() { - SelectedLayerType = LayerTypes.FirstOrDefault(t => t.Name == ProposedLayer.LayerType.Name); + SelectedLayerType = Types.FirstOrDefault(t => t.Name == ProposedLayer.LayerType.Name); ToggleIsEvent(); } @@ -142,8 +140,7 @@ namespace Artemis.ViewModels.Profiles } // Let the layer type handle the viewmodel setup - LayerPropertiesViewModel = ProposedLayer.LayerType.SetupViewModel(LayerPropertiesViewModel, _layerAnimations, - _dataModel, ProposedLayer); + LayerPropertiesViewModel = ProposedLayer.LayerType.SetupViewModel(this, LayerPropertiesViewModel); if (oldBrush != null) ProposedLayer.Properties.Brush = oldBrush; @@ -161,22 +158,23 @@ namespace Artemis.ViewModels.Profiles public void AddCondition() { var condition = new LayerConditionModel(); - LayerConditionVms.Add(new LayerConditionViewModel(this, condition, DataModelProps)); + LayerConditionVms.Add(new LayerConditionViewModel(this, condition)); } public void Apply() { LayerPropertiesViewModel?.ApplyProperties(); + + Layer.Properties.DynamicProperties.Clear(); + Layer.Properties.Conditions.Clear(); JsonConvert.PopulateObject(JsonConvert.SerializeObject(ProposedLayer), Layer); + foreach (var conditionViewModel in LayerConditionVms) + Layer.Properties.Conditions.Add(conditionViewModel.LayerConditionModel); // TODO: EventPropVM must have layer too if (EventPropertiesViewModel != null) Layer.EventProperties = EventPropertiesViewModel.GetAppliedProperties(); - - Layer.Properties.Conditions.Clear(); - foreach (var conditionViewModel in LayerConditionVms) - Layer.Properties.Conditions.Add(conditionViewModel.LayerConditionModel); - + // Don't bother checking for a GIF path unless the type is GIF if (!(Layer.LayerType is KeyboardGifType)) return; @@ -214,7 +212,7 @@ namespace Artemis.ViewModels.Profiles // Ignore the children, can't just temporarily add them to the proposed layer because // that would upset the child layers' relations (sounds like an episode of Dr. Phil amirite?) - var currentObj = GeneralHelpers.Clone(Layer); + var currentObj = Clone(Layer); currentObj.Children.Clear(); var current = JsonConvert.SerializeObject(currentObj, Formatting.Indented); var proposed = JsonConvert.SerializeObject(ProposedLayer, Formatting.Indented);