1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2026-01-01 10:13:30 +00:00

Removed factories in favor of a new WindowService

Fixed layer selection issues in profile editor
This commit is contained in:
SpoinkyNL 2016-11-06 17:27:36 +01:00
parent 73ab4b3fce
commit a40728244a
23 changed files with 152 additions and 142 deletions

View File

@ -226,10 +226,6 @@
<HintPath>..\packages\Ninject.Extensions.Conventions.3.2.0.0\lib\net45-full\Ninject.Extensions.Conventions.dll</HintPath> <HintPath>..\packages\Ninject.Extensions.Conventions.3.2.0.0\lib\net45-full\Ninject.Extensions.Conventions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Ninject.Extensions.Factory, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.Extensions.Factory.3.2.1.0\lib\net45-full\Ninject.Extensions.Factory.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Ninject.Extensions.Logging, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL"> <Reference Include="Ninject.Extensions.Logging, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.Extensions.Logging.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.dll</HintPath> <HintPath>..\packages\Ninject.Extensions.Logging.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -337,8 +333,6 @@
<Compile Include="Events\KeyboardChangedEventArgs.cs" /> <Compile Include="Events\KeyboardChangedEventArgs.cs" />
<Compile Include="Events\RazerColorArrayChanged.cs" /> <Compile Include="Events\RazerColorArrayChanged.cs" />
<Compile Include="Events\RazerColorsChangedEventArgs.cs" /> <Compile Include="Events\RazerColorsChangedEventArgs.cs" />
<Compile Include="InjectionFactories\ILayerEditorVmFactory.cs" />
<Compile Include="InjectionFactories\IProfileEditorVmFactory.cs" />
<Compile Include="InjectionModules\DeviceModules.cs" /> <Compile Include="InjectionModules\DeviceModules.cs" />
<Compile Include="InjectionModules\EffectModules.cs" /> <Compile Include="InjectionModules\EffectModules.cs" />
<Compile Include="InjectionModules\ProfileModules.cs" /> <Compile Include="InjectionModules\ProfileModules.cs" />
@ -545,6 +539,7 @@
</Compile> </Compile>
<Compile Include="Services\DialogService.cs" /> <Compile Include="Services\DialogService.cs" />
<Compile Include="Services\MetroDialogService.cs" /> <Compile Include="Services\MetroDialogService.cs" />
<Compile Include="Services\WindowService.cs" />
<Compile Include="Settings\EffectSettings.cs" /> <Compile Include="Settings\EffectSettings.cs" />
<Compile Include="Settings\GameSettings.cs" /> <Compile Include="Settings\GameSettings.cs" />
<Compile Include="Settings\GeneralSettings.cs" /> <Compile Include="Settings\GeneralSettings.cs" />

View File

@ -153,7 +153,7 @@ namespace Artemis.DeviceProviders.Logitech.Utilities
{ {
if (b.Width > 21 || b.Height > 6) if (b.Width > 21 || b.Height > 6)
b = ResizeImage(b, 21, 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 rect = new Rectangle(0, 0, b.Width, b.Height);
var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat); var bitmapData = b.LockBits(rect, ImageLockMode.ReadWrite, b.PixelFormat);

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -1,11 +1,9 @@
using Artemis.InjectionFactories; using Artemis.Modules.Effects.ProfilePreview;
using Artemis.Modules.Effects.ProfilePreview;
using Artemis.Services; using Artemis.Services;
using Artemis.ViewModels; using Artemis.ViewModels;
using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Abstract;
using Artemis.ViewModels.Profiles; using Artemis.ViewModels.Profiles;
using Caliburn.Micro; using Caliburn.Micro;
using Ninject.Extensions.Factory;
using Ninject.Modules; using Ninject.Modules;
namespace Artemis.InjectionModules namespace Artemis.InjectionModules
@ -16,9 +14,8 @@ namespace Artemis.InjectionModules
{ {
// ViewModels // ViewModels
Bind<IScreen>().To<ShellViewModel>().InSingletonScope(); Bind<IScreen>().To<ShellViewModel>().InSingletonScope();
Bind<IProfileEditorVmFactory>().ToFactory();
Bind<ILayerEditorVmFactory>().ToFactory();
Bind<ProfileViewModel>().ToSelf(); Bind<ProfileViewModel>().ToSelf();
Bind<ProfileEditorViewModel>().ToSelf();
Bind<DebugViewModel>().ToSelf().InSingletonScope(); Bind<DebugViewModel>().ToSelf().InSingletonScope();
Bind<BaseViewModel>().To<WelcomeViewModel>().InSingletonScope(); Bind<BaseViewModel>().To<WelcomeViewModel>().InSingletonScope();
@ -31,6 +28,7 @@ namespace Artemis.InjectionModules
// Services // Services
Bind<MetroDialogService>().ToSelf().InSingletonScope(); Bind<MetroDialogService>().ToSelf().InSingletonScope();
Bind<WindowService>().ToSelf().InSingletonScope();
} }
} }
} }

