Profile editor - Added unro/redo

Profile editor - Added adding layers and folders
This commit is contained in:
Robert committed 2022-01-02 00:04:46 +01:00
1 parent 34757716aa
commit 736324e45e
40 files changed
+1878 -317

No files matched your search

@@ -0,0 +1,20 @@
using System;
namespace Artemis.Core
{
/// <summary>
/// Provides data for profile element events.
/// </summary>
public class ProfileElementEventArgs : EventArgs
{
internal ProfileElementEventArgs(ProfileElement profileElement)
{
ProfileElement = profileElement;
}
/// <summary>
/// Gets the profile element this event is related to
/// </summary>
public ProfileElement ProfileElement { get; }
}
}
+2 -7
View File
@@ -22,17 +22,13 @@ namespace Artemis.Core
/// </summary>
/// <param name="parent">The parent of the folder</param>
/// <param name="name">The name of the folder</param>
/// <param name="order">The order where to place the child (0-based), defaults to the end of the collection</param>
public Folder(ProfileElement parent, string name, int order) : base(parent.Profile)
public Folder(ProfileElement parent, string name) : base(parent, parent.Profile)
{
FolderEntity = new FolderEntity();
EntityId = Guid.NewGuid();
Parent = parent ?? throw new ArgumentNullException(nameof(parent));
Profile = Parent.Profile;
Name = name;
Parent.AddChild(this, order);
}
/// <summary>
@@ -41,13 +37,12 @@ namespace Artemis.Core
/// <param name="profile">The profile the folder belongs to</param>
/// <param name="parent">The parent of the folder</param>
/// <param name="folderEntity">The entity of the folder</param>
public Folder(Profile profile, ProfileElement parent, FolderEntity folderEntity) : base(parent.Profile)
public Folder(Profile profile, ProfileElement parent, FolderEntity folderEntity) : base(parent, parent.Profile)
{
FolderEntity = folderEntity;
EntityId = folderEntity.Id;
Profile = profile;
Parent = parent;
Name = folderEntity.Name;
IsExpanded = folderEntity.IsExpanded;
Suspended = folderEntity.Suspended;
+29 -21
View File
@@ -4,7 +4,6 @@ using System.Collections.ObjectModel;
using System.Linq;
using Artemis.Core.LayerBrushes;
using Artemis.Core.LayerEffects;
using Artemis.Core.ScriptingProviders;
using Artemis.Storage.Entities.Profile;
using Artemis.Storage.Entities.Profile.Abstract;
using RGB.NET.Core;
@@ -29,13 +28,11 @@ namespace Artemis.Core
/// </summary>
/// <param name="parent">The parent of the layer</param>
/// <param name="name">The name of the layer</param>
/// <param name="order">The order where to place the child (0-based), defaults to the end of the collection</param>
public Layer(ProfileElement parent, string name, int order) : base(parent.Profile)
public Layer(ProfileElement parent, string name) : base(parent, parent.Profile)
{
LayerEntity = new LayerEntity();
EntityId = Guid.NewGuid();
Parent = parent ?? throw new ArgumentNullException(nameof(parent));
Profile = Parent.Profile;
Name = name;
Suspended = false;
@@ -48,7 +45,6 @@ namespace Artemis.Core
Adapter = new LayerAdapter(this);
Initialize();
Parent.AddChild(this, order);
}
/// <summary>
@@ -57,7 +53,7 @@ namespace Artemis.Core
/// <param name="profile">The profile the layer belongs to</param>
/// <param name="parent">The parent of the layer</param>
/// <param name="layerEntity">The entity of the layer</param>
public Layer(Profile profile, ProfileElement parent, LayerEntity layerEntity) : base(parent.Profile)
public Layer(Profile profile, ProfileElement parent, LayerEntity layerEntity) : base(parent, parent.Profile)
{
LayerEntity = layerEntity;
EntityId = layerEntity.Id;
@@ -148,10 +144,8 @@ namespace Artemis.Core
if (LayerBrush?.BaseProperties != null)
result.AddRange(LayerBrush.BaseProperties.GetAllLayerProperties());
foreach (BaseLayerEffect layerEffect in LayerEffects)
{
if (layerEffect.BaseProperties != null)
result.AddRange(layerEffect.BaseProperties.GetAllLayerProperties());
}
return result;
}
@@ -172,6 +166,19 @@ namespace Artemis.Core
/// </summary>
public event EventHandler? LayerBrushUpdated;
#region Overrides of BreakableModel
/// <inheritdoc />
public override IEnumerable<IBreakableModel> GetBrokenHierarchy()
{
if (LayerBrush?.BrokenState != null)
yield return LayerBrush;
foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.BrokenState != null))
yield return baseLayerEffect;
}
#endregion
/// <inheritdoc />
protected override void Dispose(bool disposing)
{
@@ -385,6 +392,18 @@ namespace Artemis.Core
Enabled = true;
}
/// <inheritdoc />
public override void Activate()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public override void Deactivate()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public override void Disable()
{
@@ -512,7 +531,9 @@ namespace Artemis.Core
throw new ObjectDisposedException("Layer");
if (!Leds.Any())
{
Path = new SKPath();
}
else
{
SKPath path = new() {FillType = SKPathFillType.Winding};
@@ -761,19 +782,6 @@ namespace Artemis.Core
}
#endregion
#region Overrides of BreakableModel
/// <inheritdoc />
public override IEnumerable<IBreakableModel> GetBrokenHierarchy()
{
if (LayerBrush?.BrokenState != null)
yield return LayerBrush;
foreach (BaseLayerEffect baseLayerEffect in LayerEffects.Where(e => e.BrokenState != null))
yield return baseLayerEffect;
}
#endregion
}
/// <summary>
+1 -5
View File
@@ -197,13 +197,9 @@ namespace Artemis.Core
// Populate the profile starting at the root, the rest is populated recursively
FolderEntity? rootFolder = ProfileEntity.Folders.FirstOrDefault(f => f.ParentId == EntityId);
if (rootFolder == null)
{
Folder _ = new(this, "Root folder", 0);
}
AddChild(new Folder(this, "Root folder"));
else
{
AddChild(new Folder(this, this, rootFolder));
}
}
List<RenderProfileElement> renderElements = GetAllRenderElements();
@@ -156,7 +156,7 @@ namespace Artemis.Core
StreamlineOrder();
}
OnChildAdded();
OnChildAdded(child);
}
/// <summary>
@@ -176,7 +176,7 @@ namespace Artemis.Core
child.Parent = null;
}
OnChildRemoved();
OnChildRemoved(child);
}
private void StreamlineOrder()
@@ -262,27 +262,27 @@ namespace Artemis.Core
/// <summary>
/// Occurs when a child was added to the <see cref="Children" /> list
/// </summary>
public event EventHandler? ChildAdded;
public event EventHandler<ProfileElementEventArgs>? ChildAdded;
/// <summary>
/// Occurs when a child was removed from the <see cref="Children" /> list
/// </summary>
public event EventHandler? ChildRemoved;
public event EventHandler<ProfileElementEventArgs>? ChildRemoved;
/// <summary>
/// Invokes the <see cref="ChildAdded" /> event
/// </summary>
protected virtual void OnChildAdded()
protected virtual void OnChildAdded(ProfileElement child)
{
ChildAdded?.Invoke(this, EventArgs.Empty);
ChildAdded?.Invoke(this, new ProfileElementEventArgs(child));
}
/// <summary>
/// Invokes the <see cref="ChildRemoved" /> event
/// </summary>
protected virtual void OnChildRemoved()
protected virtual void OnChildRemoved(ProfileElement child)
{
ChildRemoved?.Invoke(this, EventArgs.Empty);
ChildRemoved?.Invoke(this, new ProfileElementEventArgs(child));
}
#endregion
@@ -20,12 +20,13 @@ namespace Artemis.Core
private SKRectI _bounds;
private SKPath? _path;
internal RenderProfileElement(Profile profile) : base(profile)
internal RenderProfileElement(ProfileElement parent, Profile profile) : base(profile)
{
Timeline = new Timeline();
ExpandedPropertyGroups = new List<string>();
LayerEffectsList = new List<BaseLayerEffect>();
LayerEffects = new ReadOnlyCollection<BaseLayerEffect>(LayerEffectsList);
Parent = parent ?? throw new ArgumentNullException(nameof(parent));
LayerEffectStore.LayerEffectAdded += LayerEffectStoreOnLayerEffectAdded;
LayerEffectStore.LayerEffectRemoved += LayerEffectStoreOnLayerEffectRemoved;
@@ -52,6 +53,16 @@ namespace Artemis.Core
/// </summary>
public event EventHandler? LayerEffectsUpdated;
/// <summary>
/// Activates the render profile element, loading required brushes, effects or anything else needed for rendering
/// </summary>
public abstract void Activate();
/// <summary>
/// Deactivates the render profile element, disposing required brushes, effects or anything else needed for rendering
/// </summary>
public abstract void Deactivate();
/// <inheritdoc />
protected override void Dispose(bool disposing)
{
@@ -155,9 +166,9 @@ namespace Artemis.Core
/// <summary>
/// Gets the parent of this element
/// </summary>
public new ProfileElement? Parent
public new ProfileElement Parent
{
get => base.Parent;
get => base.Parent!;
internal set
{
base.Parent = value;