mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-01 02:03:32 +00:00
Data model events - Improved condition conversion code
This commit is contained in:
parent
03b0e83ed8
commit
b8fa8779d9
@ -40,6 +40,8 @@ namespace Artemis.Core
|
|||||||
AddChild(new DataModelConditionGroup(this, groupEntity));
|
AddChild(new DataModelConditionGroup(this, groupEntity));
|
||||||
else if (childEntity is DataModelConditionListEntity listEntity)
|
else if (childEntity is DataModelConditionListEntity listEntity)
|
||||||
AddChild(new DataModelConditionList(this, listEntity));
|
AddChild(new DataModelConditionList(this, listEntity));
|
||||||
|
else if (childEntity is DataModelConditionEventEntity eventEntity)
|
||||||
|
AddChild(new DataModelConditionEvent(this, eventEntity));
|
||||||
else if (childEntity is DataModelConditionPredicateEntity predicateEntity)
|
else if (childEntity is DataModelConditionPredicateEntity predicateEntity)
|
||||||
AddChild(new DataModelConditionPredicate(this, predicateEntity));
|
AddChild(new DataModelConditionPredicate(this, predicateEntity));
|
||||||
else if (childEntity is DataModelConditionListPredicateEntity listPredicateEntity)
|
else if (childEntity is DataModelConditionListPredicateEntity listPredicateEntity)
|
||||||
|
|||||||
@ -235,7 +235,6 @@ namespace Artemis.UI.Shared
|
|||||||
if (toRemoveDynamic.Any())
|
if (toRemoveDynamic.Any())
|
||||||
Children.RemoveRange(toRemoveDynamic);
|
Children.RemoveRange(toRemoveDynamic);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataModelVisualizationViewModel CreateChild(IDataModelUIService dataModelUIService, string path, int depth)
|
private DataModelVisualizationViewModel CreateChild(IDataModelUIService dataModelUIService, string path, int depth)
|
||||||
{
|
{
|
||||||
if (depth > MaxDepth)
|
if (depth > MaxDepth)
|
||||||
@ -265,7 +264,7 @@ namespace Artemis.UI.Shared
|
|||||||
if (propertyType.IsGenericEnumerable())
|
if (propertyType.IsGenericEnumerable())
|
||||||
return new DataModelListViewModel(DataModel, this, dataModelPath) {Depth = depth};
|
return new DataModelListViewModel(DataModel, this, dataModelPath) {Depth = depth};
|
||||||
if (propertyType == typeof(DataModelEvent) || propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(DataModelEvent<>))
|
if (propertyType == typeof(DataModelEvent) || propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(DataModelEvent<>))
|
||||||
return new DataModelEventViewModel(DataModel, this, dataModelPath) { Depth = depth };
|
return new DataModelEventViewModel(DataModel, this, dataModelPath) {Depth = depth};
|
||||||
// For other value types create a child view model
|
// For other value types create a child view model
|
||||||
if (propertyType.IsClass || propertyType.IsStruct())
|
if (propertyType.IsClass || propertyType.IsStruct())
|
||||||
return new DataModelPropertiesViewModel(DataModel, this, dataModelPath) {Depth = depth};
|
return new DataModelPropertiesViewModel(DataModel, this, dataModelPath) {Depth = depth};
|
||||||
|
|||||||
@ -67,6 +67,7 @@ namespace Artemis.UI.Ninject.Factories
|
|||||||
{
|
{
|
||||||
DataModelConditionGroupViewModel DataModelConditionGroupViewModel(DataModelConditionGroup dataModelConditionGroup, bool isListGroup);
|
DataModelConditionGroupViewModel DataModelConditionGroupViewModel(DataModelConditionGroup dataModelConditionGroup, bool isListGroup);
|
||||||
DataModelConditionListViewModel DataModelConditionListViewModel(DataModelConditionList dataModelConditionList);
|
DataModelConditionListViewModel DataModelConditionListViewModel(DataModelConditionList dataModelConditionList);
|
||||||
|
DataModelConditionEventViewModel DataModelConditionEventViewModel(DataModelConditionEvent dataModelConditionEvent);
|
||||||
DataModelConditionPredicateViewModel DataModelConditionPredicateViewModel(DataModelConditionPredicate dataModelConditionPredicate);
|
DataModelConditionPredicateViewModel DataModelConditionPredicateViewModel(DataModelConditionPredicate dataModelConditionPredicate);
|
||||||
DataModelConditionListPredicateViewModel DataModelConditionListPredicateViewModel(DataModelConditionListPredicate dataModelConditionListPredicate);
|
DataModelConditionListPredicateViewModel DataModelConditionListPredicateViewModel(DataModelConditionListPredicate dataModelConditionListPredicate);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
using Artemis.Core;
|
using System;
|
||||||
|
using Artemis.Core;
|
||||||
|
using Artemis.UI.Shared.Input;
|
||||||
using Stylet;
|
using Stylet;
|
||||||
|
|
||||||
namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
|
namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
|
||||||
{
|
{
|
||||||
public abstract class DataModelConditionViewModel : Conductor<DataModelConditionViewModel>.Collection.AllActive
|
public abstract class DataModelConditionViewModel : Conductor<DataModelConditionViewModel>.Collection.AllActive
|
||||||
{
|
{
|
||||||
|
private DataModelDynamicViewModel _leftSideSelectionViewModel;
|
||||||
|
|
||||||
protected DataModelConditionViewModel(DataModelConditionPart model)
|
protected DataModelConditionViewModel(DataModelConditionPart model)
|
||||||
{
|
{
|
||||||
Model = model;
|
Model = model;
|
||||||
@ -12,6 +16,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
|
|||||||
|
|
||||||
public DataModelConditionPart Model { get; }
|
public DataModelConditionPart Model { get; }
|
||||||
|
|
||||||
|
public DataModelDynamicViewModel LeftSideSelectionViewModel
|
||||||
|
{
|
||||||
|
get => _leftSideSelectionViewModel;
|
||||||
|
set => SetAndNotify(ref _leftSideSelectionViewModel, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void Update();
|
public abstract void Update();
|
||||||
|
|
||||||
public virtual void Delete()
|
public virtual void Delete()
|
||||||
@ -19,5 +29,43 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
|
|||||||
Model.Parent.RemoveChild(Model);
|
Model.Parent.RemoveChild(Model);
|
||||||
((DataModelConditionViewModel) Parent).Update();
|
((DataModelConditionViewModel) Parent).Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected bool ConvertIfRequired(Type newType)
|
||||||
|
{
|
||||||
|
if (newType == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!(Parent is DataModelConditionGroupViewModel groupViewModel))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// List
|
||||||
|
if (newType.IsGenericEnumerable())
|
||||||
|
{
|
||||||
|
if (this is DataModelConditionListViewModel)
|
||||||
|
return false;
|
||||||
|
groupViewModel.ConvertToConditionList(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Event
|
||||||
|
if (IsEvent(newType))
|
||||||
|
{
|
||||||
|
if (this is DataModelConditionEventViewModel)
|
||||||
|
return false;
|
||||||
|
groupViewModel.ConvertToConditionEvent(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Predicate
|
||||||
|
if (this is DataModelConditionPredicateViewModel)
|
||||||
|
return false;
|
||||||
|
groupViewModel.ConvertToPredicate(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool IsEvent(Type type)
|
||||||
|
{
|
||||||
|
return type == typeof(DataModelEvent) || type.IsGenericType && type.GetGenericTypeDefinition() == typeof(DataModelEvent<>);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
<UserControl x:Class="Artemis.UI.Screens.ProfileEditor.Conditions.DataModelConditionEventView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Artemis.UI.Screens.ProfileEditor.Conditions"
|
||||||
|
xmlns:s="https://github.com/canton7/Stylet"
|
||||||
|
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="450" d:DesignWidth="800">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="pack://application:,,,/Artemis.UI;component/ResourceDictionaries/DataModelConditions.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Grid Margin="0 3">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button Grid.Row="0"
|
||||||
|
Grid.Column="0"
|
||||||
|
ToolTip="Delete the event trigger"
|
||||||
|
Style="{StaticResource MaterialDesignIconForegroundButton}"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Foreground="#E74C4C"
|
||||||
|
Width="25"
|
||||||
|
Height="25"
|
||||||
|
Command="{s:Action Delete}">
|
||||||
|
<materialDesign:PackIcon Kind="Close" Width="18" Height="18" />
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<!-- Left side, the list this predicate is targeting -->
|
||||||
|
<ContentControl Grid.Row="0"
|
||||||
|
Grid.Column="1"
|
||||||
|
s:View.Model="{Binding LeftSideSelectionViewModel}"
|
||||||
|
VerticalContentAlignment="Stretch"
|
||||||
|
HorizontalContentAlignment="Stretch"
|
||||||
|
IsTabStop="False" />
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@ -1,13 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Artemis.Core;
|
using Artemis.Core;
|
||||||
using Artemis.UI.Ninject.Factories;
|
using Artemis.UI.Ninject.Factories;
|
||||||
using Artemis.UI.Screens.ProfileEditor.Conditions.Abstract;
|
using Artemis.UI.Screens.ProfileEditor.Conditions.Abstract;
|
||||||
using Artemis.UI.Shared;
|
using Artemis.UI.Shared;
|
||||||
using Artemis.UI.Shared.Input;
|
|
||||||
using Artemis.UI.Shared.Services;
|
using Artemis.UI.Shared.Services;
|
||||||
|
|
||||||
namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||||
@ -17,12 +15,11 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
|
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
|
||||||
private readonly IDataModelUIService _dataModelUIService;
|
private readonly IDataModelUIService _dataModelUIService;
|
||||||
private readonly IProfileEditorService _profileEditorService;
|
private readonly IProfileEditorService _profileEditorService;
|
||||||
private DataModelDynamicViewModel _targetSelectionViewModel;
|
|
||||||
|
|
||||||
public DataModelConditionEventViewModel(DataModelConditionEvent model,
|
public DataModelConditionEventViewModel(DataModelConditionEvent dataModelConditionEvent,
|
||||||
IProfileEditorService profileEditorService,
|
IProfileEditorService profileEditorService,
|
||||||
IDataModelUIService dataModelUIService,
|
IDataModelUIService dataModelUIService,
|
||||||
IDataModelConditionsVmFactory dataModelConditionsVmFactory) : base(model)
|
IDataModelConditionsVmFactory dataModelConditionsVmFactory) : base(dataModelConditionEvent)
|
||||||
{
|
{
|
||||||
_profileEditorService = profileEditorService;
|
_profileEditorService = profileEditorService;
|
||||||
_dataModelUIService = dataModelUIService;
|
_dataModelUIService = dataModelUIService;
|
||||||
@ -33,39 +30,37 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
public DataModelConditionEvent DataModelConditionEvent => (DataModelConditionEvent) Model;
|
public DataModelConditionEvent DataModelConditionEvent => (DataModelConditionEvent) Model;
|
||||||
|
|
||||||
public DataModelDynamicViewModel TargetSelectionViewModel
|
|
||||||
{
|
|
||||||
get => _targetSelectionViewModel;
|
|
||||||
set => SetAndNotify(ref _targetSelectionViewModel, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
TargetSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
|
LeftSideSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
|
||||||
TargetSelectionViewModel.PropertySelected += TargetSelectionViewModelOnPropertySelected;
|
LeftSideSelectionViewModel.PropertySelected += LeftSideSelectionViewModelOnPropertySelected;
|
||||||
|
|
||||||
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||||
List<Type> supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
List<Type> supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
||||||
supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
||||||
supportedInputTypes.Add(typeof(IEnumerable<>));
|
supportedInputTypes.Add(typeof(IEnumerable<>));
|
||||||
TargetSelectionViewModel.FilterTypes = supportedInputTypes.ToArray();
|
LeftSideSelectionViewModel.FilterTypes = supportedInputTypes.ToArray();
|
||||||
|
|
||||||
TargetSelectionViewModel.ButtonBrush = new SolidColorBrush(Color.FromRgb(188, 174, 71));
|
LeftSideSelectionViewModel.ButtonBrush = new SolidColorBrush(Color.FromRgb(185, 164, 10));
|
||||||
TargetSelectionViewModel.Placeholder = "Select a list";
|
LeftSideSelectionViewModel.Placeholder = "Select an event";
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Update()
|
||||||
|
{
|
||||||
|
LeftSideSelectionViewModel.ChangeDataModelPath(DataModelConditionEvent.EventPath);
|
||||||
|
}
|
||||||
|
|
||||||
public void ApplyEvent()
|
public void ApplyEvent()
|
||||||
{
|
{
|
||||||
if (!TargetSelectionViewModel.DataModelPath.GetPropertyType().IsGenericEnumerable())
|
Type newType = LeftSideSelectionViewModel.DataModelPath.GetPropertyType();
|
||||||
{
|
bool converted = ConvertIfRequired(newType);
|
||||||
if (Parent is DataModelConditionGroupViewModel groupViewModel)
|
if (converted)
|
||||||
groupViewModel.ConvertToPredicate(this);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
DataModelConditionEvent.UpdateEvent(TargetSelectionViewModel.DataModelPath);
|
DataModelConditionEvent.UpdateEvent(LeftSideSelectionViewModel.DataModelPath);
|
||||||
_profileEditorService.UpdateSelectedProfileElement();
|
_profileEditorService.UpdateSelectedProfileElement();
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
@ -73,7 +68,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
#region Event handlers
|
#region Event handlers
|
||||||
|
|
||||||
private void TargetSelectionViewModelOnPropertySelected(object? sender, DataModelInputDynamicEventArgs e)
|
private void LeftSideSelectionViewModelOnPropertySelected(object? sender, DataModelInputDynamicEventArgs e)
|
||||||
{
|
{
|
||||||
ApplyEvent();
|
ApplyEvent();
|
||||||
}
|
}
|
||||||
@ -84,8 +79,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
TargetSelectionViewModel.Dispose();
|
LeftSideSelectionViewModel.Dispose();
|
||||||
TargetSelectionViewModel.PropertySelected -= TargetSelectionViewModelOnPropertySelected;
|
LeftSideSelectionViewModel.PropertySelected -= LeftSideSelectionViewModelOnPropertySelected;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -100,19 +100,22 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
switch (childModel)
|
switch (childModel)
|
||||||
{
|
{
|
||||||
case DataModelConditionGroup DataModelConditionGroup:
|
case DataModelConditionGroup dataModelConditionGroup:
|
||||||
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionGroupViewModel(DataModelConditionGroup, IsListGroup));
|
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionGroupViewModel(dataModelConditionGroup, IsListGroup));
|
||||||
break;
|
break;
|
||||||
case DataModelConditionList DataModelConditionListPredicate:
|
case DataModelConditionList dataModelConditionList:
|
||||||
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionListViewModel(DataModelConditionListPredicate));
|
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionListViewModel(dataModelConditionList));
|
||||||
break;
|
break;
|
||||||
case DataModelConditionPredicate DataModelConditionPredicate:
|
case DataModelConditionEvent dataModelConditionEvent:
|
||||||
|
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionEventViewModel(dataModelConditionEvent));
|
||||||
|
break;
|
||||||
|
case DataModelConditionPredicate dataModelConditionPredicate:
|
||||||
if (!IsListGroup)
|
if (!IsListGroup)
|
||||||
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionPredicateViewModel(DataModelConditionPredicate));
|
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionPredicateViewModel(dataModelConditionPredicate));
|
||||||
break;
|
break;
|
||||||
case DataModelConditionListPredicate DataModelConditionListPredicate:
|
case DataModelConditionListPredicate dataModelConditionListPredicate:
|
||||||
if (IsListGroup)
|
if (IsListGroup)
|
||||||
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionListPredicateViewModel(DataModelConditionListPredicate));
|
viewModels.Add(_dataModelConditionsVmFactory.DataModelConditionListPredicateViewModel(dataModelConditionListPredicate));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,7 +135,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
OnUpdated();
|
OnUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConvertToConditionList(DataModelConditionPredicateViewModel predicateViewModel)
|
public void ConvertToConditionList(DataModelConditionViewModel predicateViewModel)
|
||||||
{
|
{
|
||||||
// Store the old index and remove the old predicate
|
// Store the old index and remove the old predicate
|
||||||
int index = DataModelConditionGroup.Children.IndexOf(predicateViewModel.Model);
|
int index = DataModelConditionGroup.Children.IndexOf(predicateViewModel.Model);
|
||||||
@ -147,7 +150,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConvertToConditionEvent(DataModelConditionPredicateViewModel predicateViewModel)
|
public void ConvertToConditionEvent(DataModelConditionViewModel predicateViewModel)
|
||||||
{
|
{
|
||||||
// Remove the old child
|
// Remove the old child
|
||||||
DataModelConditionGroup.RemoveChild(predicateViewModel.Model);
|
DataModelConditionGroup.RemoveChild(predicateViewModel.Model);
|
||||||
@ -165,7 +168,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConvertToPredicate(DataModelConditionListViewModel listViewModel)
|
public void ConvertToPredicate(DataModelConditionViewModel listViewModel)
|
||||||
{
|
{
|
||||||
// Store the old index and remove the old predicate
|
// Store the old index and remove the old predicate
|
||||||
int index = DataModelConditionGroup.Children.IndexOf(listViewModel.Model);
|
int index = DataModelConditionGroup.Children.IndexOf(listViewModel.Model);
|
||||||
@ -173,7 +176,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
// Insert a list in the same position
|
// Insert a list in the same position
|
||||||
DataModelConditionPredicate predicate = new DataModelConditionPredicate(DataModelConditionGroup, ProfileRightSideType.Dynamic);
|
DataModelConditionPredicate predicate = new DataModelConditionPredicate(DataModelConditionGroup, ProfileRightSideType.Dynamic);
|
||||||
predicate.UpdateLeftSide(listViewModel.TargetSelectionViewModel.DataModelPath);
|
predicate.UpdateLeftSide(listViewModel.LeftSideSelectionViewModel.DataModelPath);
|
||||||
DataModelConditionGroup.AddChild(predicate, index);
|
DataModelConditionGroup.AddChild(predicate, index);
|
||||||
|
|
||||||
// Update to switch the VMs
|
// Update to switch the VMs
|
||||||
|
|||||||
@ -41,7 +41,7 @@
|
|||||||
<!-- Left side, the list this predicate is targeting -->
|
<!-- Left side, the list this predicate is targeting -->
|
||||||
<ContentControl Grid.Row="0"
|
<ContentControl Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
s:View.Model="{Binding TargetSelectionViewModel}"
|
s:View.Model="{Binding LeftSideSelectionViewModel}"
|
||||||
VerticalContentAlignment="Stretch"
|
VerticalContentAlignment="Stretch"
|
||||||
HorizontalContentAlignment="Stretch"
|
HorizontalContentAlignment="Stretch"
|
||||||
IsTabStop="False" />
|
IsTabStop="False" />
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
@ -7,7 +6,6 @@ using Artemis.Core;
|
|||||||
using Artemis.UI.Ninject.Factories;
|
using Artemis.UI.Ninject.Factories;
|
||||||
using Artemis.UI.Screens.ProfileEditor.Conditions.Abstract;
|
using Artemis.UI.Screens.ProfileEditor.Conditions.Abstract;
|
||||||
using Artemis.UI.Shared;
|
using Artemis.UI.Shared;
|
||||||
using Artemis.UI.Shared.Input;
|
|
||||||
using Artemis.UI.Shared.Services;
|
using Artemis.UI.Shared.Services;
|
||||||
using Humanizer;
|
using Humanizer;
|
||||||
|
|
||||||
@ -18,7 +16,6 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
|
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
|
||||||
private readonly IDataModelUIService _dataModelUIService;
|
private readonly IDataModelUIService _dataModelUIService;
|
||||||
private readonly IProfileEditorService _profileEditorService;
|
private readonly IProfileEditorService _profileEditorService;
|
||||||
private DataModelDynamicViewModel _targetSelectionViewModel;
|
|
||||||
|
|
||||||
public DataModelConditionListViewModel(
|
public DataModelConditionListViewModel(
|
||||||
DataModelConditionList dataModelConditionList,
|
DataModelConditionList dataModelConditionList,
|
||||||
@ -33,22 +30,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
Initialize();
|
Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataModelDynamicViewModel TargetSelectionViewModel
|
|
||||||
{
|
|
||||||
get => _targetSelectionViewModel;
|
|
||||||
set => SetAndNotify(ref _targetSelectionViewModel, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataModelConditionList DataModelConditionList => (DataModelConditionList) Model;
|
public DataModelConditionList DataModelConditionList => (DataModelConditionList) Model;
|
||||||
|
|
||||||
public string SelectedListOperator => DataModelConditionList.ListOperator.Humanize();
|
public string SelectedListOperator => DataModelConditionList.ListOperator.Humanize();
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
TargetSelectionViewModel.Dispose();
|
|
||||||
TargetSelectionViewModel.PropertySelected -= TargetSelectionViewModelOnPropertySelected;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SelectListOperator(string type)
|
public void SelectListOperator(string type)
|
||||||
{
|
{
|
||||||
ListOperator enumValue = Enum.Parse<ListOperator>(type);
|
ListOperator enumValue = Enum.Parse<ListOperator>(type);
|
||||||
@ -82,38 +67,38 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
TargetSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
|
LeftSideSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
|
||||||
TargetSelectionViewModel.PropertySelected += TargetSelectionViewModelOnPropertySelected;
|
LeftSideSelectionViewModel.PropertySelected += LeftSideSelectionViewModelOnPropertySelected;
|
||||||
|
|
||||||
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||||
List<Type> supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
List<Type> supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
||||||
supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
||||||
supportedInputTypes.Add(typeof(IEnumerable<>));
|
supportedInputTypes.Add(typeof(IEnumerable<>));
|
||||||
TargetSelectionViewModel.FilterTypes = supportedInputTypes.ToArray();
|
LeftSideSelectionViewModel.FilterTypes = supportedInputTypes.ToArray();
|
||||||
|
|
||||||
TargetSelectionViewModel.ButtonBrush = new SolidColorBrush(Color.FromRgb(71, 108, 188));
|
LeftSideSelectionViewModel.ButtonBrush = new SolidColorBrush(Color.FromRgb(71, 108, 188));
|
||||||
TargetSelectionViewModel.Placeholder = "Select a list";
|
LeftSideSelectionViewModel.Placeholder = "Select a list";
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ApplyList()
|
public void ApplyList()
|
||||||
{
|
{
|
||||||
if (!TargetSelectionViewModel.DataModelPath.GetPropertyType().IsGenericEnumerable())
|
Type newType = LeftSideSelectionViewModel.DataModelPath.GetPropertyType();
|
||||||
{
|
bool converted = ConvertIfRequired(newType);
|
||||||
if (Parent is DataModelConditionGroupViewModel groupViewModel)
|
if (converted)
|
||||||
groupViewModel.ConvertToPredicate(this);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
DataModelConditionList.UpdateList(TargetSelectionViewModel.DataModelPath);
|
DataModelConditionList.UpdateList(LeftSideSelectionViewModel.DataModelPath);
|
||||||
_profileEditorService.UpdateSelectedProfileElement();
|
_profileEditorService.UpdateSelectedProfileElement();
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
TargetSelectionViewModel.ChangeDataModelPath(DataModelConditionList.ListPath);
|
LeftSideSelectionViewModel.ChangeDataModelPath(DataModelConditionList.ListPath);
|
||||||
NotifyOfPropertyChange(nameof(SelectedListOperator));
|
NotifyOfPropertyChange(nameof(SelectedListOperator));
|
||||||
|
|
||||||
// Remove VMs of effects no longer applied on the layer
|
// Remove VMs of effects no longer applied on the layer
|
||||||
@ -142,9 +127,15 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
childViewModel.Update();
|
childViewModel.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TargetSelectionViewModelOnPropertySelected(object? sender, DataModelInputDynamicEventArgs e)
|
private void LeftSideSelectionViewModelOnPropertySelected(object? sender, DataModelInputDynamicEventArgs e)
|
||||||
{
|
{
|
||||||
ApplyList();
|
ApplyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
LeftSideSelectionViewModel.Dispose();
|
||||||
|
LeftSideSelectionViewModel.PropertySelected -= LeftSideSelectionViewModelOnPropertySelected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -18,7 +18,6 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
private readonly IConditionOperatorService _conditionOperatorService;
|
private readonly IConditionOperatorService _conditionOperatorService;
|
||||||
private readonly IDataModelUIService _dataModelUIService;
|
private readonly IDataModelUIService _dataModelUIService;
|
||||||
private readonly IProfileEditorService _profileEditorService;
|
private readonly IProfileEditorService _profileEditorService;
|
||||||
private DataModelDynamicViewModel _leftSideSelectionViewModel;
|
|
||||||
private BindableCollection<BaseConditionOperator> _operators;
|
private BindableCollection<BaseConditionOperator> _operators;
|
||||||
private DataModelStaticViewModel _rightSideInputViewModel;
|
private DataModelStaticViewModel _rightSideInputViewModel;
|
||||||
private DataModelDynamicViewModel _rightSideSelectionViewModel;
|
private DataModelDynamicViewModel _rightSideSelectionViewModel;
|
||||||
@ -56,12 +55,6 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
set => SetAndNotify(ref _operators, value);
|
set => SetAndNotify(ref _operators, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataModelDynamicViewModel LeftSideSelectionViewModel
|
|
||||||
{
|
|
||||||
get => _leftSideSelectionViewModel;
|
|
||||||
set => SetAndNotify(ref _leftSideSelectionViewModel, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BaseConditionOperator SelectedOperator
|
public BaseConditionOperator SelectedOperator
|
||||||
{
|
{
|
||||||
get => _selectedOperator;
|
get => _selectedOperator;
|
||||||
@ -151,12 +144,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
|||||||
|
|
||||||
public void ApplyLeftSide()
|
public void ApplyLeftSide()
|
||||||
{
|
{
|
||||||
if (LeftSideSelectionViewModel.DataModelPath.GetPropertyType().IsGenericEnumerable())
|
Type newType = LeftSideSelectionViewModel.DataModelPath.GetPropertyType();
|
||||||
{
|
bool converted = ConvertIfRequired(newType);
|
||||||
if (Parent is DataModelConditionGroupViewModel groupViewModel)
|
if (converted)
|
||||||
groupViewModel.ConvertToConditionList(this);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
DataModelConditionPredicate.UpdateLeftSide(LeftSideSelectionViewModel.DataModelPath);
|
DataModelConditionPredicate.UpdateLeftSide(LeftSideSelectionViewModel.DataModelPath);
|
||||||
_profileEditorService.UpdateSelectedProfileElement();
|
_profileEditorService.UpdateSelectedProfileElement();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user