diff --git a/src/Artemis.Core/Models/Profile/Folder.cs b/src/Artemis.Core/Models/Profile/Folder.cs
index 9557e3771..f240a61c6 100644
--- a/src/Artemis.Core/Models/Profile/Folder.cs
+++ b/src/Artemis.Core/Models/Profile/Folder.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using Artemis.Core.LayerEffects;
using Artemis.Storage.Entities.Profile;
@@ -27,7 +28,6 @@ namespace Artemis.Core
Parent = parent ?? throw new ArgumentNullException(nameof(parent));
Profile = Parent.Profile;
Name = name;
- Enabled = true;
Parent.AddChild(this);
}
@@ -46,7 +46,7 @@ namespace Artemis.Core
Profile = profile;
Parent = parent;
Name = folderEntity.Name;
- Enabled = folderEntity.Enabled;
+ Suspended = folderEntity.Suspended;
Order = folderEntity.Order;
Load();
@@ -62,6 +62,9 @@ namespace Artemis.Core
///
public FolderEntity FolderEntity { get; internal set; }
+ ///
+ public override bool ShouldBeEnabled => !Suspended && DisplayConditionMet && !Timeline.IsFinished;
+
internal override RenderElementEntity RenderElementEntity => FolderEntity;
///
@@ -81,12 +84,14 @@ namespace Artemis.Core
if (Disposed)
throw new ObjectDisposedException("Folder");
- if (!Enabled)
- return;
-
UpdateDisplayCondition();
UpdateTimeline(deltaTime);
+ if (ShouldBeEnabled)
+ Enable();
+ else if (Timeline.IsFinished)
+ Disable();
+
foreach (ProfileElement child in Children)
child.Update(deltaTime);
}
@@ -175,16 +180,16 @@ namespace Artemis.Core
throw new ObjectDisposedException("Folder");
// Ensure the folder is ready
- if (!Enabled || !Children.Any(c => c.Enabled) || Path == null)
+ if (!Enabled || Path == null)
return;
- // No point rendering if none of the children are going to render
- if (!Children.Any(c => c is RenderProfileElement renderElement && !renderElement.Timeline.IsFinished))
+ // No point rendering if all children are disabled
+ if (!Children.Any(c => c is RenderProfileElement {Enabled: true}))
return;
lock (Timeline)
{
- foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.Enabled))
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => !e.Suspended))
{
baseLayerEffect.BaseProperties?.Update(Timeline);
baseLayerEffect.Update(Timeline.Delta.TotalSeconds);
@@ -194,7 +199,7 @@ namespace Artemis.Core
try
{
SKRectI rendererBounds = SKRectI.Create(0, 0, Bounds.Width, Bounds.Height);
- foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.Enabled))
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => !e.Suspended))
baseLayerEffect.PreProcess(canvas, rendererBounds, layerPaint);
canvas.SaveLayer(layerPaint);
@@ -215,7 +220,7 @@ namespace Artemis.Core
for (int index = Children.Count - 1; index > -1; index--)
Children[index].Render(canvas, new SKPointI(Bounds.Left, Bounds.Top));
- foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.Enabled))
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => !e.Suspended))
baseLayerEffect.PostProcess(canvas, rendererBounds, layerPaint);
}
finally
@@ -270,7 +275,7 @@ namespace Artemis.Core
FolderEntity.Order = Order;
FolderEntity.Name = Name;
- FolderEntity.Enabled = Enabled;
+ FolderEntity.Suspended = Suspended;
FolderEntity.ProfileId = Profile.EntityId;
FolderEntity.ExpandedPropertyGroups.Clear();
@@ -279,6 +284,46 @@ namespace Artemis.Core
SaveRenderElement();
}
+ ///
+ public override void Enable()
+ {
+ if (Enabled)
+ return;
+
+ Debug.WriteLine($"Enabling {this}");
+
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects)
+ baseLayerEffect.InternalEnable();
+
+ foreach (ProfileElement profileElement in Children)
+ {
+ if (profileElement is RenderProfileElement renderProfileElement && renderProfileElement.ShouldBeEnabled)
+ renderProfileElement.Enable();
+ }
+
+ Enabled = true;
+ }
+
+ ///
+ public override void Disable()
+ {
+ if (!Enabled)
+ return;
+
+ Debug.WriteLine($"Disabled {this}");
+
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects)
+ baseLayerEffect.InternalDisable();
+
+ foreach (ProfileElement profileElement in Children)
+ {
+ if (profileElement is RenderProfileElement renderProfileElement)
+ renderProfileElement.Disable();
+ }
+
+ Enabled = false;
+ }
+
#region Events
///
diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs
index 5e544e187..4ecf6298c 100644
--- a/src/Artemis.Core/Models/Profile/Layer.cs
+++ b/src/Artemis.Core/Models/Profile/Layer.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Diagnostics;
using System.Linq;
using Artemis.Core.LayerBrushes;
using Artemis.Core.LayerEffects;
@@ -35,7 +36,7 @@ namespace Artemis.Core
Parent = parent ?? throw new ArgumentNullException(nameof(parent));
Profile = Parent.Profile;
Name = name;
- Enabled = true;
+ Suspended = false;
_general = new LayerGeneralProperties();
_transform = new LayerTransformProperties();
@@ -120,6 +121,9 @@ namespace Artemis.Core
///
public LayerEntity LayerEntity { get; internal set; }
+ ///
+ public override bool ShouldBeEnabled => !Suspended && DisplayConditionMet;
+
internal override RenderElementEntity RenderElementEntity => LayerEntity;
///
@@ -192,7 +196,7 @@ namespace Artemis.Core
{
EntityId = LayerEntity.Id;
Name = LayerEntity.Name;
- Enabled = LayerEntity.Enabled;
+ Suspended = LayerEntity.Suspended;
Order = LayerEntity.Order;
ExpandedPropertyGroups.AddRange(LayerEntity.ExpandedPropertyGroups);
@@ -208,7 +212,7 @@ namespace Artemis.Core
LayerEntity.Id = EntityId;
LayerEntity.ParentId = Parent?.EntityId ?? new Guid();
LayerEntity.Order = Order;
- LayerEntity.Enabled = Enabled;
+ LayerEntity.Suspended = Suspended;
LayerEntity.Name = Name;
LayerEntity.ProfileId = Profile.EntityId;
LayerEntity.ExpandedPropertyGroups.Clear();
@@ -262,11 +266,13 @@ namespace Artemis.Core
if (Disposed)
throw new ObjectDisposedException("Layer");
- if (!Enabled)
- return;
-
UpdateDisplayCondition();
UpdateTimeline(deltaTime);
+
+ if (ShouldBeEnabled)
+ Enable();
+ else if (Timeline.IsFinished)
+ Disable();
}
///
@@ -295,6 +301,36 @@ namespace Artemis.Core
Timeline.ClearDelta();
}
+ ///
+ public override void Enable()
+ {
+ if (Enabled)
+ return;
+
+ Debug.WriteLine($"Enabling {this}");
+
+ LayerBrush?.InternalEnable();
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects)
+ baseLayerEffect.InternalEnable();
+
+ Enabled = true;
+ }
+
+ ///
+ public override void Disable()
+ {
+ if (!Enabled)
+ return;
+
+ Debug.WriteLine($"Disabling {this}");
+
+ LayerBrush?.InternalDisable();
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects)
+ baseLayerEffect.InternalDisable();
+
+ Enabled = false;
+ }
+
private void ApplyTimeline(Timeline timeline)
{
if (timeline.Delta == TimeSpan.Zero)
@@ -308,7 +344,7 @@ namespace Artemis.Core
LayerBrush.Update(timeline.Delta.TotalSeconds);
}
- foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.Enabled))
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => !e.Suspended))
{
baseLayerEffect.BaseProperties?.Update(timeline);
baseLayerEffect.Update(timeline.Delta.TotalSeconds);
@@ -387,7 +423,7 @@ namespace Artemis.Core
if (LayerBrush == null)
throw new ArtemisCoreException("The layer is not yet ready for rendering");
- foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.Enabled))
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => !e.Suspended))
baseLayerEffect.PreProcess(canvas, bounds, layerPaint);
try
@@ -398,7 +434,7 @@ namespace Artemis.Core
canvas.ClipPath(renderPath);
LayerBrush.InternalRender(canvas, bounds, layerPaint);
- foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.Enabled))
+ foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => !e.Suspended))
baseLayerEffect.PostProcess(canvas, bounds, layerPaint);
}
diff --git a/src/Artemis.Core/Models/Profile/Profile.cs b/src/Artemis.Core/Models/Profile/Profile.cs
index 8f3cf81a9..09e1dc62e 100644
--- a/src/Artemis.Core/Models/Profile/Profile.cs
+++ b/src/Artemis.Core/Models/Profile/Profile.cs
@@ -196,7 +196,7 @@ namespace Artemis.Core
ProfileEntity.Layers.Clear();
ProfileEntity.Layers.AddRange(GetAllLayers().Select(f => f.LayerEntity));
}
-
+
internal void Activate(IEnumerable devices)
{
lock (_lock)
diff --git a/src/Artemis.Core/Models/Profile/ProfileElement.cs b/src/Artemis.Core/Models/Profile/ProfileElement.cs
index a88d13f8e..39006fb85 100644
--- a/src/Artemis.Core/Models/Profile/ProfileElement.cs
+++ b/src/Artemis.Core/Models/Profile/ProfileElement.cs
@@ -11,7 +11,7 @@ namespace Artemis.Core
///
public abstract class ProfileElement : CorePropertyChanged, IDisposable
{
- private bool _enabled;
+ private bool _suspended;
private Guid _entityId;
private string? _name;
private int _order;
@@ -87,12 +87,12 @@ namespace Artemis.Core
}
///
- /// Gets or sets the enabled state, if not enabled the element is skipped in render and update
+ /// Gets or sets the suspended state, if suspended the element is skipped in render and update
///
- public bool Enabled
+ public bool Suspended
{
- get => _enabled;
- set => SetAndNotify(ref _enabled, value);
+ get => _suspended;
+ set => SetAndNotify(ref _suspended, value);
}
///
diff --git a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs
index c2c967c54..f5df222be 100644
--- a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs
+++ b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs
@@ -16,9 +16,9 @@ namespace Artemis.Core
///
public abstract class RenderProfileElement : ProfileElement
{
- private SKPath? _path;
private SKRectI _bounds;
-
+ private SKPath? _path;
+
internal RenderProfileElement(Profile profile) : base(profile)
{
Timeline = new Timeline();
@@ -29,13 +29,26 @@ namespace Artemis.Core
LayerEffectStore.LayerEffectRemoved += LayerEffectStoreOnLayerEffectRemoved;
}
+ ///
+ /// Gets a boolean indicating whether this render element and its layers/brushes are enabled
+ ///
+ public bool Enabled { get; protected set; }
+
+ ///
+ /// Gets a boolean indicating whether this render element and its layers/brushes should be enabled
+ ///
+ public abstract bool ShouldBeEnabled { get; }
+
///
/// Creates a list of all layer properties present on this render element
///
/// A list of all layer properties present on this render element
public abstract List GetAllLayerProperties();
- #region IDisposable
+ ///
+ /// Occurs when a layer effect has been added or removed to this render element
+ ///
+ public event EventHandler? LayerEffectsUpdated;
///
protected override void Dispose(bool disposing)
@@ -49,8 +62,6 @@ namespace Artemis.Core
base.Dispose(disposing);
}
- #endregion
-
internal void LoadRenderElement()
{
DisplayCondition = RenderElementEntity.DisplayCondition != null
@@ -75,7 +86,7 @@ namespace Artemis.Core
ProviderId = layerEffect.Descriptor?.PlaceholderFor ?? layerEffect.ProviderId,
EffectType = layerEffect.GetEffectTypeName(),
Name = layerEffect.Name,
- Enabled = layerEffect.Enabled,
+ Suspended = layerEffect.Suspended,
HasBeenRenamed = layerEffect.HasBeenRenamed,
Order = layerEffect.Order
};
@@ -92,6 +103,11 @@ namespace Artemis.Core
Timeline?.Save();
}
+ internal void OnLayerEffectsUpdated()
+ {
+ LayerEffectsUpdated?.Invoke(this, EventArgs.Empty);
+ }
+
#region Timeline
///
@@ -160,7 +176,7 @@ namespace Artemis.Core
#region Property group expansion
internal List ExpandedPropertyGroups;
-
+
///
/// Determines whether the provided property group is expanded
///
@@ -188,6 +204,20 @@ namespace Artemis.Core
#endregion
+ #region State
+
+ ///
+ /// Enables the render element and its brushes and effects
+ ///
+ public abstract void Disable();
+
+ ///
+ /// Disables the render element and its brushes and effects
+ ///
+ public abstract void Enable();
+
+ #endregion
+
#region Effect management
internal List LayerEffectsList;
@@ -208,7 +238,7 @@ namespace Artemis.Core
LayerEffectEntity entity = new()
{
Id = Guid.NewGuid(),
- Enabled = true,
+ Suspended = false,
Order = LayerEffects.Count + 1
};
descriptor.CreateInstance(this, entity);
@@ -338,6 +368,12 @@ namespace Artemis.Core
///
public void UpdateDisplayCondition()
{
+ if (Suspended)
+ {
+ DisplayConditionMet = false;
+ return;
+ }
+
if (DisplayCondition == null)
{
DisplayConditionMet = true;
@@ -381,19 +417,5 @@ namespace Artemis.Core
}
#endregion
-
- #region Events
-
- ///
- /// Occurs when a layer effect has been added or removed to this render element
- ///
- public event EventHandler? LayerEffectsUpdated;
-
- internal void OnLayerEffectsUpdated()
- {
- LayerEffectsUpdated?.Invoke(this, EventArgs.Empty);
- }
-
- #endregion
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Plugins/LayerBrushes/Internal/BaseLayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrushes/Internal/BaseLayerBrush.cs
index 2e1712250..8f63b16b9 100644
--- a/src/Artemis.Core/Plugins/LayerBrushes/Internal/BaseLayerBrush.cs
+++ b/src/Artemis.Core/Plugins/LayerBrushes/Internal/BaseLayerBrush.cs
@@ -82,6 +82,11 @@ namespace Artemis.Core.LayerBrushes
///
public virtual ILayerBrushPreset? DefaultPreset => Presets?.FirstOrDefault();
+ ///
+ /// Gets a boolean indicating whether the layer brush is enabled or not
+ ///
+ public bool Enabled { get; private set; }
+
///
/// Gets or sets whether the brush supports transformations
/// Note: RGB.NET brushes can never be transformed and setting this to true will throw an exception
@@ -113,14 +118,6 @@ namespace Artemis.Core.LayerBrushes
/// Seconds passed since last update
public abstract void Update(double deltaTime);
- // Not only is this needed to initialize properties on the layer brushes, it also prevents implementing anything
- // but LayerBrush and RgbNetLayerBrush outside the core
- internal abstract void Initialize();
-
- internal abstract void InternalRender(SKCanvas canvas, SKRect path, SKPaint paint);
-
- #region IDisposable
-
///
/// Releases the unmanaged resources used by the object and optionally releases the managed resources.
///
@@ -137,14 +134,42 @@ namespace Artemis.Core.LayerBrushes
}
}
+ ///
+ /// Enables the layer brush if it isn't already enabled
+ ///
+ internal void InternalEnable()
+ {
+ if (Enabled)
+ return;
+
+ EnableLayerBrush();
+ Enabled = true;
+ }
+
+ ///
+ /// Disables the layer brush if it isn't already disabled
+ ///
+ internal void InternalDisable()
+ {
+ if (!Enabled)
+ return;
+
+ DisableLayerBrush();
+ Enabled = false;
+ }
+
+ // Not only is this needed to initialize properties on the layer brushes, it also prevents implementing anything
+ // but LayerBrush and RgbNetLayerBrush outside the core
+ internal abstract void Initialize();
+
+ internal abstract void InternalRender(SKCanvas canvas, SKRect path, SKPaint paint);
+
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
-
- #endregion
}
///
diff --git a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs
index 2f70a6d54..6fb91ca71 100644
--- a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs
+++ b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs
@@ -71,6 +71,9 @@ namespace Artemis.Core.LayerBrushes
layer.LayerBrush = brush;
layer.OnLayerBrushUpdated();
+
+ if (layer.ShouldBeEnabled)
+ brush.InternalEnable();
}
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Plugins/LayerEffects/Internal/BaseLayerEffect.cs b/src/Artemis.Core/Plugins/LayerEffects/Internal/BaseLayerEffect.cs
index 87a10811d..ac9f5d27f 100644
--- a/src/Artemis.Core/Plugins/LayerEffects/Internal/BaseLayerEffect.cs
+++ b/src/Artemis.Core/Plugins/LayerEffects/Internal/BaseLayerEffect.cs
@@ -11,7 +11,7 @@ namespace Artemis.Core.LayerEffects
{
private ILayerEffectConfigurationDialog? _configurationDialog;
private LayerEffectDescriptor _descriptor;
- private bool _enabled;
+ private bool _suspended;
private Guid _entityId;
private bool _hasBeenRenamed;
private string _name;
@@ -55,12 +55,12 @@ namespace Artemis.Core.LayerEffects
}
///
- /// Gets or sets the enabled state, if not enabled the effect is skipped in render and update
+ /// Gets or sets the suspended state, if suspended the effect is skipped in render and update
///
- public bool Enabled
+ public bool Suspended
{
- get => _enabled;
- set => SetAndNotify(ref _enabled, value);
+ get => _suspended;
+ set => SetAndNotify(ref _suspended, value);
}
///
@@ -112,6 +112,11 @@ namespace Artemis.Core.LayerEffects
internal string PropertyRootPath => $"LayerEffect.{EntityId}.{GetType().Name}.";
+ ///
+ /// Gets a boolean indicating whether the layer effect is enabled or not
+ ///
+ public bool Enabled { get; private set; }
+
#region IDisposable
///
@@ -176,5 +181,29 @@ namespace Artemis.Core.LayerEffects
internal abstract void Initialize();
internal virtual string GetEffectTypeName() => GetType().Name;
+
+ ///
+ /// Enables the layer effect if it isn't already enabled
+ ///
+ internal void InternalEnable()
+ {
+ if (Enabled)
+ return;
+
+ EnableLayerEffect();
+ Enabled = true;
+ }
+
+ ///
+ /// Disables the layer effect if it isn't already disabled
+ ///
+ internal void InternalDisable()
+ {
+ if (!Enabled)
+ return;
+
+ DisableLayerEffect();
+ Enabled = false;
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Plugins/LayerEffects/LayerEffectDescriptor.cs b/src/Artemis.Core/Plugins/LayerEffects/LayerEffectDescriptor.cs
index 13f66a592..f724f367a 100644
--- a/src/Artemis.Core/Plugins/LayerEffects/LayerEffectDescriptor.cs
+++ b/src/Artemis.Core/Plugins/LayerEffects/LayerEffectDescriptor.cs
@@ -74,7 +74,7 @@ namespace Artemis.Core.LayerEffects
effect.EntityId = entity.Id;
effect.Order = entity.Order;
effect.Name = entity.Name;
- effect.Enabled = entity.Enabled;
+ effect.Suspended = entity.Suspended;
effect.Descriptor = this;
effect.Initialize();
@@ -94,6 +94,9 @@ namespace Artemis.Core.LayerEffects
};
effect.Initialize();
renderElement.ActivateLayerEffect(effect);
+
+ if (renderElement.ShouldBeEnabled)
+ effect.InternalEnable();
}
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Plugins/LayerEffects/Placeholder/PlaceholderLayerEffect.cs b/src/Artemis.Core/Plugins/LayerEffects/Placeholder/PlaceholderLayerEffect.cs
index 2f92cfe91..07f57491b 100644
--- a/src/Artemis.Core/Plugins/LayerEffects/Placeholder/PlaceholderLayerEffect.cs
+++ b/src/Artemis.Core/Plugins/LayerEffects/Placeholder/PlaceholderLayerEffect.cs
@@ -16,7 +16,7 @@ namespace Artemis.Core.LayerEffects.Placeholder
EntityId = OriginalEntity.Id;
Order = OriginalEntity.Order;
Name = OriginalEntity.Name;
- Enabled = OriginalEntity.Enabled;
+ Suspended = OriginalEntity.Suspended;
HasBeenRenamed = OriginalEntity.HasBeenRenamed;
}
diff --git a/src/Artemis.Storage/Entities/Profile/FolderEntity.cs b/src/Artemis.Storage/Entities/Profile/FolderEntity.cs
index 7060ee6e0..035210069 100644
--- a/src/Artemis.Storage/Entities/Profile/FolderEntity.cs
+++ b/src/Artemis.Storage/Entities/Profile/FolderEntity.cs
@@ -16,7 +16,7 @@ namespace Artemis.Storage.Entities.Profile
public int Order { get; set; }
public string Name { get; set; }
- public bool Enabled { get; set; }
+ public bool Suspended { get; set; }
[BsonRef("ProfileEntity")]
public ProfileEntity Profile { get; set; }
diff --git a/src/Artemis.Storage/Entities/Profile/LayerEffectEntity.cs b/src/Artemis.Storage/Entities/Profile/LayerEffectEntity.cs
index 6c8503e42..a575e24a9 100644
--- a/src/Artemis.Storage/Entities/Profile/LayerEffectEntity.cs
+++ b/src/Artemis.Storage/Entities/Profile/LayerEffectEntity.cs
@@ -8,7 +8,7 @@ namespace Artemis.Storage.Entities.Profile
public string ProviderId { get; set; }
public string EffectType { get; set; }
public string Name { get; set; }
- public bool Enabled { get; set; }
+ public bool Suspended { get; set; }
public bool HasBeenRenamed { get; set; }
public int Order { get; set; }
}
diff --git a/src/Artemis.Storage/Entities/Profile/LayerEntity.cs b/src/Artemis.Storage/Entities/Profile/LayerEntity.cs
index 60dd2071c..035e160ec 100644
--- a/src/Artemis.Storage/Entities/Profile/LayerEntity.cs
+++ b/src/Artemis.Storage/Entities/Profile/LayerEntity.cs
@@ -17,7 +17,7 @@ namespace Artemis.Storage.Entities.Profile
public int Order { get; set; }
public string Name { get; set; }
- public bool Enabled { get; set; }
+ public bool Suspended { get; set; }
public List Leds { get; set; }
diff --git a/src/Artemis.Storage/Migrations/M0002ProfileEntitiesEnabledMigration.cs b/src/Artemis.Storage/Migrations/M0002ProfileEntitiesEnabledMigration.cs
index 409e2ad23..d019c1667 100644
--- a/src/Artemis.Storage/Migrations/M0002ProfileEntitiesEnabledMigration.cs
+++ b/src/Artemis.Storage/Migrations/M0002ProfileEntitiesEnabledMigration.cs
@@ -16,16 +16,16 @@ namespace Artemis.Storage.Migrations
{
foreach (FolderEntity profileEntityFolder in profileEntity.Folders)
{
- profileEntityFolder.Enabled = true;
+ profileEntityFolder.Suspended = false;
foreach (LayerEffectEntity layerEffectEntity in profileEntityFolder.LayerEffects)
- layerEffectEntity.Enabled = true;
+ layerEffectEntity.Suspended = false;
}
foreach (LayerEntity profileEntityLayer in profileEntity.Layers)
{
- profileEntityLayer.Enabled = true;
+ profileEntityLayer.Suspended = false;
foreach (LayerEffectEntity layerEffectEntity in profileEntityLayer.LayerEffects)
- layerEffectEntity.Enabled = true;
+ layerEffectEntity.Suspended = false;
}
repository.Upsert(profileEntity);
diff --git a/src/Artemis.UI.Shared/Services/ProfileEditorService.cs b/src/Artemis.UI.Shared/Services/ProfileEditorService.cs
index 1cff68bfd..37b2bdf5c 100644
--- a/src/Artemis.UI.Shared/Services/ProfileEditorService.cs
+++ b/src/Artemis.UI.Shared/Services/ProfileEditorService.cs
@@ -126,9 +126,16 @@ namespace Artemis.UI.Shared.Services
// Stick to the main segment for any element that is not currently selected
foreach (Folder folder in SelectedProfile.GetAllFolders())
+ {
+ folder.Enable();
folder.Timeline.Override(CurrentTime, folder.Timeline.PlayMode == TimelinePlayMode.Repeat);
+ }
+
foreach (Layer layer in SelectedProfile.GetAllLayers())
+ {
+ layer.Enable();
layer.Timeline.Override(CurrentTime, (layer != SelectedProfileElement || layer.Timeline.Length < CurrentTime) && layer.Timeline.PlayMode == TimelinePlayMode.Repeat);
+ }
_doTick = true;
}
diff --git a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreeGroupView.xaml b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreeGroupView.xaml
index 0e6d576d7..5450b245a 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreeGroupView.xaml
+++ b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreeGroupView.xaml
@@ -13,6 +13,7 @@
d:DataContext="{d:DesignInstance local:TreeGroupViewModel}"
d:DesignHeight="450" d:DesignWidth="800">
+
@@ -180,13 +181,13 @@
+ Command="{s:Action SuspendedToggled}">