From 15275c83a07c52635383300bee1ad4d29befb238 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Thu, 12 Jan 2017 19:50:56 +0100 Subject: [PATCH] Implemented BottomToTop again --- Artemis/Artemis/Artemis.csproj | 3 +- .../InjectionModules/ManagerModules.cs | 2 +- Artemis/Artemis/Managers/MainManager.cs | 6 +- .../{ProfileManager.cs => PreviewManager.cs} | 6 +- .../Modules/Abstract/ModuleViewModel.cs | 1 - .../Audio/AudioCapturing/AudioCapture.cs | 65 ++----------------- .../Profiles/Layers/Types/Audio/AudioType.cs | 8 +-- Artemis/Artemis/Utilities/EditorHelper.cs | 12 ++++ .../Artemis/ViewModels/GeneralViewModel.cs | 6 +- .../Profiles/ProfileEditorViewModel.cs | 58 +++++++++++------ .../ViewModels/Profiles/ProfileViewModel.cs | 17 ++--- Artemis/Artemis/ViewModels/ShellViewModel.cs | 2 +- .../Views/Profiles/ProfileEditorView.xaml | 2 +- 13 files changed, 77 insertions(+), 111 deletions(-) rename Artemis/Artemis/Managers/{ProfileManager.cs => PreviewManager.cs} (95%) create mode 100644 Artemis/Artemis/Utilities/EditorHelper.cs diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 8f81676a9..3500de5f3 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -355,7 +355,7 @@ - + @@ -622,6 +622,7 @@ + diff --git a/Artemis/Artemis/InjectionModules/ManagerModules.cs b/Artemis/Artemis/InjectionModules/ManagerModules.cs index 0d5870d63..b01f7fab9 100644 --- a/Artemis/Artemis/InjectionModules/ManagerModules.cs +++ b/Artemis/Artemis/InjectionModules/ManagerModules.cs @@ -11,7 +11,7 @@ namespace Artemis.InjectionModules Bind().ToSelf().InSingletonScope(); Bind().ToSelf().InSingletonScope(); Bind().ToSelf().InSingletonScope(); - Bind().ToSelf().InSingletonScope(); + Bind().ToSelf().InSingletonScope(); Bind().ToSelf().InSingletonScope(); } } diff --git a/Artemis/Artemis/Managers/MainManager.cs b/Artemis/Artemis/Managers/MainManager.cs index 6dcd1490b..f4de0de5f 100644 --- a/Artemis/Artemis/Managers/MainManager.cs +++ b/Artemis/Artemis/Managers/MainManager.cs @@ -22,14 +22,14 @@ namespace Artemis.Managers private readonly Timer _processTimer; public MainManager(ILogger logger, LoopManager loopManager, DeviceManager deviceManager, - ModuleManager moduleManager, ProfileManager profileManager, PipeServer pipeServer, + ModuleManager moduleManager, PreviewManager previewManager, PipeServer pipeServer, GameStateWebServer gameStateWebServer) { Logger = logger; LoopManager = loopManager; DeviceManager = deviceManager; ModuleManager = moduleManager; - ProfileManager = profileManager; + PreviewManager = previewManager; PipeServer = pipeServer; _processTimer = new Timer(1000); @@ -64,7 +64,7 @@ namespace Artemis.Managers public LoopManager LoopManager { get; } public DeviceManager DeviceManager { get; set; } public ModuleManager ModuleManager { get; set; } - public ProfileManager ProfileManager { get; set; } + public PreviewManager PreviewManager { get; set; } public PipeServer PipeServer { get; set; } public GameStateWebServer GameStateWebServer { get; set; } diff --git a/Artemis/Artemis/Managers/ProfileManager.cs b/Artemis/Artemis/Managers/PreviewManager.cs similarity index 95% rename from Artemis/Artemis/Managers/ProfileManager.cs rename to Artemis/Artemis/Managers/PreviewManager.cs index ed0268ff8..ff5657762 100644 --- a/Artemis/Artemis/Managers/ProfileManager.cs +++ b/Artemis/Artemis/Managers/PreviewManager.cs @@ -9,7 +9,7 @@ using Ninject.Extensions.Logging; namespace Artemis.Managers { - public class ProfileManager + public class PreviewManager { private readonly DeviceManager _deviceManager; private readonly GeneralSettings _generalSettings; @@ -17,7 +17,7 @@ namespace Artemis.Managers private readonly LoopManager _loopManager; private readonly ModuleManager _moduleManager; - public ProfileManager(ILogger logger, ModuleManager moduleManager, DeviceManager deviceManager, + public PreviewManager(ILogger logger, ModuleManager moduleManager, DeviceManager deviceManager, LoopManager loopManager) { _logger = logger; @@ -32,7 +32,7 @@ namespace Artemis.Managers profilePreviewTimer.Elapsed += SetupProfilePreview; profilePreviewTimer.Start(); - _logger.Info("Intialized ProfileManager"); + _logger.Info("Intialized PreviewManager"); } public List PreviewViewModules { get; set; } diff --git a/Artemis/Artemis/Modules/Abstract/ModuleViewModel.cs b/Artemis/Artemis/Modules/Abstract/ModuleViewModel.cs index a1a6fd435..55fdfef5d 100644 --- a/Artemis/Artemis/Modules/Abstract/ModuleViewModel.cs +++ b/Artemis/Artemis/Modules/Abstract/ModuleViewModel.cs @@ -26,7 +26,6 @@ namespace Artemis.Modules.Abstract _generalSettings = DAL.SettingsProvider.Load(); ModuleModel = moduleModel; Settings = moduleModel.Settings; - _mainManager.EnabledChanged += MainManagerOnEnabledChanged; _moduleManager.EffectChanged += ModuleManagerOnModuleChanged; diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/AudioCapture.cs b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/AudioCapture.cs index c1092fc31..0cdeafc7c 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/AudioCapture.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioCapturing/AudioCapture.cs @@ -13,7 +13,6 @@ namespace Artemis.Profiles.Layers.Types.Audio.AudioCapturing public class AudioCapture { private const FftSize FftSize = CSCore.DSP.FftSize.Fft4096; - private readonly Timer _activityTimer; private readonly Timer _volumeTimer; private readonly double[] _volumeValues; private SingleSpectrum _singleSpectrum; @@ -31,17 +30,15 @@ namespace Artemis.Profiles.Layers.Types.Audio.AudioCapturing _volumeValues = new double[5]; _volumeIndex = 0; - _activityTimer = new Timer(1000); - _activityTimer.Elapsed += ActivityTimerOnElapsed; _volumeTimer = new Timer(200); _volumeTimer.Elapsed += VolumeTimerOnElapsed; + + Start(); } - public double DesiredAverage { get; set; } - - public bool MayStop { get; set; } - public ILogger Logger { get; } + public MMDevice Device { get; } + public double DesiredAverage { get; set; } public float Volume { @@ -49,9 +46,6 @@ namespace Artemis.Profiles.Layers.Types.Audio.AudioCapturing set { _volume.Volume = value; } } - public MMDevice Device { get; } - public bool Running { get; set; } - private void VolumeTimerOnElapsed(object sender, ElapsedEventArgs e) { if (Volume <= 0) @@ -95,20 +89,6 @@ namespace Artemis.Profiles.Layers.Types.Audio.AudioCapturing } } - private void ActivityTimerOnElapsed(object sender, ElapsedEventArgs e) - { - // If MayStop is true for longer than a second, this will stop the audio capture - if (MayStop) - { - Stop(); - MayStop = false; - } - else - { - MayStop = true; - } - } - public LineSpectrum GetLineSpectrum(int barCount, ScalingStrategy scalingStrategy) { return new LineSpectrum(FftSize) @@ -121,39 +101,8 @@ namespace Artemis.Profiles.Layers.Types.Audio.AudioCapturing }; } - public void Stop() + private void Start() { - if (!Running) - return; - - Logger.Debug("Stopping audio capture for device: {0}", Device?.FriendlyName ?? "default"); - - try - { - _activityTimer.Stop(); - _volumeTimer.Stop(); - - _soundIn.Stop(); - _soundIn.Dispose(); - _source.Dispose(); - _soundIn = null; - _source = null; - - Running = false; - } - catch (Exception e) - { - Logger.Warn(e, "Failed to stop WASAPI audio capture"); - } - } - - public void Pulse() - { - MayStop = false; - - if (Running) - return; - Logger.Debug("Starting audio capture for device: {0}", Device?.FriendlyName ?? "default"); try @@ -188,12 +137,8 @@ namespace Artemis.Profiles.Layers.Types.Audio.AudioCapturing _singleSpectrum = new SingleSpectrum(FftSize, _spectrumProvider); - _activityTimer.Start(); _volumeTimer.Start(); - _soundIn.Start(); - Running = true; - MayStop = false; } catch (Exception e) { diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs index 5bf340179..e983d0969 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs @@ -57,7 +57,7 @@ namespace Artemis.Profiles.Layers.Types.Audio switch (direction) { - case Direction.BottomToTop: + case Direction.TopToBottom: for (var index = 0; index < _lineValues.Count; index++) { var clipRect = new Rect((parentX + index)*4, parentY*4, 4, _lineValues[index]*4); @@ -65,10 +65,11 @@ namespace Artemis.Profiles.Layers.Types.Audio barGeometry = Geometry.Combine(barGeometry, barRect, CombineMode, Transform.Identity); } break; - case Direction.TopToBottom: + case Direction.BottomToTop: for (var index = 0; index < _lineValues.Count; index++) { var clipRect = new Rect((parentX + index)*4, parentY*4, 4, _lineValues[index]*4); + clipRect.Y = clipRect.Y + layerModel.Height*4 - clipRect.Height; var barRect = new RectangleGeometry(clipRect); barGeometry = Geometry.Combine(barGeometry, barRect, CombineMode, Transform.Identity); } @@ -116,9 +117,6 @@ namespace Artemis.Profiles.Layers.Types.Audio currentHeight = layerModel.Width; } - // Let audio capture know it is being listened to - _audioCapture.Pulse(); - if (_lines != currentLines || _lineSpectrum == null) { _lines = currentLines; diff --git a/Artemis/Artemis/Utilities/EditorHelper.cs b/Artemis/Artemis/Utilities/EditorHelper.cs new file mode 100644 index 000000000..ba7ab2eb1 --- /dev/null +++ b/Artemis/Artemis/Utilities/EditorHelper.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Artemis.Utilities +{ + public static class EditorHelper + { + } +} diff --git a/Artemis/Artemis/ViewModels/GeneralViewModel.cs b/Artemis/Artemis/ViewModels/GeneralViewModel.cs index f800712fe..c32531bf1 100644 --- a/Artemis/Artemis/ViewModels/GeneralViewModel.cs +++ b/Artemis/Artemis/ViewModels/GeneralViewModel.cs @@ -10,14 +10,14 @@ namespace Artemis.ViewModels { private readonly List _vms; - public GeneralViewModel(List moduleViewModels, ProfileManager profileManager) + public GeneralViewModel(List moduleViewModels, PreviewManager previewManager) { DisplayName = "General"; _vms = moduleViewModels.Where(m => !m.ModuleModel.IsOverlay && !m.ModuleModel.IsBoundToProcess) .OrderBy(m => m.DisplayName).ToList(); - profileManager.PreviewViewModules.Clear(); - profileManager.PreviewViewModules.AddRange(moduleViewModels.Where(m => m.UsesProfileEditor)); + previewManager.PreviewViewModules.Clear(); + previewManager.PreviewViewModules.AddRange(moduleViewModels.Where(m => m.UsesProfileEditor)); } protected override void OnActivate() diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs index af0659dd9..734598963 100644 --- a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs @@ -45,6 +45,8 @@ namespace Artemis.ViewModels.Profiles private ObservableCollection _profileNames; private bool _saving; private FileSystemWatcher _watcher; + private ProfileViewModel _profileViewModel; + private LayerModel _selectedLayer; public ProfileEditorViewModel(DeviceManager deviceManager, LuaManager luaManager, ModuleModel moduleModel, ProfileViewModel profileViewModel, MetroDialogService dialogService, WindowService windowService) @@ -62,13 +64,22 @@ namespace Artemis.ViewModels.Profiles ProfileViewModel.ModuleModel = _moduleModel; PropertyChanged += EditorStateHandler; - ProfileViewModel.PropertyChanged += LayerSelectedHandler; _deviceManager.OnKeyboardChanged += DeviceManagerOnOnKeyboardChanged; _moduleModel.ProfileChanged += ModuleModelOnProfileChanged; LoadProfiles(); } - public ProfileViewModel ProfileViewModel { get; set; } + public ProfileViewModel ProfileViewModel + { + get { return _profileViewModel; } + set + { + if (Equals(value, _profileViewModel)) return; + _profileViewModel = value; + NotifyOfPropertyChange(); + NotifyOfPropertyChange(nameof(LayerSelected)); + } + } public bool EditorEnabled => @@ -76,6 +87,21 @@ namespace Artemis.ViewModels.Profiles _deviceManager.ActiveKeyboard != null; public ProfileModel SelectedProfile => _moduleModel?.ProfileModel; + public LayerModel SelectedLayer + { + get { return _selectedLayer; } + set + { + if (_profileViewModel != null) + _profileViewModel.SelectedLayer = value; + if (Equals(value, _selectedLayer)) + return; + + _selectedLayer = value; + NotifyOfPropertyChange(() => SelectedLayer); + NotifyOfPropertyChange(() => LayerSelected); + } + } public ObservableCollection ProfileNames { @@ -126,7 +152,7 @@ namespace Artemis.ViewModels.Profiles public PreviewSettings? PreviewSettings => _deviceManager.ActiveKeyboard?.PreviewSettings; public bool ProfileSelected => SelectedProfile != null; - public bool LayerSelected => SelectedProfile != null && ProfileViewModel.SelectedLayer != null; + public bool LayerSelected => SelectedProfile != null && SelectedLayer != null; public void DragOver(IDropInfo dropInfo) { @@ -230,7 +256,7 @@ namespace Artemis.ViewModels.Profiles public void EditLayerFromDoubleClick() { - if (ProfileViewModel.SelectedLayer?.LayerType is FolderType) + if (SelectedLayer?.LayerType is FolderType) return; EditLayer(); @@ -238,10 +264,10 @@ namespace Artemis.ViewModels.Profiles public void EditLayer() { - if (ProfileViewModel.SelectedLayer == null) + if (SelectedLayer == null) return; - var selectedLayer = ProfileViewModel.SelectedLayer; + var selectedLayer = SelectedLayer; EditLayer(selectedLayer); } @@ -290,7 +316,7 @@ namespace Artemis.ViewModels.Profiles if (SelectedProfile == null) return null; - var layer = SelectedProfile.AddLayer(ProfileViewModel.SelectedLayer); + var layer = SelectedProfile.AddLayer(SelectedLayer); UpdateLayerList(layer); return layer; @@ -314,7 +340,7 @@ namespace Artemis.ViewModels.Profiles /// public void RemoveLayer() { - RemoveLayer(ProfileViewModel.SelectedLayer); + RemoveLayer(SelectedLayer); } /// @@ -368,10 +394,10 @@ namespace Artemis.ViewModels.Profiles /// public void CloneLayer() { - if (ProfileViewModel.SelectedLayer == null) + if (SelectedLayer == null) return; - CloneLayer(ProfileViewModel.SelectedLayer); + CloneLayer(SelectedLayer); } /// @@ -390,7 +416,7 @@ namespace Artemis.ViewModels.Profiles { // Update the UI Layers.Clear(); - ProfileViewModel.SelectedLayer = null; + SelectedLayer = null; if (SelectedProfile != null) Layers.AddRange(SelectedProfile.Layers); @@ -402,7 +428,7 @@ namespace Artemis.ViewModels.Profiles Task.Factory.StartNew(() => { Thread.Sleep(100); - ProfileViewModel.SelectedLayer = selectModel; + SelectedLayer = selectModel; }); } @@ -680,14 +706,6 @@ namespace Artemis.ViewModels.Profiles NotifyOfPropertyChange(() => ProfileSelected); } - private void LayerSelectedHandler(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName != "SelectedLayer") - return; - - NotifyOfPropertyChange(() => LayerSelected); - } - public void SaveSelectedProfile() { if (_saving || SelectedProfile == null || _deviceManager.ChangingKeyboard) diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs index bc74299a0..9487b026a 100644 --- a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs @@ -32,7 +32,6 @@ namespace Artemis.ViewModels.Profiles private DrawingImage _keyboardPreview; private Cursor _keyboardPreviewCursor; private bool _resizing; - private LayerModel _selectedLayer; private bool _showAll; public ProfileViewModel(DeviceManager deviceManager, LoopManager loopManager) @@ -47,18 +46,9 @@ namespace Artemis.ViewModels.Profiles } public ModuleModel ModuleModel { get; set; } - public ProfileModel SelectedProfile => ModuleModel?.ProfileModel; + public LayerModel SelectedLayer { get; set; } - public LayerModel SelectedLayer - { - get { return _selectedLayer; } - set - { - if (Equals(value, _selectedLayer)) return; - _selectedLayer = value; - NotifyOfPropertyChange(() => SelectedLayer); - } - } + public ProfileModel SelectedProfile => ModuleModel?.ProfileModel; public DrawingImage KeyboardPreview { @@ -380,10 +370,13 @@ namespace Artemis.ViewModels.Profiles public void Dispose() { + Disposed = true; _loopManager.RenderCompleted -= LoopManagerOnRenderCompleted; _deviceManager.OnKeyboardChanged -= DeviceManagerOnOnKeyboardChanged; } + public bool Disposed { get; set; } + #endregion } } \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/ShellViewModel.cs b/Artemis/Artemis/ViewModels/ShellViewModel.cs index c8b83a39f..4d59daf60 100644 --- a/Artemis/Artemis/ViewModels/ShellViewModel.cs +++ b/Artemis/Artemis/ViewModels/ShellViewModel.cs @@ -216,7 +216,7 @@ namespace Artemis.ViewModels dialog.SetIndeterminate(); while (MainManager.DeviceManager.ChangingKeyboard) - await Task.Delay(10); + await Task.Delay(1000); try { diff --git a/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml b/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml index c4cfd119c..4a3c9e8b7 100644 --- a/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml +++ b/Artemis/Artemis/Views/Profiles/ProfileEditorView.xaml @@ -185,7 +185,7 @@ cal:Message.Attach="[Event MouseDoubleClick] = [Action EditLayerFromDoubleClick]"> + SelectedItem="{Binding SelectedLayer, Mode=TwoWay}" />