1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Display conditions - Added (empty) VMs and test views

This commit is contained in:
Robert 2020-07-01 19:38:20 +02:00
parent 2154822ce6
commit d0781c00ef
11 changed files with 340 additions and 33 deletions

View File

@ -0,0 +1,40 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Artemis.UI.ResourceDictionaries">
<Style x:Key="DisplayConditionButton" TargetType="{x:Type Button}" BasedOn="{StaticResource MaterialDesignFlatAccentBgButton}">
<Setter Property="Margin" Value="2 0" />
<Setter Property="Padding" Value="6 4" />
<Setter Property="Height" Value="22" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryHueMidForegroundBrush}" />
<Setter Property="FontSize" Value="12" />
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
<Style x:Key="DisplayConditionButtonLeftClickMenu" TargetType="{x:Type Button}" BasedOn="{StaticResource DisplayConditionButton}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>

View File

@ -0,0 +1,16 @@
using Stylet;
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract
{
public abstract class DisplayConditionViewModel : PropertyChangedBase
{
protected DisplayConditionViewModel()
{
Children = new BindableCollection<DisplayConditionViewModel>();
}
public BindableCollection<DisplayConditionViewModel> Children { get; }
public abstract void Update();
}
}

View File

@ -0,0 +1,69 @@
<UserControl x:Class="Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.DisplayConditionGroupView"
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.Module.ProfileEditor.DisplayConditions"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:s="https://github.com/canton7/Stylet"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance Type=local:DisplayConditionGroupViewModel, IsDesignTimeCreatable=False}">
<UserControl.Resources>
<ResourceDictionary Source="pack://application:,,,/Artemis.UI;component/ResourceDictionaries/DisplayConditions.xaml" />
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Row="0"
Grid.Column="0"
Style="{StaticResource MaterialDesignIconForegroundButton}"
HorizontalAlignment="Left"
Visibility="{Binding IsRootGroup, Converter={x:Static s:BoolToVisibilityConverter.InverseInstance}, Mode=OneWay}"
Width="25"
Height="25"
Foreground="#E74C4C">
<materialDesign:PackIcon Kind="Close" Width="18" Height="18" />
</Button>
<Button Grid.Row="0"
Grid.Column="1"
Style="{StaticResource DisplayConditionButtonLeftClickMenu}"
Background="#E74C4C"
BorderBrush="#E74C4C"
Margin="3 1">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="And" />
<MenuItem Header="Or" />
<MenuItem Header="And not" />
<MenuItem Header="Or not" />
</ContextMenu>
</Button.ContextMenu>
Or
</Button>
<Button Grid.Row="0"
Grid.Column="2"
Style="{StaticResource MaterialDesignIconForegroundButton}"
HorizontalAlignment="Left"
Foreground="#4CE758"
Width="25"
Height="25">
<materialDesign:PackIcon Kind="Add" Width="18" Height="18" />
</Button>
<ItemsControl Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding Children}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl s:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" IsTabStop="False" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>

View File

@ -0,0 +1,24 @@
using Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract;
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
{
public class DisplayConditionGroupViewModel : DisplayConditionViewModel
{
private bool _isRootGroup;
public bool IsRootGroup
{
get => _isRootGroup;
set => SetAndNotify(ref _isRootGroup, value);
}
public DisplayConditionGroupViewModel()
{
}
public override void Update()
{
}
}
}

View File

@ -0,0 +1,131 @@
<UserControl x:Class="Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.DisplayConditionPredicateView"
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.Module.ProfileEditor.DisplayConditions"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance Type=local:DisplayConditionPredicateViewModel, IsDesignTimeCreatable=False}">
<UserControl.Resources>
<ResourceDictionary Source="pack://application:,,,/Artemis.UI;component/ResourceDictionaries/DisplayConditions.xaml" />
</UserControl.Resources>
<Grid Margin="0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Grid.Row="0"
Grid.Column="0"
Style="{StaticResource MaterialDesignIconForegroundButton}"
HorizontalAlignment="Left"
Foreground="#E74C4C"
Width="25"
Height="25">
<materialDesign:PackIcon Kind="Close" Width="18" Height="18" />
</Button>
<Button Grid.Row="0"
Grid.Column="1"
Style="{StaticResource DisplayConditionButtonLeftClickMenu}"
Background="{DynamicResource SecondaryAccentBrush}"
BorderBrush="{DynamicResource SecondaryAccentBrush}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Equals">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="Equal" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Does not equal">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="NotEqualVariant" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Contains">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="Contain" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Starts with">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="ContainStart" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Ends with">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="ContainEnd" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Does not contain">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="FormatStrikethrough" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Is null">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="Null" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
Category
</Button>
<Button Grid.Row="0"
Grid.Column="2"
Style="{StaticResource DisplayConditionButtonLeftClickMenu}"
Background="#7B7B7B"
BorderBrush="#7B7B7B">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Equals">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="Equal" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Does not equal">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="NotEqualVariant" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Is less than">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="LessThan" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Is greater than">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="GreaterThan" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Is less than or equal to">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="LessThanOrEqual" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Is greater than or equal to">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="GreaterThanOrEqual" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Is null">
<MenuItem.Icon>
<materialDesign:PackIcon Kind="Null" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
Equals
</Button>
<Button Grid.Row="0"
Grid.Column="3"
Style="{StaticResource DisplayConditionButton}"
Background="{DynamicResource PrimaryHueMidBrush}"
BorderBrush="{DynamicResource PrimaryHueMidBrush}">
Video Players
</Button>
</Grid>
</UserControl>

