mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 20:06:33 +00:00
Profile editor - Re-implemented LED dimming Profile editor - Hide layer bounds of unselected layers Profile editor - Dim layer shapes of unselected layers (option to hide them NYI) Profile editor - Disable edit tool when no layer is selected or the selected layer has no LEDs Gradient picker - Fixed the preview being at a slight angle Color brush - Fixed the gradient being at a 45 degree angle Settings - Added color scheme option to manually switch between light and dark
211 lines
12 KiB
XML
211 lines
12 KiB
XML
<UserControl x:Class="Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.LayerPropertiesView"
|
|
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.LayerProperties"
|
|
xmlns:s="https://github.com/canton7/Stylet"
|
|
xmlns:timeline="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline"
|
|
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
|
xmlns:behaviors="clr-namespace:Artemis.UI.Behaviors"
|
|
mc:Ignorable="d"
|
|
d:DesignHeight="450"
|
|
d:DesignWidth="800"
|
|
d:DataContext="{d:DesignInstance local:LayerPropertiesViewModel}"
|
|
behaviors:InputBindingBehavior.PropagateInputBindingsToWindow="True">
|
|
<UserControl.InputBindings>
|
|
<KeyBinding Command="{s:Action Play}" Key="Space" />
|
|
<KeyBinding Command="{s:Action PlayFromStart}" Modifiers="Shift" Key="Space" />
|
|
</UserControl.InputBindings>
|
|
<UserControl.Resources>
|
|
<s:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
|
|
<Style x:Key="SVStyle" TargetType="{x:Type ScrollViewer}">
|
|
<Setter Property="OverridesDefaultStyle" Value="True" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="{x:Type ScrollViewer}">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
<ScrollContentPresenter Grid.ColumnSpan="2" Grid.RowSpan="2" />
|
|
<ScrollBar Name="PART_VerticalScrollBar"
|
|
HorizontalAlignment="Right"
|
|
Opacity="0.5"
|
|
Grid.Column="1"
|
|
Value="{TemplateBinding VerticalOffset}"
|
|
Maximum="{TemplateBinding ScrollableHeight}"
|
|
ViewportSize="{TemplateBinding ViewportHeight}"
|
|
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
|
|
<ScrollBar Name="PART_HorizontalScrollBar"
|
|
VerticalAlignment="Bottom"
|
|
Orientation="Horizontal"
|
|
Opacity="0.5"
|
|
Grid.Row="1"
|
|
Value="{TemplateBinding HorizontalOffset}"
|
|
Maximum="{TemplateBinding ScrollableWidth}"
|
|
ViewportSize="{TemplateBinding ViewportWidth}"
|
|
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
|
|
</Grid>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
</UserControl.Resources>
|
|
<Grid x:Name="ContainerGrid">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition />
|
|
<ColumnDefinition />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<!-- Left side -->
|
|
<Grid Grid.Column="0">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="56" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Misc controls & time display -->
|
|
<DockPanel Grid.Row="0" VerticalAlignment="Center">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Button Style="{StaticResource MaterialDesignIconForegroundButton}"
|
|
ToolTip="Play from start (Shift+Space)" Command="{s:Action PlayFromStart}"
|
|
Focusable="False">
|
|
<materialDesign:PackIcon Kind="StepForward" />
|
|
</Button>
|
|
<Button Style="{StaticResource MaterialDesignIconForegroundButton}"
|
|
ToolTip="Toggle play/pause (Space)" Command="{s:Action Play}" Focusable="False">
|
|
<StackPanel>
|
|
<materialDesign:PackIcon Kind="Play"
|
|
Visibility="{Binding Playing, Converter={x:Static s:BoolToVisibilityConverter.InverseInstance}, Mode=OneWay}" />
|
|
<materialDesign:PackIcon Kind="Pause"
|
|
Visibility="{Binding Playing, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button Style="{StaticResource MaterialDesignIconForegroundButton}" ToolTip="Go to start"
|
|
Command="{s:Action GoToStart}" Focusable="False">
|
|
<materialDesign:PackIcon Kind="SkipBackward" />
|
|
</Button>
|
|
<Button Style="{StaticResource MaterialDesignIconForegroundButton}" ToolTip="Go to end"
|
|
Command="{s:Action GoToEnd}" Focusable="False">
|
|
<materialDesign:PackIcon Kind="SkipForward" />
|
|
</Button>
|
|
<Button Style="{StaticResource MaterialDesignIconForegroundButton}" ToolTip="Previous frame"
|
|
Command="{s:Action GoToPreviousFrame}" Focusable="False">
|
|
<materialDesign:PackIcon Kind="SkipPrevious" />
|
|
</Button>
|
|
<Button Style="{StaticResource MaterialDesignIconForegroundButton}" ToolTip="Next frame"
|
|
Command="{s:Action GoToNextFrame}" Focusable="False">
|
|
<materialDesign:PackIcon Kind="SkipNext" />
|
|
</Button>
|
|
<ToggleButton Style="{StaticResource MaterialDesignFlatToggleButton}"
|
|
ToolTip="Repeat after last keyframe"
|
|
IsChecked="{Binding RepeatAfterLastKeyframe}"
|
|
Focusable="False">
|
|
<materialDesign:PackIcon Kind="Repeat" Height="24" Width="24" />
|
|
</ToggleButton>
|
|
</StackPanel>
|
|
<StackPanel VerticalAlignment="Center">
|
|
<TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}"
|
|
Text="{Binding FormattedCurrentTime}" HorizontalAlignment="Right" Margin="0 0 20 0" />
|
|
</StackPanel>
|
|
</DockPanel>
|
|
|
|
<!-- Properties tree -->
|
|
<materialDesign:DialogHost Identifier="PropertyTreeDialogHost" DialogTheme="Inherit" CloseOnClickAway="True" Grid.Row="1">
|
|
<ScrollViewer x:Name="PropertyTreeScrollViewer"
|
|
HorizontalScrollBarVisibility="Hidden"
|
|
VerticalScrollBarVisibility="Hidden"
|
|
ScrollChanged="TimelineScrollChanged">
|
|
<Border BorderThickness="0,0,1,0" BorderBrush="{DynamicResource MaterialDesignDivider}">
|
|
<ContentControl s:View.Model="{Binding PropertyTree}" />
|
|
</Border>
|
|
</ScrollViewer>
|
|
</materialDesign:DialogHost>
|
|
</Grid>
|
|
|
|
<!-- Right side -->
|
|
<Grid Grid.Column="1">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="56" />
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Timeline header -->
|
|
<ScrollViewer Grid.Row="0" x:Name="TimelineHeaderScrollViewer" HorizontalScrollBarVisibility="Hidden"
|
|
VerticalScrollBarVisibility="Hidden" ScrollChanged="TimelineScrollChanged">
|
|
<Grid Background="{DynamicResource MaterialDesignCardBackground}">
|
|
<!-- Caret -->
|
|
<Canvas ZIndex="1"
|
|
Margin="{Binding TimeCaretPosition}"
|
|
Cursor="SizeWE"
|
|
MouseDown="{s:Action TimelineMouseDown}"
|
|
MouseUp="{s:Action TimelineMouseUp}"
|
|
MouseMove="{s:Action TimelineMouseMove}">
|
|
<Polygon Points="-10,0 0,20, 10,00" Fill="{StaticResource SecondaryAccentBrush}" />
|
|
<Line X1="0" X2="0" Y1="0" Y2="{Binding ActualHeight, ElementName=ContainerGrid}"
|
|
StrokeThickness="2" Stroke="{StaticResource SecondaryAccentBrush}" />
|
|
</Canvas>
|
|
<!-- Time -->
|
|
<timeline:PropertyTimelineHeader Margin="0 25 0 0"
|
|
Fill="{DynamicResource MaterialDesignBody}"
|
|
PixelsPerSecond="{Binding PixelsPerSecond}"
|
|
HorizontalOffset="{Binding ContentHorizontalOffset, ElementName=TimelineHeaderScrollViewer}"
|
|
VisibleWidth="{Binding ActualWidth, ElementName=TimelineHeaderScrollViewer}"
|
|
Width="{Binding ActualWidth, ElementName=PropertyTimeLine}" />
|
|
</Grid>
|
|
</ScrollViewer>
|
|
|
|
<!-- Timeline rails -->
|
|
<ScrollViewer x:Name="TimelineRailsScrollViewer"
|
|
Grid.Row="1"
|
|
Style="{StaticResource SVStyle}"
|
|
HorizontalScrollBarVisibility="Auto"
|
|
VerticalScrollBarVisibility="Auto"
|
|
ScrollChanged="TimelineScrollChanged">
|
|
<Grid>
|
|
<Canvas ZIndex="1"
|
|
Margin="{Binding TimeCaretPosition}"
|
|
Cursor="SizeWE"
|
|
MouseDown="{s:Action TimelineMouseDown}"
|
|
MouseUp="{s:Action TimelineMouseUp}"
|
|
MouseMove="{s:Action TimelineMouseMove}">
|
|
<Line X1="0" X2="0" Y1="0" Y2="{Binding ActualHeight, ElementName=ContainerGrid}"
|
|
StrokeThickness="2" Stroke="{StaticResource SecondaryAccentBrush}" />
|
|
</Canvas>
|
|
<ContentControl x:Name="PropertyTimeLine" s:View.Model="{Binding PropertyTimeline}" />
|
|
</Grid>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
|
|
<!-- Bottom row, a bit hacky but has a ZIndex of 2 to cut off the time caret that overlaps the entire timeline -->
|
|
<StackPanel Grid.Row="1"
|
|
Grid.ColumnSpan="2"
|
|
Grid.Column="0"
|
|
HorizontalAlignment="Stretch"
|
|
ZIndex="2"
|
|
Background="{DynamicResource MaterialDesignCardBackground}">
|
|
<!-- Zoom control -->
|
|
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
|
|
<TextBlock Text="{Binding PixelsPerSecond}" VerticalAlignment="Center" />
|
|
<Slider Orientation="Horizontal"
|
|
HorizontalAlignment="Right"
|
|
Margin="10"
|
|
Minimum="31"
|
|
Maximum="350"
|
|
Value="{Binding PixelsPerSecond}"
|
|
Width="319" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Grid>
|
|
</UserControl> |