diff --git a/src/Artemis.UI/Artemis.UI.csproj b/src/Artemis.UI/Artemis.UI.csproj
index b40eb1fab..dc57c291e 100644
--- a/src/Artemis.UI/Artemis.UI.csproj
+++ b/src/Artemis.UI/Artemis.UI.csproj
@@ -192,10 +192,7 @@
-
-
-
-
+
diff --git a/src/Artemis.UI/Ninject/Factories/IArtemisUiFactory.cs b/src/Artemis.UI/Ninject/Factories/IArtemisUiFactory.cs
deleted file mode 100644
index 7cf08f331..000000000
--- a/src/Artemis.UI/Ninject/Factories/IArtemisUiFactory.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Artemis.UI.Ninject.Factories
-{
- public interface IArtemisUIFactory
- {
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/Ninject/Factories/IDeviceSettingsViewMOdelFactory.cs b/src/Artemis.UI/Ninject/Factories/IDeviceSettingsViewMOdelFactory.cs
deleted file mode 100644
index 5bbae036c..000000000
--- a/src/Artemis.UI/Ninject/Factories/IDeviceSettingsViewMOdelFactory.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Artemis.Core.Models.Surface;
-using Artemis.UI.Screens.Settings.Tabs.Devices;
-
-namespace Artemis.UI.Ninject.Factories
-{
- public interface IDeviceSettingsViewModelFactory : IArtemisUIFactory
- {
- DeviceSettingsViewModel Create(ArtemisDevice device);
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/Ninject/Factories/IModuleViewModelFactory.cs b/src/Artemis.UI/Ninject/Factories/IModuleViewModelFactory.cs
deleted file mode 100644
index bd516f830..000000000
--- a/src/Artemis.UI/Ninject/Factories/IModuleViewModelFactory.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Artemis.Core.Plugins.Abstract;
-using Artemis.UI.Screens.Module;
-
-namespace Artemis.UI.Ninject.Factories
-{
- public interface IModuleViewModelFactory : IArtemisUIFactory
- {
- ModuleRootViewModel Create(Module module);
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/Ninject/Factories/IProfileEditorViewModelFactory.cs b/src/Artemis.UI/Ninject/Factories/IProfileEditorViewModelFactory.cs
deleted file mode 100644
index 73026d66e..000000000
--- a/src/Artemis.UI/Ninject/Factories/IProfileEditorViewModelFactory.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Artemis.Core.Plugins.Abstract;
-using Artemis.UI.Screens.Module.ProfileEditor;
-
-namespace Artemis.UI.Ninject.Factories
-{
- public interface IProfileEditorViewModelFactory : IArtemisUIFactory
- {
- ProfileEditorViewModel Create(ProfileModule module);
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/Ninject/Factories/IViewModelFactory.cs b/src/Artemis.UI/Ninject/Factories/IViewModelFactory.cs
new file mode 100644
index 000000000..f13888a18
--- /dev/null
+++ b/src/Artemis.UI/Ninject/Factories/IViewModelFactory.cs
@@ -0,0 +1,40 @@
+using Artemis.Core.Models.Profile.Abstract;
+using Artemis.Core.Models.Surface;
+using Artemis.Core.Plugins.Abstract;
+using Artemis.UI.Screens.Module;
+using Artemis.UI.Screens.Module.ProfileEditor;
+using Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem;
+using Artemis.UI.Screens.Settings.Tabs.Devices;
+
+namespace Artemis.UI.Ninject.Factories
+{
+ public interface IViewModelFactory
+ {
+ }
+
+ public interface IModuleViewModelFactory : IViewModelFactory
+ {
+ ModuleRootViewModel Create(Module module);
+ }
+
+ public interface IDeviceSettingsViewModelFactory : IViewModelFactory
+ {
+ DeviceSettingsViewModel Create(ArtemisDevice device);
+ }
+
+ public interface IProfileEditorViewModelFactory : IViewModelFactory
+ {
+ ProfileEditorViewModel Create(ProfileModule module);
+ }
+
+ public interface IFolderViewModelFactory : IViewModelFactory
+ {
+ FolderViewModel Create(ProfileElement folder);
+ FolderViewModel Create(TreeItemViewModel parent, ProfileElement folder);
+ }
+
+ public interface ILayerViewModelFactory : IViewModelFactory
+ {
+ LayerViewModel Create(TreeItemViewModel parent, ProfileElement folder);
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/Ninject/UiModule.cs b/src/Artemis.UI/Ninject/UiModule.cs
index cb36d7088..cd64d319e 100644
--- a/src/Artemis.UI/Ninject/UiModule.cs
+++ b/src/Artemis.UI/Ninject/UiModule.cs
@@ -43,15 +43,11 @@ namespace Artemis.UI.Ninject
Kernel.Bind(x =>
{
x.FromThisAssembly()
- .SelectAllClasses()
- .InheritedFrom()
+ .SelectAllInterfaces()
+ .InheritedFrom()
.BindToFactory();
});
- Kernel.Bind().ToFactory();
- Kernel.Bind().ToFactory();
- Kernel.Bind().ToFactory();
-
// Bind profile editor VMs
Kernel.Bind(x =>
{
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/ProfileTreeViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/ProfileTreeViewModel.cs
index e0efbb2a8..e1df7fa0a 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/ProfileTreeViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/ProfileTreeViewModel.cs
@@ -2,6 +2,7 @@
using System.Linq;
using System.Windows;
using Artemis.Core.Models.Profile;
+using Artemis.UI.Ninject.Factories;
using Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem;
using Artemis.UI.Services.Interfaces;
using GongSolutions.Wpf.DragDrop;
@@ -11,11 +12,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree
public class ProfileTreeViewModel : ProfileEditorPanelViewModel, IDropTarget
{
private readonly IProfileEditorService _profileEditorService;
+ private readonly IFolderViewModelFactory _folderViewModelFactory;
private TreeItemViewModel _selectedTreeItem;
- public ProfileTreeViewModel(IProfileEditorService profileEditorService)
+ public ProfileTreeViewModel(IProfileEditorService profileEditorService, IFolderViewModelFactory folderViewModelFactory)
{
_profileEditorService = profileEditorService;
+ _folderViewModelFactory = folderViewModelFactory;
CreateRootFolderViewModel();
_profileEditorService.SelectedProfileChanged += OnSelectedProfileChanged;
@@ -96,7 +99,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree
return;
}
- RootFolder = new FolderViewModel(null, folder, _profileEditorService);
+ RootFolder = _folderViewModelFactory.Create(folder);
}
private static DragDropType GetDragDropType(IDropInfo dropInfo)
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/FolderViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/FolderViewModel.cs
index 0a011e090..0a148fa99 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/FolderViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/FolderViewModel.cs
@@ -1,11 +1,28 @@
using Artemis.Core.Models.Profile.Abstract;
+using Artemis.UI.Ninject.Factories;
using Artemis.UI.Services.Interfaces;
namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
{
public class FolderViewModel : TreeItemViewModel
{
- public FolderViewModel(TreeItemViewModel parent, ProfileElement folder, IProfileEditorService profileEditorService) : base(parent, folder, profileEditorService)
+ // I hate this about DI, oh well
+ public FolderViewModel(ProfileElement folder,
+ IProfileEditorService profileEditorService,
+ IDialogService dialogService,
+ IFolderViewModelFactory folderViewModelFactory,
+ ILayerViewModelFactory layerViewModelFactory) :
+ base(null, folder, profileEditorService, dialogService, folderViewModelFactory, layerViewModelFactory)
+ {
+ }
+
+ public FolderViewModel(TreeItemViewModel parent,
+ ProfileElement folder,
+ IProfileEditorService profileEditorService,
+ IDialogService dialogService,
+ IFolderViewModelFactory folderViewModelFactory,
+ ILayerViewModelFactory layerViewModelFactory) :
+ base(parent, folder, profileEditorService, dialogService, folderViewModelFactory, layerViewModelFactory)
{
}
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/LayerViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/LayerViewModel.cs
index 6ba30eb7c..016ef7332 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/LayerViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/LayerViewModel.cs
@@ -1,11 +1,18 @@
using Artemis.Core.Models.Profile.Abstract;
+using Artemis.UI.Ninject.Factories;
using Artemis.UI.Services.Interfaces;
namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
{
public class LayerViewModel : TreeItemViewModel
{
- public LayerViewModel(TreeItemViewModel parent, ProfileElement layer, IProfileEditorService profileEditorService) : base(parent, layer, profileEditorService)
+ public LayerViewModel(TreeItemViewModel parent,
+ ProfileElement folder,
+ IProfileEditorService profileEditorService,
+ IDialogService dialogService,
+ IFolderViewModelFactory folderViewModelFactory,
+ ILayerViewModelFactory layerViewModelFactory) :
+ base(parent, folder, profileEditorService, dialogService, folderViewModelFactory, layerViewModelFactory)
{
}
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/TreeItemViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/TreeItemViewModel.cs
index 787ad93c0..3c48babf9 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/TreeItemViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileTree/TreeItem/TreeItemViewModel.cs
@@ -4,6 +4,8 @@ using System.Threading.Tasks;
using Artemis.Core.Models.Profile;
using Artemis.Core.Models.Profile.Abstract;
using Artemis.UI.Exceptions;
+using Artemis.UI.Ninject.Factories;
+using Artemis.UI.Screens.Module.ProfileEditor.Dialogs;
using Artemis.UI.Services.Interfaces;
using Stylet;
@@ -11,11 +13,25 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
{
public abstract class TreeItemViewModel : PropertyChangedBase
{
- protected TreeItemViewModel(TreeItemViewModel parent, ProfileElement profileElement, IProfileEditorService profileEditorService)
+ private readonly IProfileEditorService _profileEditorService;
+ private readonly IDialogService _dialogService;
+ private readonly IFolderViewModelFactory _folderViewModelFactory;
+ private readonly ILayerViewModelFactory _layerViewModelFactory;
+
+ protected TreeItemViewModel(TreeItemViewModel parent,
+ ProfileElement profileElement,
+ IProfileEditorService profileEditorService,
+ IDialogService dialogService,
+ IFolderViewModelFactory folderViewModelFactory,
+ ILayerViewModelFactory layerViewModelFactory)
{
+ _profileEditorService = profileEditorService;
+ _dialogService = dialogService;
+ _folderViewModelFactory = folderViewModelFactory;
+ _layerViewModelFactory = layerViewModelFactory;
+
Parent = parent;
ProfileElement = profileElement;
- ProfileEditorService = profileEditorService;
Children = new BindableCollection();
UpdateProfileElements();
@@ -23,7 +39,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
public TreeItemViewModel Parent { get; set; }
public ProfileElement ProfileElement { get; set; }
- public IProfileEditorService ProfileEditorService { get; set; }
public abstract bool SupportsChildren { get; }
public BindableCollection Children { get; set; }
@@ -95,7 +110,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
ProfileElement.AddChild(new Folder(ProfileElement.Profile, ProfileElement, "New folder"));
UpdateProfileElements();
- ProfileEditorService.UpdateSelectedProfile();
+ _profileEditorService.UpdateSelectedProfile();
}
public void AddLayer()
@@ -105,40 +120,40 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
ProfileElement.AddChild(new Layer(ProfileElement.Profile, ProfileElement, "New layer"));
UpdateProfileElements();
- ProfileEditorService.UpdateSelectedProfile();
+ _profileEditorService.UpdateSelectedProfile();
}
// ReSharper disable once UnusedMember.Global - Called from view
public async Task RenameElement()
{
-// var result = await ProfileEditorService.DialogService.ShowDialog(
-// new Dictionary {{"profileElement", ProfileElement}}
-// );
-// if (result is string newName)
-// {
-// ProfileElement.Name = newName;
-// ProfileEditorService.UpdateSelectedProfile();
-// }
+ var result = await _dialogService.ShowDialog(
+ new Dictionary {{"profileElement", ProfileElement}}
+ );
+ if (result is string newName)
+ {
+ ProfileElement.Name = newName;
+ _profileEditorService.UpdateSelectedProfile();
+ }
}
// ReSharper disable once UnusedMember.Global - Called from view
public async Task DeleteElement()
{
-// var result = await ProfileEditorService.DialogService.ShowConfirmDialog(
-// "Delete profile element",
-// "Are you sure you want to delete this element? This cannot be undone."
-// );
-//
-// if (!result)
-// return;
-//
-// // Farewell, cruel world
-// var parent = Parent;
-// ProfileElement.Parent.RemoveChild(ProfileElement);
-// parent.RemoveExistingElement(this);
-// parent.UpdateProfileElements();
-//
-// ProfileEditorService.UpdateSelectedProfile();
+ var result = await _dialogService.ShowConfirmDialog(
+ "Delete profile element",
+ "Are you sure you want to delete this element? This cannot be undone."
+ );
+
+ if (!result)
+ return;
+
+ // Farewell, cruel world
+ var parent = Parent;
+ ProfileElement.Parent.RemoveChild(ProfileElement);
+ parent.RemoveExistingElement(this);
+ parent.UpdateProfileElements();
+
+ _profileEditorService.UpdateSelectedProfile();
}
private void UpdateProfileElements()
@@ -161,13 +176,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
{
existing = Children.FirstOrDefault(p => p is FolderViewModel vm && vm.ProfileElement == folder);
if (existing == null)
- Children.Add(new FolderViewModel(this, folder, ProfileEditorService));
+ Children.Add(_folderViewModelFactory.Create((FolderViewModel) this, folder));
}
else if (profileElement is Layer layer)
{
existing = Children.FirstOrDefault(p => p is LayerViewModel vm && vm.ProfileElement == layer);
if (existing == null)
- Children.Add(new LayerViewModel(this, layer, ProfileEditorService));
+ Children.Add(_layerViewModelFactory.Create((FolderViewModel) this, layer));
}
existing?.UpdateProfileElements();
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceView.xaml
index 5fda64a2a..f130ea888 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceView.xaml
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceView.xaml
@@ -21,9 +21,9 @@
-
-
-
+
-
+
@@ -66,10 +66,10 @@
-
+
-
-
+
+
diff --git a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml
index 14acc7038..abd62d62a 100644
--- a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml
+++ b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml
@@ -26,7 +26,9 @@
-
+