From a40728244a48c81dba933118a9566727552ad45c Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Sun, 6 Nov 2016 17:27:36 +0100 Subject: [PATCH] Removed factories in favor of a new WindowService Fixed layer selection issues in profile editor --- Artemis/Artemis/Artemis.csproj | 7 +-- .../Logitech/Utilities/OrionUtilities.cs | 2 +- .../ILayerEditorVmFactory.cs | 11 ----- .../IProfileEditorVmFactory.cs | 11 ----- .../Artemis/InjectionModules/BaseModules.cs | 8 ++-- .../WindowsProfile/WindowsProfileViewModel.cs | 27 ++++++----- .../CounterStrike/CounterStrikeViewModel.cs | 6 +-- .../Modules/Games/Dota2/Dota2ViewModel.cs | 6 +-- .../EurotruckSimulator2ViewModel.cs | 6 +-- .../Games/Overwatch/OverwatchViewModel.cs | 6 +-- .../RocketLeague/RocketLeagueViewModel.cs | 6 +-- .../Games/TheDivision/TheDivisionViewModel.cs | 6 +-- .../UnrealTournamentViewModel.cs | 6 +-- .../Games/Witcher3/Witcher3ViewModel.cs | 6 +-- .../Artemis/Modules/Games/WoW/WoWViewModel.cs | 6 +-- Artemis/Artemis/Profiles/Lua/LuaWrapper.cs | 30 ++++++++----- Artemis/Artemis/Profiles/ProfileModel.cs | 16 +++++++ Artemis/Artemis/Services/WindowService.cs | 32 +++++++++++++ .../ViewModels/Abstract/GameViewModel.cs | 23 +++++----- .../Profiles/LayerEditorViewModel.cs | 5 +-- .../Profiles/ProfileEditorViewModel.cs | 45 ++++++------------- .../ViewModels/Profiles/ProfileViewModel.cs | 22 ++++----- Artemis/Artemis/packages.config | 1 - 23 files changed, 152 insertions(+), 142 deletions(-) delete mode 100644 Artemis/Artemis/InjectionFactories/ILayerEditorVmFactory.cs delete mode 100644 Artemis/Artemis/InjectionFactories/IProfileEditorVmFactory.cs create mode 100644 Artemis/Artemis/Services/WindowService.cs diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 1605a1e2e..d2fc48833 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -226,10 +226,6 @@ ..\packages\Ninject.Extensions.Conventions.3.2.0.0\lib\net45-full\Ninject.Extensions.Conventions.dll True - - ..\packages\Ninject.Extensions.Factory.3.2.1.0\lib\net45-full\Ninject.Extensions.Factory.dll - True - ..\packages\Ninject.Extensions.Logging.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.dll True @@ -337,8 +333,6 @@ - - @@ -545,6 +539,7 @@ + diff --git a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs index e00020286..f39d7a27e 100644 --- a/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs +++ b/Artemis/Artemis/DeviceProviders/Logitech/Utilities/OrionUtilities.cs @@ -153,7 +153,7 @@ namespace Artemis.DeviceProviders.Logitech.Utilities { if (b.Width > 21 || b.Height > 6) b = ResizeImage(b, 21, 6); - b.Save(@"D:\Gebruiker folder\Mijn afbeeldingen\BitmapOutput\test.bmp"); + var rect = new Rectangle(0, 0, b.Width, b.Height); var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat); diff --git a/Artemis/Artemis/InjectionFactories/ILayerEditorVmFactory.cs b/Artemis/Artemis/InjectionFactories/ILayerEditorVmFactory.cs deleted file mode 100644 index 0f3e0609f..000000000 --- a/Artemis/Artemis/InjectionFactories/ILayerEditorVmFactory.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Artemis.Models.Interfaces; -using Artemis.Profiles.Layers.Models; -using Artemis.ViewModels.Profiles; - -namespace Artemis.InjectionFactories -{ - public interface ILayerEditorVmFactory - { - LayerEditorViewModel CreateLayerEditorVm(IDataModel dataModel, LayerModel layer); - } -} \ No newline at end of file diff --git a/Artemis/Artemis/InjectionFactories/IProfileEditorVmFactory.cs b/Artemis/Artemis/InjectionFactories/IProfileEditorVmFactory.cs deleted file mode 100644 index ef596f950..000000000 --- a/Artemis/Artemis/InjectionFactories/IProfileEditorVmFactory.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Artemis.Managers; -using Artemis.Models; -using Artemis.ViewModels.Profiles; - -namespace Artemis.InjectionFactories -{ - public interface IProfileEditorVmFactory - { - ProfileEditorViewModel CreateProfileEditorVm(MainManager mainManager, EffectModel gameModel, string lastProfile); - } -} \ No newline at end of file diff --git a/Artemis/Artemis/InjectionModules/BaseModules.cs b/Artemis/Artemis/InjectionModules/BaseModules.cs index 0c5a73936..8ad841238 100644 --- a/Artemis/Artemis/InjectionModules/BaseModules.cs +++ b/Artemis/Artemis/InjectionModules/BaseModules.cs @@ -1,11 +1,9 @@ -using Artemis.InjectionFactories; -using Artemis.Modules.Effects.ProfilePreview; +using Artemis.Modules.Effects.ProfilePreview; using Artemis.Services; using Artemis.ViewModels; using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Profiles; using Caliburn.Micro; -using Ninject.Extensions.Factory; using Ninject.Modules; namespace Artemis.InjectionModules @@ -16,9 +14,8 @@ namespace Artemis.InjectionModules { // ViewModels Bind().To().InSingletonScope(); - Bind().ToFactory(); - Bind().ToFactory(); Bind().ToSelf(); + Bind().ToSelf(); Bind().ToSelf().InSingletonScope(); Bind().To().InSingletonScope(); @@ -31,6 +28,7 @@ namespace Artemis.InjectionModules // Services Bind().ToSelf().InSingletonScope(); + Bind().ToSelf().InSingletonScope(); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileViewModel.cs b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileViewModel.cs index 0299cc0ee..026436cba 100644 --- a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileViewModel.cs +++ b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileViewModel.cs @@ -1,43 +1,48 @@ using System.ComponentModel; -using Artemis.InjectionFactories; using Artemis.Managers; using Artemis.Modules.Effects.ProfilePreview; using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Profiles; +using Ninject; +using Ninject.Parameters; namespace Artemis.Modules.Effects.WindowsProfile { // TODO: This effect is a hybrid between a regular effect and a game, may want to clean this up public sealed class WindowsProfileViewModel : EffectViewModel { - public WindowsProfileViewModel(MainManager main, IProfileEditorVmFactory pFactory, - ProfilePreviewModel profilePreviewModel, WindowsProfileModel model) : base(main, model) + public WindowsProfileViewModel(MainManager main, IKernel kernel, ProfilePreviewModel profilePreviewModel, + WindowsProfileModel model) : base(main, model) { DisplayName = "Windows Profile"; - PFactory = pFactory; ProfilePreviewModel = profilePreviewModel; EffectSettings = ((WindowsProfileModel) EffectModel).Settings; - ProfileEditor = PFactory.CreateProfileEditorVm(main, (WindowsProfileModel) EffectModel, - ((WindowsProfileSettings) EffectSettings).LastProfile); + + IParameter[] args = + { + new ConstructorArgument("mainManager", main), + new ConstructorArgument("gameModel", (WindowsProfileModel) EffectModel), + new ConstructorArgument("lastProfile", ((WindowsProfileSettings) EffectSettings).LastProfile) + }; + ProfileEditor = kernel.Get(args); ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile; ProfileEditor.PropertyChanged += ProfileUpdater; + MainManager.EffectManager.EffectModels.Add(EffectModel); } public ProfileEditorViewModel ProfileEditor { get; set; } - - public IProfileEditorVmFactory PFactory { get; set; } public ProfilePreviewModel ProfilePreviewModel { get; set; } private void ProfileUpdater(object sender, PropertyChangedEventArgs e) { - if (e.PropertyName != "SelectedProfile" && IsActive) + if ((e.PropertyName != "SelectedProfile") && IsActive) return; EffectModel.Profile = ProfileEditor.SelectedProfile; ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile; - if (e.PropertyName != "SelectedProfile" || !ProfileEditor.ProfileViewModel.Activated || - ProfileEditor.ProfileViewModel.SelectedProfile == null) + if ((e.PropertyName != "SelectedProfile") || !ProfileEditor.ProfileViewModel.Activated || + (ProfileEditor.ProfileViewModel.SelectedProfile == null)) return; ((WindowsProfileSettings) EffectSettings).LastProfile = ProfileEditor.ProfileViewModel.SelectedProfile.Name; EffectSettings.Save(); diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs index fe83e2708..d32a9e759 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs @@ -1,6 +1,6 @@ using System.IO; using System.Windows.Forms; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Properties; using Artemis.Utilities; @@ -10,8 +10,8 @@ namespace Artemis.Modules.Games.CounterStrike { public sealed class CounterStrikeViewModel : GameViewModel { - public CounterStrikeViewModel(MainManager main, IProfileEditorVmFactory pFactory, CounterStrikeModel model) - : base(main, model, pFactory) + public CounterStrikeViewModel(MainManager main, IKernel kernel, CounterStrikeModel model) + : base(main, model, kernel) { DisplayName = "CS:GO"; diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs index 659809370..2965c8ab3 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs @@ -1,6 +1,6 @@ using System.IO; using System.Windows.Forms; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Properties; using Artemis.Utilities; @@ -10,8 +10,8 @@ namespace Artemis.Modules.Games.Dota2 { public sealed class Dota2ViewModel : GameViewModel { - public Dota2ViewModel(MainManager main, IProfileEditorVmFactory pFactory, Dota2Model model) - : base(main, model, pFactory) + public Dota2ViewModel(MainManager main, IKernel kernel, Dota2Model model) + : base(main, model, kernel) { DisplayName = "Dota 2"; diff --git a/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2ViewModel.cs b/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2ViewModel.cs index 63c125f08..99f7ec9b0 100644 --- a/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2ViewModel.cs +++ b/Artemis/Artemis/Modules/Games/EurotruckSimulator2/EurotruckSimulator2ViewModel.cs @@ -1,7 +1,7 @@ using System; using System.IO; using System.Windows.Forms; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Properties; using Artemis.Utilities; @@ -11,8 +11,8 @@ namespace Artemis.Modules.Games.EurotruckSimulator2 { public sealed class EurotruckSimulator2ViewModel : GameViewModel { - public EurotruckSimulator2ViewModel(MainManager main, IProfileEditorVmFactory pFactory, - EurotruckSimulator2Model model) : base(main, model, pFactory) + public EurotruckSimulator2ViewModel(MainManager main, IKernel kernel, + EurotruckSimulator2Model model) : base(main, model, kernel) { DisplayName = "ETS 2"; diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchViewModel.cs b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchViewModel.cs index 5882f192a..2df971da3 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchViewModel.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchViewModel.cs @@ -1,6 +1,6 @@ using System.IO; using System.Windows.Forms; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Utilities.DataReaders; using Artemis.ViewModels.Abstract; @@ -10,8 +10,8 @@ namespace Artemis.Modules.Games.Overwatch { public sealed class OverwatchViewModel : GameViewModel { - public OverwatchViewModel(MainManager main, IProfileEditorVmFactory pFactory, OverwatchModel model) - : base(main, model, pFactory) + public OverwatchViewModel(MainManager main, IKernel kernel, OverwatchModel model) + : base(main, model, kernel) { DisplayName = "Overwatch"; diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs index 35a90422c..6cb8f4489 100644 --- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs +++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs @@ -1,5 +1,5 @@ using Artemis.DAL; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Settings; using Artemis.Utilities; @@ -11,8 +11,8 @@ namespace Artemis.Modules.Games.RocketLeague { private string _versionText; - public RocketLeagueViewModel(MainManager main, IProfileEditorVmFactory pFactory, RocketLeagueModel model) - : base(main, model, pFactory) + public RocketLeagueViewModel(MainManager main, IKernel kernel, RocketLeagueModel model) + : base(main, model, kernel) { DisplayName = "Rocket League"; SetVersionText(); diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs index 91f1048d9..6347cfd30 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs @@ -1,4 +1,4 @@ -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.ViewModels.Abstract; @@ -6,8 +6,8 @@ namespace Artemis.Modules.Games.TheDivision { public sealed class TheDivisionViewModel : GameViewModel { - public TheDivisionViewModel(MainManager main, IProfileEditorVmFactory pFactory, TheDivisionModel model) - : base(main, model, pFactory) + public TheDivisionViewModel(MainManager main, IKernel kernel, TheDivisionModel model) + : base(main, model, kernel) { DisplayName = "The Division"; } diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs index 5df40b4a9..73da7518b 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Reflection; using System.Windows.Forms; using Artemis.DAL; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Properties; using Artemis.Utilities; @@ -17,8 +17,8 @@ namespace Artemis.Modules.Games.UnrealTournament { public sealed class UnrealTournamentViewModel : GameViewModel { - public UnrealTournamentViewModel(MainManager main, IProfileEditorVmFactory pFactory, UnrealTournamentModel model) - : base(main, model, pFactory) + public UnrealTournamentViewModel(MainManager main, IKernel kernel, UnrealTournamentModel model) + : base(main, model, kernel) { DisplayName = "Unreal Tournament"; MainManager.EffectManager.EffectModels.Add(GameModel); diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs index 8c8d7f2ce..853e74c3c 100644 --- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs +++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs @@ -5,7 +5,7 @@ using System.IO.Compression; using System.Linq; using System.Reflection; using System.Windows.Forms; -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.Properties; using Artemis.Utilities; @@ -15,8 +15,8 @@ namespace Artemis.Modules.Games.Witcher3 { public sealed class Witcher3ViewModel : GameViewModel { - public Witcher3ViewModel(MainManager main, IProfileEditorVmFactory pFactory, Witcher3Model model) - : base(main, model, pFactory) + public Witcher3ViewModel(MainManager main, IKernel kernel, Witcher3Model model) + : base(main, model, kernel) { DisplayName = "The Witcher 3"; } diff --git a/Artemis/Artemis/Modules/Games/WoW/WoWViewModel.cs b/Artemis/Artemis/Modules/Games/WoW/WoWViewModel.cs index f5bffcedd..359ad9ac9 100644 --- a/Artemis/Artemis/Modules/Games/WoW/WoWViewModel.cs +++ b/Artemis/Artemis/Modules/Games/WoW/WoWViewModel.cs @@ -1,4 +1,4 @@ -using Artemis.InjectionFactories; +using Ninject; using Artemis.Managers; using Artemis.ViewModels.Abstract; @@ -6,8 +6,8 @@ namespace Artemis.Modules.Games.WoW { public sealed class WoWViewModel : GameViewModel { - public WoWViewModel(MainManager main, IProfileEditorVmFactory pFactory, WoWModel model) - : base(main, model, pFactory) + public WoWViewModel(MainManager main, IKernel kernel, WoWModel model) + : base(main, model, kernel) { DisplayName = "WoW"; } diff --git a/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs index 55ee632c6..72aa1457c 100644 --- a/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs +++ b/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs @@ -53,7 +53,10 @@ namespace Artemis.Profiles.Lua { lock (LuaEventsWrapper.InvokeLock) { - LuaScript.DoString(ProfileModel.LuaScript); + lock (LuaScript) + { + LuaScript.DoString(ProfileModel.LuaScript); + } } } catch (InternalErrorException e) @@ -139,18 +142,21 @@ namespace Artemis.Profiles.Lua public static void Clear() { - // Clear old fields/properties - _keyboardProvider = null; - ProfileModel = null; - LuaKeyboardWrapper?.Dispose(); - LuaKeyboardWrapper = null; + lock (LuaScript) + { + // Clear old fields/properties + _keyboardProvider = null; + ProfileModel = null; + LuaKeyboardWrapper?.Dispose(); + LuaKeyboardWrapper = null; - LuaScript.Globals.Clear(); - LuaScript.Registry.Clear(); - LuaScript.Registry.RegisterConstants(); - LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox); - LuaScript.Globals.RegisterConstants(); - LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox); + LuaScript.Globals.Clear(); + LuaScript.Registry.Clear(); + LuaScript.Registry.RegisterConstants(); + LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox); + LuaScript.Globals.RegisterConstants(); + LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox); + } } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/ProfileModel.cs b/Artemis/Artemis/Profiles/ProfileModel.cs index 5098300b4..162fcbbd3 100644 --- a/Artemis/Artemis/Profiles/ProfileModel.cs +++ b/Artemis/Artemis/Profiles/ProfileModel.cs @@ -219,5 +219,21 @@ namespace Artemis.Profiles LuaWrapper.Clear(); } } + + public LayerModel AddLayer(LayerModel afterLayer) + { + // Create a new layer + var layer = LayerModel.CreateLayer(); + + if (afterLayer!= null) + afterLayer.InsertAfter(layer); + else + { + Layers.Add(layer); + FixOrder(); + } + + return layer; + } } } \ No newline at end of file diff --git a/Artemis/Artemis/Services/WindowService.cs b/Artemis/Artemis/Services/WindowService.cs new file mode 100644 index 000000000..d391e8170 --- /dev/null +++ b/Artemis/Artemis/Services/WindowService.cs @@ -0,0 +1,32 @@ +using Caliburn.Micro; +using Ninject; +using Ninject.Parameters; + +namespace Artemis.Services +{ + public class WindowService + { + private readonly IKernel _kernel; + + public WindowService(IKernel kernel) + { + _kernel = kernel; + } + + public void ShowWindow(params IParameter[] param) where T : class + { + var windowManager = new WindowManager(); + var viewModel = _kernel.Get(param); + + windowManager.ShowWindow(viewModel); + } + + public void ShowDialog(params IParameter[] param) where T : class + { + var windowManager = new WindowManager(); + var viewModel = _kernel.Get(param); + + windowManager.ShowDialog(viewModel); + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs b/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs index d8c60c06f..7694d5b25 100644 --- a/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs +++ b/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs @@ -1,5 +1,4 @@ using System.ComponentModel; -using Artemis.InjectionFactories; using Artemis.Managers; using Artemis.Models; using Artemis.Modules.Effects.ProfilePreview; @@ -9,6 +8,7 @@ using Artemis.ViewModels.Profiles; using Caliburn.Micro; using Ninject; using Ninject.Extensions.Logging; +using Ninject.Parameters; namespace Artemis.ViewModels.Abstract { @@ -16,14 +16,19 @@ namespace Artemis.ViewModels.Abstract { private GameSettings _gameSettings; - protected GameViewModel(MainManager mainManager, GameModel gameModel, IProfileEditorVmFactory pFactory) + protected GameViewModel(MainManager mainManager, GameModel gameModel, IKernel kernel) { MainManager = mainManager; GameModel = gameModel; - PFactory = pFactory; GameSettings = gameModel.Settings; - ProfileEditor = PFactory.CreateProfileEditorVm(mainManager, gameModel, GameSettings.LastProfile); + IParameter[] args = + { + new ConstructorArgument("mainManager", mainManager), + new ConstructorArgument("gameModel", gameModel), + new ConstructorArgument("lastProfile", GameSettings.LastProfile) + }; + ProfileEditor = kernel.Get(args); GameModel.Profile = ProfileEditor.SelectedProfile; ProfileEditor.PropertyChanged += ProfileUpdater; } @@ -37,8 +42,6 @@ namespace Artemis.ViewModels.Abstract [Inject] public MetroDialogService DialogService { get; set; } - public IProfileEditorVmFactory PFactory { get; set; } - public ProfileEditorViewModel ProfileEditor { get; set; } public GameModel GameModel { get; set; } @@ -89,14 +92,14 @@ namespace Artemis.ViewModels.Abstract private void ProfileUpdater(object sender, PropertyChangedEventArgs e) { - if (e.PropertyName != "SelectedProfile" && IsActive) + if ((e.PropertyName != "SelectedProfile") && IsActive) return; - + GameModel.Profile = ProfileEditor.SelectedProfile; ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile; - if (e.PropertyName != "SelectedProfile" || !ProfileEditor.ProfileViewModel.Activated || - ProfileEditor.ProfileViewModel.SelectedProfile == null) + if ((e.PropertyName != "SelectedProfile") || !ProfileEditor.ProfileViewModel.Activated || + (ProfileEditor.ProfileViewModel.SelectedProfile == null)) return; GameSettings.LastProfile = ProfileEditor.ProfileViewModel.SelectedProfile.Name; GameSettings.Save(); diff --git a/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs index aac0629c6..f6a22b203 100644 --- a/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs @@ -5,7 +5,6 @@ using System.IO; using System.Linq; using Artemis.Models.Interfaces; using Artemis.Profiles.Layers.Abstract; -using Artemis.Profiles.Layers.Conditions; using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; using Artemis.Profiles.Layers.Types.Keyboard; @@ -205,7 +204,7 @@ namespace Artemis.ViewModels.Profiles ProposedLayer.Properties.Conditions.Add(conditionViewModel.LayerConditionModel); // If not a keyboard, ignore size and position - if (ProposedLayer.LayerType.DrawType != DrawType.Keyboard || !ProposedLayer.LayerType.ShowInEdtor) + if ((ProposedLayer.LayerType.DrawType != DrawType.Keyboard) || !ProposedLayer.LayerType.ShowInEdtor) { ProposedLayer.Properties.Width = Layer.Properties.Width; ProposedLayer.Properties.Height = Layer.Properties.Height; @@ -213,7 +212,7 @@ namespace Artemis.ViewModels.Profiles ProposedLayer.Properties.Y = Layer.Properties.Y; ProposedLayer.Properties.Contain = Layer.Properties.Contain; } - + // Ignore the children, can't just temporarily add them to the proposed layer because // that would upset the child layers' relations (sounds like Dr. Phil amirite?) var currentObj = Clone(Layer); diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs index 29cc10dbe..25f46cab4 100644 --- a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs @@ -11,7 +11,6 @@ using System.Windows.Media; using Artemis.DAL; using Artemis.DeviceProviders; using Artemis.Events; -using Artemis.InjectionFactories; using Artemis.Managers; using Artemis.Models; using Artemis.Profiles; @@ -25,6 +24,7 @@ using Caliburn.Micro; using GongSolutions.Wpf.DragDrop; using MahApps.Metro.Controls.Dialogs; using Ninject; +using Ninject.Parameters; using DragDropEffects = System.Windows.DragDropEffects; using IDropTarget = GongSolutions.Wpf.DragDrop.IDropTarget; using MouseEventArgs = System.Windows.Input.MouseEventArgs; @@ -36,7 +36,6 @@ namespace Artemis.ViewModels.Profiles public sealed class ProfileEditorViewModel : Screen, IDropTarget { private readonly EffectModel _gameModel; - private readonly ILayerEditorVmFactory _layerEditorVmFactory; private readonly MainManager _mainManager; private readonly Timer _saveTimer; private ImageSource _keyboardPreview; @@ -46,16 +45,16 @@ namespace Artemis.ViewModels.Profiles private ProfileModel _selectedProfile; public ProfileEditorViewModel(MainManager mainManager, EffectModel gameModel, ProfileViewModel profileViewModel, - MetroDialogService dialogService, string lastProfile, ILayerEditorVmFactory layerEditorVmFactory) + MetroDialogService dialogService, WindowService windowService, string lastProfile) { _mainManager = mainManager; _gameModel = gameModel; - _layerEditorVmFactory = layerEditorVmFactory; ProfileNames = new BindableCollection(); Layers = new BindableCollection(); ProfileViewModel = profileViewModel; DialogService = dialogService; + WindowService = windowService; LastProfile = lastProfile; PropertyChanged += EditorStateHandler; @@ -71,6 +70,8 @@ namespace Artemis.ViewModels.Profiles [Inject] public MetroDialogService DialogService { get; set; } + public WindowService WindowService { get; set; } + public string LastProfile { get; set; } public ProfileViewModel ProfileViewModel { get; set; } @@ -104,10 +105,10 @@ namespace Artemis.ViewModels.Profiles public string SelectedProfileName { - get { return SelectedProfile.Name; } + get { return SelectedProfile?.Name; } set { - if (value == SelectedProfile.Name) + if (value == SelectedProfile?.Name) return; SelectedProfile = ProfileProvider.GetProfile( @@ -295,20 +296,11 @@ namespace Artemis.ViewModels.Profiles if (layer == null) return; - IWindowManager manager = new WindowManager(); - var editorVm = _layerEditorVmFactory.CreateLayerEditorVm(_gameModel.DataModel, layer); - - dynamic settings = new ExpandoObject(); - var icon = ImageUtilities.GenerateWindowIcon(); - - settings.Title = "Artemis | Edit " + layer.Name; - settings.Icon = icon; - - manager.ShowDialog(editorVm, null, settings); - - //// The layer editor VM may have created a new instance of the layer, reapply it to the list - //layer.Replace(editorVm.Layer); - //layer = editorVm.Layer; + IParameter[] args = { + new ConstructorArgument("dataModel", _gameModel.DataModel), + new ConstructorArgument("layer", layer) + }; + WindowService.ShowDialog(args); // If the layer was a folder, but isn't anymore, assign it's children to it's parent. if (!(layer.LayerType is FolderType) && layer.Children.Any()) @@ -339,18 +331,9 @@ namespace Artemis.ViewModels.Profiles if (SelectedProfile == null) return null; - // Create a new layer - var layer = LayerModel.CreateLayer(); - - if (ProfileViewModel.SelectedLayer != null) - ProfileViewModel.SelectedLayer.InsertAfter(layer); - else - { - SelectedProfile.Layers.Add(layer); - SelectedProfile.FixOrder(); - } - + var layer = SelectedProfile.AddLayer(ProfileViewModel.SelectedLayer); UpdateLayerList(layer); + return layer; } diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs index c0b63b4ac..4786ea954 100644 --- a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs @@ -206,8 +206,7 @@ namespace Artemis.ViewModels.Profiles } /// - /// Second handler for clicking, selects a the layer the user clicked on - /// if the used clicked on an empty spot, deselects the current layer + /// Second handler for clicking, selects a the layer the user clicked on. /// /// public void MouseUpKeyboardPreview(MouseButtonEventArgs e) @@ -229,7 +228,8 @@ namespace Artemis.ViewModels.Profiles var hoverLayer = GetLayers().Where(l => l.MustDraw()) .FirstOrDefault(l => l.Properties.GetRect(1).Contains(x, y)); - SelectedLayer = hoverLayer; + if (hoverLayer != null) + SelectedLayer = hoverLayer; } /// @@ -341,7 +341,7 @@ namespace Artemis.ViewModels.Profiles if (ShowAll) return SelectedProfile.GetRenderLayers(new ProfilePreviewDataModel(), false, true); - if (SelectedLayer == null) + if (SelectedLayer == null || !SelectedLayer.Enabled) return new EditableList(); if (SelectedLayer.LayerType is FolderType) @@ -355,21 +355,17 @@ namespace Artemis.ViewModels.Profiles private List GetLayers() { + if (ShowAll) + return SelectedProfile.GetLayers(); if (SelectedLayer == null) return new List(); lock (SelectedLayer) { // Get the layers that must be drawn - List drawLayers; - if (ShowAll) - drawLayers = SelectedProfile.GetLayers(); - else if (SelectedLayer.LayerType is FolderType) - drawLayers = SelectedLayer.GetLayers().ToList(); - else - drawLayers = new List {SelectedLayer}; - - return drawLayers; + if (SelectedLayer.LayerType is FolderType) + return SelectedLayer.GetLayers().ToList(); + return new List {SelectedLayer}; } } diff --git a/Artemis/Artemis/packages.config b/Artemis/Artemis/packages.config index 3df870d76..0e4350b48 100644 --- a/Artemis/Artemis/packages.config +++ b/Artemis/Artemis/packages.config @@ -18,7 +18,6 @@ -