1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

62 lines
1.4 KiB
C#

using System;
using Artemis.Core;
namespace Artemis.UI.Shared.Services.ProfileEditor.Commands;
/// <summary>
/// Represents a profile editor command that can be used to add a profile element.
/// </summary>
public class AddProfileElement : IProfileEditorCommand, IDisposable
{
private readonly int _index;
private readonly RenderProfileElement _subject;
private readonly ProfileElement _target;
private bool _isAdded;
/// <summary>
/// Creates a new instance of the <see cref="AddProfileElement"/> class.
/// </summary>
public AddProfileElement(RenderProfileElement subject, ProfileElement target, int index)
{
_subject = subject;
_target = target;
_index = index;
DisplayName = subject switch
{
Layer => "Add layer",
Folder => "Add folder",
_ => throw new ArgumentException("Type of subject is not supported")
};
}
/// <inheritdoc />
public void Dispose()
{
if (!_isAdded)
_subject.Dispose();
}
#region Implementation of IProfileEditorCommand
/// <inheritdoc />
public string DisplayName { get; }
/// <inheritdoc />
public void Execute()
{
_isAdded = true;
_target.AddChild(_subject, _index);
_subject.Enable();
}
/// <inheritdoc />
public void Undo()
{
_isAdded = false;
_target.RemoveChild(_subject);
}
#endregion
}