mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
114 lines
4.5 KiB
C#
114 lines
4.5 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Artemis.Core.Models.Profile.Conditions;
|
|
using Artemis.UI.Ninject.Factories;
|
|
using Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract;
|
|
using Artemis.UI.Shared.Services.Interfaces;
|
|
using Humanizer;
|
|
using Stylet;
|
|
|
|
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|
{
|
|
public class DisplayConditionGroupViewModel : DisplayConditionViewModel
|
|
{
|
|
private readonly IProfileEditorService _profileEditorService;
|
|
private readonly IDisplayConditionsVmFactory _displayConditionsVmFactory;
|
|
private bool _isRootGroup;
|
|
private bool _isInitialized;
|
|
private bool _isSelectedBooleanOperatorOpen;
|
|
|
|
public DisplayConditionGroupViewModel(DisplayConditionGroup displayConditionGroup, DisplayConditionViewModel parent,
|
|
IProfileEditorService profileEditorService, IDisplayConditionsVmFactory displayConditionsVmFactory) : base(displayConditionGroup, parent)
|
|
{
|
|
_profileEditorService = profileEditorService;
|
|
_displayConditionsVmFactory = displayConditionsVmFactory;
|
|
Execute.PostToUIThread(async () =>
|
|
{
|
|
await Task.Delay(50);
|
|
IsInitialized = true;
|
|
});
|
|
}
|
|
|
|
public DisplayConditionGroup DisplayConditionGroup => (DisplayConditionGroup) Model;
|
|
|
|
public bool IsRootGroup
|
|
{
|
|
get => _isRootGroup;
|
|
set => SetAndNotify(ref _isRootGroup, value);
|
|
}
|
|
|
|
public bool IsInitialized
|
|
{
|
|
get => _isInitialized;
|
|
set => SetAndNotify(ref _isInitialized, value);
|
|
}
|
|
|
|
public bool IsSelectedBooleanOperatorOpen
|
|
{
|
|
get => _isSelectedBooleanOperatorOpen;
|
|
set => SetAndNotify(ref _isSelectedBooleanOperatorOpen, value);
|
|
}
|
|
|
|
public string SelectedBooleanOperator => DisplayConditionGroup.BooleanOperator.Humanize();
|
|
|
|
public void SelectBooleanOperator(string type)
|
|
{
|
|
var enumValue = Enum.Parse<BooleanOperator>(type);
|
|
DisplayConditionGroup.BooleanOperator = enumValue;
|
|
NotifyOfPropertyChange(nameof(SelectedBooleanOperator));
|
|
}
|
|
|
|
public void AddCondition(string type)
|
|
{
|
|
if (type == "Static")
|
|
DisplayConditionGroup.AddChild(new DisplayConditionPredicate(DisplayConditionGroup, PredicateType.Static));
|
|
else if (type == "Dynamic")
|
|
DisplayConditionGroup.AddChild(new DisplayConditionPredicate(DisplayConditionGroup, PredicateType.Dynamic));
|
|
|
|
Update();
|
|
_profileEditorService.UpdateSelectedProfileElement();
|
|
}
|
|
|
|
public void AddGroup()
|
|
{
|
|
DisplayConditionGroup.AddChild(new DisplayConditionGroup(DisplayConditionGroup));
|
|
|
|
Update();
|
|
_profileEditorService.UpdateSelectedProfileElement();
|
|
}
|
|
|
|
public override void Update()
|
|
{
|
|
NotifyOfPropertyChange(nameof(SelectedBooleanOperator));
|
|
|
|
// Remove VMs of effects no longer applied on the layer
|
|
var toRemove = Children.Where(c => !DisplayConditionGroup.Children.Contains(c.Model)).ToList();
|
|
// Using RemoveRange breaks our lovely animations
|
|
foreach (var displayConditionViewModel in toRemove)
|
|
Children.Remove(displayConditionViewModel);
|
|
|
|
foreach (var childModel in Model.Children)
|
|
{
|
|
if (Children.Any(c => c.Model == childModel))
|
|
continue;
|
|
|
|
switch (childModel)
|
|
{
|
|
case DisplayConditionGroup displayConditionGroup:
|
|
Children.Add(_displayConditionsVmFactory.DisplayConditionGroupViewModel(displayConditionGroup, this));
|
|
break;
|
|
case DisplayConditionListPredicate displayConditionListPredicate:
|
|
Children.Add(_displayConditionsVmFactory.DisplayConditionListPredicateViewModel(displayConditionListPredicate, this));
|
|
break;
|
|
case DisplayConditionPredicate displayConditionPredicate:
|
|
Children.Add(_displayConditionsVmFactory.DisplayConditionPredicateViewModel(displayConditionPredicate, this));
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach (var childViewModel in Children)
|
|
childViewModel.Update();
|
|
}
|
|
}
|
|
} |