WPFWindows/NewJobWindow.xaml

<Window
        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:local="clr-namespace:PSChiaPlotter"
        Title="New Job" Height="600" Width="575">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
        <Style TargetType="Label">
            <Setter Property="HorizontalAlignment" Value="Right" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontWeight" Value="Bold" />
        </Style>
        <Style TargetType="TextBox">
            <Setter Property="Margin" Value="5" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="HorizontalContentAlignment" Value="Right"/>
        </Style>
        <Style TargetType="GroupBox">
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="BorderThickness" Value="2" />
            <Setter Property="BorderBrush" Value="ForestGreen" />
        </Style>
        <Style TargetType="ComboBox">
            <Setter Property="Margin" Value="5" />
        </Style>
        <Style TargetType="ComboBoxItem">
            <Setter Property="FontSize" Value="10"/>
            <Setter Property="Margin" Value="0" />
            <Setter Property="Padding" Value="0" />
        </Style>
        <Style x:Key="TempBusType" TargetType="TextBlock">
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <Trigger Property="Text" Value="NVMe">
                    <Setter Property="Foreground" Value="Green"/>
                </Trigger>
                <Trigger Property="Text" Value="Network">
                    <Setter Property="Foreground" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="TempMediaType" TargetType="TextBlock">
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <Trigger Property="Text" Value="SSD">
                    <Setter Property="Foreground" Value="Green" />
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="FinalBusType" TargetType="TextBlock">
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <Trigger Property="Text" Value="SATA">
                    <Setter Property="Foreground" Value="Green"/>
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="FinalMediaType" TargetType="TextBlock">
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <Trigger Property="Text" Value="HDD">
                    <Setter Property="Foreground" Value="Green" />
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="AddParamGroupbox" TargetType="GroupBox">
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="BorderThickness" Value="2" />
            <Setter Property="BorderBrush" Value="ForestGreen" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=AdditionalParametersCheckBox, Path=IsChecked}" Value="False">
                    <Setter Property="BorderThickness" Value="0" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=AdditionalParametersCheckBox, Path=IsChecked}" Value="True">
                    <Setter Property="BorderThickness" Value="2" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="5" />
            <RowDefinition Height="*" />
            <RowDefinition Height="auto" />
            <RowDefinition Height="5" />
        </Grid.RowDefinitions>
 
        <ScrollViewer x:Name="Form_ScrollViewer" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="5" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="5" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="5" />
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="5" />
                </Grid.RowDefinitions>
 
                <GroupBox Header="Plots / Parallel" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="5" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="5" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="5" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="5" />
                        </Grid.RowDefinitions>
                         
                        <Label Content="Total Plots:" Grid.Row="1" Grid.Column="1" />
                        <Label Content="Parallel Count:" Grid.Column="3" Grid.Row="1" />
                        <Label Content="Delay (minutes):" Grid.Column="3" Grid.Row="2" />
                        <Label Content="First Delay (min):" Grid.Row="2" Grid.Column="1" />
 
                        <TextBox x:Name="TotalPlots_TextBox" Grid.Row="1" Grid.Column="2" Text="{Binding Path=NewChiaJob.TotalPlotCount}" />
                        <TextBox x:Name="Parallel_TextBox" Grid.Row="1" Grid.Column="4" Text="{Binding Path=NewChiaJob.QueueCount}"/>
                        <TextBox x:Name="Delay_TextBox" Grid.Row="2" Grid.Column="4" Text="{Binding Path=NewChiaJob.DelayInMinutes}" />
                        <TextBox x:Name="FirstDelay_TextBox" Grid.Row="2" Grid.Column="2" Text="{Binding Path=NewChiaJob.FirstDelay}" />
                    </Grid>
                </GroupBox>
 
                <GroupBox Header="Plotting Parameters" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="5" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="5" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="5" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="5" />
                        </Grid.RowDefinitions>
 
                        <Label Content="K-Size: " Grid.Column="1" Grid.Row="1" />
                        <Label Content="RAM (MiB): " Grid.Column="3" Grid.Row="1" />
                        <Label Content="Threads: " Grid.Column="1" Grid.Row="2" />
 
                        <TextBox Name="KSize_TextBox" Grid.Column="2" Grid.Row="1" Margin="5" Text="{Binding Path=NewChiaJob.InitialChiaParameters.KSize}" IsReadOnly="True" VerticalAlignment="Top" />
                        <TextBox x:Name="RAM_TextBox" Grid.Row="1" Grid.Column="4" Text="{Binding Path=NewChiaJob.InitialChiaParameters.RAM}" />
                        <TextBox x:Name="Threads_TextBox" Grid.Row="2" Grid.Column="2"
                                 Text="{Binding Path=NewChiaJob.InitialChiaParameters.Threads}"/>
                        <StackPanel Orientation="Horizontal" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="2" HorizontalAlignment="Center">
                            <CheckBox Content="Disable Bitfield" IsChecked="{Binding Path=NewChiaJob.InitialChiaParameters.DisableBitField}" IsThreeState="False"
                                      HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="11"/>
                            <CheckBox Content="Exclude Final Directory" IsChecked="{Binding Path=NewChiaJob.InitialChiaParameters.ExcludeFinalDirectory}" Margin="5,0,0,0" IsThreeState="False"
                                      HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="11"/>
                        </StackPanel>
                         
                    </Grid>
                </GroupBox>
 
                <GroupBox Header="Directories" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="5" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="5" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="5" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="5" />
                        </Grid.RowDefinitions>
 
                        <Label Content="Temp Drives: " Grid.Column="1" Grid.Row="1" />
                        <Label Content="Final Drives: " Grid.Column="1" Grid.Row="4" />
                        <Label Content="Log Directory: " Grid.Column="1" Grid.Row="7" />
                        <Label Content="Added Temp Drives: " Grid.Column="1" Grid.Row="2" VerticalAlignment="Top"/>
                        <Label Content="Added Final Drives: " Grid.Column="1" Grid.Row="5" VerticalAlignment="Top"/>
 
                        <Separator Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="3" Height="1" VerticalAlignment="Center" Margin="5"/>
                        <Separator Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="6" Height="1" VerticalAlignment="Center" Margin="5"/>
 
                        <ComboBox x:Name="TempDir_ComboBox" Grid.Row="1" Grid.Column="2"
                                  ItemsSource="{Binding Path=TempAvailableVolumes}">
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="auto" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="*" />
                                        </Grid.RowDefinitions>
 
                                        <StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="0">
                                            <TextBlock Text="{Binding Path=DriveLetter, StringFormat={}{0} - }" VerticalAlignment="Center" FontWeight="Bold" Margin="5,0,0,0"/>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1">
                                            <Label Content="MediaType:" VerticalAlignment="Center" FontWeight="Normal"/>
                                            <TextBlock Text="{Binding Path=MediaType}" Style="{StaticResource TempMediaType}"/>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="2">
                                            <Label Content="BuyType:" VerticalAlignment="Center" FontWeight="Normal"/>
                                            <TextBlock Text="{Binding Path=BusType}" Style="{StaticResource TempBusType}" />
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="3">
                                            <Label Content="Max Parallel: " VerticalAlignment="Center" FontWeight="Normal"/>
                                            <TextBlock Text="{Binding Path=MaxConCurrentTempChiaRuns}" VerticalAlignment="Center"/>
                                        </StackPanel>
                                    </Grid>
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>
                        <ComboBox x:Name="FinalDir_ComboBox" Grid.Row="4" Grid.Column="2"
                                  ItemsSource="{Binding Path=FinalAvailableVolumes}">
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="auto" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="*" />
                                        </Grid.RowDefinitions>
 
                                        <StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="0">
                                            <TextBlock Text="{Binding Path=DriveLetter, StringFormat={}{0} - }" VerticalAlignment="Center" FontWeight="Bold" Margin="5,0,0,0"/>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1">
                                            <Label Content="MediaType:" VerticalAlignment="Center" FontWeight="Normal"/>
                                            <TextBlock Text="{Binding Path=MediaType}" Style="{StaticResource FinalMediaType}"/>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="2">
                                            <Label Content="BuyType:" VerticalAlignment="Center" FontWeight="Normal"/>
                                            <TextBlock Text="{Binding Path=BusType}" Style="{StaticResource FinalBusType}" />
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="3">
                                            <Label Content="Potential Plots: " VerticalAlignment="Center" FontWeight="Normal"/>
                                            <TextBlock Text="{Binding Path=PotentialFinalPlotsRemaining}" VerticalAlignment="Center"/>
                                        </StackPanel>
                                    </Grid>
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>
                        <TextBox x:Name="LogDir_TextBox" Grid.Row="7" Grid.Column="2" Text="{Binding Path=NewChiaJob.InitialChiaParameters.LogDirectory}" HorizontalContentAlignment="Left"/>
 
                        <Button x:Name="TempDriveAdd_Button" Content="Add"
                                Grid.Column="3" Grid.Row="1" VerticalAlignment="Center"
                                Padding="5,2,5,2" Margin="0,0,0,0"
                                CommandParameter="{Binding ElementName=TempDir_ComboBox, Path=SelectedItem}"
                                Command="{Binding Path=AddTempVolumeCommand}"/>
                        <Button x:Name="FinalDir_Button" Content="Add" Grid.Column="3" Grid.Row="4"
                                Padding="5,2,5,2" Margin="0,0,5,0" VerticalAlignment="Center"
                                CommandParameter="{Binding ElementName=FinalDir_ComboBox, Path=SelectedItem}"
                                Command="{Binding Path=AddFinalVolumeCommand}"/>
                        <Button x:Name="LogDir_Button" Content="..." Grid.Column="3" Grid.Row="7" Padding="2,0,2,0" Margin="0,5,0,5" VerticalAlignment="Center"/>
 
                        <ListBox x:Name="TempVolume_ListBox"
                                 Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" ItemsSource="{Binding Path=NewChiaJob.TempVolumes}"
                                 Margin="5" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <Border BorderBrush="SlateGray" BorderThickness="1">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="1" />
                                                <ColumnDefinition Width="auto" />
                                                <ColumnDefinition Width="auto" />
                                                <ColumnDefinition Width="*" />
                                                <ColumnDefinition Width="auto" />
                                                <ColumnDefinition Width="1" />
                                            </Grid.ColumnDefinitions>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="1" />
                                                <RowDefinition Height="*" />
                                                <RowDefinition Height="1" />
                                            </Grid.RowDefinitions>
                                            <Label Content="{Binding Path=DriveLetter}"
                                                   Grid.Row="1" Grid.Column="1"
                                                   Margin="5" FontSize="11" FontWeight="Bold"
                                                   VerticalAlignment="Center" HorizontalAlignment="Center" BorderThickness="1"
                                                   BorderBrush="Black" Foreground="DarkBlue" ToolTip="Drive Letter"/>
                                            <Label Content="Path: " Grid.Row="1" Grid.Column="2" />
                                            <TextBox x:Name="Path_TextBox" Grid.Row="1" Grid.Column="3" Text="{Binding Path=DirectoryPath}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"/>
                                            <Button Content="Remove" Grid.Column="4" Grid.Row="1" BorderThickness="1" Background="Transparent" BorderBrush="Pink" Foreground="Red" Margin="5"
                                                CommandParameter="{Binding}" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, Path=DataContext.RemoveTempVolumeCommand}"/>
                                        </Grid>
                                    </Border>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
 
                        <ListBox x:Name="FinalVolume_ListBox"
                                 Grid.Row="5" Grid.Column="2" Grid.ColumnSpan="2" ItemsSource="{Binding Path=NewChiaJob.FinalVolumes}"
                                 Margin="5" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <Border BorderBrush="SlateGray" BorderThickness="1">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="1" />
                                                <ColumnDefinition Width="auto" />
                                                <ColumnDefinition Width="auto" />
                                                <ColumnDefinition Width="*" />
                                                <ColumnDefinition Width="auto" />
                                                <ColumnDefinition Width="1" />
                                            </Grid.ColumnDefinitions>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="1" />
                                                <RowDefinition Height="*" />
                                                <RowDefinition Height="1" />
                                            </Grid.RowDefinitions>
                                            <Label Content="{Binding Path=DriveLetter}"
                                                   Grid.Row="1" Grid.Column="1"
                                                   Margin="5" FontSize="10" FontWeight="Bold"
                                                   VerticalAlignment="Center" HorizontalAlignment="Center" BorderThickness="1"
                                                   BorderBrush="Black" Foreground="DarkBlue" ToolTip="Drive Letter"/>
                                            <Label Content="Path: " Grid.Row="1" Grid.Column="2" />
                                            <TextBox x:Name="FinalPath_TextBox" Grid.Row="1" Grid.Column="3" Text="{Binding Path=DirectoryPath}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"/>
                                            <Button Content="Remove" Grid.Column="4" Grid.Row="1" BorderThickness="1" Background="Transparent" BorderBrush="Pink" Foreground="Red" Margin="5"
                                                CommandParameter="{Binding}" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, Path=DataContext.RemoveFinalVolumeCommand}"/>
                                        </Grid>
                                    </Border>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </Grid>
                </GroupBox>
                <GroupBox Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" Style="{StaticResource AddParamGroupbox}">
                    <GroupBox.Header>
                        <CheckBox x:Name="AdditionalParametersCheckBox" Content="Additional Parameters" IsChecked="False" IsThreeState="False" />
                    </GroupBox.Header>
                    <Grid IsEnabled="{Binding ElementName=AdditionalParametersCheckBox, Path=IsChecked}" Visibility="{Binding ElementName=AdditionalParametersCheckBox, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="5" />
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="5" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="5" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="5" />
                        </Grid.RowDefinitions>
 
                        <Label Content="Pool Public Key:" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="1" />
                        <Label Content="Farmer Public Key:" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="2" />
 
                        <TextBox x:Name="PoolPublicKeyTextBox" Grid.Row="1" Grid.Column="2" Text="{Binding Path=NewChiaJob.InitialChiaParameters.PoolPublicKey}" VerticalAlignment="Center" HorizontalContentAlignment="Left"/>
                        <TextBox x:Name="FarmerPublicKeyTextBox" Grid.Row="2" Grid.Column="2" Text="{Binding Path=NewChiaJob.InitialChiaParameters.FarmerPublicKey}" VerticalAlignment="Center" HorizontalContentAlignment="Left"/>
 
                    </Grid>
                </GroupBox>
            </Grid>
        </ScrollViewer>
        <Button x:Name="CreateJob_Button" Content="Start Job" Grid.Column="2" Grid.Row="2" Margin="5"/>
        <Button x:Name="CancelJobCreation_Button" Content="Cancel" Grid.Column="1" Grid.Row="2" Margin="5" />
    </Grid>
</Window>