OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / WpfDisplay / Views / GeneratorWindow.xaml

189 lines · xaml ref:
<Window x:Class="WpfDisplay.Views.GeneratorWindow"
        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:md="http://materialdesigninxaml.net/winfx/xaml/themes"
        xmlns:local="clr-namespace:WpfDisplay.Views"
        xmlns:vm="clr-namespace:WpfDisplay.ViewModels" 
        xmlns:conv="clr-namespace:WpfDisplay.Converters"
        mc:Ignorable="d"
        TextElement.FontWeight="Regular"
        TextElement.FontSize="13"
        TextOptions.TextFormattingMode="Ideal"
        TextOptions.TextRenderingMode="Auto"
        Background="{DynamicResource MaterialDesignPaper}"
        FontFamily="{DynamicResource MaterialDesignFont}"
        Title="Generator" Height="720" Width="1280" WindowState="Maximized"
        x:Name="generatorWindow"
        d:DataContext="{d:DesignInstance Type=vm:GeneratorViewModel, IsDesignTimeCreatable=False}">
    <Window.Resources>
        <Style TargetType="CheckBox" BasedOn="{StaticResource MaterialDesignCheckBox}">
            <Setter Property="Margin" Value="4"/>
        </Style>
    </Window.Resources>
    <Window.InputBindings>
        <KeyBinding Gesture="CTRL+M" Command="{Binding PinCommand}"/>
    </Window.InputBindings>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Menu Grid.Row="0">
            <MenuItem Header="📌 Pin Main" 
                      Command="{Binding PinCommand}"
                      ToolTip="Pin the fractal that is loaded in the main window. (Ctrl+M)"/>
        </Menu>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="250"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <md:Card Grid.Column="0" Margin="8" Padding="8">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <Label Grid.Row="0">📌 Pinned fractals</Label>
                    <ScrollViewer Grid.Row="1">
                        <ItemsControl ItemsSource="{Binding PinnedIFSThumbnails}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <WrapPanel IsItemsHost="True"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Grid Width="200" Height="200">
                                        <Grid.Resources>
                                            <ImageBrush x:Key="thumbnailBrush"
                                                ImageSource="{Binding Value}"
                                                Stretch="UniformToFill">
                                                <ImageBrush.RelativeTransform>
                                                    <ScaleTransform ScaleY="-1" CenterY="0.5"/>
                                                </ImageBrush.RelativeTransform>
                                            </ImageBrush>
                                        </Grid.Resources>
                                        <Button
                                            Width="200" Height="200" Margin="4"
                                            Command="{Binding DataContext.SendToMainCommand, ElementName=generatorWindow}"
                                            CommandParameter="{Binding Key}"
                                            Background="{StaticResource thumbnailBrush}" BorderThickness="0">
                                        </Button>
                                        <Button
                                            Command="{Binding DataContext.UnpinCommand, ElementName=generatorWindow}"
                                            CommandParameter="{Binding Key}"
                                            Width="20" Height="20" FontSize="10" Margin="8"
                                            HorizontalAlignment="Left" VerticalAlignment="Bottom"
                                            Style="{StaticResource MaterialDesignFloatingActionMiniDarkButton}">🗑</Button>
                                    </Grid>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </ScrollViewer>
                </Grid>
            </md:Card>
            <Grid Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <md:Card Grid.Row="0" Margin="8" Padding="8">
                    <Grid>
                        <StackPanel>
                            <Label>🔮 Mutation options</Label>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="auto"/>
                                    <ColumnDefinition Width="auto"/>
                                    <ColumnDefinition Width="auto"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="auto"/>
                                </Grid.ColumnDefinitions>
                                <StackPanel Grid.Column="0" Margin="8">
                                    <CheckBox IsChecked="{Binding Options.MutateIterators}">Iterators</CheckBox>
                                    <CheckBox IsChecked="{Binding Options.MutateConnections}">Connections</CheckBox>
                                    <CheckBox IsChecked="{Binding Options.MutateConnectionWeights}">Weights</CheckBox>
                                </StackPanel>
                                <StackPanel Grid.Column="1" Margin="8">
                                    <CheckBox IsChecked="{Binding Options.MutatePalette}">Palette</CheckBox>
                                    <CheckBox IsChecked="{Binding Options.MutateColoring}">Coloring</CheckBox>
                                    <md:ColorZone>Dominant Color</md:ColorZone>
                                    <CheckBox IsChecked="{Binding Options.UseMixboxMixing}" 
                                              ToolTip="Use Mixbox algorithm to mix colors similar to mixing paint.">
                                        Pigment-based mixing
                                    </CheckBox>
                                </StackPanel>
                                <StackPanel Grid.Column="2" Margin="8">
                                    <CheckBox IsEnabled="False">Transforms</CheckBox>
                                    <ListBox IsEnabled="False">Transforms</ListBox>
                                    <CheckBox IsChecked="{Binding Options.MutateParameters}">Parameters</CheckBox>
                                </StackPanel>
                                <StackPanel Grid.Column="4" Margin="8">
                                    <local:ValueSlider Value="{Binding Options.MutationChance}" SliderSettings="{Binding MutationChanceSlider}"/>
                                    <local:ValueSlider Value="{Binding Options.MutationStrength}" SliderSettings="{Binding MutationStrengthSlider}"/>
                                </StackPanel>
                            </Grid>
                            <Grid HorizontalAlignment="Center">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="auto"/>
                                    <ColumnDefinition Width="auto"/>
                                </Grid.ColumnDefinitions>
                                <local:ValueSlider Grid.Column="0" Margin="8 0" Width="110" Value="{Binding Options.BatchSize}" SliderSettings="{Binding BatchSizeSlider}"/>
                                <Button VerticalAlignment="Bottom" Margin="8 0" Padding="30 0" Grid.Column="1" Command="{Binding GenerateRandomBatchCommand}">
                                    <Grid>
                                        <TextBlock HorizontalAlignment="Center" Visibility="{Binding GenerateRandomBatchCommand.IsRunning, Converter={StaticResource betterBooleanToVisibilityConverter}}">
                                            ⏳
                                        </TextBlock>
                                        <TextBlock Visibility="{Binding GenerateRandomBatchCommand.IsRunning, Converter={StaticResource invertBooleanToVisibilityConverter}}">
                                            🎲 New batch
                                        </TextBlock>
                                    </Grid>
                                </Button>
                            </Grid>
                        </StackPanel>
                    </Grid>
                </md:Card>
                <md:Card Grid.Row="1" Margin="8" Padding="8">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Label Grid.Row="0">🎰 Generated fractals</Label>
                        <ScrollViewer Grid.Row="1">
                            <ItemsControl ItemsSource="{Binding GeneratedIFSThumbnails}">
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <WrapPanel IsItemsHost="True"/>
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <Button 
                                                Width="200" Height="200" Margin="4"
                                                Command="{Binding DataContext.PinCommand, ElementName=generatorWindow}"
                                                CommandParameter="{Binding Key}" BorderThickness="0">
                                            <Button.Background>
                                                <ImageBrush 
                                                        ImageSource="{Binding Value}" 
                                                        Stretch="UniformToFill">
                                                    <ImageBrush.RelativeTransform>
                                                        <ScaleTransform ScaleY="-1" CenterY="0.5"/>
                                                    </ImageBrush.RelativeTransform>
                                                </ImageBrush>
                                            </Button.Background>
                                        </Button>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </ScrollViewer>
                    </Grid>
                </md:Card>
            </Grid>
        </Grid>
    </Grid>
</Window>