<Window x:Class="WpfDisplay.Views.EditorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:conv="clr-namespace:WpfDisplay.Converters"
xmlns:local="clr-namespace:WpfDisplay.Views"
xmlns:vm="clr-namespace:WpfDisplay.ViewModels"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
TextElement.FontWeight="Regular"
TextElement.FontSize="13"
TextOptions.TextFormattingMode="Ideal"
TextOptions.TextRenderingMode="Auto"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="{DynamicResource MaterialDesignFont}"
mc:Ignorable="d"
Title="Editor"
Width="1280" Height="720"
x:Name="editorWindow"
d:DataContext="{d:DesignInstance Type=vm:IFSViewModel}"
AllowDrop="True" DragOver="editorWindow_DragOver" Drop="editorWindow_Drop">
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Undo" Executed="Undo_Executed" CanExecute="Undo_CanExecute"/>
<CommandBinding Command="ApplicationCommands.Redo" Executed="Redo_Executed" CanExecute="Redo_CanExecute"/>
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Gesture="CTRL+P" Command="{Binding LoadPaletteCommand}"/>
<KeyBinding Gesture="CTRL+R" Command="{Binding ReloadTransformsCommand}"/>
<KeyBinding Gesture="CTRL+W" Command="{Binding SelectedIterator.FlipWeightCommand}"/>
<KeyBinding Gesture="CTRL+O" Command="{Binding SelectedIterator.FlipOpacityCommand}"/>
<KeyBinding Gesture="CTRL+D" Command="{Binding DuplicateSelectedCommand}"/>
<KeyBinding Gesture="CTRL+SHIFT+D" Command="{Binding SplitSelectedCommand}"/>
<KeyBinding Gesture="DELETE" Command="{Binding RemoveSelectedCommand}"/>
</Window.InputBindings>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Menu Grid.Row="0">
<MenuItem Header="↩️" Command="ApplicationCommands.Undo" CommandTarget="{Binding ElementName=editorWindow}" ToolTip="Undo (Ctrl+Z)" InputGestureText="Ctrl+Z"/>
<MenuItem Header="↪️" Command="ApplicationCommands.Redo" CommandTarget="{Binding ElementName=editorWindow}" ToolTip="Redo (Ctrl+Y)" InputGestureText="Ctrl+Y"/>
<Separator/>
<local:PaletteButton
Command="{Binding DataContext.OpenPaletteEditor, ElementName=editorWindow}"
GradientColors="{Binding DataContext.Palette.GradientSampleBuffer, ElementName=editorWindow}"
ToolTip="Load Palette (Ctrl+P)"
Padding="30,8,30,8">🎨</local:PaletteButton>
<MenuItem Header="🗎 🗎"
Command="{Binding DuplicateSelectedCommand}"
ToolTip="Duplicate selection (Ctrl+D)" InputGestureText="Ctrl+D"/>
<MenuItem Header="🗎|🗎"
Command="{Binding SplitSelectedCommand}"
ToolTip="Split selection (Ctrl+Shift+D)" InputGestureText="Ctrl+Shift+D"/>
</Menu>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Margin="4 0 0 0" Width="175">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Label VerticalContentAlignment="Center">Transforms</Label>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button
Command="{Binding ReloadTransformsCommand}"
ToolTip="Reload plugins (Ctrl+R)"
Style="{StaticResource MaterialDesignToolButton}">🔄</Button>
<Button
Command="{Binding OpenTransformsDirectoryCommand}"
ToolTip="Open plugin directory"
Style="{StaticResource MaterialDesignToolButton}">📂</Button>
</StackPanel>
</Grid>
<TextBox Grid.Row="1" Text="{Binding TransformSearchFilter, UpdateSourceTrigger=PropertyChanged}"
md:HintAssist.Hint="Filter by name, tags"
md:TextFieldAssist.HasClearButton="True"
md:TextFieldAssist.HasLeadingIcon="True"
md:TextFieldAssist.LeadingIcon="Search"/>
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
<StackPanel>
<ItemsControl ItemsSource="{Binding FilteredTransforms}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button x:Name="transformButton"
Style="{StaticResource MaterialDesignFlatButton }"
Command="{Binding DataContext.AddIteratorCommand, ElementName=editorWindow}"
CommandParameter="{Binding}"
HorizontalContentAlignment="Stretch" Padding="0 4">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Height="auto" IsHitTestVisible="False">
<MenuItem.Header>
<StackPanel Orientation="Vertical">
<Label FontSize="18" FontWeight="Bold" Content="{Binding Name}"/>
<ItemsControl ItemsSource="{Binding Tags}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<md:Chip Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Label FontWeight="Bold">Description</Label>
<TextBlock Text="{Binding Description}" MaxWidth="200" TextWrapping="Wrap" Margin="8 0"/>
<Label FontWeight="Bold">Include uses</Label>
<ItemsControl ItemsSource="{Binding IncludeUses}" Margin="8 0"/>
<TextBlock Margin="8 0">
<TextBlock.Visibility>
<Binding Path="IncludeUses.Count"
Converter="{StaticResource equalityToVisibilityConverter}">
<Binding.ConverterParameter>
<sys:Int32>0</sys:Int32>
</Binding.ConverterParameter>
</Binding>
</TextBlock.Visibility>
None
</TextBlock>
</StackPanel>
</MenuItem.Header>
</MenuItem>
<Separator/>
<MenuItem>
<MenuItem.Header>
<Hyperlink NavigateUri="{Binding ReferenceUrl}" ToolTip="{Binding ReferenceUrl}">ℹ️ Information...</Hyperlink>
</MenuItem.Header>
</MenuItem>
<MenuItem
Header="✏️ Edit source"
Command="{Binding DataContext.EditTransformSourceCommand, Source={x:Reference editorWindow}}"
CommandParameter="{Binding FilePath}"/>
</ContextMenu>
</Button.ContextMenu>
<Grid HorizontalAlignment="Stretch">
<Label Content="{Binding Name}" HorizontalAlignment="Center" Padding="24 4"/>
<Button Content="⋮ "
HorizontalAlignment="Right" Foreground="Gray" VerticalContentAlignment="Top">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Click">
<b:ChangePropertyAction TargetObject="{Binding ContextMenu, ElementName=transformButton}" PropertyName="PlacementTarget" Value="{Binding ElementName=transformButton, Mode=OneWay}"/>
<b:ChangePropertyAction TargetObject="{Binding ContextMenu, ElementName=transformButton}" PropertyName="IsOpen" Value="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Button.Resources>
<Style TargetType="Button" BasedOn="{StaticResource MaterialDesignToolButton}">
<Style.Triggers>
<!--Show context button on hover-->
<DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=transformButton}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=transformButton}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Resources>
</Button>
</Grid>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Separator/>
</StackPanel>
</ScrollViewer>
</Grid>
<md:Card Grid.Column="1" Margin="4" VerticalAlignment="Stretch">
<local:NodeMap DataContext="{Binding}"/>
</md:Card>
</Grid>
<md:Card Grid.Column="1" Padding="6" Margin="4" VerticalAlignment="Stretch" Width="300">
<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Visible">
<StackPanel Margin="0,0,8,0">
<Grid Visibility="{Binding IsIteratorEditorVisible}">
<local:IteratorEditor DataContext="{Binding SelectedIterator}"/>
</Grid>
<Grid Visibility="{Binding IsConnectionEditorVisible}">
<StackPanel>
<TextBlock Margin="0 8" FontWeight="Bold" Style="{DynamicResource MaterialDesignSubtitle1TextBlock}">
Selected Connection
</TextBlock>
<local:ValueSlider Value="{Binding SelectedConnection.Weight}" SliderSettings="{Binding SelectedConnection.WeightSlider}"/>
</StackPanel>
</Grid>
</StackPanel>
</ScrollViewer>
</md:Card>
</Grid>
</Grid>
</Window>