mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-11 11:26:27 +00:00
Conditions - Finished list support
This commit is contained in:
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));
|
||||
|
||||
|
||||
+23
-14
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user