From 6f95c609b6c5fd11a52dcff4d1b57b96a1c51cab Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 13 Feb 2020 19:38:43 +0100 Subject: [PATCH] Project cleanup --- src/Artemis.Core/Models/Profile/Folder.cs | 10 +-- src/Artemis.Core/Models/Profile/Layer.cs | 73 +++++++++---------- .../Models/Profile/LayerShapes/Ellipse.cs | 3 +- .../Models/Profile/LayerShapes/Rectangle.cs | 3 +- src/Artemis.Core/Models/Profile/Profile.cs | 42 +++++------ .../Models/Profile/ProfileElement.cs | 10 +-- .../Models/Surface/ArtemisDevice.cs | 24 +++--- .../Models/Surface/ArtemisSurface.cs | 18 ++--- .../Plugins/LayerBrush/LayerBrush.cs | 1 - .../Plugins/Models/PluginSetting.cs | 10 +-- src/Artemis.Core/Services/CoreService.cs | 20 ++--- src/Artemis.Core/Services/SettingsService.cs | 3 +- .../ColorBrush.cs | 36 ++++----- .../NoiseBrush.cs | 2 +- .../Utilities/OpenSimplexNoise.cs | 14 ++-- src/Artemis.UI.Shared/ColorPicker.xaml | 4 +- src/Artemis.UI.Shared/ColorPicker.xaml.cs | 10 +-- src/Artemis.UI.Shared/packages.config | 1 + .../Behaviors/TreeViewSelectionBehavior.cs | 50 ++++++------- src/Artemis.UI/Bootstrapper.cs | 18 ++--- .../LayerPropertiesViewModel.cs | 15 ++-- .../LayerProperties/LayerPropertyViewModel.cs | 31 ++++---- .../PropertyInput/BrushPropertyInputView.xaml | 13 ++-- .../BrushPropertyInputView.xaml.cs | 19 +---- .../BrushPropertyInputViewModel.cs | 12 +-- .../PropertyInput/EnumPropertyInputView.xaml | 5 +- .../EnumPropertyInputView.xaml.cs | 19 +---- .../EnumPropertyInputViewModel.cs | 10 +-- .../PropertyInput/FloatPropertyInputView.xaml | 2 +- .../PropertyInput/IntPropertyInputView.xaml | 4 +- .../PropertyInput/PropertyInputViewModel.cs | 14 ++-- .../SKColorPropertyInputView.xaml.cs | 19 +---- .../SKPointPropertyInputView.xaml | 6 +- .../SKSizePropertyInputView.xaml | 4 +- .../PropertyTree/PropertyTreeItemViewModel.cs | 9 +-- .../PropertyTreeParentViewModel.cs | 1 - .../Timeline/PropertyTimelineViewModel.cs | 15 ++-- .../Timeline/PropertyTrackViewModel.cs | 4 +- .../ProfileEditor/ProfileEditorViewModel.cs | 48 ++++++------ .../Visualization/ProfileDeviceViewModel.cs | 24 +++--- .../Visualization/ProfileLayerViewModel.cs | 20 ++--- .../Visualization/ProfileLedViewModel.cs | 20 ++--- .../Visualization/ProfileViewModel.cs | 56 +++++++------- .../Visualization/Tools/EditToolViewModel.cs | 1 - .../UserControls/LayerShapeControl.xaml.cs | 56 +++++++------- src/Artemis.UI/Screens/RootViewModel.cs | 58 +++++++-------- .../Screens/Settings/Debug/DebugViewModel.cs | 28 +++---- .../Screens/Settings/SettingsViewModel.cs | 28 +++---- .../Visualization/SurfaceLedViewModel.cs | 10 +-- src/Artemis.UI/Stylet/NinjectBootstrapper.cs | 26 +++---- src/Artemis.UI/packages.config | 1 + 51 files changed, 440 insertions(+), 490 deletions(-) diff --git a/src/Artemis.Core/Models/Profile/Folder.cs b/src/Artemis.Core/Models/Profile/Folder.cs index 340a415cb..8283d2827 100644 --- a/src/Artemis.Core/Models/Profile/Folder.cs +++ b/src/Artemis.Core/Models/Profile/Folder.cs @@ -77,6 +77,11 @@ namespace Artemis.Core.Models.Profile return layer; } + public override string ToString() + { + return $"[Folder] {nameof(Name)}: {Name}, {nameof(Order)}: {Order}"; + } + internal override void ApplyToEntity() { FolderEntity.Id = EntityId; @@ -89,10 +94,5 @@ namespace Artemis.Core.Models.Profile // TODO: conditions } - - public override string ToString() - { - return $"[Folder] {nameof(Name)}: {Name}, {nameof(Order)}: {Order}"; - } } } \ No newline at end of file diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs index 4899a23b9..d10a149ca 100644 --- a/src/Artemis.Core/Models/Profile/Layer.cs +++ b/src/Artemis.Core/Models/Profile/Layer.cs @@ -11,9 +11,6 @@ using Artemis.Core.Models.Surface; using Artemis.Core.Plugins.LayerBrush; using Artemis.Core.Plugins.Models; using Artemis.Storage.Entities.Profile; -using Newtonsoft.Json; -using Ninject; -using Ninject.Parameters; using SkiaSharp; namespace Artemis.Core.Models.Profile @@ -147,6 +144,11 @@ namespace Artemis.Core.Models.Profile /// public LayerBrush LayerBrush { get; internal set; } + public override string ToString() + { + return $"[Layer] {nameof(Name)}: {Name}, {nameof(Order)}: {Order}"; + } + #region Storage internal override void ApplyToEntity() @@ -178,6 +180,35 @@ namespace Artemis.Core.Models.Profile #endregion + #region Shape management + + private void ApplyShapeType() + { + switch (ShapeTypeProperty.CurrentValue) + { + case LayerShapeType.Ellipse: + LayerShape = new Ellipse(this); + break; + case LayerShapeType.Rectangle: + LayerShape = new Rectangle(this); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + #endregion + + private void OnLayerPropertyRegistered(LayerPropertyEventArgs e) + { + LayerPropertyRegistered?.Invoke(this, e); + } + + private void OnLayerPropertyRemoved(LayerPropertyEventArgs e) + { + LayerPropertyRemoved?.Invoke(this, e); + } + #region Rendering public override void Update(double deltaTime) @@ -277,7 +308,7 @@ namespace Artemis.Core.Models.Profile renderPath.AddRect(Path.Bounds); LayerBrush?.Render(canvas, renderPath, paint); } - + internal void CalculateRenderProperties() { if (!Leds.Any()) @@ -378,25 +409,6 @@ namespace Artemis.Core.Models.Profile #endregion - #region Shape management - - private void ApplyShapeType() - { - switch (ShapeTypeProperty.CurrentValue) - { - case LayerShapeType.Ellipse: - LayerShape = new Ellipse(this); - break; - case LayerShapeType.Rectangle: - LayerShape = new Rectangle(this); - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - #endregion - #region Properties /// @@ -534,21 +546,6 @@ namespace Artemis.Core.Models.Profile } #endregion - - public override string ToString() - { - return $"[Layer] {nameof(Name)}: {Name}, {nameof(Order)}: {Order}"; - } - - private void OnLayerPropertyRegistered(LayerPropertyEventArgs e) - { - LayerPropertyRegistered?.Invoke(this, e); - } - - private void OnLayerPropertyRemoved(LayerPropertyEventArgs e) - { - LayerPropertyRemoved?.Invoke(this, e); - } } public enum LayerShapeType diff --git a/src/Artemis.Core/Models/Profile/LayerShapes/Ellipse.cs b/src/Artemis.Core/Models/Profile/LayerShapes/Ellipse.cs index 68cbca838..62e30a9fa 100644 --- a/src/Artemis.Core/Models/Profile/LayerShapes/Ellipse.cs +++ b/src/Artemis.Core/Models/Profile/LayerShapes/Ellipse.cs @@ -1,5 +1,4 @@ -using Artemis.Storage.Entities.Profile; -using SkiaSharp; +using SkiaSharp; namespace Artemis.Core.Models.Profile.LayerShapes { diff --git a/src/Artemis.Core/Models/Profile/LayerShapes/Rectangle.cs b/src/Artemis.Core/Models/Profile/LayerShapes/Rectangle.cs index 8b059f432..71783bfc1 100644 --- a/src/Artemis.Core/Models/Profile/LayerShapes/Rectangle.cs +++ b/src/Artemis.Core/Models/Profile/LayerShapes/Rectangle.cs @@ -1,5 +1,4 @@ -using Artemis.Storage.Entities.Profile; -using SkiaSharp; +using SkiaSharp; namespace Artemis.Core.Models.Profile.LayerShapes { diff --git a/src/Artemis.Core/Models/Profile/Profile.cs b/src/Artemis.Core/Models/Profile/Profile.cs index 3286637e7..6cb9da5e2 100644 --- a/src/Artemis.Core/Models/Profile/Profile.cs +++ b/src/Artemis.Core/Models/Profile/Profile.cs @@ -74,6 +74,27 @@ namespace Artemis.Core.Models.Profile return (Folder) Children.Single(); } + public void ApplyToProfile() + { + Name = ProfileEntity.Name; + + lock (_children) + { + _children.Clear(); + // Populate the profile starting at the root, the rest is populated recursively + var rootFolder = ProfileEntity.Folders.FirstOrDefault(f => f.ParentId == new Guid()); + if (rootFolder == null) + AddChild(new Folder(this, null, "Root folder")); + else + AddChild(new Folder(this, null, rootFolder)); + } + } + + public override string ToString() + { + return $"[Profile] {nameof(Name)}: {Name}, {nameof(IsActivated)}: {IsActivated}, {nameof(PluginInfo)}: {PluginInfo}"; + } + internal override void ApplyToEntity() { ProfileEntity.Id = EntityId; @@ -91,22 +112,6 @@ namespace Artemis.Core.Models.Profile ProfileEntity.Layers.AddRange(GetAllLayers().Select(f => f.LayerEntity)); } - public void ApplyToProfile() - { - Name = ProfileEntity.Name; - - lock (_children) - { - _children.Clear(); - // Populate the profile starting at the root, the rest is populated recursively - var rootFolder = ProfileEntity.Folders.FirstOrDefault(f => f.ParentId == new Guid()); - if (rootFolder == null) - AddChild(new Folder(this, null, "Root folder")); - else - AddChild(new Folder(this, null, rootFolder)); - } - } - internal void Activate(ArtemisSurface surface) { lock (this) @@ -137,11 +142,6 @@ namespace Artemis.Core.Models.Profile layer.PopulateLeds(surface); } - public override string ToString() - { - return $"[Profile] {nameof(Name)}: {Name}, {nameof(IsActivated)}: {IsActivated}, {nameof(PluginInfo)}: {PluginInfo}"; - } - #region Events /// diff --git a/src/Artemis.Core/Models/Profile/ProfileElement.cs b/src/Artemis.Core/Models/Profile/ProfileElement.cs index 611797e06..0718aa2f7 100644 --- a/src/Artemis.Core/Models/Profile/ProfileElement.cs +++ b/src/Artemis.Core/Models/Profile/ProfileElement.cs @@ -46,11 +46,6 @@ namespace Artemis.Core.Models.Profile /// public abstract void Render(double deltaTime, SKCanvas canvas); - /// - /// Applies the profile element's properties to the underlying storage entity - /// - internal abstract void ApplyToEntity(); - public List GetAllFolders() { var folders = new List(); @@ -131,5 +126,10 @@ namespace Artemis.Core.Models.Profile child.Parent = null; } } + + /// + /// Applies the profile element's properties to the underlying storage entity + /// + internal abstract void ApplyToEntity(); } } \ No newline at end of file diff --git a/src/Artemis.Core/Models/Surface/ArtemisDevice.cs b/src/Artemis.Core/Models/Surface/ArtemisDevice.cs index 12fdc8269..066d2441d 100644 --- a/src/Artemis.Core/Models/Surface/ArtemisDevice.cs +++ b/src/Artemis.Core/Models/Surface/ArtemisDevice.cs @@ -76,6 +76,18 @@ namespace Artemis.Core.Models.Surface set => DeviceEntity.ZIndex = value; } + public override string ToString() + { + return $"[{RgbDevice.DeviceInfo.DeviceType}] {RgbDevice.DeviceInfo.DeviceName} - {X}.{Y}.{ZIndex}"; + } + + public event EventHandler DeviceUpdated; + + protected virtual void OnDeviceUpdated() + { + DeviceUpdated?.Invoke(this, EventArgs.Empty); + } + internal void ApplyToEntity() { // Other properties are computed @@ -113,17 +125,5 @@ namespace Artemis.Core.Models.Surface RenderPath = path; } - - public override string ToString() - { - return $"[{RgbDevice.DeviceInfo.DeviceType}] {RgbDevice.DeviceInfo.DeviceName} - {X}.{Y}.{ZIndex}"; - } - - public event EventHandler DeviceUpdated; - - protected virtual void OnDeviceUpdated() - { - DeviceUpdated?.Invoke(this, EventArgs.Empty); - } } } \ No newline at end of file diff --git a/src/Artemis.Core/Models/Surface/ArtemisSurface.cs b/src/Artemis.Core/Models/Surface/ArtemisSurface.cs index bc04acd54..88aaa50af 100644 --- a/src/Artemis.Core/Models/Surface/ArtemisSurface.cs +++ b/src/Artemis.Core/Models/Surface/ArtemisSurface.cs @@ -48,6 +48,15 @@ namespace Artemis.Core.Models.Surface internal SurfaceEntity SurfaceEntity { get; set; } internal Guid EntityId { get; set; } + public void UpdateScale(double value) + { + Scale = value; + foreach (var device in Devices) + device.CalculateRenderProperties(); + + OnScaleChanged(); + } + internal void ApplyToEntity() { SurfaceEntity.Id = EntityId; @@ -62,15 +71,6 @@ namespace Artemis.Core.Models.Surface } } - public void UpdateScale(double value) - { - Scale = value; - foreach (var device in Devices) - device.CalculateRenderProperties(); - - OnScaleChanged(); - } - #region Events public event EventHandler ScaleChanged; diff --git a/src/Artemis.Core/Plugins/LayerBrush/LayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrush/LayerBrush.cs index 1685f5022..43305b4a8 100644 --- a/src/Artemis.Core/Plugins/LayerBrush/LayerBrush.cs +++ b/src/Artemis.Core/Plugins/LayerBrush/LayerBrush.cs @@ -1,7 +1,6 @@ using System; using Artemis.Core.Models.Profile; using Artemis.Core.Models.Profile.LayerProperties; -using Artemis.Core.Services; using Artemis.Core.Services.Interfaces; using SkiaSharp; diff --git a/src/Artemis.Core/Plugins/Models/PluginSetting.cs b/src/Artemis.Core/Plugins/Models/PluginSetting.cs index 208b70f81..88d5304de 100644 --- a/src/Artemis.Core/Plugins/Models/PluginSetting.cs +++ b/src/Artemis.Core/Plugins/Models/PluginSetting.cs @@ -78,14 +78,14 @@ namespace Artemis.Core.Plugins.Models public event EventHandler SettingChanged; - protected virtual void OnSettingChanged() - { - SettingChanged?.Invoke(this, EventArgs.Empty); - } - public override string ToString() { return $"{nameof(Name)}: {Name}, {nameof(Value)}: {Value}, {nameof(HasChanged)}: {HasChanged}"; } + + protected virtual void OnSettingChanged() + { + SettingChanged?.Invoke(this, EventArgs.Empty); + } } } \ No newline at end of file diff --git a/src/Artemis.Core/Services/CoreService.cs b/src/Artemis.Core/Services/CoreService.cs index dddf834d6..4ca70e968 100644 --- a/src/Artemis.Core/Services/CoreService.cs +++ b/src/Artemis.Core/Services/CoreService.cs @@ -55,6 +55,16 @@ namespace Artemis.Core.Services public bool IsInitialized { get; set; } + protected virtual void OnFrameRendering(FrameRenderingEventArgs e) + { + FrameRendering?.Invoke(this, e); + } + + protected virtual void OnFrameRendered(FrameRenderedEventArgs e) + { + FrameRendered?.Invoke(this, e); + } + private void ConfigureJsonConvert() { JsonConvert.DefaultSettings = () => new JsonSerializerSettings @@ -136,16 +146,6 @@ namespace Artemis.Core.Services OnFrameRendered(new FrameRenderedEventArgs(_rgbService.BitmapBrush, _rgbService.Surface)); } - protected virtual void OnFrameRendering(FrameRenderingEventArgs e) - { - FrameRendering?.Invoke(this, e); - } - - protected virtual void OnFrameRendered(FrameRenderedEventArgs e) - { - FrameRendered?.Invoke(this, e); - } - #region Events public event EventHandler Initialized; diff --git a/src/Artemis.Core/Services/SettingsService.cs b/src/Artemis.Core/Services/SettingsService.cs index 2f235a9b5..5e855a2af 100644 --- a/src/Artemis.Core/Services/SettingsService.cs +++ b/src/Artemis.Core/Services/SettingsService.cs @@ -1,5 +1,4 @@ -using System; -using Artemis.Core.Plugins.Models; +using Artemis.Core.Plugins.Models; using Artemis.Core.Services.Interfaces; using Artemis.Storage.Repositories.Interfaces; diff --git a/src/Artemis.Plugins.LayerBrushes.Color/ColorBrush.cs b/src/Artemis.Plugins.LayerBrushes.Color/ColorBrush.cs index 595a2826a..da15fd3a5 100644 --- a/src/Artemis.Plugins.LayerBrushes.Color/ColorBrush.cs +++ b/src/Artemis.Plugins.LayerBrushes.Color/ColorBrush.cs @@ -38,6 +38,24 @@ namespace Artemis.Plugins.LayerBrushes.Color public LayerProperty ColorProperty { get; set; } public LayerProperty GradientTypeProperty { get; set; } + public override void Update(double deltaTime) + { + // Only recreate the shader if the color changed + if (_color != ColorProperty.CurrentValue) + { + _color = ColorProperty.CurrentValue; + CreateShader(); + } + + base.Update(deltaTime); + } + + public override void Render(SKCanvas canvas, SKPath path, SKPaint paint) + { + paint.Shader = _shader; + canvas.DrawPath(path, paint); + } + private void CreateShader() { var center = new SKPoint(Layer.Bounds.MidX, Layer.Bounds.MidY); @@ -67,24 +85,6 @@ namespace Artemis.Plugins.LayerBrushes.Color oldShader?.Dispose(); oldPaint?.Dispose(); } - - public override void Update(double deltaTime) - { - // Only recreate the shader if the color changed - if (_color != ColorProperty.CurrentValue) - { - _color = ColorProperty.CurrentValue; - CreateShader(); - } - - base.Update(deltaTime); - } - - public override void Render(SKCanvas canvas, SKPath path, SKPaint paint) - { - paint.Shader = _shader; - canvas.DrawPath(path, paint); - } } public enum GradientType diff --git a/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs b/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs index 87503927a..45341dd63 100644 --- a/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs +++ b/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs @@ -23,7 +23,7 @@ namespace Artemis.Plugins.LayerBrushes.Noise _z = Rand.Next(0, 4096); _noise = new OpenSimplexNoise(Rand.Next(0, 4096)); } - + public LayerProperty MainColorProperty { get; set; } public LayerProperty ScaleProperty { get; set; } public LayerProperty AnimationSpeedProperty { get; set; } diff --git a/src/Artemis.Plugins.LayerBrushes.Noise/Utilities/OpenSimplexNoise.cs b/src/Artemis.Plugins.LayerBrushes.Noise/Utilities/OpenSimplexNoise.cs index 03e891d9a..6c8830d3a 100644 --- a/src/Artemis.Plugins.LayerBrushes.Noise/Utilities/OpenSimplexNoise.cs +++ b/src/Artemis.Plugins.LayerBrushes.Noise/Utilities/OpenSimplexNoise.cs @@ -268,13 +268,6 @@ namespace Artemis.Plugins.LayerBrushes.Noise.Utilities } } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int FastFloor(double x) - { - var xi = (int) x; - return x < xi ? xi - 1 : xi; - } - public double Evaluate(double x, double y) { var stretchOffset = (x + y) * STRETCH_2D; @@ -454,6 +447,13 @@ namespace Artemis.Plugins.LayerBrushes.Noise.Utilities return value * NORM_4D; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static int FastFloor(double x) + { + var xi = (int) x; + return x < xi ? xi - 1 : xi; + } + private class Contribution2 { public readonly double dx; diff --git a/src/Artemis.UI.Shared/ColorPicker.xaml b/src/Artemis.UI.Shared/ColorPicker.xaml index 255eebad7..1c92c67fd 100644 --- a/src/Artemis.UI.Shared/ColorPicker.xaml +++ b/src/Artemis.UI.Shared/ColorPicker.xaml @@ -101,9 +101,9 @@ HorizontalAlignment="Stretch" /> diff --git a/src/Artemis.UI.Shared/ColorPicker.xaml.cs b/src/Artemis.UI.Shared/ColorPicker.xaml.cs index cfeddb01b..755ac3bbb 100644 --- a/src/Artemis.UI.Shared/ColorPicker.xaml.cs +++ b/src/Artemis.UI.Shared/ColorPicker.xaml.cs @@ -63,6 +63,11 @@ namespace Artemis.UI.Shared public event PropertyChangedEventHandler PropertyChanged; + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + private static void ColorPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { var colorPicker = (ColorPicker) d; @@ -109,10 +114,5 @@ namespace Artemis.UI.Shared { PopupOpen = !PopupOpen; } - - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } } } \ No newline at end of file diff --git a/src/Artemis.UI.Shared/packages.config b/src/Artemis.UI.Shared/packages.config index 79da121c3..759d4f17e 100644 --- a/src/Artemis.UI.Shared/packages.config +++ b/src/Artemis.UI.Shared/packages.config @@ -1,4 +1,5 @@  + diff --git a/src/Artemis.UI/Behaviors/TreeViewSelectionBehavior.cs b/src/Artemis.UI/Behaviors/TreeViewSelectionBehavior.cs index df9b60df9..338f12bcf 100644 --- a/src/Artemis.UI/Behaviors/TreeViewSelectionBehavior.cs +++ b/src/Artemis.UI/Behaviors/TreeViewSelectionBehavior.cs @@ -56,6 +56,31 @@ namespace Artemis.UI.Behaviors set => SetValue(ExpandSelectedProperty, value); } + protected override void OnAttached() + { + base.OnAttached(); + + AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged; + ((INotifyCollectionChanged) AssociatedObject.Items).CollectionChanged += OnTreeViewItemsChanged; + + UpdateTreeViewItemStyle(); + _modelHandled = true; + UpdateAllTreeViewItems(); + _modelHandled = false; + } + + protected override void OnDetaching() + { + base.OnDetaching(); + + if (AssociatedObject != null) + { + AssociatedObject.ItemContainerStyle?.Setters?.Remove(_treeViewItemEventSetter); + AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged; + ((INotifyCollectionChanged) AssociatedObject.Items).CollectionChanged -= OnTreeViewItemsChanged; + } + } + private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) { var behavior = (TreeViewSelectionBehavior) sender; @@ -145,30 +170,5 @@ namespace Artemis.UI.Behaviors { UpdateTreeViewItem((TreeViewItem) sender, false); } - - protected override void OnAttached() - { - base.OnAttached(); - - AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged; - ((INotifyCollectionChanged) AssociatedObject.Items).CollectionChanged += OnTreeViewItemsChanged; - - UpdateTreeViewItemStyle(); - _modelHandled = true; - UpdateAllTreeViewItems(); - _modelHandled = false; - } - - protected override void OnDetaching() - { - base.OnDetaching(); - - if (AssociatedObject != null) - { - AssociatedObject.ItemContainerStyle?.Setters?.Remove(_treeViewItemEventSetter); - AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged; - ((INotifyCollectionChanged) AssociatedObject.Items).CollectionChanged -= OnTreeViewItemsChanged; - } - } } } \ No newline at end of file diff --git a/src/Artemis.UI/Bootstrapper.cs b/src/Artemis.UI/Bootstrapper.cs index cffac4f69..4981fd666 100644 --- a/src/Artemis.UI/Bootstrapper.cs +++ b/src/Artemis.UI/Bootstrapper.cs @@ -64,15 +64,6 @@ namespace Artemis.UI }); } - private void ShowMainWindow(IWindowManager windowManager, SplashViewModel splashViewModel) - { - Execute.OnUIThread(() => - { - windowManager.ShowWindow(RootViewModel); - splashViewModel.RequestClose(); - }); - } - protected override void ConfigureIoC(IKernel kernel) { kernel.Settings.InjectNonPublic = true; @@ -91,5 +82,14 @@ namespace Artemis.UI base.OnUnhandledException(e); } + + private void ShowMainWindow(IWindowManager windowManager, SplashViewModel splashViewModel) + { + Execute.OnUIThread(() => + { + windowManager.ShowWindow(RootViewModel); + splashViewModel.RequestClose(); + }); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs index a1f98627b..b6f1db1ac 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs @@ -20,10 +20,10 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties public class LayerPropertiesViewModel : ProfileEditorPanelViewModel { private readonly ICoreService _coreService; + private readonly List _layerPropertyViewModels; private readonly ILayerPropertyVmFactory _layerPropertyVmFactory; private readonly IProfileEditorService _profileEditorService; private readonly ISettingsService _settingsService; - private readonly List _layerPropertyViewModels; public LayerPropertiesViewModel(IProfileEditorService profileEditorService, ICoreService coreService, @@ -71,18 +71,18 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties public PropertyTreeViewModel PropertyTree { get; set; } public PropertyTimelineViewModel PropertyTimeline { get; set; } - private void ProfileEditorServiceOnCurrentTimeChanged(object sender, EventArgs e) - { - NotifyOfPropertyChange(() => FormattedCurrentTime); - NotifyOfPropertyChange(() => TimeCaretPosition); - } - protected override void OnDeactivate() { Pause(); base.OnDeactivate(); } + private void ProfileEditorServiceOnCurrentTimeChanged(object sender, EventArgs e) + { + NotifyOfPropertyChange(() => FormattedCurrentTime); + NotifyOfPropertyChange(() => TimeCaretPosition); + } + #region View model managament private void PopulateProperties(ProfileElement profileElement, ProfileElement previousProfileElement) @@ -92,6 +92,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties previousLayer.LayerPropertyRegistered -= LayerOnPropertyRegistered; previousLayer.LayerPropertyRemoved -= LayerOnPropertyRemoved; } + if (profileElement is Layer layer) { // Create VMs for missing properties diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs index d582a3486..114997ef2 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using Artemis.Core.Models.Profile.LayerProperties; -using Artemis.UI.Ninject.Factories; using Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.PropertyInput; using Artemis.UI.Services.Interfaces; using Ninject; @@ -47,21 +46,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties } } - private void UpdateKeyframes() - { - // Either create a new first keyframe or clear all the keyframes - if (_keyframesEnabled) - LayerProperty.CreateNewKeyframe(_profileEditorService.CurrentTime, LayerProperty.GetCurrentValue()); - else - LayerProperty.ClearKeyframes(); - - // Force the keyframe engine to update, the new keyframe is the current keyframe - LayerProperty.IsUsingKeyframes = _keyframesEnabled; - LayerProperty.KeyframeEngine?.Update(0); - - _profileEditorService.UpdateSelectedProfileElement(); - } - public PropertyInputViewModel GetPropertyInputViewModel() { // If the type is an enum type, search for Enum instead. @@ -76,5 +60,20 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties match.Initialize(this); return match; } + + private void UpdateKeyframes() + { + // Either create a new first keyframe or clear all the keyframes + if (_keyframesEnabled) + LayerProperty.CreateNewKeyframe(_profileEditorService.CurrentTime, LayerProperty.GetCurrentValue()); + else + LayerProperty.ClearKeyframes(); + + // Force the keyframe engine to update, the new keyframe is the current keyframe + LayerProperty.IsUsingKeyframes = _keyframesEnabled; + LayerProperty.KeyframeEngine?.Update(0); + + _profileEditorService.UpdateSelectedProfileElement(); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml index d47b18aad..7145487ff 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml @@ -1,12 +1,12 @@  @@ -19,10 +19,9 @@ ItemsSource="{Binding Path=EnumValues}" SelectedValuePath="Value" DisplayMemberPath="Description" - SelectedValue="{Binding Path=BrushInputValue}" + SelectedValue="{Binding Path=BrushInputValue}" RequestBringIntoView="{s:Action OnRequestBringIntoView}" - materialDesign:ComboBoxAssist.ClassicMode="True"> - + materialDesign:ComboBoxAssist.ClassicMode="True" /> - + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml.cs index b536c8ee1..172a9d06e 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputView.xaml.cs @@ -1,22 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; +using System.Windows.Controls; namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.PropertyInput { /// - /// Interaction logic for BrushPropertyInputView.xaml + /// Interaction logic for BrushPropertyInputView.xaml /// public partial class BrushPropertyInputView : UserControl { @@ -25,4 +12,4 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P InitializeComponent(); } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputViewModel.cs index 78ca1ae94..9f4a36c8c 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/BrushPropertyInputViewModel.cs @@ -38,12 +38,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P } } - protected override void OnInitialized() - { - UpdateEnumValues(); - base.OnInitialized(); - } - public void UpdateEnumValues() { var layerBrushProviders = _pluginService.GetPluginsOfType(); @@ -64,5 +58,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P { NotifyOfPropertyChange(() => BrushInputValue); } + + protected override void OnInitialized() + { + UpdateEnumValues(); + base.OnInitialized(); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml index 1b29af406..ab41fbd94 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml @@ -20,10 +20,9 @@ ItemsSource="{Binding Path=EnumValues}" SelectedValuePath="Value" DisplayMemberPath="Description" - SelectedValue="{Binding Path=EnumInputValue}" + SelectedValue="{Binding Path=EnumInputValue}" RequestBringIntoView="{s:Action OnRequestBringIntoView}" - materialDesign:ComboBoxAssist.ClassicMode="True"> - + materialDesign:ComboBoxAssist.ClassicMode="True" /> \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml.cs index 251517ae7..19ab5eb92 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputView.xaml.cs @@ -1,22 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; +using System.Windows.Controls; namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.PropertyInput { /// - /// Interaction logic for EnumPropertyInputView.xaml + /// Interaction logic for EnumPropertyInputView.xaml /// public partial class EnumPropertyInputView : UserControl { @@ -25,4 +12,4 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P InitializeComponent(); } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputViewModel.cs index 1519e3f63..f1e1d7932 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/EnumPropertyInputViewModel.cs @@ -22,14 +22,14 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P set => InputValue = value; } - protected override void OnInitialized() - { - EnumValues = EnumUtilities.GetAllValuesAndDescriptions(LayerPropertyViewModel.LayerProperty.Type); - } - public override void Update() { NotifyOfPropertyChange(() => EnumInputValue); } + + protected override void OnInitialized() + { + EnumValues = EnumUtilities.GetAllValuesAndDescriptions(LayerPropertyViewModel.LayerProperty.Type); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/FloatPropertyInputView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/FloatPropertyInputView.xaml index 350c7f1eb..b283cb6e0 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/FloatPropertyInputView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/FloatPropertyInputView.xaml @@ -17,7 +17,7 @@ materialDesign:ValidationAssist.UsePopup="True" HorizontalAlignment="Left" Text="{Binding FloatInputValue}" - RequestBringIntoView="{s:Action OnRequestBringIntoView}"/> + RequestBringIntoView="{s:Action OnRequestBringIntoView}" /> \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/IntPropertyInputView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/IntPropertyInputView.xaml index 939600474..72e469a2b 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/IntPropertyInputView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/IntPropertyInputView.xaml @@ -16,8 +16,8 @@ Padding="0 -1" materialDesign:ValidationAssist.UsePopup="True" HorizontalAlignment="Left" - Text="{Binding IntInputValue}" - RequestBringIntoView="{s:Action OnRequestBringIntoView}"/> + Text="{Binding IntInputValue}" + RequestBringIntoView="{s:Action OnRequestBringIntoView}" /> \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/PropertyInputViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/PropertyInputViewModel.cs index 2d835c563..d1c0db1d2 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/PropertyInputViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/PropertyInputViewModel.cs @@ -47,7 +47,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P } /// - /// Called by the view, prevents scrolling into view when scrubbing through the timeline + /// Called by the view, prevents scrolling into view when scrubbing through the timeline /// /// /// @@ -56,6 +56,12 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P e.Handled = true; } + public abstract void Update(); + + protected virtual void OnInitialized() + { + } + private void UpdateInputValue(object value) { LayerPropertyViewModel.LayerProperty.SetCurrentValue(value, ProfileEditorService.CurrentTime); @@ -64,11 +70,5 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P ProfileEditorService.UpdateSelectedProfileElement(); } - - protected virtual void OnInitialized() - { - } - - public abstract void Update(); } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKColorPropertyInputView.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKColorPropertyInputView.xaml.cs index e78144cec..da5b4f266 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKColorPropertyInputView.xaml.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKColorPropertyInputView.xaml.cs @@ -1,22 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; +using System.Windows.Controls; namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.PropertyInput { /// - /// Interaction logic for SKColorPropertyInputView.xaml + /// Interaction logic for SKColorPropertyInputView.xaml /// public partial class SKColorPropertyInputView : UserControl { @@ -25,4 +12,4 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P InitializeComponent(); } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKPointPropertyInputView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKPointPropertyInputView.xaml index 60f797e7d..d0958778e 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKPointPropertyInputView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKPointPropertyInputView.xaml @@ -18,7 +18,7 @@ HorizontalAlignment="Left" ToolTip="X-coordinate (horizontal)" Text="{Binding X}" - RequestBringIntoView="{s:Action OnRequestBringIntoView}"/> + RequestBringIntoView="{s:Action OnRequestBringIntoView}" /> , + Text="{Binding Y}" + RequestBringIntoView="{s:Action OnRequestBringIntoView}" /> \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKSizePropertyInputView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKSizePropertyInputView.xaml index 6b33cd6dd..7e3054d4c 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKSizePropertyInputView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyInput/SKSizePropertyInputView.xaml @@ -18,7 +18,7 @@ HorizontalAlignment="Left" ToolTip="Height" Text="{Binding Height}" - RequestBringIntoView="{s:Action OnRequestBringIntoView}"/> + RequestBringIntoView="{s:Action OnRequestBringIntoView}" /> , + RequestBringIntoView="{s:Action OnRequestBringIntoView}" /> \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs index 79a1f7dfe..4a0536f7c 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs @@ -4,13 +4,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree { public abstract class PropertyTreeItemViewModel : PropertyChangedBase { - public LayerPropertyViewModel LayerPropertyViewModel { get; } - protected PropertyTreeItemViewModel(LayerPropertyViewModel layerPropertyViewModel) { LayerPropertyViewModel = layerPropertyViewModel; } + public LayerPropertyViewModel LayerPropertyViewModel { get; } + /// /// Updates the tree item's input if it is visible and has keyframes enabled /// @@ -18,16 +18,15 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree public abstract void Update(bool forceUpdate); /// - /// Removes the layer property recursively + /// Removes the layer property recursively /// /// public abstract void RemoveLayerProperty(LayerPropertyViewModel layerPropertyViewModel); /// - /// Adds the layer property recursively + /// Adds the layer property recursively /// /// public abstract void AddLayerProperty(LayerPropertyViewModel layerPropertyViewModel); - } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs index 15e3059e0..a81cb4435 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs @@ -1,5 +1,4 @@ using System.Linq; -using Artemis.Core.Events; using Stylet; namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs index 0904f2774..9842485a5 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Artemis.Core.Models.Profile.LayerProperties; using Artemis.UI.Ninject.Factories; using Artemis.UI.Services.Interfaces; using Stylet; @@ -70,13 +69,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline PropertyTrackViewModels.Remove(vm); } - private void CreateViewModels(LayerPropertyViewModel property) - { - PropertyTrackViewModels.Add(_propertyTrackVmFactory.Create(this, property)); - foreach (var child in property.Children) - CreateViewModels(child); - } - public void UpdateKeyframePositions() { foreach (var viewModel in PropertyTrackViewModels) @@ -95,5 +87,12 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline UpdateEndTime(); } + + private void CreateViewModels(LayerPropertyViewModel property) + { + PropertyTrackViewModels.Add(_propertyTrackVmFactory.Create(this, property)); + foreach (var child in property.Children) + CreateViewModels(child); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs index e4f01a1c1..30a9f32c6 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs @@ -1,5 +1,4 @@ using System.Linq; -using Artemis.Core.Events; using Artemis.UI.Ninject.Factories; using Stylet; @@ -9,7 +8,8 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline { private readonly IPropertyTrackKeyframeVmFactory _propertyTrackKeyframeVmFactory; - public PropertyTrackViewModel(PropertyTimelineViewModel propertyTimelineViewModel, LayerPropertyViewModel layerPropertyViewModel, IPropertyTrackKeyframeVmFactory propertyTrackKeyframeVmFactory) + public PropertyTrackViewModel(PropertyTimelineViewModel propertyTimelineViewModel, LayerPropertyViewModel layerPropertyViewModel, + IPropertyTrackKeyframeVmFactory propertyTrackKeyframeVmFactory) { _propertyTrackKeyframeVmFactory = propertyTrackKeyframeVmFactory; PropertyTimelineViewModel = propertyTimelineViewModel; diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorViewModel.cs index f1416b518..20c937d01 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorViewModel.cs @@ -71,22 +71,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor public bool CanDeleteActiveProfile => SelectedProfile != null && Profiles.Count > 1; - private void ChangeSelectedProfile(Profile profile) - { - if (profile == Module.ActiveProfile) - return; - - var oldProfile = Module.ActiveProfile; - _profileService.ActivateProfile(Module, profile); - - if (oldProfile != null) - _profileService.UpdateProfile(oldProfile, false); - if (profile != null) - _profileService.UpdateProfile(profile, false); - - _profileEditorService.ChangeSelectedProfile(profile); - } - public Profile CreateProfile(string name) { var profile = _profileService.CreateProfile(Module, name); @@ -135,14 +119,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor _profileEditorService.RedoUpdateProfile(Module); } - private void ModuleOnActiveProfileChanged(object sender, EventArgs e) - { - if (SelectedProfile == Module.ActiveProfile) - return; - - SelectedProfile = Profiles.FirstOrDefault(p => p == Module.ActiveProfile); - } - protected override void OnActivate() { LoadWorkspaceSettings(); @@ -158,6 +134,30 @@ namespace Artemis.UI.Screens.Module.ProfileEditor base.OnDeactivate(); } + private void ChangeSelectedProfile(Profile profile) + { + if (profile == Module.ActiveProfile) + return; + + var oldProfile = Module.ActiveProfile; + _profileService.ActivateProfile(Module, profile); + + if (oldProfile != null) + _profileService.UpdateProfile(oldProfile, false); + if (profile != null) + _profileService.UpdateProfile(profile, false); + + _profileEditorService.ChangeSelectedProfile(profile); + } + + private void ModuleOnActiveProfileChanged(object sender, EventArgs e) + { + if (SelectedProfile == Module.ActiveProfile) + return; + + SelectedProfile = Profiles.FirstOrDefault(p => p == Module.ActiveProfile); + } + private void LoadWorkspaceSettings() { SidePanelsWidth = _settingsService.GetSetting("ProfileEditor.SidePanelsWidth", new GridLength(385)); diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceViewModel.cs index 3bedd6e44..ac963eb58 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileDeviceViewModel.cs @@ -44,6 +44,18 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization ? new Rect() : new Rect(X, Y, Device.RgbDevice.Size.Width, Device.RgbDevice.Size.Height); + /// + /// Update the color of all LEDs if finished adding + /// + public void Update() + { + if (!AddedLeds) + return; + + foreach (var ledViewModel in Leds) + ledViewModel.Update(); + } + /// /// Adds LEDs in batches of 5 to avoid UI freezes /// @@ -62,17 +74,5 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization AddedLeds = true; } - - /// - /// Update the color of all LEDs if finished adding - /// - public void Update() - { - if (!AddedLeds) - return; - - foreach (var ledViewModel in Leds) - ledViewModel.Update(); - } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs index e690ad9b3..39697831f 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs @@ -30,7 +30,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization _profileEditorService.SelectedProfileElementUpdated += OnSelectedProfileElementUpdated; _profileEditorService.ProfilePreviewUpdated += ProfileEditorServiceOnProfilePreviewUpdated; } - + public Layer Layer { get; } public Geometry LayerGeometry { get; set; } @@ -39,6 +39,14 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization public Rect ViewportRectangle { get; set; } public bool IsSelected { get; set; } + public void Dispose() + { + Layer.RenderPropertiesUpdated -= LayerOnRenderPropertiesUpdated; + _profileEditorService.SelectedProfileElementChanged -= OnSelectedProfileElementChanged; + _profileEditorService.SelectedProfileElementUpdated -= OnSelectedProfileElementUpdated; + _profileEditorService.ProfilePreviewUpdated -= ProfileEditorServiceOnProfilePreviewUpdated; + } + private void Update() { IsSelected = _profileEditorService.SelectedProfileElement == Layer; @@ -86,7 +94,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization var layerGeometry = group.GetOutlinedPathGeometry(); var opacityGeometry = Geometry.Combine(Geometry.Empty, layerGeometry, GeometryCombineMode.Exclude, new TranslateTransform()); - + LayerGeometry = layerGeometry; OpacityGeometry = opacityGeometry; } @@ -171,14 +179,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization } } - public void Dispose() - { - Layer.RenderPropertiesUpdated -= LayerOnRenderPropertiesUpdated; - _profileEditorService.SelectedProfileElementChanged -= OnSelectedProfileElementChanged; - _profileEditorService.SelectedProfileElementUpdated -= OnSelectedProfileElementUpdated; - _profileEditorService.ProfilePreviewUpdated -= ProfileEditorServiceOnProfilePreviewUpdated; - } - #region Event handlers private void LayerOnRenderPropertiesUpdated(object sender, EventArgs e) diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs index 8d63bb0e7..cd4eb55b8 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs @@ -38,6 +38,16 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization public Geometry StrokeGeometry { get; private set; } public Color DisplayColor { get; private set; } + public void Update() + { + var newColor = Led.RgbLed.Color.ToMediaColor(); + Execute.PostToUIThread(() => + { + if (!DisplayColor.Equals(newColor)) + DisplayColor = newColor; + }); + } + private void CreateLedGeometry() { switch (Led.RgbLed.Shape) @@ -105,15 +115,5 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization CreateRectangleGeometry(); } } - - public void Update() - { - var newColor = Led.RgbLed.Color.ToMediaColor(); - Execute.PostToUIThread(() => - { - if (!DisplayColor.Equals(newColor)) - DisplayColor = newColor; - }); - } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs index 0db04a2de..8f01eae1c 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs @@ -114,6 +114,34 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization } } + protected override void OnActivate() + { + HighlightSelectedLayer = _settingsService.GetSetting("ProfileEditor.HighlightSelectedLayer", true); + PauseRenderingOnFocusLoss = _settingsService.GetSetting("ProfileEditor.PauseRenderingOnFocusLoss", true); + + HighlightSelectedLayer.SettingChanged += HighlightSelectedLayerOnSettingChanged; + + _updateTrigger.Start(); + base.OnActivate(); + } + + protected override void OnDeactivate() + { + HighlightSelectedLayer.Save(); + PauseRenderingOnFocusLoss.Save(); + + try + { + _updateTrigger.Stop(); + } + catch (NullReferenceException) + { + // TODO: Remove when fixed in RGB.NET, or avoid double stopping + } + + base.OnDeactivate(); + } + private void CreateUpdateTrigger() { // Borrow RGB.NET's update trigger but limit the FPS @@ -217,34 +245,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization } } - protected override void OnActivate() - { - HighlightSelectedLayer = _settingsService.GetSetting("ProfileEditor.HighlightSelectedLayer", true); - PauseRenderingOnFocusLoss = _settingsService.GetSetting("ProfileEditor.PauseRenderingOnFocusLoss", true); - - HighlightSelectedLayer.SettingChanged += HighlightSelectedLayerOnSettingChanged; - - _updateTrigger.Start(); - base.OnActivate(); - } - - protected override void OnDeactivate() - { - HighlightSelectedLayer.Save(); - PauseRenderingOnFocusLoss.Save(); - - try - { - _updateTrigger.Stop(); - } - catch (NullReferenceException) - { - // TODO: Remove when fixed in RGB.NET, or avoid double stopping - } - - base.OnDeactivate(); - } - #region Buttons private void ActivateToolByIndex(int value) diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/Tools/EditToolViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/Tools/EditToolViewModel.cs index aee0f9da9..b95553d00 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/Tools/EditToolViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/Tools/EditToolViewModel.cs @@ -3,7 +3,6 @@ using System.Windows; using System.Windows.Input; using System.Windows.Media; using Artemis.Core.Models.Profile; -using Artemis.Core.Models.Profile.LayerProperties; using Artemis.UI.Events; using Artemis.UI.Services.Interfaces; using SkiaSharp; diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/UserControls/LayerShapeControl.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/UserControls/LayerShapeControl.xaml.cs index b3bf0d415..f26958179 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/UserControls/LayerShapeControl.xaml.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/UserControls/LayerShapeControl.xaml.cs @@ -56,6 +56,34 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization.UserControls set => SetValue(ShapeGeometryProperty, value); } + public void UpdateDimensions() + { + if (Zoom == 0) + return; + + // Rotation controls + UpdateRotateDimensions(RotateTopLeft); + UpdateRotateDimensions(RotateTopRight); + UpdateRotateDimensions(RotateBottomRight); + UpdateRotateDimensions(RotateBottomLeft); + + // Size controls + UpdateResizeDimensions(ResizeTopCenter); + UpdateResizeDimensions(ResizeRightCenter); + UpdateResizeDimensions(ResizeBottomCenter); + UpdateResizeDimensions(ResizeLeftCenter); + UpdateResizeDimensions(ResizeTopLeft); + UpdateResizeDimensions(ResizeTopRight); + UpdateResizeDimensions(ResizeBottomRight); + UpdateResizeDimensions(ResizeBottomLeft); + + // Anchor point + UpdateResizeDimensions(AnchorPoint); + + // Layer outline + LayerShapeOutline.StrokeThickness = Math.Max(2 / Zoom, 1); + } + private static void ZoomChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var layerShapeControl = (LayerShapeControl) d; @@ -88,34 +116,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization.UserControls layerShapeControl.UpdateShapeGeometry(); } - public void UpdateDimensions() - { - if (Zoom == 0) - return; - - // Rotation controls - UpdateRotateDimensions(RotateTopLeft); - UpdateRotateDimensions(RotateTopRight); - UpdateRotateDimensions(RotateBottomRight); - UpdateRotateDimensions(RotateBottomLeft); - - // Size controls - UpdateResizeDimensions(ResizeTopCenter); - UpdateResizeDimensions(ResizeRightCenter); - UpdateResizeDimensions(ResizeBottomCenter); - UpdateResizeDimensions(ResizeLeftCenter); - UpdateResizeDimensions(ResizeTopLeft); - UpdateResizeDimensions(ResizeTopRight); - UpdateResizeDimensions(ResizeBottomRight); - UpdateResizeDimensions(ResizeBottomLeft); - - // Anchor point - UpdateResizeDimensions(AnchorPoint); - - // Layer outline - LayerShapeOutline.StrokeThickness = Math.Max(2 / Zoom, 1); - } - private void UpdateShapeGeometry() { LayerShapeOutline.Data = ShapeGeometry; diff --git a/src/Artemis.UI/Screens/RootViewModel.cs b/src/Artemis.UI/Screens/RootViewModel.cs index e1b174bd5..da6f4a4f7 100644 --- a/src/Artemis.UI/Screens/RootViewModel.cs +++ b/src/Artemis.UI/Screens/RootViewModel.cs @@ -33,6 +33,35 @@ namespace Artemis.UI.Screens public bool IsSidebarVisible { get; set; } public bool ActiveItemReady { get; set; } + public void WindowDeactivated() + { + var windowState = ((Window) View).WindowState; + if (windowState == WindowState.Minimized) + return; + + _lostFocus = true; + _eventAggregator.Publish(new MainWindowFocusChangedEvent(false)); + } + + public void WindowActivated() + { + if (!_lostFocus) + return; + + _lostFocus = false; + _eventAggregator.Publish(new MainWindowFocusChangedEvent(true)); + } + + public void WindowKeyDown(object sender, KeyEventArgs e) + { + _eventAggregator.Publish(new MainWindowKeyEvent(true, e)); + } + + public void WindowKeyUp(object sender, KeyEventArgs e) + { + _eventAggregator.Publish(new MainWindowKeyEvent(false, e)); + } + private void SidebarViewModelOnPropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(SidebarViewModel.SelectedItem)) @@ -63,34 +92,5 @@ namespace Artemis.UI.Screens extensionsPaletteHelper.SetLightDark(windowsTheme == ThemeWatcher.WindowsTheme.Dark); #pragma warning restore 612 } - - public void WindowDeactivated() - { - var windowState = ((Window) View).WindowState; - if (windowState == WindowState.Minimized) - return; - - _lostFocus = true; - _eventAggregator.Publish(new MainWindowFocusChangedEvent(false)); - } - - public void WindowActivated() - { - if (!_lostFocus) - return; - - _lostFocus = false; - _eventAggregator.Publish(new MainWindowFocusChangedEvent(true)); - } - - public void WindowKeyDown(object sender, KeyEventArgs e) - { - _eventAggregator.Publish(new MainWindowKeyEvent(true, e)); - } - - public void WindowKeyUp(object sender, KeyEventArgs e) - { - _eventAggregator.Publish(new MainWindowKeyEvent(false, e)); - } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Settings/Debug/DebugViewModel.cs b/src/Artemis.UI/Screens/Settings/Debug/DebugViewModel.cs index 41ae2b6d7..ffe2b9329 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/DebugViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/Debug/DebugViewModel.cs @@ -36,6 +36,20 @@ namespace Artemis.UI.Screens.Settings.Debug GC.WaitForPendingFinalizers(); } + protected override void OnActivate() + { + _coreService.FrameRendered += CoreServiceOnFrameRendered; + _coreService.FrameRendering += CoreServiceOnFrameRendering; + base.OnActivate(); + } + + protected override void OnDeactivate() + { + _coreService.FrameRendered -= CoreServiceOnFrameRendered; + _coreService.FrameRendering -= CoreServiceOnFrameRendering; + base.OnDeactivate(); + } + private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e) { Execute.PostToUIThread(() => @@ -75,19 +89,5 @@ namespace Artemis.UI.Screens.Settings.Debug { CurrentFps = Math.Round(1.0 / e.DeltaTime, 2); } - - protected override void OnActivate() - { - _coreService.FrameRendered += CoreServiceOnFrameRendered; - _coreService.FrameRendering += CoreServiceOnFrameRendering; - base.OnActivate(); - } - - protected override void OnDeactivate() - { - _coreService.FrameRendered -= CoreServiceOnFrameRendered; - _coreService.FrameRendering -= CoreServiceOnFrameRendering; - base.OnDeactivate(); - } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Settings/SettingsViewModel.cs b/src/Artemis.UI/Screens/Settings/SettingsViewModel.cs index 179272f33..f1324d1f7 100644 --- a/src/Artemis.UI/Screens/Settings/SettingsViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/SettingsViewModel.cs @@ -108,20 +108,6 @@ namespace Artemis.UI.Screens.Settings } } - protected override void OnActivate() - { - DeviceSettingsViewModels.Clear(); - foreach (var device in _surfaceService.ActiveSurface.Devices) - DeviceSettingsViewModels.Add(_deviceSettingsVmFactory.Create(device)); - - // TODO: GetPluginsOfType isn't ideal here as it doesn't include disabled plugins - Plugins.Clear(); - foreach (var plugin in _pluginService.GetPluginsOfType()) - Plugins.Add(new PluginSettingsViewModel(plugin)); - - base.OnActivate(); - } - public void ShowDebugger() { _windowManager.ShowWindow(_kernel.Get()); @@ -136,5 +122,19 @@ namespace Artemis.UI.Screens.Settings { Process.Start(Constants.DataFolder); } + + protected override void OnActivate() + { + DeviceSettingsViewModels.Clear(); + foreach (var device in _surfaceService.ActiveSurface.Devices) + DeviceSettingsViewModels.Add(_deviceSettingsVmFactory.Create(device)); + + // TODO: GetPluginsOfType isn't ideal here as it doesn't include disabled plugins + Plugins.Clear(); + foreach (var plugin in _pluginService.GetPluginsOfType()) + Plugins.Add(new PluginSettingsViewModel(plugin)); + + base.OnActivate(); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceLedViewModel.cs b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceLedViewModel.cs index 63135f86b..668626e8f 100644 --- a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceLedViewModel.cs +++ b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceLedViewModel.cs @@ -21,11 +21,6 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization public double Width { get; set; } public double Height { get; set; } - private void OnLedOnPropertyChanged(object sender, PropertyChangedEventArgs args) - { - if (args.PropertyName == "Location" || args.PropertyName == "ActualSize") ApplyLedToViewModel(); - } - public void ApplyLedToViewModel() { // Don't want ActualLocation here since rotation is done in XAML @@ -34,5 +29,10 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization Width = Led.ActualSize.Width; Height = Led.ActualSize.Height; } + + private void OnLedOnPropertyChanged(object sender, PropertyChangedEventArgs args) + { + if (args.PropertyName == "Location" || args.PropertyName == "ActualSize") ApplyLedToViewModel(); + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Stylet/NinjectBootstrapper.cs b/src/Artemis.UI/Stylet/NinjectBootstrapper.cs index b7bf3f9dc..8e55f0d1b 100644 --- a/src/Artemis.UI/Stylet/NinjectBootstrapper.cs +++ b/src/Artemis.UI/Stylet/NinjectBootstrapper.cs @@ -13,6 +13,19 @@ namespace Artemis.UI.Stylet protected virtual object RootViewModel => _rootViewModel ?? (_rootViewModel = GetInstance(typeof(TRootViewModel))); + public override object GetInstance(Type type) + { + return Kernel.Get(type); + } + + public override void Dispose() + { + base.Dispose(); + ScreenExtensions.TryDispose(_rootViewModel); + if (Kernel != null) + Kernel.Dispose(); + } + protected override void ConfigureBootstrapper() { Kernel = new StandardKernel(); @@ -49,21 +62,8 @@ namespace Artemis.UI.Stylet { } - public override object GetInstance(Type type) - { - return Kernel.Get(type); - } - protected override void Launch() { } - - public override void Dispose() - { - base.Dispose(); - ScreenExtensions.TryDispose(_rootViewModel); - if (Kernel != null) - Kernel.Dispose(); - } } } \ No newline at end of file diff --git a/src/Artemis.UI/packages.config b/src/Artemis.UI/packages.config index 992824f16..fe7beab5f 100644 --- a/src/Artemis.UI/packages.config +++ b/src/Artemis.UI/packages.config @@ -1,4 +1,5 @@  +