mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Data model events - WIP commit
This commit is contained in:
1 parent
b8112601df
commit
03b0e83ed8
19 files changed
+554
-28
No files matched your search
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Media;
|
||||
using Artemis.Core;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
using Artemis.UI.Screens.ProfileEditor.Conditions.Abstract;
|
||||
using Artemis.UI.Shared;
|
||||
using Artemis.UI.Shared.Input;
|
||||
using Artemis.UI.Shared.Services;
|
||||
|
||||
namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
{
|
||||
public class DataModelConditionEventViewModel : DataModelConditionViewModel, IDisposable
|
||||
{
|
||||
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
|
||||
private readonly IDataModelUIService _dataModelUIService;
|
||||
private readonly IProfileEditorService _profileEditorService;
|
||||
private DataModelDynamicViewModel _targetSelectionViewModel;
|
||||
|
||||
public DataModelConditionEventViewModel(DataModelConditionEvent model,
|
||||
IProfileEditorService profileEditorService,
|
||||
IDataModelUIService dataModelUIService,
|
||||
IDataModelConditionsVmFactory dataModelConditionsVmFactory) : base(model)
|
||||
{
|
||||
_profileEditorService = profileEditorService;
|
||||
_dataModelUIService = dataModelUIService;
|
||||
_dataModelConditionsVmFactory = dataModelConditionsVmFactory;
|
||||
|
||||
Initialize();
|
||||
}
|
||||
|
||||
public DataModelConditionEvent DataModelConditionEvent => (DataModelConditionEvent) Model;
|
||||
|
||||
public DataModelDynamicViewModel TargetSelectionViewModel
|
||||
{
|
||||
get => _targetSelectionViewModel;
|
||||
set => SetAndNotify(ref _targetSelectionViewModel, value);
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
TargetSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
|
||||
TargetSelectionViewModel.PropertySelected += TargetSelectionViewModelOnPropertySelected;
|
||||
|
||||
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||
List<Type> supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
||||
supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
||||
supportedInputTypes.Add(typeof(IEnumerable<>));
|
||||
TargetSelectionViewModel.FilterTypes = supportedInputTypes.ToArray();
|
||||
|
||||
TargetSelectionViewModel.ButtonBrush = new SolidColorBrush(Color.FromRgb(188, 174, 71));
|
||||
TargetSelectionViewModel.Placeholder = "Select a list";
|
||||
|
||||
Update();
|
||||
}
|
||||
|
||||
public void ApplyEvent()
|
||||
{
|
||||
if (!TargetSelectionViewModel.DataModelPath.GetPropertyType().IsGenericEnumerable())
|
||||
{
|
||||
if (Parent is DataModelConditionGroupViewModel groupViewModel)
|
||||
groupViewModel.ConvertToPredicate(this);
|
||||
return;
|
||||
}
|
||||
|
||||
DataModelConditionEvent.UpdateEvent(TargetSelectionViewModel.DataModelPath);
|
||||
_profileEditorService.UpdateSelectedProfileElement();
|
||||
|
||||
Update();
|
||||
}
|
||||
|
||||
#region Event handlers
|
||||
|
||||
private void TargetSelectionViewModelOnPropertySelected(object? sender, DataModelInputDynamicEventArgs e)
|
||||
{
|
||||
ApplyEvent();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
TargetSelectionViewModel.Dispose();
|
||||
TargetSelectionViewModel.PropertySelected -= TargetSelectionViewModelOnPropertySelected;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -147,6 +147,24 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
Update();
|
||||
}
|
||||
|
||||
public void ConvertToConditionEvent(DataModelConditionPredicateViewModel predicateViewModel)
|
||||
{
|
||||
// Remove the old child
|
||||
DataModelConditionGroup.RemoveChild(predicateViewModel.Model);
|
||||
|
||||
DataModelConditionPart rootGroup = DataModelConditionGroup;
|
||||
while (rootGroup.Parent != null)
|
||||
rootGroup = rootGroup.Parent;
|
||||
|
||||
// Insert an event at the start of the root group
|
||||
DataModelConditionEvent conditionEvent = new DataModelConditionEvent(rootGroup);
|
||||
conditionEvent.UpdateEvent(predicateViewModel.LeftSideSelectionViewModel.DataModelPath);
|
||||
rootGroup.AddChild(conditionEvent, 0);
|
||||
|
||||
// Update to switch the VMs
|
||||
Update();
|
||||
}
|
||||
|
||||
public void ConvertToPredicate(DataModelConditionListViewModel listViewModel)
|
||||
{
|
||||
// Store the old index and remove the old predicate
|
||||
|
||||
+2
-1
@@ -97,6 +97,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
_supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
||||
_supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
||||
_supportedInputTypes.Add(typeof(IEnumerable<>));
|
||||
_supportedInputTypes.Add(typeof(DataModelEvent));
|
||||
_supportedInputTypes.Add(typeof(DataModelEvent<>));
|
||||
Update();
|
||||
}
|
||||
|
||||
@@ -278,7 +280,6 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
Update();
|
||||
}
|
||||
|
||||
|
||||
private void RightSideInputViewModelOnSwitchToDynamicRequested(object? sender, EventArgs e)
|
||||
{
|
||||
DataModelConditionPredicate.PredicateType = ProfileRightSideType.Dynamic;
|
||||
|
||||
Reference in new issue
Block a user