mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-11 19:36:28 +00:00
Implemented surface config loading/saving/activating
This commit is contained in:
1 parent
91cd23dadf
commit
7cd8bc246c
8 files changed
+210
-134
No files matched your search
@@ -7,7 +7,7 @@ namespace Artemis.Core.Models.Surface
|
||||
{
|
||||
internal SurfaceConfiguration(string name)
|
||||
{
|
||||
SurfaceEntity = new SurfaceEntity();
|
||||
SurfaceEntity = new SurfaceEntity {SurfacePositions = new List<SurfacePositionEntity>()};
|
||||
Guid = System.Guid.NewGuid().ToString();
|
||||
|
||||
Name = name;
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Artemis.Core.Models.Surface
|
||||
internal SurfacePositionEntity PositionEntity { get; set; }
|
||||
internal string Guid { get; }
|
||||
|
||||
public IRGBDevice Device { get; private set; }
|
||||
public IRGBDevice Device { get; internal set; }
|
||||
public int DeviceId { get; }
|
||||
public string DeviceName { get; }
|
||||
public string DeviceModel { get; }
|
||||
@@ -66,7 +66,10 @@ namespace Artemis.Core.Models.Surface
|
||||
/// </summary>
|
||||
public void ApplyToDevice()
|
||||
{
|
||||
Device.Location = new Point(X, Y);
|
||||
if (Device != null)
|
||||
{
|
||||
Device.Location = new Point(X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -41,18 +41,39 @@ namespace Artemis.Core.Services.Storage
|
||||
return;
|
||||
|
||||
_activeSurfaceConfiguration = value;
|
||||
lock (_surfaceConfigurations)
|
||||
{
|
||||
// Mark only the new value as active
|
||||
foreach (var surfaceConfiguration in _surfaceConfigurations)
|
||||
surfaceConfiguration.IsActive = false;
|
||||
_activeSurfaceConfiguration.IsActive = true;
|
||||
|
||||
// Mark only the new value as active
|
||||
foreach (var surfaceConfiguration in _surfaceConfigurations)
|
||||
surfaceConfiguration.IsActive = false;
|
||||
_activeSurfaceConfiguration.IsActive = true;
|
||||
SaveToRepository(_surfaceConfigurations, true);
|
||||
}
|
||||
|
||||
// Apply the active surface configuration to the devices
|
||||
if (ActiveSurfaceConfiguration != null)
|
||||
{
|
||||
foreach (var deviceConfiguration in ActiveSurfaceConfiguration.DeviceConfigurations)
|
||||
deviceConfiguration.ApplyToDevice();
|
||||
}
|
||||
// Update the RGB service's graphics decorator to work with the new surface configuration
|
||||
_rgbService.GraphicsDecorator.UpdateBitmap();
|
||||
|
||||
SaveToRepository(_surfaceConfigurations, true);
|
||||
OnActiveSurfaceConfigurationChanged(new SurfaceConfigurationEventArgs(_activeSurfaceConfiguration));
|
||||
}
|
||||
}
|
||||
|
||||
public ReadOnlyCollection<SurfaceConfiguration> SurfaceConfigurations => _surfaceConfigurations.AsReadOnly();
|
||||
public ReadOnlyCollection<SurfaceConfiguration> SurfaceConfigurations
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_surfaceConfigurations)
|
||||
{
|
||||
return _surfaceConfigurations.AsReadOnly();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SurfaceConfiguration CreateSurfaceConfiguration(string name)
|
||||
{
|
||||
@@ -66,9 +87,12 @@ namespace Artemis.Core.Services.Storage
|
||||
configuration.DeviceConfigurations.Add(new SurfaceDeviceConfiguration(rgbDevice, deviceId, configuration));
|
||||
}
|
||||
|
||||
_surfaceRepository.Add(configuration.SurfaceEntity);
|
||||
SaveToRepository(configuration, true);
|
||||
return configuration;
|
||||
lock (_surfaceConfigurations)
|
||||
{
|
||||
_surfaceRepository.Add(configuration.SurfaceEntity);
|
||||
SaveToRepository(configuration, true);
|
||||
return configuration;
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteSurfaceConfiguration(SurfaceConfiguration surfaceConfiguration)
|
||||
@@ -76,20 +100,28 @@ namespace Artemis.Core.Services.Storage
|
||||
if (surfaceConfiguration == ActiveSurfaceConfiguration)
|
||||
throw new ArtemisCoreException($"Cannot delete surface configuration '{surfaceConfiguration.Name}' because it is active.");
|
||||
|
||||
surfaceConfiguration.Destroy();
|
||||
_surfaceConfigurations.Remove(surfaceConfiguration);
|
||||
lock (_surfaceConfigurations)
|
||||
{
|
||||
surfaceConfiguration.Destroy();
|
||||
_surfaceConfigurations.Remove(surfaceConfiguration);
|
||||
|
||||
_surfaceRepository.Remove(surfaceConfiguration.SurfaceEntity);
|
||||
_surfaceRepository.Save();
|
||||
_surfaceRepository.Remove(surfaceConfiguration.SurfaceEntity);
|
||||
_surfaceRepository.Save();
|
||||
}
|
||||
}
|
||||
|
||||
#region Event handlers
|
||||
|
||||
private void RgbServiceOnDeviceLoaded(object sender, DeviceEventArgs e)
|
||||
{
|
||||
// Match the newly loaded device with the current config
|
||||
if (ActiveSurfaceConfiguration != null)
|
||||
MatchDeviceConfiguration(e.Device, ActiveSurfaceConfiguration);
|
||||
lock (_surfaceConfigurations)
|
||||
{
|
||||
foreach (var surfaceConfiguration in _surfaceConfigurations)
|
||||
MatchDeviceConfiguration(e.Device, surfaceConfiguration);
|
||||
}
|
||||
|
||||
foreach (var deviceConfiguration in ActiveSurfaceConfiguration.DeviceConfigurations)
|
||||
deviceConfiguration.ApplyToDevice();
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -108,7 +140,10 @@ namespace Artemis.Core.Services.Storage
|
||||
foreach (var rgbDevice in devices)
|
||||
MatchDeviceConfiguration(rgbDevice, surfaceConfiguration);
|
||||
// Finally, add the surface config to the collection
|
||||
_surfaceConfigurations.Add(surfaceConfiguration);
|
||||
lock (_surfaceConfigurations)
|
||||
{
|
||||
_surfaceConfigurations.Add(surfaceConfiguration);
|
||||
}
|
||||
}
|
||||
|
||||
// When all surface configs are loaded, apply the active surface config
|
||||
@@ -163,6 +198,7 @@ namespace Artemis.Core.Services.Storage
|
||||
surfaceConfiguration.DeviceConfigurations.Add(deviceConfig);
|
||||
}
|
||||
|
||||
deviceConfig.Device = rgbDevice;
|
||||
deviceConfig.ApplyToDevice();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user