From f25dc00c16f2ba03933b2882c5e441eae471814f Mon Sep 17 00:00:00 2001 From: Robert Beekman Date: Sun, 8 May 2016 13:47:51 +0200 Subject: [PATCH] Moving to Ninject dependency injection WIP 2 --- Artemis/Artemis/Artemis.csproj | 9 + Artemis/Artemis/Managers/EffectManager.cs | 141 +++------ Artemis/Artemis/Managers/KeyboardManager.cs | 93 +++--- Artemis/Artemis/Managers/LoopManager.cs | 118 ++++++++ Artemis/Artemis/Managers/MainManager.cs | 274 +++++------------- Artemis/Artemis/Models/EffectModel.cs | 7 +- Artemis/Artemis/Models/GameModel.cs | 3 +- Artemis/Artemis/Models/OverlayModel.cs | 3 +- .../AmbientLightningEffectModel.cs | 16 +- .../AmbientLightningEffectViewModel.cs | 9 +- .../AudioVisualizer/AudioVisualizerModel.cs | 13 +- .../AudioVisualizerViewModel.cs | 9 +- .../Modules/Effects/Debug/DebugEffectModel.cs | 5 +- .../Effects/Debug/DebugEffectViewModel.cs | 9 +- .../ProfilePreview/ProfilePreviewModel.cs | 7 +- .../Modules/Effects/TypeWave/TypeWaveModel.cs | 7 +- .../Effects/TypeWave/TypeWaveViewModel.cs | 7 +- .../Games/CounterStrike/CounterStrikeModel.cs | 5 +- .../CounterStrike/CounterStrikeViewModel.cs | 9 +- .../Artemis/Modules/Games/Dota2/Dota2Model.cs | 37 ++- .../Modules/Games/Dota2/Dota2ViewModel.cs | 5 +- .../Games/RocketLeague/RocketLeagueModel.cs | 5 +- .../RocketLeague/RocketLeagueViewModel.cs | 9 +- .../Games/TheDivision/TheDivisionModel.cs | 15 +- .../Games/TheDivision/TheDivisionViewModel.cs | 9 +- .../Modules/Games/Witcher3/Witcher3Model.cs | 7 +- .../Games/Witcher3/Witcher3ViewModel.cs | 5 +- .../VolumeDisplay/VolumeDisplayModel.cs | 7 +- .../VolumeDisplay/VolumeDisplayViewModel.cs | 8 +- .../ViewModels/Abstract/EffectViewModel.cs | 12 +- .../ViewModels/Abstract/GameViewModel.cs | 24 +- .../ViewModels/Abstract/OverlayViewModel.cs | 4 +- .../Flyouts/FlyoutSettingsViewModel.cs | 2 +- .../Artemis/ViewModels/SystemTrayViewModel.cs | 2 +- Artemis/Artemis/packages.config | 3 +- 35 files changed, 382 insertions(+), 516 deletions(-) create mode 100644 Artemis/Artemis/Managers/LoopManager.cs diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index a42fa0f09..485691460 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -175,6 +175,14 @@ ..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll True + + ..\packages\Ninject.Extensions.Logging.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.dll + True + + + ..\packages\Ninject.Extensions.Logging.nlog4.3.2.3.0\lib\net45-full\Ninject.Extensions.Logging.NLog4.dll + True + ..\packages\NLog.4.3.3\lib\net45\NLog.dll True @@ -280,6 +288,7 @@ + diff --git a/Artemis/Artemis/Managers/EffectManager.cs b/Artemis/Artemis/Managers/EffectManager.cs index a53ef614a..5305f4411 100644 --- a/Artemis/Artemis/Managers/EffectManager.cs +++ b/Artemis/Artemis/Managers/EffectManager.cs @@ -1,24 +1,24 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading; using Artemis.Events; using Artemis.Models; using Artemis.Modules.Effects.ProfilePreview; using Artemis.Settings; using Caliburn.Micro; -using Ninject; using NLog; using LogManager = NLog.LogManager; namespace Artemis.Managers { + /// + /// Manages the effects + /// public class EffectManager { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly IEventAggregator _events; private EffectModel _activeEffect; - private bool _clearing; public EffectManager(IEventAggregator events) { @@ -30,11 +30,6 @@ namespace Artemis.Managers Logger.Info("Intialized EffectManager"); } - [Inject] - public Lazy MainManager { get; set; } - - public EffectModel PauseEffect { get; set; } - /// /// Used by ViewModels to show a preview of the profile currently being edited /// @@ -78,13 +73,9 @@ namespace Artemis.Managers public EffectModel GetLastEffect() { Logger.Debug("Getting last effect: {0}", General.Default.LastEffect); - if (General.Default.LastEffect == null) - return null; - - var effect = EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect); - - // Fall back to the first effect found, in case settings are messed up - return effect; + return General.Default.LastEffect == null + ? null + : EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect); } /// @@ -92,8 +83,10 @@ namespace Artemis.Managers /// /// /// Changes the effect, even if it's already running (effectively restarting it) - public void ChangeEffect(EffectModel effectModel, bool force = false) + public void ChangeEffect(EffectModel effectModel) { + if (effectModel == null) + throw new ArgumentNullException(nameof(effectModel)); if (effectModel is OverlayModel) throw new ArgumentException("Can't set an Overlay effect as the active effect"); @@ -103,108 +96,48 @@ namespace Artemis.Managers if (!gameModel.Enabled) return; - if (ActiveEffect != null) - if (effectModel.Name == ActiveEffect.Name && !force) + var wasNull = false; + if (ActiveEffect == null) + { + wasNull = true; + ActiveEffect = effectModel; + } + + lock (ActiveEffect) + { + if (!wasNull) + ActiveEffect.Dispose(); + + ActiveEffect = effectModel; + ActiveEffect.Enable(); + + if (ActiveEffect is GameModel || ActiveEffect is ProfilePreviewModel) return; - Logger.Debug("Changing effect to: {0}, force: {1}", effectModel?.Name, force); - // If the main manager is running, pause it and safely change the effect - if (MainManager.Value.Running) - { - ChangeEffectWithPause(effectModel); - return; + // Non-game effects are stored as the new LastEffect. + General.Default.LastEffect = ActiveEffect?.Name; + General.Default.Save(); } - // If it's not running start it, and let the next recursion handle changing the effect - MainManager.Value.Start(effectModel); + Logger.Debug($"Changed active effect to: {effectModel.Name}"); } - private void ChangeEffectWithPause(EffectModel effectModel) - { - var tryCount = 0; - while (PauseEffect != null) - { - Thread.Sleep(500); - tryCount++; - if (tryCount > 20) - throw new Exception("Couldn't change effect before the time expired"); - } - - // Don't interrupt an ongoing effect change - if (PauseEffect != null) - { - Logger.Debug("Change effect with pause cancelled"); - return; - } - Logger.Debug("Changing effect with pause: {0}", effectModel?.Name); - - PauseEffect = effectModel; - MainManager.Value.Pause(); - MainManager.Value.PauseCallback += ChangeEffectPauseCallback; - } - - private void ChangeEffectPauseCallback() - { - MainManager.Value.PauseCallback -= ChangeEffectPauseCallback; - - // Change effect logic - ActiveEffect?.Dispose(); - - ActiveEffect = PauseEffect; - ActiveEffect?.Enable(); - - MainManager.Value.Unpause(); - PauseEffect = null; - - Logger.Debug("Finishing change effect with pause"); - if (ActiveEffect is GameModel || ActiveEffect is ProfilePreviewModel) - return; - - // Non-game effects are stored as the new LastEffect. - General.Default.LastEffect = ActiveEffect?.Name; - General.Default.Save(); - } /// /// Clears the current effect /// public void ClearEffect() { - if (_clearing) - return; - - // Don't mess with the ActiveEffect if in the process of changing the effect. - if (PauseEffect != null) - return; - - if (ActiveEffect == null) - return; - - _clearing = true; - Logger.Debug("Clearing active effect"); - MainManager.Value.Pause(); - MainManager.Value.PauseCallback += ClearEffectPauseCallback; - } - - private void ClearEffectPauseCallback() - { - MainManager.Value.PauseCallback -= ClearEffectPauseCallback; - if (PauseEffect != null) + lock (ActiveEffect) { - Logger.Debug("Cancelling clearing effect"); - return; + ActiveEffect.Dispose(); + ActiveEffect = null; + + General.Default.LastEffect = null; + General.Default.Save(); } - ActiveEffect.Dispose(); - ActiveEffect = null; - - General.Default.LastEffect = null; - General.Default.Save(); - - _clearing = false; - - Logger.Debug("Finishing clearing active effect"); - MainManager.Value.Unpause(); + Logger.Debug("Cleared active effect"); } /// @@ -213,7 +146,7 @@ namespace Artemis.Managers /// public void DisableGame(EffectModel activeEffect) { - Logger.Debug("Disabling game: {0}", activeEffect?.Name); + Logger.Debug($"Disabling game: {activeEffect?.Name}"); if (GetLastEffect() == null) ClearEffect(); else diff --git a/Artemis/Artemis/Managers/KeyboardManager.cs b/Artemis/Artemis/Managers/KeyboardManager.cs index 03450ac35..a7309a093 100644 --- a/Artemis/Artemis/Managers/KeyboardManager.cs +++ b/Artemis/Artemis/Managers/KeyboardManager.cs @@ -5,12 +5,14 @@ using Artemis.Events; using Artemis.KeyboardProviders; using Artemis.Settings; using Caliburn.Micro; -using Ninject; using NLog; using LogManager = NLog.LogManager; namespace Artemis.Managers { + /// + /// Manages the keyboard providers + /// public class KeyboardManager { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); @@ -27,9 +29,6 @@ namespace Artemis.Managers Logger.Info("Intialized KeyboardManager"); } - [Inject] - public Lazy MainManager { get; set; } - public List KeyboardProviders { get; set; } public KeyboardProvider ActiveKeyboard @@ -43,17 +42,13 @@ namespace Artemis.Managers } } - public bool CanDisable { get; set; } - /// /// Enables the last keyboard according to the settings file /// public void EnableLastKeyboard() { - Logger.Debug("Enabling last keyboard: {0}", General.Default.LastKeyboard); - if (General.Default.LastKeyboard == null) - return; - if (General.Default.LastKeyboard == "") + Logger.Debug($"Enabling last keyboard: {General.Default.LastKeyboard}"); + if (string.IsNullOrEmpty(General.Default.LastKeyboard)) return; var keyboard = KeyboardProviders.FirstOrDefault(k => k.Name == General.Default.LastKeyboard); @@ -66,32 +61,41 @@ namespace Artemis.Managers /// public void EnableKeyboard(KeyboardProvider keyboardProvider) { - Logger.Debug("Enabling keyboard: {0}", keyboardProvider?.Name); - ReleaseActiveKeyboard(); - if (keyboardProvider == null) + throw new ArgumentNullException(nameof(keyboardProvider)); + + if (ActiveKeyboard?.Name == keyboardProvider.Name) return; - if (ActiveKeyboard != null) - if (keyboardProvider.Name == ActiveKeyboard.Name) - return; - - // Disable everything if there's no active keyboard found - if (!keyboardProvider.CanEnable()) + var wasNull = false; + if (ActiveKeyboard == null) { - MainManager.Value.DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText); - General.Default.LastKeyboard = null; - General.Default.Save(); - return; + wasNull = true; + ActiveKeyboard = keyboardProvider; } - CanDisable = false; - ActiveKeyboard = keyboardProvider; - keyboardProvider.Enable(); + lock (ActiveKeyboard) + { + Logger.Debug($"Enabling keyboard: {keyboardProvider.Name}"); - General.Default.LastKeyboard = ActiveKeyboard.Name; - General.Default.Save(); - CanDisable = true; + if (!wasNull) + ReleaseActiveKeyboard(); + + // Disable everything if there's no active keyboard found + if (!keyboardProvider.CanEnable()) + { + // TODO: MainManager.DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText); + General.Default.LastKeyboard = null; + General.Default.Save(); + return; + } + + ActiveKeyboard = keyboardProvider; + ActiveKeyboard.Enable(); + + General.Default.LastKeyboard = ActiveKeyboard.Name; + General.Default.Save(); + } } /// @@ -99,29 +103,16 @@ namespace Artemis.Managers /// public void ReleaseActiveKeyboard() { - if (ActiveKeyboard == null || !CanDisable) - return; + lock (ActiveKeyboard) + { + if (ActiveKeyboard == null) + return; + + ActiveKeyboard.Disable(); + ActiveKeyboard = null; + } - ActiveKeyboard.Disable(); - Logger.Debug("Released keyboard: {0}", ActiveKeyboard?.Name); - ActiveKeyboard = null; - } - - /// - /// Changes the active keyboard - /// - /// - public void ChangeKeyboard(KeyboardProvider keyboardProvider) - { - Logger.Debug("Changing active keyboard"); - if (keyboardProvider == ActiveKeyboard) - return; - - General.Default.LastKeyboard = keyboardProvider?.Name; - General.Default.Save(); - - Logger.Debug("Restarting for keyboard change"); - MainManager.Value.Restart(); + Logger.Debug($"Released keyboard: {ActiveKeyboard?.Name}"); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Managers/LoopManager.cs b/Artemis/Artemis/Managers/LoopManager.cs new file mode 100644 index 000000000..32f7120f3 --- /dev/null +++ b/Artemis/Artemis/Managers/LoopManager.cs @@ -0,0 +1,118 @@ +using System; +using System.Timers; +using Artemis.Events; +using Caliburn.Micro; +using Ninject.Extensions.Logging; + +namespace Artemis.Managers +{ + /// + /// Manages the main programn loop + /// + public class LoopManager : IDisposable + { + private readonly EffectManager _effectManager; + private readonly IEventAggregator _events; + private readonly KeyboardManager _keyboardManager; + private readonly Timer _loopTimer; + + public LoopManager(ILogger logger, IEventAggregator events, EffectManager effectManager, + KeyboardManager keyboardManager) + { + Logger = logger; + _events = events; + _effectManager = effectManager; + _keyboardManager = keyboardManager; + + _loopTimer = new Timer(40); + _loopTimer.Elapsed += Render; + _loopTimer.Start(); + } + + public ILogger Logger { get; } + + /// + /// Gets whether the loop is running + /// + public bool Running { get; private set; } + + public void Dispose() + { + _loopTimer.Stop(); + _loopTimer.Dispose(); + } + + public void Start() + { + Logger.Debug("Starting LoopManager"); + // Setup + + Running = true; + } + + public void Stop() + { + Logger.Debug("Stopping LoopManager"); + Running = false; + + // Shut down + } + + private void Render(object sender, ElapsedEventArgs e) + { + if (!Running) + return; + + // Lock both the active keyboard and active effect so they will not change while rendering. + lock (_keyboardManager.ActiveKeyboard) + { + lock (_effectManager.ActiveEffect) + { + // Stop if no active keyboard/efffect + if (_keyboardManager.ActiveKeyboard == null || _effectManager.ActiveEffect == null) + { + Logger.Debug("No active keyboard/effect, stopping. " + + $"Keyboard={_keyboardManager.ActiveKeyboard?.Name}, " + + $"effect={_effectManager.ActiveEffect?.Name}"); + Stop(); + return; + } + + // Skip frame if effect is still initializing + if (_effectManager.ActiveEffect.Initialized == false) + return; + + // Update the current effect + if (_effectManager.ActiveEffect.Initialized) + _effectManager.ActiveEffect.Update(); + + // Get ActiveEffect's bitmap + var bitmap = _effectManager.ActiveEffect.Initialized + ? _effectManager.ActiveEffect.GenerateBitmap() + : null; + + lock (_effectManager.EnabledOverlays) + { + // Draw enabled overlays on top + foreach (var overlayModel in _effectManager.EnabledOverlays) + { + overlayModel.Update(); + bitmap = bitmap != null + ? overlayModel.GenerateBitmap(bitmap) + : overlayModel.GenerateBitmap(); + } + } + + if (bitmap == null) + return; + + // If it exists, send bitmap to the device + _keyboardManager.ActiveKeyboard.DrawBitmap(bitmap); + + // debugging TODO: Disable when window isn't shown (in Debug VM, or get rid of it, w/e) + _events.PublishOnUIThread(new ChangeBitmap(bitmap)); + } + } + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/Managers/MainManager.cs b/Artemis/Artemis/Managers/MainManager.cs index 8bb4fc7d8..73ec376ec 100644 --- a/Artemis/Artemis/Managers/MainManager.cs +++ b/Artemis/Artemis/Managers/MainManager.cs @@ -12,42 +12,35 @@ using Artemis.Utilities.LogitechDll; using Artemis.ViewModels; using Caliburn.Micro; using Ninject; -using NLog; -using LogManager = NLog.LogManager; +using Ninject.Extensions.Logging; namespace Artemis.Managers { - public class MainManager + /// + /// Contains all the other managers and non-loop related components + /// + public class MainManager : IDisposable { public delegate void PauseCallbackHandler(); - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private readonly EffectManager _effectManager; private readonly IEventAggregator _events; - private readonly int _fps; - private readonly KeyboardManager _keyboardManager; - private bool _paused; - private bool _restarting; - - public MainManager(IEventAggregator events, KeyboardManager keyboardManager, EffectManager effectManager) + public MainManager(IEventAggregator events, ILogger logger, LoopManager loopManager, + KeyboardManager keyboardManager, EffectManager effectManager) { + Logger = logger; + LoopManager = loopManager; + KeyboardManager = keyboardManager; + EffectManager = effectManager; + Logger.Info("Intializing MainManager"); _events = events; - _keyboardManager = keyboardManager; - _effectManager = effectManager; - _fps = 25; //DialogService = dialogService; KeyboardHook = new KeyboardHook(); - UpdateWorker = new BackgroundWorker {WorkerSupportsCancellation = true}; ProcessWorker = new BackgroundWorker {WorkerSupportsCancellation = true}; - - UpdateWorker.DoWork += UpdateWorker_DoWork; - UpdateWorker.RunWorkerCompleted += BackgroundWorkerExceptionCatcher; - ProcessWorker.DoWork += ProcessWorker_DoWork; ProcessWorker.RunWorkerCompleted += BackgroundWorkerExceptionCatcher; @@ -71,101 +64,21 @@ namespace Artemis.Managers [Inject] public Lazy ShellViewModel { get; set; } + public ILogger Logger { get; } + private LoopManager LoopManager { get; } + public KeyboardManager KeyboardManager { get; set; } + public EffectManager EffectManager { get; set; } + public PipeServer PipeServer { get; set; } - public BackgroundWorker UpdateWorker { get; set; } public BackgroundWorker ProcessWorker { get; set; } - public MetroDialogService DialogService { get; set; } - public KeyboardHook KeyboardHook { get; set; } - public GameStateWebServer GameStateWebServer { get; set; } - public bool ProgramEnabled { get; private set; } public bool Suspended { get; set; } - public bool Running { get; private set; } - public event PauseCallbackHandler PauseCallback; - - /// - /// Take control of the keyboard and start sending data to it - /// - /// Whether starting was successful or not - public bool Start(EffectModel effect = null) - { - Logger.Debug("Starting MainManager"); - // Can't take control when not enabled - if (!ProgramEnabled || UpdateWorker.CancellationPending || UpdateWorker.IsBusy || _paused) - return false; - - // Do nothing if already running - if (Running) - return true; - - // Only continue if a keyboard was loaded - _keyboardManager.EnableLastKeyboard(); - if (_keyboardManager.ActiveKeyboard == null) - return false; - - Running = true; - if (effect != null) - _effectManager.ChangeEffect(effect); - - // Start the update worker - if (!UpdateWorker.IsBusy) - UpdateWorker.RunWorkerAsync(); - - return Running; - } - - /// - /// Releases control of the keyboard and stop sending data to it - /// - public void Stop() - { - Logger.Debug("Stopping MainManager"); - if (!Running || UpdateWorker.CancellationPending || _paused) - return; - - // Stop the update worker - UpdateWorker.CancelAsync(); - UpdateWorker.RunWorkerCompleted += FinishStop; - } - - private void FinishStop(object sender, RunWorkerCompletedEventArgs e) - { - UpdateWorker.RunWorkerCompleted -= FinishStop; - _keyboardManager.ReleaseActiveKeyboard(); - Running = false; - - Logger.Debug("Stopped MainManager"); - if (e.Error != null || !_restarting) - return; - - Start(); - _restarting = false; - } - - public void Pause() - { - if (!Running || UpdateWorker.CancellationPending || _paused) - return; - - Logger.Debug("Pausing MainManager"); - _paused = true; - } - - public void Unpause() - { - if (!_paused) - return; - - Logger.Debug("Unpausing MainManager"); - _paused = false; - } - - public void Shutdown() + public void Dispose() { Logger.Debug("Shutting down MainManager"); Stop(); @@ -175,20 +88,46 @@ namespace Artemis.Managers PipeServer.Stop(); } - public void Restart() + /// + /// Take control of the keyboard and start sending data to it + /// + /// Whether starting was successful or not + public bool Start(EffectModel effect = null) { - if (_restarting) - return; + Logger.Debug("Starting MainManager"); + // Can't take control when not enabled + if (!ProgramEnabled) + return false; - Logger.Debug("Restarting MainManager"); + // Do nothing if already running + if (Running) + return true; + + // Only continue if a keyboard was loaded + KeyboardManager.EnableLastKeyboard(); + if (KeyboardManager.ActiveKeyboard == null) + return false; + + Running = true; + if (effect != null) + EffectManager.ChangeEffect(effect); + + LoopManager.Start(); + + return Running; + } + + /// + /// Releases control of the keyboard and stop sending data to it + /// + public void Stop() + { if (!Running) - { - Start(); return; - } - _restarting = true; - Stop(); + Logger.Debug("Stopping MainManager"); + + LoopManager.Stop(); } /// @@ -198,7 +137,7 @@ namespace Artemis.Managers { Logger.Debug("Enabling program"); ProgramEnabled = true; - Start(_effectManager.GetLastEffect()); + Start(EffectManager.GetLastEffect()); _events.PublishOnUIThread(new ToggleEnabled(ProgramEnabled)); } @@ -213,88 +152,6 @@ namespace Artemis.Managers _events.PublishOnUIThread(new ToggleEnabled(ProgramEnabled)); } - #region Workers - - private void UpdateWorker_DoWork(object sender, DoWorkEventArgs e) - { - var sw = new Stopwatch(); - while (!UpdateWorker.CancellationPending) - { - // Skip frame when paused - if (_paused) - { - PauseCallback?.Invoke(); - Thread.Sleep(1000/_fps); - continue; - } - - // Stop if no keyboard/effect are present - if (_keyboardManager.ActiveKeyboard == null || _effectManager.ActiveEffect == null) - { - Thread.Sleep(1000/_fps); - Logger.Debug("No active effect/keyboard, stopping"); - - if (_effectManager.PauseEffect != null) - { - PauseCallback?.Invoke(); - Thread.Sleep(1000/_fps); - } - else - Stop(); - continue; - } - - // Don't stop when the effect is still initialized, just skip this frame - if (!_effectManager.ActiveEffect.Initialized) - { - Thread.Sleep(1000/_fps); - continue; - } - - sw.Start(); - - // Update the current effect - if (_effectManager.ActiveEffect.Initialized) - _effectManager.ActiveEffect.Update(); - - // Get ActiveEffect's bitmap - var bitmap = _effectManager.ActiveEffect.Initialized - ? _effectManager.ActiveEffect.GenerateBitmap() - : null; - - // Draw enabled overlays on top - foreach (var overlayModel in _effectManager.EnabledOverlays) - { - overlayModel.Update(); - bitmap = bitmap != null ? overlayModel.GenerateBitmap(bitmap) : overlayModel.GenerateBitmap(); - } - - // If it exists, send bitmap to the device - if (bitmap != null && _keyboardManager.ActiveKeyboard != null) - { - _keyboardManager.ActiveKeyboard.DrawBitmap(bitmap); - - // debugging TODO: Disable when window isn't shown - _events.PublishOnUIThread(new ChangeBitmap(bitmap)); - } - - // Sleep according to time left this frame - var sleep = (int) (1000/_fps - sw.ElapsedMilliseconds); - if (sleep > 0) - Thread.Sleep(sleep); - sw.Reset(); - } - } - - private void BackgroundWorkerExceptionCatcher(object sender, RunWorkerCompletedEventArgs e) - { - if (e.Error == null) - return; - - Logger.Error(e.Error, "Exception in the BackgroundWorker"); - throw e.Error; - } - private void ProcessWorker_DoWork(object sender, DoWorkEventArgs e) { while (!ProcessWorker.CancellationPending) @@ -308,28 +165,35 @@ namespace Artemis.Managers var runningProcesses = Process.GetProcesses(); // If the currently active effect is a disabled game, get rid of it. - if (_effectManager.ActiveEffect != null) - _effectManager.DisableInactiveGame(); + if (EffectManager.ActiveEffect != null) + EffectManager.DisableInactiveGame(); // If the currently active effect is a no longer running game, get rid of it. - var activeGame = _effectManager.ActiveEffect as GameModel; + var activeGame = EffectManager.ActiveEffect as GameModel; if (activeGame != null) if (!runningProcesses.Any(p => p.ProcessName == activeGame.ProcessName && p.HasExited == false)) - _effectManager.DisableGame(activeGame); + EffectManager.DisableGame(activeGame); // Look for running games, stopping on the first one that's found. - var newGame = _effectManager.EnabledGames + var newGame = EffectManager.EnabledGames .FirstOrDefault( g => runningProcesses.Any(p => p.ProcessName == g.ProcessName && p.HasExited == false)); // If it's not already enabled, do so. - if (newGame != null && _effectManager.ActiveEffect != newGame) - _effectManager.ChangeEffect(newGame); + if (newGame != null && EffectManager.ActiveEffect != newGame) + EffectManager.ChangeEffect(newGame); Thread.Sleep(1000); } } - #endregion + private void BackgroundWorkerExceptionCatcher(object sender, RunWorkerCompletedEventArgs e) + { + if (e.Error == null) + return; + + Logger.Error(e.Error, "Exception in the BackgroundWorker"); + throw e.Error; + } } } \ No newline at end of file diff --git a/Artemis/Artemis/Models/EffectModel.cs b/Artemis/Artemis/Models/EffectModel.cs index dd6436d27..a70af27f1 100644 --- a/Artemis/Artemis/Models/EffectModel.cs +++ b/Artemis/Artemis/Models/EffectModel.cs @@ -7,18 +7,13 @@ namespace Artemis.Models public abstract class EffectModel : IDisposable { public delegate void SettingsUpdateHandler(EffectSettings settings); - public bool Initialized; - - protected KeyboardManager KeyboardManager; - public MainManager MainManager; public string Name; - protected EffectModel(MainManager mainManager, KeyboardManager keyboardManager) + protected EffectModel(MainManager mainManager) { MainManager = mainManager; - KeyboardManager = keyboardManager; } public abstract void Dispose(); diff --git a/Artemis/Artemis/Models/GameModel.cs b/Artemis/Artemis/Models/GameModel.cs index 327fcecf8..a499076b5 100644 --- a/Artemis/Artemis/Models/GameModel.cs +++ b/Artemis/Artemis/Models/GameModel.cs @@ -6,8 +6,7 @@ namespace Artemis.Models { public abstract class GameModel : EffectModel { - protected GameModel(MainManager mainManager, KeyboardManager keyboardManager, GameSettings settings) - : base(mainManager, keyboardManager) + protected GameModel(MainManager mainManager, GameSettings settings): base(mainManager) { Settings = settings; } diff --git a/Artemis/Artemis/Models/OverlayModel.cs b/Artemis/Artemis/Models/OverlayModel.cs index c5a1670a4..ffd43b5e4 100644 --- a/Artemis/Artemis/Models/OverlayModel.cs +++ b/Artemis/Artemis/Models/OverlayModel.cs @@ -8,8 +8,7 @@ namespace Artemis.Models private bool _enabled; public string ProcessName; - protected OverlayModel(MainManager mainManager, KeyboardManager keyboardManager) - : base(mainManager, keyboardManager) + protected OverlayModel(MainManager mainManager): base(mainManager) { } diff --git a/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectModel.cs b/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectModel.cs index 9b921ae96..27140f257 100644 --- a/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectModel.cs +++ b/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectModel.cs @@ -20,8 +20,8 @@ namespace Artemis.Modules.Effects.AmbientLightning private ScreenCapture _screenCapturer; private KeyboardRectangle _topRect; - public AmbientLightningEffectModel(MainManager mainManager, KeyboardManager keyboardManager, - AmbientLightningEffectSettings settings) : base(mainManager, keyboardManager) + public AmbientLightningEffectModel(MainManager mainManager, AmbientLightningEffectSettings settings) + : base(mainManager) { Name = "Ambient Lightning"; Settings = settings; @@ -49,9 +49,9 @@ namespace Artemis.Modules.Effects.AmbientLightning _colors = new List(); _screenCapturer = new ScreenCapture(); - _topRect = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List(), - LinearGradientMode.Horizontal) {Height = KeyboardManager.ActiveKeyboard.Height*Scale/2}; - _botRect = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List(), + _topRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List(), + LinearGradientMode.Horizontal) {Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale/2}; + _botRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List(), LinearGradientMode.Horizontal); Initialized = true; @@ -102,8 +102,8 @@ namespace Artemis.Modules.Effects.AmbientLightning } // Put the resulting colors in 6 rectangles, their size differs per keyboard - var rectWidth = KeyboardManager.ActiveKeyboard.Width/3*Scale; - var rectHeight = KeyboardManager.ActiveKeyboard.Height/2*Scale; + var rectWidth = MainManager.KeyboardManager.ActiveKeyboard.Width/3*Scale; + var rectHeight = MainManager.KeyboardManager.ActiveKeyboard.Height/2*Scale; for (var row = 0; row < 2; row++) { for (var column = 0; column < 3; column++) @@ -116,7 +116,7 @@ namespace Artemis.Modules.Effects.AmbientLightning public override Bitmap GenerateBitmap() { - var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); using (var g = Graphics.FromImage(bitmap)) { var i = 0; diff --git a/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectViewModel.cs b/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectViewModel.cs index a92ecd540..08c163b34 100644 --- a/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectViewModel.cs +++ b/Artemis/Artemis/Modules/Effects/AmbientLightning/AmbientLightningEffectViewModel.cs @@ -7,16 +7,13 @@ namespace Artemis.Modules.Effects.AmbientLightning { public sealed class AmbientLightningEffectViewModel : EffectViewModel, IHandle { - public AmbientLightningEffectViewModel(MainManager mainManager, KeyboardManager keyboardManager, - EffectManager effectManager, IEventAggregator events) - : base( - mainManager, effectManager, - new AmbientLightningEffectModel(mainManager, keyboardManager, new AmbientLightningEffectSettings())) + public AmbientLightningEffectViewModel(MainManager main, IEventAggregator events) + : base(main, new AmbientLightningEffectModel(main, new AmbientLightningEffectSettings())) { DisplayName = "Ambient Lightning"; events.Subscribe(this); - EffectManager.EffectModels.Add(EffectModel); + MainManager.EffectManager.EffectModels.Add(EffectModel); } public void Handle(ActiveEffectChanged message) diff --git a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs index 019f93abe..db31d2341 100644 --- a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs +++ b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerModel.cs @@ -22,8 +22,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer private int _sensitivity; private IWaveIn _waveIn; - public AudioVisualizerModel(MainManager mainManager, KeyboardManager keyboardManager, - AudioVisualizerSettings settings) : base(mainManager, keyboardManager) + public AudioVisualizerModel(MainManager mainManager, AudioVisualizerSettings settings) : base(mainManager) { Settings = settings; Name = "Audiovisualizer"; @@ -58,7 +57,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer public override void Enable() { Initialized = false; - Lines = KeyboardManager.ActiveKeyboard.Width; + Lines = MainManager.KeyboardManager.ActiveKeyboard.Width; // TODO: Device selection SelectedDeviceId = new MMDeviceEnumerator() @@ -70,7 +69,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer for (var i = 0; i < Lines; i++) { SoundRectangles.Add(new KeyboardRectangle( - KeyboardManager.ActiveKeyboard, + MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List { ColorHelpers.ToDrawingColor(Settings.TopColor), @@ -122,7 +121,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer // Apply Sensitivity setting height = height*_sensitivity; var keyboardHeight = - (int) Math.Round(KeyboardManager.ActiveKeyboard.Height/100.00*height*Scale); + (int) Math.Round(MainManager.KeyboardManager.ActiveKeyboard.Height/100.00*height*Scale); if (keyboardHeight > SoundRectangles[i].Height) SoundRectangles[i].Height = keyboardHeight; else @@ -132,7 +131,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer SoundRectangles[i].Width = Scale; if (_fromBottom) - SoundRectangles[i].Y = KeyboardManager.ActiveKeyboard.Height*Scale - + SoundRectangles[i].Y = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - SoundRectangles[i].Height; } _generating = false; @@ -146,7 +145,7 @@ namespace Artemis.Modules.Effects.AudioVisualizer // Lock the _spectrumData array while busy with it _generating = true; - var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); using (var g = Graphics.FromImage(bitmap)) { foreach (var soundRectangle in SoundRectangles) diff --git a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerViewModel.cs b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerViewModel.cs index 74c6cc0fa..483cb1b98 100644 --- a/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerViewModel.cs +++ b/Artemis/Artemis/Modules/Effects/AudioVisualizer/AudioVisualizerViewModel.cs @@ -7,16 +7,13 @@ namespace Artemis.Modules.Effects.AudioVisualizer { public sealed class AudioVisualizerViewModel : EffectViewModel, IHandle { - public AudioVisualizerViewModel(MainManager mainManager, KeyboardManager keyboardManager, - EffectManager effectManager, IEventAggregator events) - : base( - mainManager, effectManager, - new AudioVisualizerModel(mainManager, keyboardManager, new AudioVisualizerSettings())) + public AudioVisualizerViewModel(MainManager main, IEventAggregator events) + : base(main, new AudioVisualizerModel(main, new AudioVisualizerSettings())) { DisplayName = "Audio Visualization"; events.Subscribe(this); - EffectManager.EffectModels.Add(EffectModel); + MainManager.EffectManager.EffectModels.Add(EffectModel); } public void Handle(ActiveEffectChanged message) diff --git a/Artemis/Artemis/Modules/Effects/Debug/DebugEffectModel.cs b/Artemis/Artemis/Modules/Effects/Debug/DebugEffectModel.cs index fcc29f84a..d8e6fc79f 100644 --- a/Artemis/Artemis/Modules/Effects/Debug/DebugEffectModel.cs +++ b/Artemis/Artemis/Modules/Effects/Debug/DebugEffectModel.cs @@ -10,8 +10,7 @@ namespace Artemis.Modules.Effects.Debug // TODO: Remove internal class DebugEffectModel : EffectModel { - public DebugEffectModel(MainManager mainManager, KeyboardManager keyboardManager, DebugEffectSettings settings) - : base(mainManager, keyboardManager) + public DebugEffectModel(MainManager mainManager, DebugEffectSettings settings) : base(mainManager) { Name = "Debug Effect"; Settings = settings; @@ -34,7 +33,7 @@ namespace Artemis.Modules.Effects.Debug { Initialized = false; - KeyboardRectangle = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List + KeyboardRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List { Color.Red, Color.OrangeRed, diff --git a/Artemis/Artemis/Modules/Effects/Debug/DebugEffectViewModel.cs b/Artemis/Artemis/Modules/Effects/Debug/DebugEffectViewModel.cs index ede2f75a0..1054f0440 100644 --- a/Artemis/Artemis/Modules/Effects/Debug/DebugEffectViewModel.cs +++ b/Artemis/Artemis/Modules/Effects/Debug/DebugEffectViewModel.cs @@ -14,16 +14,13 @@ namespace Artemis.Modules.Effects.Debug private ImageSource _imageSource; private string _selectedRectangleType; - public DebugEffectViewModel(MainManager mainManager, KeyboardManager keyboardManager, - EffectManager effectManager, IEventAggregator events) - : base( - mainManager, effectManager, - new DebugEffectModel(mainManager, keyboardManager, new DebugEffectSettings())) + public DebugEffectViewModel(MainManager main, IEventAggregator events) + : base(main, new DebugEffectModel(main, new DebugEffectSettings())) { DisplayName = "Debug Effect"; events.Subscribe(this); - EffectManager.EffectModels.Add(EffectModel); + MainManager.EffectManager.EffectModels.Add(EffectModel); } public BindableCollection RectangleTypes diff --git a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs index e79ca39f9..3cfe203ab 100644 --- a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs +++ b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs @@ -10,8 +10,7 @@ namespace Artemis.Modules.Effects.ProfilePreview { private readonly ProfilePreviewDataModel _previewDataModel; - public ProfilePreviewModel(MainManager mainManager, KeyboardManager keyboardManager) - : base(mainManager, keyboardManager) + public ProfilePreviewModel(MainManager main) : base(main) { Name = "Profile Preview"; _previewDataModel = new ProfilePreviewDataModel(); @@ -41,12 +40,12 @@ namespace Artemis.Modules.Effects.ProfilePreview public override Bitmap GenerateBitmap() { - var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(4); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4); if (SelectedProfile == null) return bitmap; - var keyboardRect = KeyboardManager.ActiveKeyboard.KeyboardRectangle(4); + var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(4); var image = SelectedProfile.GenerateBitmap(keyboardRect, _previewDataModel, true); // Draw on top of everything else diff --git a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs index 329fa03f7..22f115f0e 100644 --- a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs +++ b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveModel.cs @@ -16,8 +16,7 @@ namespace Artemis.Modules.Effects.TypeWave private readonly List _waves; private Color _randomColor; - public TypeWaveModel(MainManager mainManager, KeyboardManager keyboardManager, TypeWaveSettings settings) - : base(mainManager, keyboardManager) + public TypeWaveModel(MainManager mainManager, TypeWaveSettings settings) : base(mainManager) { Name = "TypeWave"; _waves = new List(); @@ -97,7 +96,7 @@ namespace Artemis.Modules.Effects.TypeWave if (_waves.Count == 0) return null; - var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); using (var g = Graphics.FromImage(bitmap)) { g.Clear(Color.Transparent); @@ -114,7 +113,7 @@ namespace Artemis.Modules.Effects.TypeWave _waves[i].Size, _waves[i].Size); Color fillColor; - if (KeyboardManager.ActiveKeyboard is CorsairRGB) + if (MainManager.KeyboardManager.ActiveKeyboard is CorsairRGB) fillColor = Color.Black; else fillColor = Color.Transparent; diff --git a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveViewModel.cs b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveViewModel.cs index 2e42d55a8..5e762899e 100644 --- a/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveViewModel.cs +++ b/Artemis/Artemis/Modules/Effects/TypeWave/TypeWaveViewModel.cs @@ -7,14 +7,13 @@ namespace Artemis.Modules.Effects.TypeWave { public sealed class TypeWaveViewModel : EffectViewModel, IHandle { - public TypeWaveViewModel(MainManager mainManager, KeyboardManager keyboardManager, EffectManager effectManager, - IEventAggregator events) - : base(mainManager, effectManager, new TypeWaveModel(mainManager, keyboardManager, new TypeWaveSettings())) + public TypeWaveViewModel(MainManager main, IEventAggregator events) + : base(main, new TypeWaveModel(main, new TypeWaveSettings())) { DisplayName = "Type Waves"; events.Subscribe(this); - EffectManager.EffectModels.Add(EffectModel); + MainManager.EffectManager.EffectModels.Add(EffectModel); } public void Handle(ActiveEffectChanged message) diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs index d243f1e23..bae1671bc 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeModel.cs @@ -8,8 +8,7 @@ namespace Artemis.Modules.Games.CounterStrike { public class CounterStrikeModel : GameModel { - public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings, - KeyboardManager keyboardManager) : base(mainManager, keyboardManager, settings) + public CounterStrikeModel(MainManager mainManager, CounterStrikeSettings settings) : base(mainManager, settings) { Name = "CounterStrike"; ProcessName = "csgo"; @@ -50,7 +49,7 @@ namespace Artemis.Modules.Games.CounterStrike if (Profile == null || GameDataModel == null) return null; - var keyboardRect = KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale); + var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale); return Profile.GenerateBitmap(keyboardRect, GameDataModel); } diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs index b2157259d..f2d54f056 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeViewModel.cs @@ -8,16 +8,13 @@ namespace Artemis.Modules.Games.CounterStrike { public sealed class CounterStrikeViewModel : GameViewModel { - public CounterStrikeViewModel(MainManager mainManager, EffectManager effectManager, - KeyboardManager keyboardManager) - : base( - mainManager, effectManager, - new CounterStrikeModel(mainManager, new CounterStrikeSettings(), keyboardManager)) + public CounterStrikeViewModel(MainManager main) + : base(main, new CounterStrikeModel(main, new CounterStrikeSettings())) { DisplayName = "CS:GO"; // Create effect model and add it to MainManager - EffectManager.EffectModels.Add(GameModel); + MainManager.EffectManager.EffectModels.Add(GameModel); PlaceConfigFile(); } diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs index 788a8df5b..bd99b08c2 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2Model.cs @@ -15,15 +15,12 @@ namespace Artemis.Modules.Games.Dota2 { internal class Dota2Model : GameModel { - private readonly KeyboardManager _keyboardManager; private KeyboardRegion _abilityKeys; private KeyboardRegion _keyPad; private KeyboardRegion _topRow; - public Dota2Model(MainManager mainManager, KeyboardManager keyboardManager, Dota2Settings settings) - : base(mainManager, keyboardManager, settings) + public Dota2Model(MainManager mainManager, Dota2Settings settings) : base(mainManager, settings) { - _keyboardManager = keyboardManager; Name = "Dota2"; ProcessName = "dota2"; Settings = settings; @@ -43,35 +40,35 @@ namespace Artemis.Modules.Games.Dota2 public override void Enable() { Initialized = false; - _topRow = _keyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "TopRow"); - _keyPad = _keyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "NumPad"); - _abilityKeys = _keyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "QWER"); - HealthRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard + _topRow = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "TopRow"); + _keyPad = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "NumPad"); + _abilityKeys = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRegions.First(r => r.RegionName == "QWER"); + HealthRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , 0 , _topRow.BottomRight.Y*Scale , new List() , LinearGradientMode.Horizontal) {Height = Scale, ContainedBrush = false}; - ManaRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard + ManaRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , 0 , (_topRow.BottomRight.Y + 1)*Scale , new List() , LinearGradientMode.Horizontal) {Height = Scale, ContainedBrush = false}; - EventRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard + EventRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , 0 , _topRow.TopLeft.X + 3 , new List() , LinearGradientMode.Horizontal) { - Height = _keyboardManager.ActiveKeyboard.Height*Scale - Scale + Height = MainManager.KeyboardManager.ActiveKeyboard.Height*Scale - Scale , - Width = _keyboardManager.ActiveKeyboard.Width*Scale - Scale - 12 + Width = MainManager.KeyboardManager.ActiveKeyboard.Width*Scale - Scale - 12 }; - DayCycleRectangle = new KeyboardRectangle(_keyboardManager.ActiveKeyboard + DayCycleRectangle = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard , _keyPad.TopLeft.X*Scale , _keyPad.TopLeft.Y*Scale , new List() @@ -99,7 +96,7 @@ namespace Artemis.Modules.Games.Dota2 case "3": //League of Legends for (var i = 0; i < AbilityKeysRectangles.Length; i++) { - AbilityKeysRectangles[i] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, + AbilityKeysRectangles[i] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, (_abilityKeys.TopLeft.X + i)*Scale - 2, _abilityKeys.TopLeft.Y*Scale, new List(), @@ -111,7 +108,7 @@ namespace Artemis.Modules.Games.Dota2 } break; case "2": - AbilityKeysRectangles[0] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, + AbilityKeysRectangles[0] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, _abilityKeys.TopLeft.X*Scale - 2, _abilityKeys.TopLeft.Y*Scale, new List(), @@ -120,7 +117,7 @@ namespace Artemis.Modules.Games.Dota2 Height = Scale, Width = Scale }; - AbilityKeysRectangles[1] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, + AbilityKeysRectangles[1] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, (_abilityKeys.TopLeft.X + 2)*Scale - 2, _abilityKeys.TopLeft.Y*Scale, new List(), @@ -129,7 +126,7 @@ namespace Artemis.Modules.Games.Dota2 Height = Scale, Width = Scale }; - AbilityKeysRectangles[2] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, + AbilityKeysRectangles[2] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, (_abilityKeys.TopLeft.X + 3)*Scale - 2, _abilityKeys.TopLeft.Y*Scale, new List(), @@ -138,7 +135,7 @@ namespace Artemis.Modules.Games.Dota2 Height = Scale, Width = Scale }; - AbilityKeysRectangles[3] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, + AbilityKeysRectangles[3] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, (_abilityKeys.TopLeft.X + 3)*Scale - 2, (_abilityKeys.TopLeft.Y + 1)*Scale, new List(), @@ -152,7 +149,7 @@ namespace Artemis.Modules.Games.Dota2 case "5": //Smite for (var i = 0; i < AbilityKeysRectangles.Length; i++) { - AbilityKeysRectangles[i] = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, + AbilityKeysRectangles[i] = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, (_abilityKeys.TopLeft.X + i)*Scale - 3, (_abilityKeys.TopLeft.Y - 1)*Scale, new List(), @@ -297,7 +294,7 @@ namespace Artemis.Modules.Games.Dota2 public override Bitmap GenerateBitmap() { - var bitmap = _keyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); using (var g = Graphics.FromImage(bitmap)) { diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs index cc8630665..f7fc3b862 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2ViewModel.cs @@ -9,12 +9,11 @@ namespace Artemis.Modules.Games.Dota2 { public sealed class Dota2ViewModel : GameViewModel { - public Dota2ViewModel(MainManager mainManager, EffectManager effectManager, KeyboardManager keyboardManager) - : base(mainManager, effectManager, new Dota2Model(mainManager, keyboardManager, new Dota2Settings())) + public Dota2ViewModel(MainManager main) : base(main, new Dota2Model(main, new Dota2Settings())) { DisplayName = "Dota 2"; - EffectManager.EffectModels.Add(GameModel); + MainManager.EffectManager.EffectModels.Add(GameModel); PlaceConfigFile(); } diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs index 4d56a630c..fdccbda9a 100644 --- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs +++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueModel.cs @@ -15,8 +15,7 @@ namespace Artemis.Modules.Games.RocketLeague private Memory _memory; private GamePointersCollection _pointer; - public RocketLeagueModel(MainManager mainManager, KeyboardManager keyboardManager, RocketLeagueSettings settings) - : base(mainManager, keyboardManager, settings) + public RocketLeagueModel(MainManager mainManager, RocketLeagueSettings settings) : base(mainManager, settings) { Name = "RocketLeague"; ProcessName = "RocketLeague"; @@ -73,7 +72,7 @@ namespace Artemis.Modules.Games.RocketLeague if (Profile == null || GameDataModel == null) return null; - var keyboardRect = KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale); + var keyboardRect = MainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(Scale); return Profile.GenerateBitmap(keyboardRect, GameDataModel); } } diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs index 3c1f6881c..65e70557d 100644 --- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs +++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueViewModel.cs @@ -11,15 +11,12 @@ namespace Artemis.Modules.Games.RocketLeague { private string _versionText; - public RocketLeagueViewModel(MainManager mainManager, KeyboardManager keyboardManager, - EffectManager effectManager) - : base( - mainManager, effectManager, - new RocketLeagueModel(mainManager, keyboardManager, new RocketLeagueSettings())) + public RocketLeagueViewModel(MainManager main) + : base(main, new RocketLeagueModel(main, new RocketLeagueSettings())) { DisplayName = "Rocket League"; - EffectManager.EffectModels.Add(GameModel); + MainManager.EffectManager.EffectModels.Add(GameModel); SetVersionText(); } diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs index bd290e195..5b39771fd 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs @@ -12,7 +12,6 @@ namespace Artemis.Modules.Games.TheDivision { public class TheDivisionModel : GameModel { - private readonly KeyboardManager _keyboardManager; private Wave _ammoWave; private TheDivisionDataModel _dataModel; private KeyboardRectangle _hpRect; @@ -23,10 +22,8 @@ namespace Artemis.Modules.Games.TheDivision private StickyValue _stickyHp; private int _trans; - public TheDivisionModel(MainManager mainManager, KeyboardManager keyboardManager, TheDivisionSettings settings) - : base(mainManager, keyboardManager, settings) + public TheDivisionModel(MainManager mainManager, TheDivisionSettings settings) : base(mainManager, settings) { - _keyboardManager = keyboardManager; Name = "TheDivision"; ProcessName = "TheDivision"; Scale = 4; @@ -50,7 +47,7 @@ namespace Artemis.Modules.Games.TheDivision Initialized = false; _ammoWave = new Wave(new Point(30, 14), 0, Color.Transparent); - _hpRect = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 3*Scale, 0*Scale, + _hpRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 3*Scale, 0*Scale, new List(), LinearGradientMode.Horizontal) { @@ -60,7 +57,7 @@ namespace Artemis.Modules.Games.TheDivision ContainedBrush = false }; - _p2 = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 0*Scale, 1*Scale, + _p2 = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0*Scale, 1*Scale, new List(), LinearGradientMode.Horizontal) { @@ -69,7 +66,7 @@ namespace Artemis.Modules.Games.TheDivision Rotate = true, ContainedBrush = false }; - _p3 = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 0*Scale, 3*Scale, + _p3 = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0*Scale, 3*Scale, new List(), LinearGradientMode.Horizontal) { @@ -78,7 +75,7 @@ namespace Artemis.Modules.Games.TheDivision Rotate = true, ContainedBrush = false }; - _p4 = new KeyboardRectangle(_keyboardManager.ActiveKeyboard, 0*Scale, 5*Scale, + _p4 = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0*Scale, 5*Scale, new List(), LinearGradientMode.Horizontal) { @@ -207,7 +204,7 @@ namespace Artemis.Modules.Games.TheDivision public override Bitmap GenerateBitmap() { - var bitmap = _keyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); using (var g = Graphics.FromImage(bitmap)) { g.Clear(Color.Transparent); diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs index ee0e75534..b0606d0b1 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionViewModel.cs @@ -5,14 +5,11 @@ namespace Artemis.Modules.Games.TheDivision { public sealed class TheDivisionViewModel : GameViewModel { - public TheDivisionViewModel(MainManager mainManager, EffectManager effectManager, - KeyboardManager keyboardManager) - : base( - mainManager, effectManager, - new TheDivisionModel(mainManager, keyboardManager, new TheDivisionSettings())) + public TheDivisionViewModel(MainManager main) + : base(main, new TheDivisionModel(main, new TheDivisionSettings())) { DisplayName = "The Division"; - EffectManager.EffectModels.Add(GameModel); + MainManager.EffectManager.EffectModels.Add(GameModel); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs index 45725fcb7..693429d74 100644 --- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs +++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3Model.cs @@ -18,8 +18,7 @@ namespace Artemis.Modules.Games.Witcher3 private KeyboardRectangle _signRect; private string _witcherSettings; - public Witcher3Model(MainManager mainManager, KeyboardManager keyboardManager, Witcher3Settings settings) - : base(mainManager, keyboardManager, settings) + public Witcher3Model(MainManager mainManager, Witcher3Settings settings) : base(mainManager, settings) { Name = "Witcher3"; ProcessName = "witcher3"; @@ -45,7 +44,7 @@ namespace Artemis.Modules.Games.Witcher3 { Initialized = false; - _signRect = new KeyboardRectangle(KeyboardManager.ActiveKeyboard, 0, 0, new List(), + _signRect = new KeyboardRectangle(MainManager.KeyboardManager.ActiveKeyboard, 0, 0, new List(), LinearGradientMode.Horizontal) { Rotate = true, @@ -107,7 +106,7 @@ namespace Artemis.Modules.Games.Witcher3 public override Bitmap GenerateBitmap() { - var bitmap = KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); + var bitmap = MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(Scale); using (var g = Graphics.FromImage(bitmap)) { g.Clear(Color.Transparent); diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs index d4f38ba61..d08f291de 100644 --- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs +++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3ViewModel.cs @@ -12,11 +12,10 @@ namespace Artemis.Modules.Games.Witcher3 { public sealed class Witcher3ViewModel : GameViewModel { - public Witcher3ViewModel(MainManager mainManager, KeyboardManager keyboardManager, EffectManager effectManager) - : base(mainManager, effectManager, new Witcher3Model(mainManager, keyboardManager, new Witcher3Settings())) + public Witcher3ViewModel(MainManager main) : base(main, new Witcher3Model(main, new Witcher3Settings())) { DisplayName = "The Witcher 3"; - EffectManager.EffectModels.Add(GameModel); + MainManager.EffectManager.EffectModels.Add(GameModel); } public static string Name => "The Witcher 3"; diff --git a/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayModel.cs b/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayModel.cs index 3dcd7897b..62a72dc0e 100644 --- a/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayModel.cs +++ b/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayModel.cs @@ -9,14 +9,13 @@ namespace Artemis.Modules.Overlays.VolumeDisplay { public class VolumeDisplayModel : OverlayModel { - public VolumeDisplayModel(MainManager mainManager, KeyboardManager keyboardManager, - VolumeDisplaySettings settings) : base(mainManager, keyboardManager) + public VolumeDisplayModel(MainManager mainManager, VolumeDisplaySettings settings) : base(mainManager) { Settings = settings; Name = "VolumeDisplay"; Enabled = Settings.Enabled; - VolumeDisplay = new VolumeBar(keyboardManager, settings); + VolumeDisplay = new VolumeBar(MainManager.KeyboardManager, settings); } public VolumeBar VolumeDisplay { get; set; } @@ -64,7 +63,7 @@ namespace Artemis.Modules.Overlays.VolumeDisplay public override Bitmap GenerateBitmap() { - return GenerateBitmap(KeyboardManager.ActiveKeyboard.KeyboardBitmap(4)); + return GenerateBitmap(MainManager.KeyboardManager.ActiveKeyboard.KeyboardBitmap(4)); } public override Bitmap GenerateBitmap(Bitmap bitmap) diff --git a/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayViewModel.cs b/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayViewModel.cs index 53113e6cb..1e205efb8 100644 --- a/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayViewModel.cs +++ b/Artemis/Artemis/Modules/Overlays/VolumeDisplay/VolumeDisplayViewModel.cs @@ -5,9 +5,7 @@ namespace Artemis.Modules.Overlays.VolumeDisplay { public sealed class VolumeDisplayViewModel : OverlayViewModel { - public VolumeDisplayViewModel(MainManager mainManager, KeyboardManager keyboardManager, - EffectManager effectManager) - : base(mainManager, effectManager) + public VolumeDisplayViewModel(MainManager mainManager): base(mainManager) { DisplayName = "Volume Display"; @@ -15,8 +13,8 @@ namespace Artemis.Modules.Overlays.VolumeDisplay OverlaySettings = new VolumeDisplaySettings(); // Create effect model and add it to MainManager - OverlayModel = new VolumeDisplayModel(mainManager, keyboardManager, (VolumeDisplaySettings) OverlaySettings); - EffectManager.EffectModels.Add(OverlayModel); + OverlayModel = new VolumeDisplayModel(mainManager, (VolumeDisplaySettings) OverlaySettings); + MainManager.EffectManager.EffectModels.Add(OverlayModel); } } } \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/Abstract/EffectViewModel.cs b/Artemis/Artemis/ViewModels/Abstract/EffectViewModel.cs index 23d2d6b87..1a8b5025d 100644 --- a/Artemis/Artemis/ViewModels/Abstract/EffectViewModel.cs +++ b/Artemis/Artemis/ViewModels/Abstract/EffectViewModel.cs @@ -9,13 +9,11 @@ namespace Artemis.ViewModels.Abstract protected readonly EffectModel EffectModel; private EffectSettings _effectSettings; private bool _showDisabledPopup; - protected EffectManager EffectManager; protected MainManager MainManager; - protected EffectViewModel(MainManager mainManager, EffectManager effectManager, EffectModel effectModel) + protected EffectViewModel(MainManager mainManager, EffectModel effectModel) { MainManager = mainManager; - EffectManager = effectManager; EffectModel = effectModel; } @@ -30,7 +28,7 @@ namespace Artemis.ViewModels.Abstract } } - public bool EffectEnabled => EffectManager.ActiveEffect == EffectModel; + public bool EffectEnabled => MainManager.EffectManager.ActiveEffect == EffectModel; public bool ShowDisabledPopup { @@ -53,9 +51,9 @@ namespace Artemis.ViewModels.Abstract } if (EffectEnabled) - EffectManager.ClearEffect(); + MainManager.EffectManager.ClearEffect(); else - EffectManager.ChangeEffect(EffectModel); + MainManager.EffectManager.ChangeEffect(EffectModel); } public void SaveSettings() @@ -65,7 +63,7 @@ namespace Artemis.ViewModels.Abstract return; // Restart the effect if it's currently running to apply settings. - EffectManager.ChangeEffect(EffectModel, true); + MainManager.EffectManager.ChangeEffect(EffectModel); } public async void ResetSettings() diff --git a/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs b/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs index 1534e592d..3a175ba24 100644 --- a/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs +++ b/Artemis/Artemis/ViewModels/Abstract/GameViewModel.cs @@ -15,12 +15,10 @@ namespace Artemis.ViewModels.Abstract private bool _editorShown; private GameSettings _gameSettings; private EffectModel _lastEffect; - protected EffectManager EffectManager; - protected GameViewModel(MainManager mainManager, EffectManager effectManager, GameModel gameModel) + protected GameViewModel(MainManager mainManager, GameModel gameModel) { MainManager = mainManager; - EffectManager = effectManager; GameModel = gameModel; GameSettings = gameModel.Settings; @@ -45,7 +43,7 @@ namespace Artemis.ViewModels.Abstract } } - public bool GameEnabled => EffectManager.ActiveEffect == GameModel; + public bool GameEnabled => MainManager.EffectManager.ActiveEffect == GameModel; public void ToggleEffect() { @@ -59,7 +57,7 @@ namespace Artemis.ViewModels.Abstract return; // Restart the game if it's currently running to apply settings. - EffectManager.ChangeEffect(GameModel, true); + MainManager.EffectManager.ChangeEffect(GameModel); } public async void ResetSettings() @@ -109,11 +107,11 @@ namespace Artemis.ViewModels.Abstract if (enable) { // Store the current effect so it can be restored later - if (!(EffectManager.ActiveEffect is ProfilePreviewModel)) - _lastEffect = EffectManager.ActiveEffect; + if (!(MainManager.EffectManager.ActiveEffect is ProfilePreviewModel)) + _lastEffect = MainManager.EffectManager.ActiveEffect; - EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile; - EffectManager.ChangeEffect(EffectManager.ProfilePreviewModel); + MainManager.EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile; + MainManager.EffectManager.ChangeEffect(MainManager.EffectManager.ProfilePreviewModel); } else { @@ -123,12 +121,12 @@ namespace Artemis.ViewModels.Abstract var gameModel = _lastEffect as GameModel; if (gameModel != null) if (!gameModel.Enabled) - EffectManager.GetLastEffect(); + MainManager.EffectManager.GetLastEffect(); else - EffectManager.ChangeEffect(_lastEffect, true); + MainManager.EffectManager.ChangeEffect(_lastEffect); } else - EffectManager.ClearEffect(); + MainManager.EffectManager.ClearEffect(); } _editorShown = enable; @@ -140,7 +138,7 @@ namespace Artemis.ViewModels.Abstract return; GameModel.Profile = ProfileEditor.SelectedProfile; - EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile; + MainManager.EffectManager.ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile; } } diff --git a/Artemis/Artemis/ViewModels/Abstract/OverlayViewModel.cs b/Artemis/Artemis/ViewModels/Abstract/OverlayViewModel.cs index 906429892..4223b4364 100644 --- a/Artemis/Artemis/ViewModels/Abstract/OverlayViewModel.cs +++ b/Artemis/Artemis/ViewModels/Abstract/OverlayViewModel.cs @@ -6,13 +6,11 @@ namespace Artemis.ViewModels.Abstract { public abstract class OverlayViewModel : Screen { - protected readonly EffectManager EffectManager; protected readonly MainManager MainManager; private OverlaySettings _overlaySettings; - protected OverlayViewModel(MainManager mainManager, EffectManager effectManager) + protected OverlayViewModel(MainManager mainManager) { - EffectManager = effectManager; MainManager = mainManager; } diff --git a/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs b/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs index 8e2bf907c..d3fb9bee3 100644 --- a/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs +++ b/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs @@ -60,7 +60,7 @@ namespace Artemis.ViewModels.Flyouts if (value == null) return; - _keyboardManager.ChangeKeyboard( + _keyboardManager.EnableKeyboard( _keyboardManager.KeyboardProviders.FirstOrDefault( k => k.Name == _selectedKeyboardProvider)); } diff --git a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs index 7142b3872..4938b42b2 100644 --- a/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs +++ b/Artemis/Artemis/ViewModels/SystemTrayViewModel.cs @@ -127,7 +127,7 @@ namespace Artemis.ViewModels public void ExitApplication() { - MainManager.Shutdown(); + MainManager.Dispose(); Application.Current.Shutdown(); // Sometimes you need to be rough. diff --git a/Artemis/Artemis/packages.config b/Artemis/Artemis/packages.config index 4a02c761e..bd14a3c12 100644 --- a/Artemis/Artemis/packages.config +++ b/Artemis/Artemis/packages.config @@ -1,5 +1,4 @@  - @@ -14,6 +13,8 @@ + +