<UserControl  x:Class="HandBrakeWPF.Views.OptionsView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cal="http://www.caliburnproject.org"
              xmlns:Options="clr-namespace:HandBrakeWPF.Converters.Options"
              xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" xmlns:local="clr-namespace:HandBrakeWPF.Model"
              xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"
              Style="{StaticResource whiteUserControlStyle}">

    <UserControl.Resources>
        <Style TargetType="Button">
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Padding" Value="5,1" />
            <Setter Property="FontSize" Value="11.5" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="MinHeight" Value="22" />
        </Style>

        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="0,0,5,0" />
        </Style>

        <Style TargetType="TextBox">
            <Setter Property="Padding" Value="5,2" />
            <Setter Property="MinHeight" Value="22" />
        </Style>

        <Style TargetType="CheckBox">
            <Setter Property="Margin" Value="0,0,0,5" />
        </Style>

        <Style TargetType="ListBoxItem">
            <Setter Property="Padding" Value="8,4" />
        </Style>

        <Options:OptionsTabConverter x:Key="tabConverter" />
        <Options:OptionsTabNameConverter x:Key="tabNameConverter" />
        <Converters:EnumComboConverter x:Key="enumComboConverter" />

        <Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />

        <ObjectDataProvider MethodName="GetValues"
                        ObjectType="{x:Type local:OptionsTab}"
                        x:Key="OptionTabsList">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:OptionsTab" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </UserControl.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="150" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <StackPanel Orientation="Vertical" Grid.Column="0" Margin="10,10,0,0">
            <Border BorderThickness="0 0 0 1" BorderBrush="LightGray" Margin="0,0,0,10">
                <TextBlock Text="Preferences" FontSize="16" />
            </Border>

            <ListBox ItemsSource="{Binding Source={StaticResource OptionTabsList}}" SelectedItem="{Binding SelectedTab}"
                     BorderThickness="0" Background="Transparent">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Converter={StaticResource tabNameConverter}}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

        </StackPanel>

        <ScrollViewer Grid.Column="1">
            <StackPanel Orientation="Vertical">

                <StackPanel Name="General" Orientation="Vertical" Margin="10,10,0,0"
                            Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.General}}">

                    <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
                        <TextBlock Text="General" FontSize="16" />
                    </Border>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">

                        <TextBlock Text="On Startup" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">
                            <CheckBox Content="Check for Updates" IsChecked="{Binding CheckForUpdates}" />
                            <ComboBox Name="checkForUpdateFrequency" ItemsSource="{Binding CheckForUpdatesFrequencies}" SelectedIndex="{Binding CheckForUpdatesFrequency}" Margin="25,0,0,5" HorizontalAlignment="Left" Width="120"></ComboBox>
                        </StackPanel>
                    </StackPanel>

                    <StackPanel Orientation="Vertical" Margin="0,0,0,20">
                        <TextBlock Text="When Done" Grid.Column="0" FontSize="14" Margin="0,0,0,10" />

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">
                            <StackPanel Orientation="Horizontal">
                                <ComboBox Name="whenDone" ItemsSource="{Binding WhenDoneOptions}" SelectedItem="{Binding WhenDone}" Width="120"  HorizontalAlignment="Left" />

                            </StackPanel>

                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0">
                                <CheckBox Content="Reset to 'Do nothing' when the app is re-launched." VerticalAlignment="Center" IsChecked="{Binding ResetWhenDoneAction}" />
                            </StackPanel>

                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0" Visibility="Collapsed">
                                <CheckBox Content="Growl after Queue Completes" IsChecked="{Binding GrowlAfterEncode}" Margin="0,0,5,0"/>
                                <CheckBox Content="Growl after Encode Completes" IsChecked="{Binding GrowlAfterQueue}" />
                            </StackPanel>

                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0">
                                <CheckBox Content="Send file to:" VerticalAlignment="Center" IsChecked="{Binding SendFileAfterEncode}" />
                                <TextBlock Margin="5,0,5,5" VerticalAlignment="Center" Text="{Binding SendFileTo}" />
                                <Button Content="Browse" cal:Message.Attach="[Event Click] = [Action BrowseSendFileTo]" />
                            </StackPanel>

                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0">
                                <TextBlock VerticalAlignment="Center"  Margin="25,0,5,0" Text="Arguments:" />
                                <TextBox Name="SendToArguments" Text="{Binding Arguments}" Width="250" />
                            </StackPanel>

                        </StackPanel>
                    </StackPanel>

                    <StackPanel Orientation="Vertical" Margin="0,0,0,20">

                        <TextBlock Text="Path to VLC Player" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">

                            <StackPanel Orientation="Horizontal">
                                <TextBlock VerticalAlignment="Center" Text="Path:" />
                                <TextBox Name="vlcPath" Text="{Binding VLCPath}"  Width="250" />
                                <Button Content="Browse" cal:Message.Attach="[Event Click] = [Action BrowseVlcPath]" Margin="5,0,0,0" />
                            </StackPanel>
                            <TextBlock Margin="30,0,0,0" Text="This path is used for the video preview feature only." />

                        </StackPanel>
                    </StackPanel>


                    <StackPanel Orientation="Vertical" Margin="0,0,0,20">

                        <TextBlock Text="User Interface" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">

                            <CheckBox Content="Always use System Colours (Requires Restart)"
                                      ToolTip="Note: This option will always be on for systems with a High Contrast Theme selected." IsChecked="{Binding UseSystemColoursForStylesForStyles}" />
                            <CheckBox Content="Minimize to system tray (Requires Restart)" IsChecked="{Binding MinimiseToTray}" />
                            <CheckBox Content="Disable preset update notification on startup" IsChecked="{Binding DisablePresetUpdateCheckNotification}" />
                            <CheckBox Content="Always clear completed queue items after an encode completes" IsChecked="{Binding ClearQueueOnEncodeCompleted}" />
                            <CheckBox Content="Show Advanced Encoder Options Tab" IsChecked="{Binding ShowAdvancedTab}" />
                        </StackPanel>
                    </StackPanel>
                </StackPanel>

                <StackPanel Name="Output" Orientation="Vertical" Margin="10,10,0,0"
                            Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.OutputFiles}}">

                    <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
                        <TextBlock Text="Output Files" FontSize="16" />
                    </Border>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">

                        <TextBlock Text="Automatic File Naming" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">
                            <CheckBox Content="Automatically name output files" IsChecked="{Binding AutomaticallyNameFiles}" />

                            <Grid Margin="0,5,0,0">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                
                                <TextBlock VerticalAlignment="Center" Text="Default Path: " Grid.Column="0" Grid.Row="0" />
                                <TextBox Name="autoNameOutputPath" Text="{Binding AutoNameDefaultPath}" Width="380" Grid.Column="1" Grid.Row="0" 
                                         ToolTip="{x:Static Properties:Resources.Options_DefaultPathAdditionalParams}" Style="{StaticResource LongToolTipHolder}"  />
                                <Button Content="Browse" Margin="5,0,0,0" Grid.Column="2" Grid.Row="0" 
                                        cal:Message.Attach="[Event Click] = [Action BrowseAutoNamePath]" />

                                <TextBlock VerticalAlignment="Center" Text="Format:"  Grid.Column="0" Grid.Row="1" Margin="0,5,0,0" />
                                <TextBox Name="autoNameFormat" Text="{Binding AutonameFormat}" Width="380"  Grid.Column="1" Grid.Row="1"  Margin="0,5,0,0"
                                         ToolTip="{x:Static Properties:Resources.Options_AdditionalFormatOptions}"  Style="{StaticResource LongToolTipHolder}" />
                            </Grid>

                            <StackPanel Orientation="Vertical" Margin="0,15,0,0">
                                <CheckBox Content="Change case to Title Case" IsChecked="{Binding ChangeToTitleCase}" />
                                <CheckBox Content="Replace underscores with a space" IsChecked="{Binding RemoveUnderscores}"/>
                                <CheckBox Content="Remove common punctuation" ToolTip="Dash (-), Period (.) and Comma (,) " IsChecked="{Binding RemovePunctuation}"  />
                            </StackPanel>

                            <StackPanel Orientation="Horizontal" Margin="0,15,0,0">
                                <TextBlock VerticalAlignment="Center" Text="MP4 File Extension:" />
                                <ComboBox Name="mp4FileExtension" Width="120" ItemsSource="{Binding Mp4ExtensionOptions}" SelectedIndex="{Binding SelectedMp4Extension}" HorizontalAlignment="Left" />
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </StackPanel>

                <StackPanel Name="Hardware" Orientation="Vertical" Margin="10,10,0,0"
                            Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.Video}}">

                    <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
                        <TextBlock Text="Video" FontSize="16" />
                    </Border>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">

                        <TextBlock Text="Decoding" FontSize="14" Margin="0,10,0,10" />

                        <StackPanel Orientation="Vertical" Margin="20,0,0,0"  >
                            <CheckBox Content="Enable DXVA Hardware Accelerated Decoding (Experimental)" IsChecked="{Binding EnableDxvaDecoding}" />
                            <TextBlock Text="{x:Static Properties:Resources.Video_DxvaDecode}" Margin="17,2,0,0" />

                        </StackPanel>

                        <StackPanel Orientation="Vertical" Margin="20,10,0,0">
                            <CheckBox Content="Disable QuickSync Decoding" IsEnabled="{Binding IsQuickSyncAvailable}" IsChecked="{Binding DisableQuickSyncDecoding}" />
                            <TextBlock Text="{x:Static Properties:Resources.Video_QuickSyncNotAvailable}" Margin="17,2,0,0" TextWrapping="Wrap"
                                        Visibility="{Binding IsQuickSyncAvailable, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}" />
                        </StackPanel>

                        <TextBlock Text="Scaling" FontSize="14" Margin="0,20,0,10" />
                        
                        <StackPanel Orientation="Horizontal" Margin="20,0,0,0">
                            <TextBlock Text="Choose Scaler: " Margin="0,0,5,0" VerticalAlignment="Center" />
                            <ComboBox  ItemsSource="{Binding ScalingOptions, Converter={StaticResource enumComboConverter}}" 
                                       SelectedItem="{Binding SelectedScalingMode, Converter={StaticResource enumComboConverter}}" 
                                       Width="120" VerticalAlignment="Center" />
                        </StackPanel>

                        <StackPanel Orientation="Vertical" Margin="26,2,0,0" >
                            <TextBlock Text="{x:Static Properties:Resources.Video_ScalingModes}" TextWrapping="Wrap"
                                       Visibility="{Binding IsClScaling, Converter={StaticResource boolToVisConverter}}" />
                        </StackPanel>
               
                    </StackPanel>

             
                </StackPanel>

                <StackPanel  Name="Advanced" Orientation="Vertical" Margin="10,10,0,0"
                            Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.Advanced}}">

                    <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
                        <TextBlock Text="Advanced" FontSize="16" />
                    </Border>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">

                        <TextBlock Text="Advanced Options" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">
                            <CheckBox Content="Prevent the system from sleeping while encoding" IsChecked="{Binding PreventSleep}" />
                            <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
                                <TextBlock Text="Number of picture previews to scan:" VerticalAlignment="Center" Width="250" />
                                <ComboBox Name="numberOfPreviews" ItemsSource="{Binding PreviewPicturesToScan}" SelectedItem="{Binding SelectedPreviewCount}" Width="120" />
                            </StackPanel>
                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0">
                                <TextBlock Text="Minimum length of title to scan (seconds):" VerticalAlignment="Center" Width="250" />
                                <TextBox Name="MinTitleLength" Text="{Binding MinLength}"  Width="120"/>
                                <!-- Find a control for this-->
                            </StackPanel>
                            <StackPanel Orientation="Horizontal" Margin="0,5,0,0">
                                <TextBlock Text="Priority Level:" Width="250" VerticalAlignment="Center" />
                                <ComboBox Name="processPriorityLevel" ItemsSource="{Binding PriorityLevelOptions}" SelectedItem="{Binding SelectedPriority}" Width="120" />
                            </StackPanel>

                        </StackPanel>
                    </StackPanel>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">
                        <TextBlock Text="x264 Settings" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>
                        <StackPanel Orientation="Horizontal" Grid.Column="1"  Margin="20,0,0,0">
                            <TextBlock Text="Constant quality fractional granularity:" VerticalAlignment="Center" Width="250" />
                            <ComboBox Name="x264Granularity" ItemsSource="{Binding ConstantQualityGranularity}" SelectedItem="{Binding SelectedGranulairty}" Width="120"/>
                        </StackPanel>
                    </StackPanel>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">

                        <TextBlock Text="DVD Reading" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">
                            <CheckBox Content="Disable LibDVDNav. (libdvdread will be used instead)" IsChecked="{Binding DisableLibdvdNav}" />
                        </StackPanel>

                    </StackPanel>

                    <StackPanel Orientation="Vertical" Margin="0,10,0,20">

                        <TextBlock Text="Logging" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">
                            <StackPanel Orientation="Horizontal" Grid.Column="1">
                                <TextBlock Text="Log Verbosity Level:" Width="250" VerticalAlignment="Center" />
                                <ComboBox Name="logVerbosityLevel" ItemsSource="{Binding LogVerbosityOptions}" SelectedItem="{Binding SelectedVerbosity}" Width="120" />
                            </StackPanel>

                            <CheckBox Content="Put a copy of individual encode logs in the same location as the encoded video" Margin="0,5,0,0" IsChecked="{Binding CopyLogToEncodeDirectory}" />
                            <CheckBox Content="Put a copy of individual encode logs in a specified location: " Margin="0,5,0,0" IsChecked="{Binding CopyLogToSepcficedLocation}" />
                            <StackPanel Orientation="Horizontal" Margin="0,10,0,0" Grid.Column="1">
                                <TextBlock Text="Log Path:" VerticalAlignment="Center" />
                                <TextBox Width="120" Text="{Binding LogDirectory}" />
                                <Button Content="Browse" Margin="5,0,0,0" cal:Message.Attach="[Event Click] = [Action BrowseLogPath]" />
                            </StackPanel>
                            <StackPanel Orientation="Horizontal" Margin="0,10,0,0" Grid.Column="1">
                                <Button Content="View Log Directory" cal:Message.Attach="[Event Click] = [Action ViewLogDirectory]" Margin="0,0,5,0" />
                                <Button Content="Clear Log History" cal:Message.Attach="[Event Click] = [Action ClearLogHistory]" />
                            </StackPanel>

                            <CheckBox Content="Clear Log files older than 30 days " Margin="0,10,0,0" IsChecked="{Binding ClearOldOlgs}" />
                        </StackPanel>

                    </StackPanel>


                    <StackPanel Orientation="Vertical" Margin="0,10,0,20" Visibility="Visible">

                        <TextBlock Text="Alpha Features" FontSize="14" Margin="0,0,0,10"/>

                        <StackPanel Orientation="Vertical"  Margin="20,0,0,0">
                            <CheckBox Content="Enable Static Preview" Margin="0,5,0,0" IsChecked="{Binding EnableStaticPreview}" />
                                    
                            <CheckBox Content="Use LibHB for Encoding (uses hb.dll instead of HandBrakeCLI.exe)" Margin="0,5,0,0" IsChecked="{Binding EnableLibHb}" Visibility="Collapsed" />
                            <CheckBox Content="Enable Process Isolation (Run Encodes via an intermediate service)" Margin="20,10,0,0" IsChecked="{Binding EnableProcessIsolation}" Visibility="Collapsed" />
                            <StackPanel Orientation="Horizontal" Margin="0,10,0,0" Visibility="Collapsed">
                                <TextBlock Text="Server Port:" VerticalAlignment="Center" />
                                <TextBox Width="50" MaxLength="5" Text="{Binding ServerPort}" />
                            </StackPanel>

                        </StackPanel>
                    </StackPanel>
                </StackPanel>

                <StackPanel Name="Updates" Orientation="Vertical" Margin="10,10,0,0"
                            Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.Updates}}">


                    <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
                        <TextBlock Text="Updates" FontSize="16" />
                    </Border>

                    <TextBlock Text="Current Version" Grid.Column="0" FontSize="14" Margin="0,10,0,10"/>

                    <Grid Margin="20,10,0,20">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="70" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>

                        <!-- Version -->
                        <TextBlock Grid.Column="0" Margin="0,0,5,0" Text="Version:" />
                        <TextBlock Grid.Column="1" Margin="0,0,0,1" VerticalAlignment="Bottom" Text="{Binding Version}" />
                    </Grid>

                    <TextBlock Text="Updates" Grid.Column="0" FontSize="14" Margin="0,10,0,10"/>

                    <StackPanel Margin="20,0,0,0" Orientation="Horizontal">
                        <Button Content="Check for Updates" MaxWidth="130" Margin="0,0,5,0" cal:Message.Attach="[Event Click] = [Action PerformUpdateCheck]" />
                        <Button Content="Download Update" Width="120" cal:Message.Attach="[Event Click] = [Action DownloadUpdate]" Visibility="{Binding UpdateAvailable, Converter={StaticResource boolToVisConverter}}" />
                    </StackPanel>

                    <StackPanel Margin="20,10,0,0" Orientation="Horizontal">
                        <ProgressBar Minimum="0" Maximum="100" Height="20" Width="400" Value="{Binding DownloadProgressPercentage}" 
                                 Visibility="{Binding UpdateAvailable, Converter={StaticResource boolToVisConverter}}" />
                        
                    </StackPanel>

                    <TextBlock Text="{Binding UpdateMessage}" Margin="20,5,10,0" VerticalAlignment="Center" TextWrapping="Wrap" />

                </StackPanel>

                <StackPanel Name="About" Orientation="Vertical" Margin="10,10,0,0"
                            Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.About}}">


                    <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
                        <TextBlock Text="About HandBrake" FontSize="16" />
                    </Border>

                    <ContentControl x:Name="AboutViewModel" />

                </StackPanel>
            </StackPanel>
        </ScrollViewer>

        <StackPanel HorizontalAlignment="Stretch" Grid.Row="1" Grid.ColumnSpan="2" >
            <StackPanel.Style>
                <Style TargetType="StackPanel">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding UseSystemColours}" Value="False">
                            <Setter Property="Background" Value="LightGray" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </StackPanel.Style>
            
            <Button Content="Close" IsDefault="True" cal:Message.Attach="[Event Click] = [Action Close]"
                    HorizontalAlignment="Center" Padding="12,2" Margin="0,5,10,5" />
        </StackPanel>


    </Grid>
</UserControl>
