OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / WpfDisplay / Views / EditorWindow.xaml

208 lines · xaml ref:
<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>