View File

@ -1,43 +1,48 @@
using System.ComponentModel; using System.ComponentModel;
using Artemis.InjectionFactories;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Modules.Effects.ProfilePreview; using Artemis.Modules.Effects.ProfilePreview;
using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Abstract;
using Artemis.ViewModels.Profiles; using Artemis.ViewModels.Profiles;
using Ninject;
using Ninject.Parameters;
namespace Artemis.Modules.Effects.WindowsProfile namespace Artemis.Modules.Effects.WindowsProfile
{ {
// TODO: This effect is a hybrid between a regular effect and a game, may want to clean this up // 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 sealed class WindowsProfileViewModel : EffectViewModel
{ {
public WindowsProfileViewModel(MainManager main, IProfileEditorVmFactory pFactory, public WindowsProfileViewModel(MainManager main, IKernel kernel, ProfilePreviewModel profilePreviewModel,
ProfilePreviewModel profilePreviewModel, WindowsProfileModel model) : base(main, model) WindowsProfileModel model) : base(main, model)
{ {
DisplayName = "Windows Profile"; DisplayName = "Windows Profile";
PFactory = pFactory;
ProfilePreviewModel = profilePreviewModel; ProfilePreviewModel = profilePreviewModel;
EffectSettings = ((WindowsProfileModel) EffectModel).Settings; 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<ProfileEditorViewModel>(args);
ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile; ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile;
ProfileEditor.PropertyChanged += ProfileUpdater; ProfileEditor.PropertyChanged += ProfileUpdater;
MainManager.EffectManager.EffectModels.Add(EffectModel); MainManager.EffectManager.EffectModels.Add(EffectModel);
} }
public ProfileEditorViewModel ProfileEditor { get; set; } public ProfileEditorViewModel ProfileEditor { get; set; }
public IProfileEditorVmFactory PFactory { get; set; }
public ProfilePreviewModel ProfilePreviewModel { get; set; } public ProfilePreviewModel ProfilePreviewModel { get; set; }
private void ProfileUpdater(object sender, PropertyChangedEventArgs e) private void ProfileUpdater(object sender, PropertyChangedEventArgs e)
{ {
if (e.PropertyName != "SelectedProfile" && IsActive) if ((e.PropertyName != "SelectedProfile") && IsActive)
return; return;
EffectModel.Profile = ProfileEditor.SelectedProfile; EffectModel.Profile = ProfileEditor.SelectedProfile;
ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile; ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile;
if (e.PropertyName != "SelectedProfile" || !ProfileEditor.ProfileViewModel.Activated || if ((e.PropertyName != "SelectedProfile") || !ProfileEditor.ProfileViewModel.Activated ||
ProfileEditor.ProfileViewModel.SelectedProfile == null) (ProfileEditor.ProfileViewModel.SelectedProfile == null))
return; return;
((WindowsProfileSettings) EffectSettings).LastProfile = ProfileEditor.ProfileViewModel.SelectedProfile.Name; ((WindowsProfileSettings) EffectSettings).LastProfile = ProfileEditor.ProfileViewModel.SelectedProfile.Name;
EffectSettings.Save(); EffectSettings.Save();

View File

@ -1,6 +1,6 @@
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Artemis.Utilities; using Artemis.Utilities;
@ -10,8 +10,8 @@ namespace Artemis.Modules.Games.CounterStrike
{ {
public sealed class CounterStrikeViewModel : GameViewModel public sealed class CounterStrikeViewModel : GameViewModel
{ {
public CounterStrikeViewModel(MainManager main, IProfileEditorVmFactory pFactory, CounterStrikeModel model) public CounterStrikeViewModel(MainManager main, IKernel kernel, CounterStrikeModel model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "CS:GO"; DisplayName = "CS:GO";

View File

@ -1,6 +1,6 @@
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Artemis.Utilities; using Artemis.Utilities;
@ -10,8 +10,8 @@ namespace Artemis.Modules.Games.Dota2
{ {
public sealed class Dota2ViewModel : GameViewModel public sealed class Dota2ViewModel : GameViewModel
{ {
public Dota2ViewModel(MainManager main, IProfileEditorVmFactory pFactory, Dota2Model model) public Dota2ViewModel(MainManager main, IKernel kernel, Dota2Model model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "Dota 2"; DisplayName = "Dota 2";

View File

@ -1,7 +1,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Artemis.Utilities; using Artemis.Utilities;
@ -11,8 +11,8 @@ namespace Artemis.Modules.Games.EurotruckSimulator2
{ {
public sealed class EurotruckSimulator2ViewModel : GameViewModel public sealed class EurotruckSimulator2ViewModel : GameViewModel
{ {
public EurotruckSimulator2ViewModel(MainManager main, IProfileEditorVmFactory pFactory, public EurotruckSimulator2ViewModel(MainManager main, IKernel kernel,
EurotruckSimulator2Model model) : base(main, model, pFactory) EurotruckSimulator2Model model) : base(main, model, kernel)
{ {
DisplayName = "ETS 2"; DisplayName = "ETS 2";

View File

@ -1,6 +1,6 @@
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Utilities.DataReaders; using Artemis.Utilities.DataReaders;
using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Abstract;
@ -10,8 +10,8 @@ namespace Artemis.Modules.Games.Overwatch
{ {
public sealed class OverwatchViewModel : GameViewModel public sealed class OverwatchViewModel : GameViewModel
{ {
public OverwatchViewModel(MainManager main, IProfileEditorVmFactory pFactory, OverwatchModel model) public OverwatchViewModel(MainManager main, IKernel kernel, OverwatchModel model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "Overwatch"; DisplayName = "Overwatch";

View File

@ -1,5 +1,5 @@
using Artemis.DAL; using Artemis.DAL;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Settings; using Artemis.Settings;
using Artemis.Utilities; using Artemis.Utilities;
@ -11,8 +11,8 @@ namespace Artemis.Modules.Games.RocketLeague
{ {
private string _versionText; private string _versionText;
public RocketLeagueViewModel(MainManager main, IProfileEditorVmFactory pFactory, RocketLeagueModel model) public RocketLeagueViewModel(MainManager main, IKernel kernel, RocketLeagueModel model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "Rocket League"; DisplayName = "Rocket League";
SetVersionText(); SetVersionText();

View File

@ -1,4 +1,4 @@
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Abstract;
@ -6,8 +6,8 @@ namespace Artemis.Modules.Games.TheDivision
{ {
public sealed class TheDivisionViewModel : GameViewModel public sealed class TheDivisionViewModel : GameViewModel
{ {
public TheDivisionViewModel(MainManager main, IProfileEditorVmFactory pFactory, TheDivisionModel model) public TheDivisionViewModel(MainManager main, IKernel kernel, TheDivisionModel model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "The Division"; DisplayName = "The Division";
} }

View File

@ -5,7 +5,7 @@ using System.Linq;
using System.Reflection; using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.DAL; using Artemis.DAL;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Artemis.Utilities; using Artemis.Utilities;
@ -17,8 +17,8 @@ namespace Artemis.Modules.Games.UnrealTournament
{ {
public sealed class UnrealTournamentViewModel : GameViewModel public sealed class UnrealTournamentViewModel : GameViewModel
{ {
public UnrealTournamentViewModel(MainManager main, IProfileEditorVmFactory pFactory, UnrealTournamentModel model) public UnrealTournamentViewModel(MainManager main, IKernel kernel, UnrealTournamentModel model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "Unreal Tournament"; DisplayName = "Unreal Tournament";
MainManager.EffectManager.EffectModels.Add(GameModel); MainManager.EffectManager.EffectModels.Add(GameModel);

View File

@ -5,7 +5,7 @@ using System.IO.Compression;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Properties; using Artemis.Properties;
using Artemis.Utilities; using Artemis.Utilities;
@ -15,8 +15,8 @@ namespace Artemis.Modules.Games.Witcher3
{ {
public sealed class Witcher3ViewModel : GameViewModel public sealed class Witcher3ViewModel : GameViewModel
{ {
public Witcher3ViewModel(MainManager main, IProfileEditorVmFactory pFactory, Witcher3Model model) public Witcher3ViewModel(MainManager main, IKernel kernel, Witcher3Model model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "The Witcher 3"; DisplayName = "The Witcher 3";
} }

View File

@ -1,4 +1,4 @@
using Artemis.InjectionFactories; using Ninject;
using Artemis.Managers; using Artemis.Managers;
using Artemis.ViewModels.Abstract; using Artemis.ViewModels.Abstract;
@ -6,8 +6,8 @@ namespace Artemis.Modules.Games.WoW
{ {
public sealed class WoWViewModel : GameViewModel public sealed class WoWViewModel : GameViewModel
{ {
public WoWViewModel(MainManager main, IProfileEditorVmFactory pFactory, WoWModel model) public WoWViewModel(MainManager main, IKernel kernel, WoWModel model)
: base(main, model, pFactory) : base(main, model, kernel)
{ {
DisplayName = "WoW"; DisplayName = "WoW";
} }

View File

@ -53,7 +53,10 @@ namespace Artemis.Profiles.Lua
{ {
lock (LuaEventsWrapper.InvokeLock) lock (LuaEventsWrapper.InvokeLock)
{ {
LuaScript.DoString(ProfileModel.LuaScript); lock (LuaScript)
{
LuaScript.DoString(ProfileModel.LuaScript);
}
} }
} }
catch (InternalErrorException e) catch (InternalErrorException e)
@ -139,18 +142,21 @@ namespace Artemis.Profiles.Lua
public static void Clear() public static void Clear()
{ {
// Clear old fields/properties lock (LuaScript)
_keyboardProvider = null; {
ProfileModel = null; // Clear old fields/properties
LuaKeyboardWrapper?.Dispose(); _keyboardProvider = null;
LuaKeyboardWrapper = null; ProfileModel = null;
LuaKeyboardWrapper?.Dispose();
LuaKeyboardWrapper = null;
LuaScript.Globals.Clear(); LuaScript.Globals.Clear();
LuaScript.Registry.Clear(); LuaScript.Registry.Clear();
LuaScript.Registry.RegisterConstants(); LuaScript.Registry.RegisterConstants();
LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox); LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
LuaScript.Globals.RegisterConstants(); LuaScript.Globals.RegisterConstants();
LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox); LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
}
} }
} }
} }

View File

@ -219,5 +219,21 @@ namespace Artemis.Profiles
LuaWrapper.Clear(); 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;
}
} }
} }

View File

@ -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<T>(params IParameter[] param) where T : class
{
var windowManager = new WindowManager();
var viewModel = _kernel.Get<T>(param);
windowManager.ShowWindow(viewModel);
}
public void ShowDialog<T>(params IParameter[] param) where T : class
{
var windowManager = new WindowManager();
var viewModel = _kernel.Get<T>(param);
windowManager.ShowDialog(viewModel);
}
}
}

View File

@ -1,5 +1,4 @@
using System.ComponentModel; using System.ComponentModel;
using Artemis.InjectionFactories;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Modules.Effects.ProfilePreview; using Artemis.Modules.Effects.ProfilePreview;
@ -9,6 +8,7 @@ using Artemis.ViewModels.Profiles;
using Caliburn.Micro; using Caliburn.Micro;
using Ninject; using Ninject;
using Ninject.Extensions.Logging; using Ninject.Extensions.Logging;
using Ninject.Parameters;
namespace Artemis.ViewModels.Abstract namespace Artemis.ViewModels.Abstract
{ {
@ -16,14 +16,19 @@ namespace Artemis.ViewModels.Abstract
{ {
private GameSettings _gameSettings; private GameSettings _gameSettings;
protected GameViewModel(MainManager mainManager, GameModel gameModel, IProfileEditorVmFactory pFactory) protected GameViewModel(MainManager mainManager, GameModel gameModel, IKernel kernel)
{ {
MainManager = mainManager; MainManager = mainManager;
GameModel = gameModel; GameModel = gameModel;
PFactory = pFactory;
GameSettings = gameModel.Settings; 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<ProfileEditorViewModel>(args);
GameModel.Profile = ProfileEditor.SelectedProfile; GameModel.Profile = ProfileEditor.SelectedProfile;
ProfileEditor.PropertyChanged += ProfileUpdater; ProfileEditor.PropertyChanged += ProfileUpdater;
} }
@ -37,8 +42,6 @@ namespace Artemis.ViewModels.Abstract
[Inject] [Inject]
public MetroDialogService DialogService { get; set; } public MetroDialogService DialogService { get; set; }
public IProfileEditorVmFactory PFactory { get; set; }
public ProfileEditorViewModel ProfileEditor { get; set; } public ProfileEditorViewModel ProfileEditor { get; set; }
public GameModel GameModel { get; set; } public GameModel GameModel { get; set; }
@ -89,14 +92,14 @@ namespace Artemis.ViewModels.Abstract
private void ProfileUpdater(object sender, PropertyChangedEventArgs e) private void ProfileUpdater(object sender, PropertyChangedEventArgs e)
{ {
if (e.PropertyName != "SelectedProfile" && IsActive) if ((e.PropertyName != "SelectedProfile") && IsActive)
return; return;
GameModel.Profile = ProfileEditor.SelectedProfile; GameModel.Profile = ProfileEditor.SelectedProfile;
ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile; ProfilePreviewModel.Profile = ProfileEditor.SelectedProfile;
if (e.PropertyName != "SelectedProfile" || !ProfileEditor.ProfileViewModel.Activated || if ((e.PropertyName != "SelectedProfile") || !ProfileEditor.ProfileViewModel.Activated ||
ProfileEditor.ProfileViewModel.SelectedProfile == null) (ProfileEditor.ProfileViewModel.SelectedProfile == null))
return; return;
GameSettings.LastProfile = ProfileEditor.ProfileViewModel.SelectedProfile.Name; GameSettings.LastProfile = ProfileEditor.ProfileViewModel.SelectedProfile.Name;
GameSettings.Save(); GameSettings.Save();

View File

@ -5,7 +5,6 @@ using System.IO;
using System.Linq; using System.Linq;
using Artemis.Models.Interfaces; using Artemis.Models.Interfaces;
using Artemis.Profiles.Layers.Abstract; using Artemis.Profiles.Layers.Abstract;
using Artemis.Profiles.Layers.Conditions;
using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Interfaces;
using Artemis.Profiles.Layers.Models; using Artemis.Profiles.Layers.Models;
using Artemis.Profiles.Layers.Types.Keyboard; using Artemis.Profiles.Layers.Types.Keyboard;
@ -205,7 +204,7 @@ namespace Artemis.ViewModels.Profiles
ProposedLayer.Properties.Conditions.Add(conditionViewModel.LayerConditionModel); ProposedLayer.Properties.Conditions.Add(conditionViewModel.LayerConditionModel);
// If not a keyboard, ignore size and position // 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.Width = Layer.Properties.Width;
ProposedLayer.Properties.Height = Layer.Properties.Height; ProposedLayer.Properties.Height = Layer.Properties.Height;

View File

@ -11,7 +11,6 @@ using System.Windows.Media;
using Artemis.DAL; using Artemis.DAL;
using Artemis.DeviceProviders; using Artemis.DeviceProviders;
using Artemis.Events; using Artemis.Events;
using Artemis.InjectionFactories;
using Artemis.Managers; using Artemis.Managers;
using Artemis.Models; using Artemis.Models;
using Artemis.Profiles; using Artemis.Profiles;
@ -25,6 +24,7 @@ using Caliburn.Micro;
using GongSolutions.Wpf.DragDrop; using GongSolutions.Wpf.DragDrop;
using MahApps.Metro.Controls.Dialogs; using MahApps.Metro.Controls.Dialogs;
using Ninject; using Ninject;
using Ninject.Parameters;
using DragDropEffects = System.Windows.DragDropEffects; using DragDropEffects = System.Windows.DragDropEffects;
using IDropTarget = GongSolutions.Wpf.DragDrop.IDropTarget; using IDropTarget = GongSolutions.Wpf.DragDrop.IDropTarget;
using MouseEventArgs = System.Windows.Input.MouseEventArgs; using MouseEventArgs = System.Windows.Input.MouseEventArgs;
@ -36,7 +36,6 @@ namespace Artemis.ViewModels.Profiles
public sealed class ProfileEditorViewModel : Screen, IDropTarget public sealed class ProfileEditorViewModel : Screen, IDropTarget
{ {
private readonly EffectModel _gameModel; private readonly EffectModel _gameModel;
private readonly ILayerEditorVmFactory _layerEditorVmFactory;
private readonly MainManager _mainManager; private readonly MainManager _mainManager;
private readonly Timer _saveTimer; private readonly Timer _saveTimer;
private ImageSource _keyboardPreview; private ImageSource _keyboardPreview;
@ -46,16 +45,16 @@ namespace Artemis.ViewModels.Profiles
private ProfileModel _selectedProfile; private ProfileModel _selectedProfile;
public ProfileEditorViewModel(MainManager mainManager, EffectModel gameModel, ProfileViewModel profileViewModel, public ProfileEditorViewModel(MainManager mainManager, EffectModel gameModel, ProfileViewModel profileViewModel,
MetroDialogService dialogService, string lastProfile, ILayerEditorVmFactory layerEditorVmFactory) MetroDialogService dialogService, WindowService windowService, string lastProfile)
{ {
_mainManager = mainManager; _mainManager = mainManager;
_gameModel = gameModel; _gameModel = gameModel;
_layerEditorVmFactory = layerEditorVmFactory;
ProfileNames = new BindableCollection<string>(); ProfileNames = new BindableCollection<string>();
Layers = new BindableCollection<LayerModel>(); Layers = new BindableCollection<LayerModel>();
ProfileViewModel = profileViewModel; ProfileViewModel = profileViewModel;
DialogService = dialogService; DialogService = dialogService;
WindowService = windowService;
LastProfile = lastProfile; LastProfile = lastProfile;
PropertyChanged += EditorStateHandler; PropertyChanged += EditorStateHandler;
@ -71,6 +70,8 @@ namespace Artemis.ViewModels.Profiles
[Inject] [Inject]
public MetroDialogService DialogService { get; set; } public MetroDialogService DialogService { get; set; }
public WindowService WindowService { get; set; }
public string LastProfile { get; set; } public string LastProfile { get; set; }
public ProfileViewModel ProfileViewModel { get; set; } public ProfileViewModel ProfileViewModel { get; set; }
@ -104,10 +105,10 @@ namespace Artemis.ViewModels.Profiles
public string SelectedProfileName public string SelectedProfileName
{ {
get { return SelectedProfile.Name; } get { return SelectedProfile?.Name; }
set set
{ {
if (value == SelectedProfile.Name) if (value == SelectedProfile?.Name)
return; return;
SelectedProfile = ProfileProvider.GetProfile( SelectedProfile = ProfileProvider.GetProfile(
@ -295,20 +296,11 @@ namespace Artemis.ViewModels.Profiles
if (layer == null) if (layer == null)
return; return;
IWindowManager manager = new WindowManager(); IParameter[] args = {
var editorVm = _layerEditorVmFactory.CreateLayerEditorVm(_gameModel.DataModel, layer); new ConstructorArgument("dataModel", _gameModel.DataModel),
new ConstructorArgument("layer", layer)
dynamic settings = new ExpandoObject(); };
var icon = ImageUtilities.GenerateWindowIcon(); WindowService.ShowDialog<LayerEditorViewModel>(args);
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;
// If the layer was a folder, but isn't anymore, assign it's children to it's parent. // 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()) if (!(layer.LayerType is FolderType) && layer.Children.Any())
@ -339,18 +331,9 @@ namespace Artemis.ViewModels.Profiles
if (SelectedProfile == null) if (SelectedProfile == null)
return null; return null;
// Create a new layer var layer = SelectedProfile.AddLayer(ProfileViewModel.SelectedLayer);
var layer = LayerModel.CreateLayer();
if (ProfileViewModel.SelectedLayer != null)
ProfileViewModel.SelectedLayer.InsertAfter(layer);
else
{
SelectedProfile.Layers.Add(layer);
SelectedProfile.FixOrder();
}
UpdateLayerList(layer); UpdateLayerList(layer);
return layer; return layer;
} }

View File

@ -206,8 +206,7 @@ namespace Artemis.ViewModels.Profiles
} }
/// <summary> /// <summary>
/// Second handler for clicking, selects a the layer the user clicked on /// Second handler for clicking, selects a the layer the user clicked on.
/// if the used clicked on an empty spot, deselects the current layer
/// </summary> /// </summary>
/// <param name="e"></param> /// <param name="e"></param>
public void MouseUpKeyboardPreview(MouseButtonEventArgs e) public void MouseUpKeyboardPreview(MouseButtonEventArgs e)
@ -229,7 +228,8 @@ namespace Artemis.ViewModels.Profiles
var hoverLayer = GetLayers().Where(l => l.MustDraw()) var hoverLayer = GetLayers().Where(l => l.MustDraw())
.FirstOrDefault(l => l.Properties.GetRect(1).Contains(x, y)); .FirstOrDefault(l => l.Properties.GetRect(1).Contains(x, y));
SelectedLayer = hoverLayer; if (hoverLayer != null)
SelectedLayer = hoverLayer;
} }
/// <summary> /// <summary>
@ -341,7 +341,7 @@ namespace Artemis.ViewModels.Profiles
if (ShowAll) if (ShowAll)
return SelectedProfile.GetRenderLayers(new ProfilePreviewDataModel(), false, true); return SelectedProfile.GetRenderLayers(new ProfilePreviewDataModel(), false, true);
if (SelectedLayer == null) if (SelectedLayer == null || !SelectedLayer.Enabled)
return new EditableList<LayerModel>(); return new EditableList<LayerModel>();
if (SelectedLayer.LayerType is FolderType) if (SelectedLayer.LayerType is FolderType)
@ -355,21 +355,17 @@ namespace Artemis.ViewModels.Profiles
private List<LayerModel> GetLayers() private List<LayerModel> GetLayers()
{ {
if (ShowAll)
return SelectedProfile.GetLayers();
if (SelectedLayer == null) if (SelectedLayer == null)
return new List<LayerModel>(); return new List<LayerModel>();
lock (SelectedLayer) lock (SelectedLayer)
{ {
// Get the layers that must be drawn // Get the layers that must be drawn
List<LayerModel> drawLayers; if (SelectedLayer.LayerType is FolderType)
if (ShowAll) return SelectedLayer.GetLayers().ToList();
drawLayers = SelectedProfile.GetLayers(); return new List<LayerModel> {SelectedLayer};
else if (SelectedLayer.LayerType is FolderType)
drawLayers = SelectedLayer.GetLayers().ToList();
else
drawLayers = new List<LayerModel> {SelectedLayer};
return drawLayers;
} }
} }

View File

@ -18,7 +18,6 @@
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
<package id="Ninject" version="3.2.2.0" targetFramework="net452" /> <package id="Ninject" version="3.2.2.0" targetFramework="net452" />
<package id="Ninject.Extensions.Conventions" version="3.2.0.0" targetFramework="net461" /> <package id="Ninject.Extensions.Conventions" version="3.2.0.0" targetFramework="net461" />
<package id="Ninject.Extensions.Factory" version="3.2.1.0" targetFramework="net452" />
<package id="Ninject.Extensions.Logging" version="3.2.3.0" targetFramework="net452" /> <package id="Ninject.Extensions.Logging" version="3.2.3.0" targetFramework="net452" />
<package id="Ninject.Extensions.Logging.nlog4" version="3.2.3.0" targetFramework="net452" /> <package id="Ninject.Extensions.Logging.nlog4" version="3.2.3.0" targetFramework="net452" />
<package id="NLog" version="4.3.10" targetFramework="net461" /> <package id="NLog" version="4.3.10" targetFramework="net461" />