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}" />