Data model events - WIP commit

This commit is contained in:
SpoinkyNL committed 2020-10-25 00:21:43 +02:00
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
@@ -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;