<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>