diff --git a/src/Artemis.UI.Shared/GradientPicker.xaml.cs b/src/Artemis.UI.Shared/GradientPicker.xaml.cs index d767da341..c735e1f90 100644 --- a/src/Artemis.UI.Shared/GradientPicker.xaml.cs +++ b/src/Artemis.UI.Shared/GradientPicker.xaml.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System; +using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Controls; @@ -6,6 +7,7 @@ using System.Windows.Input; using Artemis.Core.Models.Profile; using Artemis.UI.Shared.Annotations; using Artemis.UI.Shared.Screens.GradientEditor; +using Artemis.UI.Shared.Services.Interfaces; namespace Artemis.UI.Shared { @@ -14,6 +16,20 @@ namespace Artemis.UI.Shared /// public partial class GradientPicker : UserControl, INotifyPropertyChanged { + /// + /// Used by the gradient picker to load saved gradients, do not touch or it'll just throw an exception + /// + public static IGradientPickerService GradientPickerService + { + private get => _gradientPickerService; + set + { + if (_gradientPickerService != null) + throw new AccessViolationException("This is not for you to touch"); + _gradientPickerService = value; + } + } + public static readonly DependencyProperty ColorGradientProperty = DependencyProperty.Register(nameof(ColorGradient), typeof(ColorGradient), typeof(GradientPicker), new FrameworkPropertyMetadata(default(ColorGradient), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, ColorGradientPropertyChangedCallback)); @@ -24,6 +40,8 @@ namespace Artemis.UI.Shared typeof(RoutedPropertyChangedEventHandler), typeof(GradientPicker)); + private static IGradientPickerService _gradientPickerService; + private bool _inCallback; public GradientPicker() diff --git a/src/Artemis.UI.Shared/Services/GradientPickerService.cs b/src/Artemis.UI.Shared/Services/GradientPickerService.cs new file mode 100644 index 000000000..db7b877ba --- /dev/null +++ b/src/Artemis.UI.Shared/Services/GradientPickerService.cs @@ -0,0 +1,8 @@ +using Artemis.UI.Shared.Services.Interfaces; + +namespace Artemis.UI.Shared.Services +{ + public class GradientPickerService : IGradientPickerService + { + } +} \ No newline at end of file diff --git a/src/Artemis.UI.Shared/Services/Interfaces/IGradientPickerService.cs b/src/Artemis.UI.Shared/Services/Interfaces/IGradientPickerService.cs new file mode 100644 index 000000000..f1d0cc43d --- /dev/null +++ b/src/Artemis.UI.Shared/Services/Interfaces/IGradientPickerService.cs @@ -0,0 +1,7 @@ +namespace Artemis.UI.Shared.Services.Interfaces +{ + public interface IGradientPickerService : IArtemisSharedUIService + { + + } +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/TrayViewModel.cs b/src/Artemis.UI/Screens/TrayViewModel.cs index 818458204..efb7d570f 100644 --- a/src/Artemis.UI/Screens/TrayViewModel.cs +++ b/src/Artemis.UI/Screens/TrayViewModel.cs @@ -1,9 +1,10 @@ -using System.Windows; -using Artemis.Core.Services; +using Artemis.Core.Services; using Artemis.Core.Services.Interfaces; using Artemis.Core.Utilities; using Artemis.UI.Events; using Artemis.UI.Screens.Splash; +using Artemis.UI.Shared; +using Artemis.UI.Shared.Services.Interfaces; using Ninject; using Stylet; @@ -11,9 +12,10 @@ namespace Artemis.UI.Screens { public class TrayViewModel : Screen { + private readonly IEventAggregator _eventAggregator; private readonly IKernel _kernel; private readonly IWindowManager _windowManager; - private readonly IEventAggregator _eventAggregator; + private bool _setGradientPickerService; private SplashViewModel _splashViewModel; public TrayViewModel(IKernel kernel, IWindowManager windowManager, IEventAggregator eventAggregator, ICoreService coreService, ISettingsService settingsService) @@ -39,6 +41,14 @@ namespace Artemis.UI.Screens if (!CanShowRootViewModel) return; + // The gradient picker must have a reference to this service to be able to load saved gradients. + // To avoid wasting resources, only set the service once and not until showing the UI. + if (!_setGradientPickerService) + { + GradientPicker.GradientPickerService = _kernel.Get(); + _setGradientPickerService = true; + } + CanShowRootViewModel = false; Execute.OnUIThread(() => {