3 This file is part of the HandBrake source code.
\r
4 Homepage: <http://handbrake.fr/>.
\r
5 It may be used under the terms of the GNU General Public License. */
\r
8 using System.Collections;
\r
9 using System.ComponentModel;
\r
11 using System.Drawing;
\r
13 using System.Windows.Forms;
\r
16 using System.Diagnostics;
\r
17 using System.Threading;
\r
18 using System.Runtime.InteropServices;
\r
19 using System.Globalization;
\r
20 using System.Text.RegularExpressions;
\r
24 public partial class frmMain : Form
\r
26 // --------------------------------------------------------------
\r
27 // Applicaiton Startup Stuff
\r
28 // --------------------------------------------------------------
\r
30 #region Application Startup
\r
32 // Some stuff that needs to be Initialized.
\r
33 private Process hbProc;
\r
34 private Parsing.DVD thisDVD;
\r
35 private frmQueue queueWindow = new frmQueue();
\r
36 private delegate void updateStatusChanger();
\r
37 Functions.Common hb_common_func = new Functions.Common();
\r
38 Functions.x264Panel x264PanelFunctions = new Functions.x264Panel();
\r
42 // Load the splash screen in this thread
\r
43 Form splash = new frmSplashScreen();
\r
46 //Create a label that can be updated from the parent thread.
\r
47 Label lblStatus = new Label();
\r
48 lblStatus.Size = new Size(250, 20);
\r
49 lblStatus.Location = new Point(10, 280);
\r
50 splash.Controls.Add(lblStatus);
\r
52 //Fire a thread to wait for 2 seconds. The splash screen will exit when the time expires
\r
53 Thread timer = new Thread(splashTimer);
\r
56 InitializeComponent();
\r
58 // show the form, but leave disabled until preloading is complete then show the main form
\r
59 this.Enabled = false;
\r
61 // Forces frmMain to draw
\r
62 Application.DoEvents();
\r
64 // update the status
\r
65 if (Properties.Settings.Default.updateStatus == "Checked")
\r
67 lblStatus.Text = "Checking for updates ...";
\r
68 Application.DoEvents();
\r
69 Thread updateCheckThread = new Thread(startupUpdateCheck);
\r
70 updateCheckThread.Start();
\r
74 //H264 Panel Loading
\r
75 lblStatus.Text = "Loading H264 Panel";
\r
76 Application.DoEvents();
\r
81 // Set some defaults for the dropdown menus. Just incase the normal or user presets dont load.
\r
82 lblStatus.Text = "Loading Presets Bar ...";
\r
83 Application.DoEvents();
\r
84 drp_crop.SelectedIndex = 0;
\r
88 // Now load the users default if required. (Will overide the above setting)
\r
89 lblStatus.Text = "Loading Preset Settings ...";
\r
90 Application.DoEvents();
\r
91 if (Properties.Settings.Default.defaultSettings == "Checked")
\r
97 // Enable or disable tooltips
\r
98 if (Properties.Settings.Default.tooltipEnable == "Checked")
\r
100 lblStatus.Text = "Loading Tooltips ...";
\r
101 Application.DoEvents();
\r
102 ToolTip.Active = true;
\r
107 lblStatus.Text = "Loading Complete!";
\r
108 Application.DoEvents();
\r
111 // Wait until splash screen is done
\r
112 while (timer.IsAlive)
\r
113 { Thread.Sleep(100); }
\r
115 //Close the splash screen
\r
119 // Turn the interface back to the user
\r
120 this.Enabled = true;
\r
123 private void startupUpdateCheck()
\r
127 if (this.InvokeRequired)
\r
129 this.BeginInvoke(new updateStatusChanger(startupUpdateCheck));
\r
133 Boolean update = hb_common_func.updateCheck(false);
\r
134 if (update == true)
\r
136 frmUpdater updateWindow = new frmUpdater();
\r
137 updateWindow.Show();
\r
140 catch (Exception exc)
\r
142 MessageBox.Show(exc.ToString());
\r
146 private void splashTimer(object sender)
\r
148 Thread.Sleep(1000); //sit for 1 seconds then exit
\r
151 private void showSplash(object sender)
\r
153 Form splash = new frmSplashScreen();
\r
157 private void setupH264Panel()
\r
159 /*Set opt widget values here*/
\r
161 /*B-Frames fX264optBframesPopUp*/
\r
163 drop_bFrames.Items.Clear();
\r
164 drop_bFrames.Items.Add("Default (0)");
\r
165 drop_bFrames.Text = "Default (0)";
\r
167 for (i = 0; i < 17; i++)
\r
169 drop_bFrames.Items.Add(i.ToString());
\r
172 /*Reference Frames fX264optRefPopUp*/
\r
173 drop_refFrames.Items.Clear();
\r
174 drop_refFrames.Items.Add("Default (1)");
\r
175 drop_refFrames.Text = "Default (1)";
\r
176 for (i = 0; i < 17; i++)
\r
178 drop_refFrames.Items.Add(i.ToString());
\r
181 /*No Fast P-Skip fX264optNfpskipSwitch BOOLEAN*/
\r
182 check_noFastPSkip.CheckState = CheckState.Unchecked;
\r
184 /*No Dict Decimate fX264optNodctdcmtSwitch BOOLEAN*/
\r
185 check_noDCTDecimate.CheckState = CheckState.Unchecked;
\r
188 /*Sub Me fX264optSubmePopUp*/
\r
189 drop_subpixelMotionEstimation.Items.Clear();
\r
190 drop_subpixelMotionEstimation.Items.Add("Default (4)");
\r
191 drop_subpixelMotionEstimation.Text = "Default (4)";
\r
192 for (i = 0; i < 8; i++)
\r
194 drop_subpixelMotionEstimation.Items.Add(i.ToString());
\r
197 /*Trellis fX264optTrellisPopUp*/
\r
198 drop_trellis.Items.Clear();
\r
199 drop_trellis.Items.Add("Default (0)");
\r
200 drop_trellis.Text = "Default (0)";
\r
201 for (i = 0; i < 3; i++)
\r
203 drop_trellis.Items.Add(i.ToString());
\r
206 /*Mixed-references fX264optMixedRefsSwitch BOOLEAN*/
\r
207 check_mixedReferences.CheckState = CheckState.Unchecked;
\r
209 /*Motion Estimation fX264optMotionEstPopUp*/
\r
210 drop_MotionEstimationMethod.Items.Clear();
\r
211 drop_MotionEstimationMethod.Items.Add("Default (Hexagon)");
\r
212 drop_MotionEstimationMethod.Items.Add("Diamond");
\r
213 drop_MotionEstimationMethod.Items.Add("Hexagon");
\r
214 drop_MotionEstimationMethod.Items.Add("Uneven Multi-Hexagon");
\r
215 drop_MotionEstimationMethod.Items.Add("Exhaustive");
\r
216 drop_MotionEstimationMethod.Text = "Default (Hexagon)";
\r
218 /*Motion Estimation range fX264optMERangePopUp*/
\r
219 drop_MotionEstimationRange.Items.Clear();
\r
220 drop_MotionEstimationRange.Items.Add("Default (16)");
\r
221 drop_MotionEstimationRange.Text = "Default (16)";
\r
222 for (i = 4; i < 65; i++)
\r
224 drop_MotionEstimationRange.Items.Add(i.ToString());
\r
227 /*Weighted B-Frame Prediction fX264optWeightBSwitch BOOLEAN*/
\r
228 check_weightedBFrames.CheckState = CheckState.Unchecked;
\r
230 /*B-Frame Rate Distortion Optimization fX264optBRDOSwitch BOOLEAN*/
\r
231 check_bFrameDistortion.CheckState = CheckState.Unchecked;
\r
233 /*B-frame Pyramids fX264optBPyramidSwitch BOOLEAN*/
\r
234 check_pyrmidalBFrames.CheckState = CheckState.Unchecked;
\r
236 /*Bidirectional Motion Estimation Refinement fX264optBiMESwitch BOOLEAN*/
\r
237 check_BidirectionalRefinement.CheckState = CheckState.Unchecked;
\r
239 /*Direct B-Frame Prediction Mode fX264optDirectPredPopUp*/
\r
240 drop_directPrediction.Items.Clear();
\r
241 drop_directPrediction.Items.Add("Default (Spatial)");
\r
242 drop_directPrediction.Items.Add("None");
\r
243 drop_directPrediction.Items.Add("Spatial");
\r
244 drop_directPrediction.Items.Add("Temporal");
\r
245 drop_directPrediction.Items.Add("Automatic");
\r
246 drop_directPrediction.Text = "Default (Spatial)";
\r
249 drop_deblockAlpha.Items.Clear();
\r
250 drop_deblockAlpha.Items.Add("Default (0)");
\r
251 drop_deblockAlpha.Text = "Default (0)";
\r
252 for (i = -6; i < 7; i++)
\r
254 drop_deblockAlpha.Items.Add(i.ToString());
\r
258 drop_deblockBeta.Items.Clear();
\r
259 drop_deblockBeta.Items.Add("Default (0)");
\r
260 drop_deblockBeta.Text = "Default (0)";
\r
261 for (i = -6; i < 7; i++)
\r
263 drop_deblockBeta.Items.Add(i.ToString());
\r
266 /* Analysis fX264optAnalysePopUp */
\r
267 drop_analysis.Items.Clear();
\r
268 drop_analysis.Items.Add("Default (some)"); /* 0=default */
\r
269 drop_analysis.Items.Add("None"); /* 1=none */
\r
270 drop_analysis.Items.Add("All"); /* 2=all */
\r
271 drop_analysis.Text = "Default (some)";
\r
273 /* 8x8 DCT fX264op8x8dctSwitch */
\r
274 check_8x8DCT.CheckState = CheckState.Unchecked;
\r
276 /* CABAC fX264opCabacSwitch */
\r
277 check_Cabac.CheckState = CheckState.Checked;
\r
279 /* Standardize the option string */
\r
280 rtf_x264Query.Text = "";
\r
283 private void loadUserDefaults()
\r
285 string userDefaults = Properties.Settings.Default.defaultUserSettings;
\r
288 // Send the query from the file to the Query Parser class Then load the preset
\r
289 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);
\r
290 hb_common_func.presetLoader(this, presetQuery, "User Defaults ");
\r
292 catch (Exception exc)
\r
294 MessageBox.Show("Unable to load user Default Settings. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
300 #region Set Varible Function
\r
301 public void setStreamReader(Parsing.DVD dvd)
\r
303 this.thisDVD = dvd;
\r
307 // --------------------------------------------------------------
\r
308 // The main Menu bar.
\r
309 // --------------------------------------------------------------
\r
312 private void mnu_open_Click(object sender, EventArgs e)
\r
315 File_Open.ShowDialog();
\r
316 filename = File_Open.FileName;
\r
318 if (filename != "")
\r
322 // Create StreamReader & open file
\r
323 StreamReader line = new StreamReader(filename);
\r
325 // Send the query from the file to the Query Parser class then load the preset
\r
326 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(line.ReadLine());
\r
327 hb_common_func.presetLoader(this, presetQuery, filename);
\r
329 // Close the stream
\r
332 Form preset = new frmAddPreset(this);
\r
333 preset.ShowDialog();
\r
336 catch (Exception exc)
\r
338 MessageBox.Show("Unable to load profile. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
343 private void mnu_save_Click(object sender, EventArgs e)
\r
346 File_Save.ShowDialog();
\r
347 filename = File_Save.FileName;
\r
348 if (filename != "")
\r
352 // Create a StreamWriter and open the file
\r
353 StreamWriter line = new StreamWriter(filename);
\r
355 // Generate and write the query string to the file
\r
356 String query = hb_common_func.GenerateTheQuery(this);
\r
357 line.WriteLine(query);
\r
359 // close the stream
\r
361 MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
365 MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
371 private void mnu_exit_Click(object sender, EventArgs e)
\r
373 Application.Exit();
\r
380 private void mnu_encode_Click(object sender, EventArgs e)
\r
385 private void mnu_viewDVDdata_Click(object sender, EventArgs e)
\r
387 frmDvdInfo dvdInfoWindow = new frmDvdInfo();
\r
388 dvdInfoWindow.Show();
\r
391 private void mnu_options_Click(object sender, EventArgs e)
\r
393 Form Options = new frmOptions();
\r
394 Options.ShowDialog();
\r
400 #region Presets Menu
\r
402 private void mnu_presetReset_Click(object sender, EventArgs e)
\r
404 treeView_presets.Nodes.Clear();
\r
407 if (treeView_presets.Nodes.Count == 0)
\r
408 MessageBox.Show("Unable to load the presets.dat file. Please select \"Update Built-in Presets\" from the Presets Menu \nMake sure you are running the program in Admin mode if running on Vista. See Windows FAQ for details!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
410 MessageBox.Show("Presets have been updated", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
413 private void mnu_SelectDefault_Click(object sender, EventArgs e)
\r
415 loadNormalPreset();
\r
422 private void mnu_wiki_Click(object sender, EventArgs e)
\r
424 Process.Start("http://handbrake.fr/trac");
\r
427 private void mnu_faq_Click(object sender, EventArgs e)
\r
429 Process.Start("http://handbrake.fr/trac/wiki/SupportFAQ");
\r
432 private void mnu_onlineDocs_Click(object sender, EventArgs e)
\r
434 Process.Start("http://handbrake.fr/?article=documentation");
\r
437 private void mnu_handbrake_home_Click(object sender, EventArgs e)
\r
439 Process.Start("http://handbrake.fr");
\r
442 private void mnu_UpdateCheck_Click(object sender, EventArgs e)
\r
444 Boolean update = hb_common_func.updateCheck(true);
\r
445 if (update == true)
\r
447 frmUpdater updateWindow = new frmUpdater();
\r
448 updateWindow.Show();
\r
451 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
454 private void mnu_about_Click(object sender, EventArgs e)
\r
456 Form About = new frmAbout();
\r
457 About.ShowDialog();
\r
462 // --------------------------------------------------------------
\r
463 // Buttons on the main Window and items that require actions
\r
464 // --------------------------------------------------------------
\r
468 private void btn_Browse_Click(object sender, EventArgs e)
\r
470 String filename = "";
\r
471 text_source.Text = "";
\r
472 frmDvdInfo dvdInfoWindow = new frmDvdInfo();
\r
474 if (check_fileMode.Checked)
\r
476 ISO_Open.ShowDialog();
\r
477 filename = ISO_Open.FileName;
\r
481 DVD_Open.ShowDialog();
\r
482 filename = DVD_Open.SelectedPath;
\r
485 if (filename.StartsWith("\\"))
\r
486 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
489 if (filename != "")
\r
491 Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);
\r
492 text_source.Text = filename;
\r
493 frmRD.ShowDialog();
\r
496 text_source.Text = "Click 'Browse' to continue";
\r
498 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
499 if (drp_dvdtitle.Items.Count == 0)
\r
500 MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source. Please refer to the FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
505 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
507 // This removes the file extension from the filename box on the save file dialog.
\r
508 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
509 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");
\r
511 // Show the dialog and set the main form file path
\r
512 DVD_Save.ShowDialog();
\r
513 if (DVD_Save.FileName.StartsWith("\\"))
\r
514 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
517 setAudioByContainer(DVD_Save.FileName);
\r
519 text_destination.Text = DVD_Save.FileName;
\r
521 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
522 if (Check_ChapterMarkers.Checked)
\r
523 text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");
\r
527 private void btn_ActivityWindow_Click(object sender, EventArgs e)
\r
529 Form ActivityWindow = new frmActivityWindow();
\r
530 ActivityWindow.ShowDialog();
\r
535 #region Reusable Functions
\r
536 private void setAudioByContainer(String path)
\r
538 if ((path.EndsWith(".mp4")) || (path.EndsWith(".mp4")))
\r
540 drp_audenc_1.Items.Clear();
\r
541 drp_audenc_1.Items.Add("AAC");
\r
542 drp_audenc_1.SelectedIndex = 0;
\r
544 drp_audenc_2.Items.Clear();
\r
545 drp_audenc_2.Items.Add("AAC");
\r
546 if (drp_audenc_2.Enabled)
\r
547 drp_audenc_2.SelectedIndex = 0;
\r
549 else if (path.EndsWith(".avi"))
\r
551 drp_audenc_1.Items.Clear();
\r
552 drp_audenc_1.Items.Add("MP3");
\r
553 drp_audenc_1.Items.Add("AC3");
\r
554 drp_audenc_1.SelectedIndex = 0;
\r
556 drp_audenc_2.Items.Clear();
\r
557 drp_audenc_2.Items.Add("MP3");
\r
558 drp_audenc_2.Items.Add("AC3");
\r
559 if (drp_audenc_2.Enabled)
\r
560 drp_audenc_2.SelectedIndex = 0;
\r
562 else if (path.EndsWith(".ogm"))
\r
564 drp_audenc_1.Items.Clear();
\r
565 drp_audenc_1.Items.Add("Vorbis");
\r
566 drp_audenc_1.SelectedIndex = 0;
\r
568 drp_audenc_2.Items.Clear();
\r
569 drp_audenc_2.Items.Add("Vorbis");
\r
570 if (drp_audenc_2.Enabled)
\r
571 drp_audenc_2.SelectedIndex = 0;
\r
573 else if (path.EndsWith(".mkv"))
\r
575 drp_audenc_1.Items.Clear();
\r
576 drp_audenc_1.Items.Add("AAC");
\r
577 drp_audenc_1.Items.Add("MP3");
\r
578 drp_audenc_1.Items.Add("AC3");
\r
579 drp_audenc_1.Items.Add("Vorbis");
\r
580 drp_audenc_1.SelectedIndex = 0;
\r
582 drp_audenc_2.Items.Clear();
\r
583 drp_audenc_2.Items.Add("AAC");
\r
584 drp_audenc_2.Items.Add("MP3");
\r
585 drp_audenc_2.Items.Add("AC3");
\r
586 drp_audenc_2.Items.Add("Vorbis");
\r
587 if (drp_audenc_2.Enabled)
\r
588 drp_audenc_2.SelectedIndex = 0;
\r
593 #region frmMain Actions
\r
595 private void text_destination_TextChanged(object sender, EventArgs e)
\r
597 setAudioByContainer(text_destination.Text);
\r
600 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
602 // Reset some values on the form
\r
603 lbl_Aspect.Text = "Select a Title";
\r
604 lbl_RecomendedCrop.Text = "Select a Title";
\r
605 drop_chapterStart.Items.Clear();
\r
606 drop_chapterFinish.Items.Clear();
\r
608 // If the dropdown is set to automatic nothing else needs to be done.
\r
609 // Otheriwse if its not, title data has to be loased from parsing.
\r
610 if (drp_dvdtitle.Text != "Automatic")
\r
612 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;
\r
614 // Set the Aspect Ratio
\r
615 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();
\r
617 // Set the Recommended Cropping values
\r
618 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);
\r
620 // Populate the Start chapter Dropdown
\r
621 drop_chapterStart.Items.Clear();
\r
622 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
623 if (drop_chapterStart.Items.Count > 0)
\r
624 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
626 // Populate the Final Chapter Dropdown
\r
627 drop_chapterFinish.Items.Clear();
\r
628 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
629 if (drop_chapterFinish.Items.Count > 0)
\r
630 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
632 // Populate the Audio Channels Dropdown
\r
633 drp_track1Audio.Items.Clear();
\r
634 drp_track1Audio.Items.Add("Automatic");
\r
635 drp_track1Audio.Items.Add("None");
\r
636 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
637 if (drp_track1Audio.Items.Count > 0)
\r
638 drp_track1Audio.Text = drp_track1Audio.Items[0].ToString();
\r
640 drp_track2Audio.Items.Clear();
\r
641 drp_track2Audio.Items.Add("None");
\r
642 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
643 if (drp_track2Audio.Items.Count > 0)
\r
644 drp_track2Audio.Text = drp_track2Audio.Items[0].ToString();
\r
646 // Populate the Subtitles dropdown
\r
647 drp_subtitle.Items.Clear();
\r
648 drp_subtitle.Items.Add("None");
\r
649 drp_subtitle.Items.Add("Autoselect");
\r
650 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
651 if (drp_subtitle.Items.Count > 0)
\r
652 drp_subtitle.Text = drp_subtitle.Items[0].ToString();
\r
656 // Run the autoName & chapterNaming functions
\r
657 hb_common_func.autoName(this);
\r
658 hb_common_func.chapterNaming(this);
\r
661 private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)
\r
663 drop_chapterStart.BackColor = Color.White;
\r
664 if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))
\r
668 int chapterFinish = int.Parse(drop_chapterFinish.Text);
\r
669 int chapterStart = int.Parse(drop_chapterStart.Text);
\r
671 if (chapterFinish < chapterStart)
\r
672 drop_chapterStart.BackColor = Color.LightCoral;
\r
676 drop_chapterStart.BackColor = Color.LightCoral;
\r
679 // Run the Autonaming function
\r
680 hb_common_func.autoName(this);
\r
683 private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)
\r
685 drop_chapterFinish.BackColor = Color.White;
\r
686 if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))
\r
690 int chapterFinish = int.Parse(drop_chapterFinish.Text);
\r
691 int chapterStart = int.Parse(drop_chapterStart.Text);
\r
693 if (chapterFinish < chapterStart)
\r
694 drop_chapterFinish.BackColor = Color.LightCoral;
\r
698 drop_chapterFinish.BackColor = Color.LightCoral;
\r
702 // Run the Autonaming function
\r
703 hb_common_func.autoName(this);
\r
706 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
708 text_filesize.Text = "";
\r
709 slider_videoQuality.Value = 0;
\r
710 SliderValue.Text = "0%";
\r
713 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
715 text_bitrate.Text = "";
\r
716 slider_videoQuality.Value = 0;
\r
717 SliderValue.Text = "0%";
\r
720 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
722 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
723 text_bitrate.Text = "";
\r
724 text_filesize.Text = "";
\r
727 private void text_width_TextChanged(object sender, EventArgs e)
\r
732 if ((int.Parse(text_width.Text) % 16) != 0)
\r
733 text_width.BackColor = Color.LightCoral;
\r
735 text_width.BackColor = Color.LightGreen;
\r
738 if ((lbl_Aspect.Text != "Select a Title") && (drp_crop.SelectedIndex == 2))
\r
740 double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);
\r
741 double mod16 = height % 16;
\r
742 height = height - mod16;
\r
744 if (text_width.Text == "")
\r
746 text_height.Text = "";
\r
747 text_width.BackColor = Color.White;
\r
750 text_height.Text = height.ToString();
\r
755 // No need to throw an error here.
\r
759 private void text_height_TextChanged(object sender, EventArgs e)
\r
763 if ((int.Parse(text_height.Text) % 16) != 0)
\r
764 text_height.BackColor = Color.LightCoral;
\r
766 text_height.BackColor = Color.LightGreen;
\r
770 // No need to alert the user.
\r
774 private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)
\r
776 if ((string)drp_crop.SelectedItem == "Custom")
\r
778 text_left.Enabled = true;
\r
779 text_right.Enabled = true;
\r
780 text_top.Enabled = true;
\r
781 text_bottom.Enabled = true;
\r
782 text_left.Text = "0";
\r
783 text_right.Text = "0";
\r
784 text_top.Text = "0";
\r
785 text_bottom.Text = "0";
\r
788 if ((string)drp_crop.SelectedItem == "Automatic")
\r
790 text_left.Enabled = false;
\r
791 text_right.Enabled = false;
\r
792 text_top.Enabled = false;
\r
793 text_bottom.Enabled = false;
\r
795 if (lbl_RecomendedCrop.Text != "Select a Title")
\r
797 string[] temp = new string[4];
\r
798 temp = lbl_RecomendedCrop.Text.Split('/');
\r
799 text_left.Text = temp[2];
\r
800 text_right.Text = temp[3];
\r
801 text_top.Text = temp[0];
\r
802 text_bottom.Text = temp[1];
\r
806 text_left.Text = "";
\r
807 text_right.Text = "";
\r
808 text_top.Text = "";
\r
809 text_bottom.Text = "";
\r
813 if ((string)drp_crop.SelectedItem == "No Crop")
\r
815 text_left.Enabled = false;
\r
816 text_right.Enabled = false;
\r
817 text_top.Enabled = false;
\r
818 text_bottom.Enabled = false;
\r
819 text_left.Text = "0";
\r
820 text_right.Text = "0";
\r
821 text_top.Text = "0";
\r
822 text_bottom.Text = "0";
\r
827 private void check_vfr_CheckedChanged(object sender, EventArgs e)
\r
829 if (check_vfr.CheckState == CheckState.Checked)
\r
831 check_detelecine.Enabled = false;
\r
832 check_detelecine.CheckState = CheckState.Checked;
\r
833 drp_videoFramerate.Enabled = false;
\r
834 drp_videoFramerate.SelectedItem = "29.97";
\r
835 lbl_vfr.Visible = true;
\r
839 check_detelecine.Enabled = true;
\r
840 drp_videoFramerate.Enabled = true;
\r
841 drp_videoFramerate.SelectedItem = "Automatic";
\r
842 lbl_vfr.Visible = false;
\r
846 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
848 if (drp_anamorphic.SelectedIndex == 1)
\r
850 text_height.BackColor = Color.LightGray;
\r
851 text_width.BackColor = Color.LightGray;
\r
852 text_height.Text = "";
\r
853 text_width.Text = "";
\r
854 text_height.Enabled = false;
\r
855 text_width.Enabled = false;
\r
858 if (drp_anamorphic.SelectedIndex == 2)
\r
860 text_height.Text = "";
\r
861 text_height.Enabled = false;
\r
862 text_height.BackColor = Color.LightGray;
\r
864 text_width.Enabled = true;
\r
865 text_width.BackColor = Color.White;
\r
868 if (drp_anamorphic.SelectedIndex == 0)
\r
870 text_height.BackColor = Color.White;
\r
871 text_width.BackColor = Color.White;
\r
872 text_height.Enabled = true;
\r
873 text_width.Enabled = true;
\r
877 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
879 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
881 if (drp_videoEncoder.Text.Contains("H.264"))
\r
882 check_turbo.Enabled = true;
\r
886 check_turbo.Enabled = false;
\r
887 check_turbo.CheckState = CheckState.Unchecked;
\r
891 private void check_largeFile_CheckedChanged(object sender, EventArgs e)
\r
893 if ((!text_destination.Text.Contains(".mp4")) && (!text_destination.Text.Contains(".m4v")))
\r
895 check_largeFile.BackColor = Color.LightCoral;
\r
896 check_largeFile.CheckState = CheckState.Unchecked;
\r
900 check_largeFile.BackColor = Color.Transparent;
\r
904 private void check_iPodAtom_CheckedChanged(object sender, EventArgs e)
\r
906 if ((!text_destination.Text.Contains(".mp4")) && (!text_destination.Text.Contains(".m4v")))
\r
908 text_destination.BackColor = Color.LightCoral;
\r
909 check_iPodAtom.BackColor = Color.LightCoral;
\r
910 check_iPodAtom.CheckState = CheckState.Unchecked;
\r
914 check_iPodAtom.BackColor = Color.Transparent;
\r
915 text_destination.BackColor = Color.White;
\r
919 private void check_optimiseMP4_CheckedChanged(object sender, EventArgs e)
\r
921 if ((!text_destination.Text.Contains(".mp4")) && (!text_destination.Text.Contains(".m4v")))
\r
923 check_optimiseMP4.BackColor = Color.LightCoral;
\r
924 text_destination.BackColor = Color.LightCoral;
\r
925 check_optimiseMP4.CheckState = CheckState.Unchecked;
\r
929 check_optimiseMP4.BackColor = Color.Transparent;
\r
930 text_destination.BackColor = Color.White;
\r
934 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
936 if (drp_dvdtitle.Items.Count == 0)
\r
937 MessageBox.Show("There are no titles to select. Please scan the DVD by clicking the 'browse' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
940 // Audio Track Changed
\r
941 private void drp_track1Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
943 if (drp_track1Audio.SelectedItem.Equals("None"))
\r
945 drp_audbit_1.Enabled = false;
\r
946 drp_audenc_1.Enabled = false;
\r
947 drp_audsr_1.Enabled = false;
\r
948 drp_audmix_1.Enabled = false;
\r
949 drp_audbit_1.Text = "";
\r
950 drp_audenc_1.Text = "";
\r
951 drp_audsr_1.Text = "";
\r
952 drp_audmix_1.Text = "";
\r
956 drp_audbit_1.Enabled = true;
\r
957 drp_audenc_1.Enabled = true;
\r
958 drp_audsr_1.Enabled = true;
\r
959 drp_audmix_1.Enabled = true;
\r
960 drp_audbit_1.Text = "160";
\r
961 drp_audenc_1.Text = "AAC";
\r
962 drp_audsr_1.Text = "48";
\r
963 drp_audmix_1.Text = "Automatic";
\r
966 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
968 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
970 drp_audbit_2.Enabled = false;
\r
971 drp_audenc_2.Enabled = false;
\r
972 drp_audsr_2.Enabled = false;
\r
973 drp_audmix_2.Enabled = false;
\r
974 drp_audbit_2.Text = "";
\r
975 drp_audenc_2.Text = "";
\r
976 drp_audsr_2.Text = "";
\r
977 drp_audmix_2.Text = "";
\r
981 drp_audbit_2.Enabled = true;
\r
982 drp_audenc_2.Enabled = true;
\r
983 drp_audsr_2.Enabled = true;
\r
984 drp_audmix_2.Enabled = true;
\r
985 drp_audbit_2.Text = "160";
\r
986 drp_audenc_2.Text = "AAC";
\r
987 drp_audsr_2.Text = "48";
\r
988 drp_audmix_2.Text = "Automatic";
\r
992 // Audio Mixdown Selection Changed
\r
993 private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)
\r
995 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
997 drp_audbit_1.Items.Clear();
\r
998 drp_audbit_1.Items.Add("32");
\r
999 drp_audbit_1.Items.Add("40");
\r
1000 drp_audbit_1.Items.Add("48");
\r
1001 drp_audbit_1.Items.Add("56");
\r
1002 drp_audbit_1.Items.Add("64");
\r
1003 drp_audbit_1.Items.Add("80");
\r
1004 drp_audbit_1.Items.Add("86");
\r
1005 drp_audbit_1.Items.Add("112");
\r
1006 drp_audbit_1.Items.Add("128");
\r
1007 drp_audbit_1.Items.Add("160");
\r
1008 drp_audbit_1.Items.Add("192");
\r
1009 drp_audbit_1.Items.Add("224");
\r
1010 drp_audbit_1.Items.Add("256");
\r
1011 drp_audbit_1.Items.Add("320");
\r
1012 drp_audbit_1.Items.Add("384");
\r
1014 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
1016 drp_audbit_1.Items.Clear();
\r
1017 drp_audbit_1.Items.Add("32");
\r
1018 drp_audbit_1.Items.Add("40");
\r
1019 drp_audbit_1.Items.Add("48");
\r
1020 drp_audbit_1.Items.Add("56");
\r
1021 drp_audbit_1.Items.Add("64");
\r
1022 drp_audbit_1.Items.Add("80");
\r
1023 drp_audbit_1.Items.Add("86");
\r
1024 drp_audbit_1.Items.Add("112");
\r
1025 drp_audbit_1.Items.Add("128");
\r
1026 drp_audbit_1.Items.Add("160");
\r
1027 drp_audbit_1.Text = "160";
\r
1030 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1032 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
1034 drp_audbit_2.Items.Clear();
\r
1035 drp_audbit_2.Items.Add("32");
\r
1036 drp_audbit_2.Items.Add("40");
\r
1037 drp_audbit_2.Items.Add("48");
\r
1038 drp_audbit_2.Items.Add("56");
\r
1039 drp_audbit_2.Items.Add("64");
\r
1040 drp_audbit_2.Items.Add("80");
\r
1041 drp_audbit_2.Items.Add("86");
\r
1042 drp_audbit_2.Items.Add("112");
\r
1043 drp_audbit_2.Items.Add("128");
\r
1044 drp_audbit_2.Items.Add("160");
\r
1045 drp_audbit_2.Items.Add("192");
\r
1046 drp_audbit_2.Items.Add("224");
\r
1047 drp_audbit_2.Items.Add("256");
\r
1048 drp_audbit_2.Items.Add("320");
\r
1049 drp_audbit_2.Items.Add("384");
\r
1053 // Audio Encoder Selection Changed
\r
1054 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1056 if (drp_audenc_1.Text == "AC3")
\r
1058 drp_audmix_1.Enabled = false;
\r
1059 drp_audbit_1.Enabled = false;
\r
1060 drp_audsr_1.Enabled = false;
\r
1064 drp_audmix_1.Enabled = true;
\r
1065 drp_audbit_1.Enabled = true;
\r
1066 drp_audsr_1.Enabled = true;
\r
1068 drp_audmix_1.Text = "Automatic";
\r
1069 drp_audbit_1.Text = "160";
\r
1070 drp_audsr_1.Text = "48";
\r
1074 if (drp_audenc_1.Text == "AAC")
\r
1076 drp_audmix_1.Items.Clear();
\r
1077 drp_audmix_1.Items.Add("Mono");
\r
1078 drp_audmix_1.Items.Add("Stereo");
\r
1079 drp_audmix_1.Items.Add("Dolby Surround");
\r
1080 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1081 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1083 drp_audbit_1.Items.Clear();
\r
1084 drp_audbit_1.Items.Add("32");
\r
1085 drp_audbit_1.Items.Add("40");
\r
1086 drp_audbit_1.Items.Add("48");
\r
1087 drp_audbit_1.Items.Add("56");
\r
1088 drp_audbit_1.Items.Add("64");
\r
1089 drp_audbit_1.Items.Add("80");
\r
1090 drp_audbit_1.Items.Add("86");
\r
1091 drp_audbit_1.Items.Add("112");
\r
1092 drp_audbit_1.Items.Add("128");
\r
1093 drp_audbit_1.Items.Add("160");
\r
1098 drp_audmix_1.Items.Clear();
\r
1099 drp_audmix_1.Items.Add("Stereo");
\r
1100 drp_audmix_1.Items.Add("Dolby Surround");
\r
1101 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1103 drp_audbit_1.Items.Clear();
\r
1104 drp_audbit_1.Items.Add("32");
\r
1105 drp_audbit_1.Items.Add("40");
\r
1106 drp_audbit_1.Items.Add("48");
\r
1107 drp_audbit_1.Items.Add("56");
\r
1108 drp_audbit_1.Items.Add("64");
\r
1109 drp_audbit_1.Items.Add("80");
\r
1110 drp_audbit_1.Items.Add("86");
\r
1111 drp_audbit_1.Items.Add("112");
\r
1112 drp_audbit_1.Items.Add("128");
\r
1113 drp_audbit_1.Items.Add("160");
\r
1114 drp_audbit_1.Items.Add("192");
\r
1115 drp_audbit_1.Items.Add("224");
\r
1116 drp_audbit_1.Items.Add("256");
\r
1117 drp_audbit_1.Items.Add("320");
\r
1120 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1122 if (drp_audenc_2.Text == "AC3")
\r
1124 drp_audmix_2.Enabled = false;
\r
1125 drp_audbit_2.Enabled = false;
\r
1126 drp_audsr_2.Enabled = false;
\r
1128 drp_audmix_2.Text = "";
\r
1129 drp_audbit_2.Text = "";
\r
1130 drp_audsr_2.Text = "";
\r
1134 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1135 if (drp_track2Audio.Text != "None")
\r
1137 drp_audmix_2.Enabled = true;
\r
1138 drp_audbit_2.Enabled = true;
\r
1139 drp_audsr_2.Enabled = true;
\r
1141 drp_audmix_2.Text = "Automatic";
\r
1142 drp_audbit_2.Text = "160";
\r
1143 drp_audsr_2.Text = "48";
\r
1149 if (drp_audenc_2.Text == "AAC")
\r
1151 drp_audmix_2.Items.Clear();
\r
1152 drp_audmix_2.Items.Add("Mono");
\r
1153 drp_audmix_2.Items.Add("Stereo");
\r
1154 drp_audmix_2.Items.Add("Dolby Surround");
\r
1155 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1156 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1158 drp_audbit_2.Items.Clear();
\r
1159 drp_audbit_2.Items.Add("32");
\r
1160 drp_audbit_2.Items.Add("40");
\r
1161 drp_audbit_2.Items.Add("48");
\r
1162 drp_audbit_2.Items.Add("56");
\r
1163 drp_audbit_2.Items.Add("64");
\r
1164 drp_audbit_2.Items.Add("80");
\r
1165 drp_audbit_2.Items.Add("86");
\r
1166 drp_audbit_2.Items.Add("112");
\r
1167 drp_audbit_2.Items.Add("128");
\r
1168 drp_audbit_2.Items.Add("160");
\r
1173 drp_audmix_2.Items.Clear();
\r
1174 drp_audmix_2.Items.Add("Stereo");
\r
1175 drp_audmix_2.Items.Add("Dolby Surround");
\r
1176 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1178 drp_audbit_2.Items.Clear();
\r
1179 drp_audbit_2.Items.Add("32");
\r
1180 drp_audbit_2.Items.Add("40");
\r
1181 drp_audbit_2.Items.Add("48");
\r
1182 drp_audbit_2.Items.Add("56");
\r
1183 drp_audbit_2.Items.Add("64");
\r
1184 drp_audbit_2.Items.Add("80");
\r
1185 drp_audbit_2.Items.Add("86");
\r
1186 drp_audbit_2.Items.Add("112");
\r
1187 drp_audbit_2.Items.Add("128");
\r
1188 drp_audbit_2.Items.Add("160");
\r
1189 drp_audbit_2.Items.Add("192");
\r
1190 drp_audbit_2.Items.Add("224");
\r
1191 drp_audbit_2.Items.Add("256");
\r
1192 drp_audbit_2.Items.Add("320");
\r
1196 private void slider_drc_Scroll(object sender, EventArgs e)
\r
1198 double value = slider_drc.Value / 10.0;
\r
1201 lbl_drc.Text = value.ToString();
\r
1204 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1206 if (drp_subtitle.Text.Contains("None"))
\r
1208 check_forced.Enabled = false;
\r
1209 check_forced.Checked = false;
\r
1212 check_forced.Enabled = true;
\r
1215 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1217 if (Check_ChapterMarkers.Checked)
\r
1219 string destination = text_destination.Text;
\r
1220 destination = destination.Replace(".mp4", ".m4v");
\r
1221 text_destination.Text = destination;
\r
1222 data_chpt.Rows.Clear();
\r
1223 data_chpt.Enabled = true;
\r
1224 hb_common_func.chapterNaming(this);
\r
1228 string destination = text_destination.Text;
\r
1229 destination = destination.Replace(".m4v", ".mp4");
\r
1230 text_destination.Text = destination;
\r
1231 data_chpt.Rows.Clear();
\r
1232 data_chpt.Enabled = false;
\r
1236 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
1238 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
1239 if (!drp_videoEncoder.Text.Contains("H.264"))
\r
1241 check_turbo.CheckState = CheckState.Unchecked;
\r
1242 check_turbo.Enabled = false;
\r
1243 h264Tab.Enabled = false;
\r
1244 rtf_x264Query.Text = "";
\r
1245 check_iPodAtom.Enabled = false;
\r
1246 check_iPodAtom.Checked = false;
\r
1247 check_optimiseMP4.Enabled = false;
\r
1248 if (drp_anamorphic.Items.Count == 3)
\r
1249 drp_anamorphic.Items.RemoveAt(2);
\r
1253 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
1254 check_turbo.Enabled = true;
\r
1256 h264Tab.Enabled = true;
\r
1257 check_iPodAtom.Enabled = true;
\r
1258 check_optimiseMP4.Enabled = true;
\r
1259 if (!drp_anamorphic.Items.Contains("Loose"))
\r
1260 drp_anamorphic.Items.Add("Loose");
\r
1267 #region Advanced H264 Options Changed
\r
1272 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1274 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1277 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1279 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1282 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1284 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1287 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1289 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1292 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1294 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1297 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1299 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1302 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1304 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1307 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1309 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1312 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1314 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1317 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1319 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1322 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1324 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1327 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1329 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1332 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1334 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1337 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1339 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1343 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1345 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1349 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1351 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1354 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1356 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1359 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1361 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1365 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1367 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1371 * Buttons and x264 RTF Box
\r
1373 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1375 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1377 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1378 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1379 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1381 if (rtf_x264Query.Text == "")
\r
1382 x264PanelFunctions.reset2Defaults(this);
\r
1386 private void btn_reset_Click(object sender, EventArgs e)
\r
1388 rtf_x264Query.Text = "";
\r
1389 x264PanelFunctions.reset2Defaults(this);
\r
1394 #region Query Editor Tab
\r
1396 private void btn_clear_Click(object sender, EventArgs e)
\r
1398 rtf_query.Clear();
\r
1401 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1403 rtf_query.Text = hb_common_func.GenerateTheQuery(this);
\r
1406 private void btn_copy2C_Click(object sender, EventArgs e)
\r
1408 if (rtf_query.Text != "")
\r
1409 Clipboard.SetText(rtf_query.Text, TextDataFormat.Text);
\r
1414 // --------------------------------------------------------------
\r
1415 // Main Window Preset System
\r
1416 // --------------------------------------------------------------
\r
1418 #region Preset System
\r
1420 // Import Current Presets
\r
1421 public void loadPresetPanel()
\r
1423 treeView_presets.Nodes.Clear();
\r
1424 ArrayList presetNameList = new ArrayList();
\r
1426 // Load in the built in presets from presets.dat
\r
1427 string filePath = Application.StartupPath.ToString() + "\\presets.dat";
\r
1428 if (File.Exists(filePath))
\r
1430 StreamReader presetInput = new StreamReader(filePath);
\r
1431 while (!presetInput.EndOfStream)
\r
1433 if ((char)presetInput.Peek() == '+')
\r
1435 string preset = presetInput.ReadLine().Replace("+ ", "");
\r
1436 Regex r = new Regex("(: )"); // Split on hyphens.
\r
1437 presetNameList.Add(r.Split(preset));
\r
1440 presetInput.ReadLine();
\r
1443 presetInput.Close();
\r
1444 presetInput.Dispose();
\r
1446 addPresetToList(presetNameList);
\r
1447 presetNameList.Clear();
\r
1449 // Load in the users presets from user_presets.dat
\r
1450 filePath = Application.StartupPath.ToString() + "\\user_presets.dat";
\r
1451 if (File.Exists(filePath))
\r
1453 StreamReader presetInput = new StreamReader(filePath);
\r
1454 while (!presetInput.EndOfStream)
\r
1456 if ((char)presetInput.Peek() == '+')
\r
1458 string preset = "--" + presetInput.ReadLine().Replace("+ ", "");
\r
1459 Regex r = new Regex("(: )"); // Split on hyphens.
\r
1460 presetNameList.Add(r.Split(preset));
\r
1463 presetInput.ReadLine();
\r
1466 presetInput.Close();
\r
1467 presetInput.Dispose();
\r
1469 addPresetToList(presetNameList);
\r
1472 private void addPresetToList(ArrayList presetNameList)
\r
1474 TreeNode preset_treeview = new TreeNode();
\r
1475 foreach (string[] preset in presetNameList)
\r
1477 preset_treeview = new TreeNode(preset[0]);
\r
1479 // Now Fill Out List View with Items
\r
1480 treeView_presets.Nodes.Add(preset_treeview);
\r
1484 // Generate a new presets.dat file from the CLI
\r
1485 private void grabCLIPresets()
\r
1487 string appPath = Application.StartupPath.ToString() + "\\";
\r
1488 string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';
\r
1489 Process hbproc = Process.Start("CMD.exe", strCmdLine);
\r
1490 hbproc.WaitForExit();
\r
1495 // Selects the preset called "normal". This is HandBrakes default settings
\r
1496 private void loadNormalPreset()
\r
1500 string appPath = Application.StartupPath.ToString() + "\\presets.dat";
\r
1501 if (File.Exists(appPath))
\r
1505 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1507 if (treenode.ToString().Equals("TreeNode: Normal"))
\r
1508 normal = treenode.Index;
\r
1511 TreeNode np = treeView_presets.Nodes[normal];
\r
1513 treeView_presets.SelectedNode = np;
\r
1522 // Set's the current options set in the program as the new defaults for the program.
\r
1523 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1525 String query = hb_common_func.GenerateTheQuery(this);
\r
1526 Properties.Settings.Default.defaultUserSettings = query;
\r
1527 // Save the new default Settings
\r
1528 Properties.Settings.Default.Save();
\r
1529 MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1532 // When the user select a preset from the treeview, load it
\r
1533 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1537 // Scan through the built in presets
\r
1538 string builtInPresets = Application.StartupPath.ToString() + "\\presets.dat";
\r
1539 if (File.Exists(builtInPresets))
\r
1541 StreamReader presetInput = new StreamReader(builtInPresets);
\r
1542 while (!presetInput.EndOfStream)
\r
1544 if ((char)presetInput.Peek() == '+')
\r
1546 string preset = presetInput.ReadLine().Replace("+ ", "");
\r
1547 checkSelectedPreset(preset);
\r
1550 presetInput.ReadLine();
\r
1553 presetInput.Close();
\r
1556 // Scan through the users presets
\r
1557 string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";
\r
1558 if (File.Exists(userPresets))
\r
1560 StreamReader presetInput = new StreamReader(userPresets);
\r
1561 while (!presetInput.EndOfStream)
\r
1563 if ((char)presetInput.Peek() == '+')
\r
1565 string preset = presetInput.ReadLine().Replace("+ ", "");
\r
1566 checkSelectedPreset(preset);
\r
1569 presetInput.ReadLine();
\r
1572 presetInput.Close();
\r
1573 presetInput.Dispose();
\r
1576 catch (Exception exc)
\r
1578 MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1582 private void checkSelectedPreset(string preset)
\r
1584 string selectedPreset = null;
\r
1585 selectedPreset = treeView_presets.SelectedNode.Text;
\r
1587 Regex r = new Regex("(: )"); // Split on hyphens.
\r
1588 string[] presetName = r.Split(preset);
\r
1590 if ((selectedPreset == (presetName[0])) || (selectedPreset == ("--" + presetName[0])))
\r
1592 //Ok, Reset all the H264 widgets before changing the preset
\r
1593 x264PanelFunctions.reset2Defaults(this);
\r
1595 // Send the query from the file to the Query Parser class
\r
1596 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset);
\r
1598 // Now load the preset
\r
1599 hb_common_func.presetLoader(this, presetQuery, selectedPreset);
\r
1601 // The x264 widgets will need updated, so do this now:
\r
1602 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1603 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1607 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1609 Form preset = new frmAddPreset(this);
\r
1610 preset.ShowDialog();
\r
1613 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1615 ArrayList user_presets = new ArrayList();
\r
1616 ArrayList modified_presets_list = new ArrayList();
\r
1617 string selectedPreset = null;
\r
1618 selectedPreset = treeView_presets.SelectedNode.Text;
\r
1620 if (!selectedPreset.StartsWith("--"))
\r
1621 MessageBox.Show("Sorry, You can not remove any of the built in presets.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1624 // Scan through the users presets and dump them all in an arraylist
\r
1625 string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";
\r
1626 if (File.Exists(userPresets))
\r
1628 StreamReader presetInput = new StreamReader(userPresets);
\r
1629 while (!presetInput.EndOfStream)
\r
1631 if ((char)presetInput.Peek() == '+')
\r
1633 string item = presetInput.ReadLine();
\r
1634 user_presets.Add(item);
\r
1635 modified_presets_list.Add(item);
\r
1638 presetInput.ReadLine();
\r
1641 presetInput.Close();
\r
1642 presetInput.Dispose();
\r
1645 // now lets scan through the arraylist and remove the preset with the
\r
1646 // same name as the one selected.
\r
1648 foreach (string item in user_presets)
\r
1650 string preset_name = selectedPreset.Replace("--", "");
\r
1651 if (item.Contains(preset_name))
\r
1652 modified_presets_list.RemoveAt(c);
\r
1656 // Now we need to rebuilt the user presets file.
\r
1657 StreamWriter line = new StreamWriter(userPresets);
\r
1658 foreach (string item in modified_presets_list)
\r
1660 line.WriteLine(item);
\r
1665 // Now reload the preset panel
\r
1666 loadPresetPanel();
\r
1671 //---------------------------------------------------
\r
1672 // Encode / Cancel Buttons
\r
1673 // Encode Progress Text Handler
\r
1674 //---------------------------------------------------
\r
1676 #region Encodeing and Queue
\r
1678 Functions.CLI process = new Functions.CLI();
\r
1679 private delegate void UpdateUIHandler();
\r
1681 [DllImport("user32.dll")]
\r
1682 public static extern void LockWorkStation();
\r
1683 [DllImport("user32.dll")]
\r
1684 public static extern int ExitWindowsEx(int uFlags, int dwReason);
\r
1686 private void btn_start_Click(object sender, EventArgs e)
\r
1688 if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")
\r
1689 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1693 if (rtf_query.Text != "")
\r
1694 query = rtf_query.Text;
\r
1696 query = hb_common_func.GenerateTheQuery(this);
\r
1698 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
1699 lbl_encode.Visible = true;
\r
1700 lbl_encode.Text = "Encoding in Progress";
\r
1704 private void btn_add2Queue_Click(object sender, EventArgs e)
\r
1706 if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")
\r
1707 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1711 if (rtf_query.Text != "")
\r
1712 query = rtf_query.Text;
\r
1714 query = hb_common_func.GenerateTheQuery(this);
\r
1716 queueWindow.list_queue.Items.Add(query);
\r
1717 queueWindow.Show();
\r
1721 private void btn_showQueue_Click(object sender, EventArgs e)
\r
1726 private void showQueue()
\r
1728 queueWindow.Show();
\r
1731 private void procMonitor(object state)
\r
1733 // Make sure we are not already encoding and if we are then display an error.
\r
1734 if (hbProc != null)
\r
1735 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1738 hbProc = process.runCli(this, (string)state, false, false, false, false);
\r
1739 hbProc.WaitForExit();
\r
1744 // Do something whent he encode ends.
\r
1745 switch (Properties.Settings.Default.CompletionOption)
\r
1748 System.Diagnostics.Process.Start("Shutdown", "-s -t 60");
\r
1751 ExitWindowsEx(0, 0);
\r
1754 Application.SetSuspendState(PowerState.Suspend, true, true);
\r
1757 Application.SetSuspendState(PowerState.Hibernate, true, true);
\r
1759 case "Lock System":
\r
1760 LockWorkStation();
\r
1762 case "Quit HandBrake":
\r
1763 Application.Exit();
\r
1771 private void setEncodeLabel()
\r
1773 if (this.InvokeRequired)
\r
1775 this.BeginInvoke(new UpdateUIHandler(setEncodeLabel));
\r
1778 lbl_encode.Text = "Encoding Finished";
\r
1783 private void button1_Click(object sender, EventArgs e)
\r
1786 File_Open.ShowDialog();
\r
1787 filename = File_Open.FileName;
\r
1789 if (filename != "")
\r
1793 // Create StreamReader & open file
\r
1794 StreamReader line = new StreamReader(filename);
\r
1796 // Send the query from the file to the Query Parser class then load the preset
\r
1797 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(line.ReadLine());
\r
1798 hb_common_func.presetLoader(this, presetQuery, filename);
\r
1800 // Close the stream
\r
1804 catch (Exception exc)
\r
1806 MessageBox.Show("Unable to load profile. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
1811 private void button2_Click(object sender, EventArgs e)
\r
1814 File_Save.ShowDialog();
\r
1815 filename = File_Save.FileName;
\r
1816 if (filename != "")
\r
1820 // Create a StreamWriter and open the file
\r
1821 StreamWriter line = new StreamWriter(filename);
\r
1823 // Generate and write the query string to the file
\r
1824 String query = hb_common_func.GenerateTheQuery(this);
\r
1825 line.WriteLine(query);
\r
1827 // close the stream
\r
1829 MessageBox.Show("Your profile has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1833 MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
1841 // This is the END of the road ------------------------------------------------------------------------------
\r