Conditions - Finished list support

This commit is contained in:
Robert committed 2020-09-21 20:22:11 +02:00
1 parent 0537adc27a
commit 693ea29600
11 files changed
+192 -197

No files matched your search

@@ -45,7 +45,7 @@
</Button>
<Button Grid.Row="0"
Grid.Column="1"
ToolTip="Change the operator of the group"
ToolTip="Change the operator of the group, determining which conditions should match"
Style="{StaticResource DataModelConditionButtonLeftClickMenu}"
Background="#E74C4C"
BorderBrush="#E74C4C"
@@ -54,10 +54,22 @@
Visibility="{Binding DisplayBooleanOperator, Converter={x:Static s:BoolToVisibilityConverter.Instance}, Mode=OneWay}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="And" Command="{s:Action SelectBooleanOperator}" CommandParameter="And" />
<MenuItem Header="Or" Command="{s:Action SelectBooleanOperator}" CommandParameter="Or" />
<MenuItem Header="And not" Command="{s:Action SelectBooleanOperator}" CommandParameter="AndNot" />
<MenuItem Header="Or not" Command="{s:Action SelectBooleanOperator}" CommandParameter="OrNot" />
<MenuItem Header="And"
Command="{s:Action SelectBooleanOperator}"
CommandParameter="And"
ToolTip="All the conditions in the group should evaluate to true" />
<MenuItem Header="Or"
Command="{s:Action SelectBooleanOperator}"
CommandParameter="Or"
ToolTip="Any of the conditions in the group should evaluate to true"/>
<MenuItem Header="And not"
Command="{s:Action SelectBooleanOperator}"
CommandParameter="AndNot"
ToolTip="All the conditions in the group should evaluate to false"/>
<MenuItem Header="Or not"
Command="{s:Action SelectBooleanOperator}"
CommandParameter="OrNot"
ToolTip="Any of the conditions in the group should evaluate to false"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
@@ -90,7 +102,7 @@
<Converters:InverseBooleanConverter x:Key="InverseBooleanConverter" />
</ContextMenu.Resources>
<MenuItem Header="Add static condition"
ToolTip="A condition that compares a data model property to a static input"
ToolTip="A condition that compares with a static input"
Command="{s:Action AddCondition}"
CommandParameter="Static">
<MenuItem.Icon>
@@ -98,18 +110,28 @@
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Add dynamic condition"
ToolTip="A condition that compares two data model properties"
ToolTip="A condition that compares with a data model property"
Command="{s:Action AddCondition}"
CommandParameter="Dynamic">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="InsertLink" />
<materialDesign:PackIcon Kind="Link" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Add self condition"
ToolTip="A condition that compares with a property contained in the list"
Command="{s:Action AddCondition}"
CommandParameter="DynamicList"
IsEnabled="{Binding Data.DynamicListConditionSupported, Source={StaticResource DataContextProxy}}"
Visibility="{Binding Data.IsListGroup, Converter={x:Static s:BoolToVisibilityConverter.Instance}, Source={StaticResource DataContextProxy}}">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="UndoVariant" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Add list condition"
ToolTip="A condition that evaluates on items in a list"
Command="{s:Action AddCondition}"
CommandParameter="List"
IsEnabled="{Binding Data.IsListGroup, Converter={StaticResource InverseBooleanConverter}, Source={StaticResource DataContextProxy}}">
Visibility="{Binding Data.IsListGroup, Converter={x:Static s:BoolToVisibilityConverter.InverseInstance}, Source={StaticResource DataContextProxy}}">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="FormatListBulleted" />
</MenuItem.Icon>
@@ -25,6 +25,11 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
: base(dataModelConditionGroup)
{
IsListGroup = isListGroup;
if (IsListGroup)
DynamicListConditionSupported = !((DataModelConditionList) dataModelConditionGroup.Parent).IsPrimitiveList;
else
DynamicListConditionSupported = false;
_profileEditorService = profileEditorService;
_dataModelConditionsVmFactory = dataModelConditionsVmFactory;
@@ -38,7 +43,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
}
public bool IsListGroup { get; }
public bool DynamicListConditionSupported { get; }
public DataModelConditionGroup DataModelConditionGroup => (DataModelConditionGroup) Model;
public bool IsRootGroup
@@ -81,8 +86,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
else
DataModelConditionGroup.AddChild(new DataModelConditionListPredicate(DataModelConditionGroup, ListRightSideType.Dynamic));
}
else if (type == "DynamicExternal" && IsListGroup)
DataModelConditionGroup.AddChild(new DataModelConditionListPredicate(DataModelConditionGroup, ListRightSideType.DynamicExternal));
else if (type == "DynamicList" && IsListGroup)
DataModelConditionGroup.AddChild(new DataModelConditionListPredicate(DataModelConditionGroup, ListRightSideType.DynamicList));
else if (type == "List" && !IsListGroup)
DataModelConditionGroup.AddChild(new DataModelConditionList(DataModelConditionGroup));
@@ -126,7 +126,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
public override void Update()
{
var listDataModelGuid = DataModelConditionListPredicate.ListDataModel.PluginInfo.Guid;
var listDataModelGuid = DataModelConditionListPredicate.DataModelConditionList.ListDataModel.PluginInfo.Guid;
if (!_isPrimitiveList)
{
LeftSideSelectionViewModel.FilterTypes = _supportedInputTypes.ToArray();
@@ -137,7 +137,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
}
var leftSideType = _isPrimitiveList
? DataModelConditionListPredicate.ListType
? DataModelConditionListPredicate.DataModelConditionList.ListType
: LeftSideSelectionViewModel.SelectedPropertyViewModel?.PropertyInfo?.PropertyType;
// Get the supported operators
@@ -148,7 +148,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
SelectedOperator = DataModelConditionListPredicate.Operator;
// Ensure the right side has the proper VM
if (DataModelConditionListPredicate.PredicateType == ListRightSideType.Dynamic || DataModelConditionListPredicate.PredicateType == ListRightSideType.DynamicExternal)
if (DataModelConditionListPredicate.PredicateType == ListRightSideType.Dynamic ||
DataModelConditionListPredicate.PredicateType == ListRightSideType.DynamicList)
{
DisposeRightSideStatic();
if (RightSideSelectionViewModel == null)
@@ -156,17 +157,25 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
RightSideSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
RightSideSelectionViewModel.ButtonBrush = (Brush) Application.Current.FindResource("PrimaryHueMidBrush");
RightSideSelectionViewModel.PropertySelected += RightSideOnPropertySelected;
if (DataModelConditionListPredicate.PredicateType == ListRightSideType.DynamicList)
RightSideSelectionViewModel.ChangeDataModel((DataModelPropertiesViewModel) GetListDataModel());
}
RightSideSelectionViewModel.FilterTypes = new[] {leftSideType};
if (DataModelConditionListPredicate.PredicateType == ListRightSideType.Dynamic)
{
RightSideSelectionViewModel.PopulateSelectedPropertyViewModel(
DataModelConditionListPredicate.RightDataModel,
DataModelConditionListPredicate.RightPropertyPath
);
}
else
{
RightSideSelectionViewModel.SelectedPropertyViewModel = RightSideSelectionViewModel.DataModelViewModel.GetChildByPath(
listDataModelGuid, DataModelConditionListPredicate.RightPropertyPath
);
}
else
RightSideSelectionViewModel.PopulateSelectedPropertyViewModel(DataModelConditionListPredicate.RightDataModel, DataModelConditionListPredicate.RightPropertyPath);
}
else
{
@@ -195,16 +204,19 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
public void ApplyRightSideDynamic()
{
if (DataModelConditionListPredicate.ListContainsInnerPath(RightSideSelectionViewModel.SelectedPropertyViewModel.PropertyPath))
DataModelConditionListPredicate.UpdateRightSideDynamic(RightSideSelectionViewModel.SelectedPropertyViewModel.PropertyPath);
else
if (DataModelConditionListPredicate.PredicateType == ListRightSideType.Dynamic)
{
DataModelConditionListPredicate.UpdateRightSideDynamic(
RightSideSelectionViewModel.SelectedPropertyViewModel.DataModel,
RightSideSelectionViewModel.SelectedPropertyViewModel.PropertyPath
);
}
else if (DataModelConditionListPredicate.PredicateType == ListRightSideType.DynamicList)
{
DataModelConditionListPredicate.UpdateRightSideDynamic(RightSideSelectionViewModel.SelectedPropertyViewModel.PropertyPath);
}
_profileEditorService.UpdateSelectedProfileElement();
Update();
}
@@ -226,13 +238,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
private DataModelVisualizationViewModel GetListDataModel()
{
if (DataModelConditionListPredicate.ListDataModel == null || DataModelConditionListPredicate.ListPropertyPath == null)
throw new ArtemisUIException("Cannot create a list predicate without first selecting a target list");
var dataModel = _dataModelUIService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule(), true);
var listDataModel = (DataModelListViewModel) dataModel.GetChildByPath(
DataModelConditionListPredicate.ListDataModel.PluginInfo.Guid,
DataModelConditionListPredicate.ListPropertyPath
DataModelConditionListPredicate.DataModelConditionList.ListDataModel.PluginInfo.Guid,
DataModelConditionListPredicate.DataModelConditionList.ListPropertyPath
);
return listDataModel.GetListTypeViewModel(_dataModelUIService);
@@ -54,13 +54,27 @@
BorderBrush="#7B7B7B"
Content="{Binding SelectedListOperator}"
Click="PropertyButton_OnClick"
HorizontalAlignment="Left">
HorizontalAlignment="Left"
ToolTip="Change the list operator, determining how the list contents should match">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Any" Command="{s:Action SelectListOperator}" CommandParameter="Any" />
<MenuItem Header="All" Command="{s:Action SelectListOperator}" CommandParameter="All" />
<MenuItem Header="None" Command="{s:Action SelectListOperator}" CommandParameter="None" />
<MenuItem Header="Count (NYI)" Command="{s:Action SelectListOperator}" CommandParameter="Count" IsEnabled="False" />
<MenuItem Header="Any"
Command="{s:Action SelectListOperator}"
CommandParameter="Any"
ToolTip="Any of the list items should evaluate to true"/>
<MenuItem Header="All"
Command="{s:Action SelectListOperator}"
CommandParameter="All"
ToolTip="All of the list items should evaluate to true"/>
<MenuItem Header="None"
Command="{s:Action SelectListOperator}"
CommandParameter="None"
ToolTip="None of the list items should evaluate to true"/>
<MenuItem Header="Count (NYI)"
Command="{s:Action SelectListOperator}"
CommandParameter="Count"
IsEnabled="False"
ToolTip="A specific amount of the list items should evaluate to true"/>
</ContextMenu>
</Button.ContextMenu>
</Button>