using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace Handbrake.Functions
{
class x264Panel
{
Boolean NoWidgetUpdate = false;
///
/// Reset all components to defaults and clears the x264 rtf box
///
public void reset2Defaults(frmMain mainWindow)
{
mainWindow.check_8x8DCT.CheckState = CheckState.Unchecked;
mainWindow.check_bFrameDistortion.CheckState = CheckState.Unchecked;
mainWindow.check_BidirectionalRefinement.CheckState = CheckState.Unchecked;
mainWindow.check_Cabac.CheckState = CheckState.Checked;
mainWindow.check_mixedReferences.CheckState = CheckState.Unchecked;
mainWindow.check_noDCTDecimate.CheckState = CheckState.Unchecked;
mainWindow.check_noFastPSkip.CheckState = CheckState.Unchecked;
mainWindow.check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
mainWindow.check_weightedBFrames.CheckState = CheckState.Unchecked;
mainWindow.drop_analysis.SelectedIndex = 0;
mainWindow.drop_bFrames.SelectedIndex = 0;
mainWindow.drop_deblockAlpha.SelectedIndex = 0;
mainWindow.drop_deblockBeta.SelectedIndex = 0;
mainWindow.drop_directPrediction.SelectedIndex = 0;
mainWindow.drop_MotionEstimationMethod.SelectedIndex = 0;
mainWindow.drop_MotionEstimationRange.SelectedIndex = 0;
mainWindow.drop_refFrames.SelectedIndex = 0;
mainWindow.drop_subpixelMotionEstimation.SelectedIndex = 0;
mainWindow.drop_trellis.SelectedIndex = 0;
mainWindow.rtf_x264Query.Text = "";
}
///
/// Update GUI componets from the current x264 rtf string
///
public void X264_SetCurrentSettingsInPanel(frmMain mainWindow)
{
// When the widgets are changed, we don't want them to update the text box again. No Need.
// This boolean controls the Widget Change function
/* Set widgets depending on the opt string in field */
String thisOpt; // The separated option such as "bframes=3"
String optName = ""; // The option name such as "bframes"
String optValue = "";// The option value such as "3"
String[] currentOptsArray;
//Set currentOptString to the contents of the text box.
String currentOptString = mainWindow.rtf_x264Query.Text.Replace("\n", "");
/*verify there is an opt string to process */
if (currentOptString.Contains("="))
{
/*Put individual options into an array based on the ":" separator for processing, result is "="*/
currentOptsArray = currentOptString.Split(':');
/*iterate through the array and get and and
/// Iterate over every x264 option, standardize it, write the full string to the x264 rtf box
///
public void X264_StandardizeOptString(frmMain mainWindow)
{
/* Set widgets depending on the opt string in field */
String thisOpt; // The separated option such as "bframes=3"
String optName = ""; // The option name such as "bframes"
String optValue = "";// The option value such as "3"
String changedOptString = "";
String[] currentOptsArray;
/*First, we get an opt string to process */
String currentOptString = mainWindow.rtf_x264Query.Text;
/*verify there is an opt string to process */
if (currentOptString.Contains("="))
{
/*Put individual options into an array based on the ":" separator for processing, result is "="*/
currentOptsArray = currentOptString.Split(':');
/*iterate through the array and get and
/// This function will update the X264 Query when one of the GUI widgets changes.
///
public void on_x264_WidgetChange(string sender, frmMain mainWindow)
{
if (NoWidgetUpdate == false)
{
String optNameToChange = sender;
String currentOptString = mainWindow.rtf_x264Query.Text;
/*First, we create a pattern to check for ":"optNameToChange"=" to modify the option if the name falls after
the first character of the opt string (hence the ":") */
String checkOptNameToChange = ":" + optNameToChange + "=";
String checkOptNameToChangeBegin = optNameToChange + "=";
// IF the current H264 Option String Contains Multiple Items or Just 1 Item
if ((currentOptString.Contains(checkOptNameToChange)) || (currentOptString.StartsWith(checkOptNameToChangeBegin)))
hasFullOption(currentOptString, optNameToChange, mainWindow);
else // IF there is no options in the rich text box!
hasNoOptions(optNameToChange, mainWindow);
}
else
{
NoWidgetUpdate = false;
}
}
// Some Private Functions used by the above Public Functions
/*
* Used by on_x264_WidgetChange()
* Called when the current x264 option string contains multiple (or a single) item(s) in it seperated by :
* Basically, it updates the current option that the widget corrosponds to, if it is already in thes string
* otherwise, it adds it to the string.
*/
private void hasFullOption(string currentOptString, string optNameToChange, frmMain mainWindow)
{
String thisOpt; // The separated option such as "bframes=3"
String optName = ""; // The option name such as "bframes"
String optValue = ""; // The option value such as "3"
String[] currentOptsArray;
/* Create new empty opt string*/
String changedOptString = "";
/*Put individual options into an array based on the ":" separator for processing, result is "="*/
currentOptsArray = currentOptString.Split(':');
/*iterate through the array and get and