View File

@ -0,0 +1,16 @@
using Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract;
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
{
public class DisplayConditionPredicateViewModel : DisplayConditionViewModel
{
public DisplayConditionPredicateViewModel()
{
}
public override void Update()
{
}
}
}

View File

@ -1,10 +0,0 @@
<UserControl x:Class="Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.DisplayConditionView"
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.Module.ProfileEditor.DisplayConditions"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid />
</UserControl>

View File

@ -1,6 +0,0 @@
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
{
public class DisplayConditionViewModel
{
}
}

View File

@ -5,25 +5,31 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions" xmlns:local="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:s="https://github.com/canton7/Stylet"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"> d:DesignHeight="450" d:DesignWidth="800">
<Grid> <Grid>
<StackPanel> <Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource MaterialDesignSubtitle1TextBlock}" Margin="10 5 0 -4"> <TextBlock Style="{StaticResource MaterialDesignSubtitle1TextBlock}" Margin="10 5 0 -4">
Display conditions Display conditions
</TextBlock> </TextBlock>
<Separator Style="{StaticResource MaterialDesignDarkSeparator}" Margin="8 0" /> <Separator Grid.Row="1" Style="{StaticResource MaterialDesignDarkSeparator}" Margin="8 0" />
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="16"> <Grid Grid.Row="2">
<materialDesign:PackIcon Kind="CodeNotEqual" Width="80" Height="80" HorizontalAlignment="Center" /> <ScrollViewer Margin="8" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" TextWrapping="Wrap" HorizontalAlignment="Center" Margin="0 15"> <ContentControl s:View.Model="{Binding RootGroup}" />
Conditions are not yet implemented </ScrollViewer>
</TextBlock> </Grid>
<TextBlock Style="{StaticResource MaterialDesignCaptionTextBlock}" TextWrapping="Wrap" HorizontalAlignment="Center">
Conditions will allow you to easily configure when a layer should be shown.<LineBreak /><LineBreak /> <StackPanel Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Right" Orientation="Horizontal">
You'll also use this to set up how a layer reacts to its conditions being matched, like play the timeline once or keep repeating the timeline until the conditions are no longer matched. <TextBlock Margin="10 0" VerticalAlignment="Center">Disabled</TextBlock>
</TextBlock> <ToggleButton Style="{StaticResource MaterialDesignSwitchToggleButton}" ToolTip="Default ToggleButton Style" />
</StackPanel> <TextBlock Margin="10 0 15 0" VerticalAlignment="Center">Enabled</TextBlock>
</StackPanel> </StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -1,6 +1,27 @@
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions using Stylet;
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
{ {
public class DisplayConditionsViewModel : ProfileEditorPanelViewModel public class DisplayConditionsViewModel : ProfileEditorPanelViewModel
{ {
private DisplayConditionGroupViewModel _rootGroup;
public DisplayConditionGroupViewModel RootGroup
{
get => _rootGroup;
set => SetAndNotify(ref _rootGroup, value);
}
public DisplayConditionsViewModel()
{
RootGroup = new DisplayConditionGroupViewModel {IsRootGroup = true};
var subGroup = new DisplayConditionGroupViewModel();
RootGroup.Children.Add(new DisplayConditionPredicateViewModel());
RootGroup.Children.Add(new DisplayConditionPredicateViewModel());
RootGroup.Children.Add(subGroup);
subGroup.Children.Add(new DisplayConditionPredicateViewModel());
subGroup.Children.Add(new DisplayConditionPredicateViewModel());
}
} }
} }

View File

@ -29,7 +29,7 @@ namespace Artemis.Plugins.Modules.General
public List<PlayerInfo> PlayerInfosList { get; set; } public List<PlayerInfo> PlayerInfosList { get; set; }
} }
public class PlayerInfo : DataModel public class PlayerInfo
{ {
[DataModelProperty(Name = "A test string", Description = "This is a test string that's not of any use outside testing!")] [DataModelProperty(Name = "A test string", Description = "This is a test string that's not of any use outside testing!")]
public string TestString { get; set; } public string TestString { get; set; }