mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
79 lines
2.7 KiB
C#
79 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Artemis.Core.Models.Profile.LayerProperties;
|
|
using Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.PropertyInput;
|
|
using Artemis.UI.Services.Interfaces;
|
|
using Ninject;
|
|
using Stylet;
|
|
|
|
namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
|
|
{
|
|
public class LayerPropertyViewModel : PropertyChangedBase
|
|
{
|
|
private readonly IKernel _kernel;
|
|
private readonly IProfileEditorService _profileEditorService;
|
|
private bool _keyframesEnabled;
|
|
|
|
public LayerPropertyViewModel(BaseLayerProperty layerProperty, LayerPropertyViewModel parent, IKernel kernel, IProfileEditorService profileEditorService)
|
|
{
|
|
_kernel = kernel;
|
|
_profileEditorService = profileEditorService;
|
|
_keyframesEnabled = layerProperty.IsUsingKeyframes;
|
|
|
|
LayerProperty = layerProperty;
|
|
Parent = parent;
|
|
Children = new List<LayerPropertyViewModel>();
|
|
IsExpanded = layerProperty.ExpandByDefault;
|
|
|
|
Parent?.Children.Add(this);
|
|
}
|
|
|
|
public BaseLayerProperty LayerProperty { get; }
|
|
|
|
public LayerPropertyViewModel Parent { get; }
|
|
public List<LayerPropertyViewModel> Children { get; }
|
|
|
|
public bool IsExpanded { get; set; }
|
|
|
|
public bool KeyframesEnabled
|
|
{
|
|
get => _keyframesEnabled;
|
|
set
|
|
{
|
|
_keyframesEnabled = value;
|
|
UpdateKeyframes();
|
|
}
|
|
}
|
|
|
|
public PropertyInputViewModel GetPropertyInputViewModel()
|
|
{
|
|
// If the type is an enum type, search for Enum instead.
|
|
var type = LayerProperty.Type;
|
|
if (type.IsEnum)
|
|
type = typeof(Enum);
|
|
|
|
var match = _kernel.Get<List<PropertyInputViewModel>>().FirstOrDefault(p => p.CompatibleTypes.Contains(type));
|
|
if (match == null)
|
|
return null;
|
|
|
|
match.Initialize(this);
|
|
return match;
|
|
}
|
|
|
|
private void UpdateKeyframes()
|
|
{
|
|
// Either create a new first keyframe or clear all the keyframes
|
|
if (_keyframesEnabled)
|
|
LayerProperty.CreateNewKeyframe(_profileEditorService.CurrentTime, LayerProperty.GetCurrentValue());
|
|
else
|
|
LayerProperty.ClearKeyframes();
|
|
|
|
// Force the keyframe engine to update, the new keyframe is the current keyframe
|
|
LayerProperty.IsUsingKeyframes = _keyframesEnabled;
|
|
LayerProperty.KeyframeEngine?.Update(0);
|
|
|
|
_profileEditorService.UpdateSelectedProfileElement();
|
|
}
|
|
}
|
|
} |