OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
1 /*  frmMain.cs $\r
2         \r
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
6 \r
7 using System;\r
8 using System.Collections;\r
9 using System.Drawing;\r
10 using System.Text;\r
11 using System.Windows.Forms;\r
12 using System.IO;\r
13 using System.Diagnostics;\r
14 using System.Threading;\r
15 using System.Runtime.InteropServices;\r
16 using System.Globalization;\r
17 using System.Text.RegularExpressions;\r
18 \r
19 namespace Handbrake\r
20 {\r
21     public partial class frmMain : Form\r
22     {\r
23         // -------------------------------------------------------------- \r
24         // Applicaiton Startup\r
25         // --------------------------------------------------------------\r
26 \r
27         #region Application Startup\r
28 \r
29         // Declarations\r
30         private Process hbProc;\r
31         private Parsing.DVD thisDVD;\r
32         private frmQueue queueWindow = new frmQueue();\r
33         private delegate void updateStatusChanger();\r
34         Functions.Common hb_common_func = new Functions.Common();\r
35         Functions.x264Panel x264PanelFunctions = new Functions.x264Panel();\r
36 \r
37         public frmMain()\r
38         {\r
39             // Load the splash screen in this thread\r
40             Form splash = new frmSplashScreen();\r
41             splash.Show();\r
42 \r
43             //Create a label that can be updated from the parent thread.\r
44             Label lblStatus = new Label();\r
45             lblStatus.Size = new Size(250, 20);\r
46             lblStatus.Location = new Point(10, 280);\r
47             splash.Controls.Add(lblStatus);\r
48 \r
49             //Fire a thread to wait for 2 seconds.  The splash screen will exit when the time expires\r
50             Thread timer = new Thread(splashTimer);\r
51             timer.Start();\r
52 \r
53             InitializeComponent();\r
54 \r
55             // show the form, but leave disabled until preloading is complete then show the main form\r
56             this.Enabled = false;\r
57             this.Show();\r
58             // Forces frmMain to draw\r
59             Application.DoEvents();\r
60 \r
61             // update the status\r
62             if (Properties.Settings.Default.updateStatus == "Checked")\r
63             {\r
64                 lblStatus.Text = "Checking for updates ...";\r
65                 Application.DoEvents();\r
66                 Thread updateCheckThread = new Thread(startupUpdateCheck);\r
67                 updateCheckThread.Start();\r
68                 Thread.Sleep(100);\r
69             }\r
70 \r
71             //H264 Panel Loading\r
72             lblStatus.Text = "Loading H264 Panel ...";\r
73             Application.DoEvents();\r
74             setupH264Panel();\r
75             Thread.Sleep(100);\r
76 \r
77             // Load the presets\r
78             // Set some defaults for the dropdown menus. Just incase the normal or user presets dont load.\r
79             lblStatus.Text = "Loading Presets Bar ...";\r
80             Application.DoEvents();\r
81             drp_crop.SelectedIndex = 0;\r
82             loadPresetPanel();\r
83             Thread.Sleep(200);\r
84 \r
85             // Now load the users default if required. (Will overide the above setting)\r
86             lblStatus.Text = "Loading Preset Settings ...";\r
87             Application.DoEvents();\r
88             if (Properties.Settings.Default.defaultSettings == "Checked")\r
89                 loadUserDefaults();\r
90             else\r
91                 loadNormalPreset();\r
92             Thread.Sleep(100);\r
93 \r
94             // Enable or disable tooltips\r
95             if (Properties.Settings.Default.tooltipEnable == "Checked")\r
96             {\r
97                 lblStatus.Text = "Loading Tooltips ...";\r
98                 Application.DoEvents();\r
99                 ToolTip.Active = true;\r
100                 Thread.Sleep(100);\r
101             }\r
102 \r
103             //Finished Loading\r
104             lblStatus.Text = "Loading Complete!";\r
105             Application.DoEvents();\r
106             Thread.Sleep(200);\r
107 \r
108             // Wait until splash screen is done\r
109             while (timer.IsAlive)\r
110             { Thread.Sleep(100); }\r
111 \r
112             //Close the splash screen\r
113             splash.Close();\r
114             splash.Dispose();\r
115 \r
116             // Turn the interface back to the user\r
117             this.Enabled = true;\r
118         }\r
119 \r
120         // Startup Functions\r
121         private void startupUpdateCheck()\r
122         {\r
123             try\r
124             {\r
125                 if (this.InvokeRequired)\r
126                 {\r
127                     this.BeginInvoke(new updateStatusChanger(startupUpdateCheck));\r
128                     return;\r
129                 }\r
130 \r
131                 Boolean update = hb_common_func.updateCheck(false);\r
132                 if (update == true)\r
133                 {\r
134                     frmUpdater updateWindow = new frmUpdater();\r
135                     updateWindow.Show();\r
136                 }\r
137             }\r
138             catch (Exception)\r
139             {\r
140                 // Don't want to have an exception messagebox displayed behind the splash screen,\r
141                 // So, exception is ignored. Lets hope there are no bugs here :)\r
142             }\r
143         }\r
144         private void splashTimer(object sender)\r
145         {\r
146             Thread.Sleep(1000);  //sit for 1 seconds then exit\r
147         }\r
148         private void showSplash(object sender)\r
149         {\r
150             Form splash = new frmSplashScreen();\r
151             splash.Show();\r
152         }\r
153         private void setupH264Panel()\r
154         {\r
155             /*Set opt widget values here*/\r
156 \r
157             /*B-Frames fX264optBframesPopUp*/\r
158             int i;\r
159             drop_bFrames.Items.Clear();\r
160             drop_bFrames.Items.Add("Default (0)");\r
161             drop_bFrames.Text = "Default (0)";\r
162 \r
163             for (i = 0; i < 17; i++)\r
164             {\r
165                 drop_bFrames.Items.Add(i.ToString());\r
166             }\r
167 \r
168             /*Reference Frames fX264optRefPopUp*/\r
169             drop_refFrames.Items.Clear();\r
170             drop_refFrames.Items.Add("Default (1)");\r
171             drop_refFrames.Text = "Default (1)";\r
172             for (i = 0; i < 17; i++)\r
173             {\r
174                 drop_refFrames.Items.Add(i.ToString());\r
175             }\r
176 \r
177             /*No Fast P-Skip fX264optNfpskipSwitch BOOLEAN*/\r
178             check_noFastPSkip.CheckState = CheckState.Unchecked;\r
179 \r
180             /*No Dict Decimate fX264optNodctdcmtSwitch BOOLEAN*/\r
181             check_noDCTDecimate.CheckState = CheckState.Unchecked;\r
182 \r
183 \r
184             /*Sub Me fX264optSubmePopUp*/\r
185             drop_subpixelMotionEstimation.Items.Clear();\r
186             drop_subpixelMotionEstimation.Items.Add("Default (4)");\r
187             drop_subpixelMotionEstimation.Text = "Default (4)";\r
188             for (i = 0; i < 8; i++)\r
189             {\r
190                 drop_subpixelMotionEstimation.Items.Add(i.ToString());\r
191             }\r
192 \r
193             /*Trellis fX264optTrellisPopUp*/\r
194             drop_trellis.Items.Clear();\r
195             drop_trellis.Items.Add("Default (0)");\r
196             drop_trellis.Text = "Default (0)";\r
197             for (i = 0; i < 3; i++)\r
198             {\r
199                 drop_trellis.Items.Add(i.ToString());\r
200             }\r
201 \r
202             /*Mixed-references fX264optMixedRefsSwitch BOOLEAN*/\r
203             check_mixedReferences.CheckState = CheckState.Unchecked;\r
204 \r
205             /*Motion Estimation fX264optMotionEstPopUp*/\r
206             drop_MotionEstimationMethod.Items.Clear();\r
207             drop_MotionEstimationMethod.Items.Add("Default (Hexagon)");\r
208             drop_MotionEstimationMethod.Items.Add("Diamond");\r
209             drop_MotionEstimationMethod.Items.Add("Hexagon");\r
210             drop_MotionEstimationMethod.Items.Add("Uneven Multi-Hexagon");\r
211             drop_MotionEstimationMethod.Items.Add("Exhaustive");\r
212             drop_MotionEstimationMethod.Text = "Default (Hexagon)";\r
213 \r
214             /*Motion Estimation range fX264optMERangePopUp*/\r
215             drop_MotionEstimationRange.Items.Clear();\r
216             drop_MotionEstimationRange.Items.Add("Default (16)");\r
217             drop_MotionEstimationRange.Text = "Default (16)";\r
218             for (i = 4; i < 65; i++)\r
219             {\r
220                 drop_MotionEstimationRange.Items.Add(i.ToString());\r
221             }\r
222 \r
223             /*Weighted B-Frame Prediction fX264optWeightBSwitch BOOLEAN*/\r
224             check_weightedBFrames.CheckState = CheckState.Unchecked;\r
225 \r
226             /*B-Frame Rate Distortion Optimization fX264optBRDOSwitch BOOLEAN*/\r
227             check_bFrameDistortion.CheckState = CheckState.Unchecked;\r
228 \r
229             /*B-frame Pyramids fX264optBPyramidSwitch BOOLEAN*/\r
230             check_pyrmidalBFrames.CheckState = CheckState.Unchecked;\r
231 \r
232             /*Bidirectional Motion Estimation Refinement fX264optBiMESwitch BOOLEAN*/\r
233             check_BidirectionalRefinement.CheckState = CheckState.Unchecked;\r
234 \r
235             /*Direct B-Frame Prediction Mode fX264optDirectPredPopUp*/\r
236             drop_directPrediction.Items.Clear();\r
237             drop_directPrediction.Items.Add("Default (Spatial)");\r
238             drop_directPrediction.Items.Add("None");\r
239             drop_directPrediction.Items.Add("Spatial");\r
240             drop_directPrediction.Items.Add("Temporal");\r
241             drop_directPrediction.Items.Add("Automatic");\r
242             drop_directPrediction.Text = "Default (Spatial)";\r
243 \r
244             /*Alpha Deblock*/\r
245             drop_deblockAlpha.Items.Clear();\r
246             drop_deblockAlpha.Items.Add("Default (0)");\r
247             drop_deblockAlpha.Text = "Default (0)";\r
248             for (i = -6; i < 7; i++)\r
249             {\r
250                 drop_deblockAlpha.Items.Add(i.ToString());\r
251             }\r
252 \r
253             /*Beta Deblock*/\r
254             drop_deblockBeta.Items.Clear();\r
255             drop_deblockBeta.Items.Add("Default (0)");\r
256             drop_deblockBeta.Text = "Default (0)";\r
257             for (i = -6; i < 7; i++)\r
258             {\r
259                 drop_deblockBeta.Items.Add(i.ToString());\r
260             }\r
261 \r
262             /* Analysis fX264optAnalysePopUp */\r
263             drop_analysis.Items.Clear();\r
264             drop_analysis.Items.Add("Default (some)"); /* 0=default */\r
265             drop_analysis.Items.Add("None");  /* 1=none */\r
266             drop_analysis.Items.Add("All"); /* 2=all */\r
267             drop_analysis.Text = "Default (some)";\r
268 \r
269             /* 8x8 DCT fX264op8x8dctSwitch */\r
270             check_8x8DCT.CheckState = CheckState.Unchecked;\r
271 \r
272             /* CABAC fX264opCabacSwitch */\r
273             check_Cabac.CheckState = CheckState.Checked;\r
274 \r
275             /* Standardize the option string */\r
276             rtf_x264Query.Text = "";\r
277         }\r
278         private void loadUserDefaults()\r
279         {\r
280             string userDefaults = Properties.Settings.Default.defaultUserSettings;\r
281             try\r
282             {\r
283                 // Send the query from the file to the Query Parser class Then load the preset\r
284                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);\r
285                 hb_common_func.presetLoader(this, presetQuery, "User Defaults ");\r
286             }\r
287             catch (Exception)\r
288             {\r
289                 // Do Nothing. We don't want an error appearing behind the splash screen.\r
290             }\r
291         }\r
292 \r
293         #endregion\r
294 \r
295         // -------------------------------------------------------------- \r
296         // The Applications Main Menu\r
297         // -------------------------------------------------------------- \r
298 \r
299         #region File Menu\r
300 \r
301         private void mnu_open_Click(object sender, EventArgs e)\r
302         {\r
303             string filename;\r
304             File_Open.ShowDialog();\r
305             filename = File_Open.FileName;\r
306 \r
307             if (filename != "")\r
308             {\r
309                 try\r
310                 {\r
311                     // Create StreamReader & open file\r
312                     StreamReader line = new StreamReader(filename);\r
313 \r
314                     // Send the query from the file to the Query Parser class then load the preset\r
315                     Functions.QueryParser presetQuery = Functions.QueryParser.Parse(line.ReadLine());\r
316                     hb_common_func.presetLoader(this, presetQuery, filename);\r
317 \r
318                     // Close the stream\r
319                     line.Close();\r
320 \r
321                     Form preset = new frmAddPreset(this);\r
322                     preset.ShowDialog();\r
323 \r
324                 }\r
325                 catch (Exception exc)\r
326                 {\r
327                     MessageBox.Show("Unable to load profile. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
328                 }\r
329             }\r
330         }\r
331         private void mnu_exit_Click(object sender, EventArgs e)\r
332         {\r
333             Application.Exit();\r
334         }\r
335 \r
336         #endregion\r
337 \r
338         #region Tools Menu\r
339 \r
340         private void mnu_encode_Click(object sender, EventArgs e)\r
341         {\r
342             showQueue();\r
343         }\r
344         private void mnu_viewDVDdata_Click(object sender, EventArgs e)\r
345         {\r
346             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
347             dvdInfoWindow.Show();\r
348         }\r
349         private void mnu_options_Click(object sender, EventArgs e)\r
350         {\r
351             Form Options = new frmOptions();\r
352             Options.ShowDialog();\r
353         }\r
354 \r
355         #endregion\r
356 \r
357         #region Presets Menu\r
358 \r
359         private void mnu_presetReset_Click(object sender, EventArgs e)\r
360         {\r
361             treeView_presets.Nodes.Clear();\r
362             grabCLIPresets();\r
363             loadPresetPanel();\r
364             if (treeView_presets.Nodes.Count == 0)\r
365                 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
366             else\r
367                 MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
368         }\r
369         private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
370         {\r
371             loadNormalPreset();\r
372         }\r
373 \r
374         #endregion\r
375 \r
376         #region Help Menu\r
377 \r
378         private void mnu_wiki_Click(object sender, EventArgs e)\r
379         {\r
380             Process.Start("http://handbrake.fr/trac");\r
381         }\r
382         private void mnu_faq_Click(object sender, EventArgs e)\r
383         {\r
384             Process.Start("http://handbrake.fr/trac/wiki/SupportFAQ");\r
385         }\r
386         private void mnu_onlineDocs_Click(object sender, EventArgs e)\r
387         {\r
388             Process.Start("http://handbrake.fr/?article=documentation");\r
389         }\r
390         private void mnu_handbrake_home_Click(object sender, EventArgs e)\r
391         {\r
392             Process.Start("http://handbrake.fr");\r
393         }\r
394         private void mnu_UpdateCheck_Click(object sender, EventArgs e)\r
395         {\r
396             Boolean update = hb_common_func.updateCheck(true);\r
397             if (update == true)\r
398             {\r
399                 frmUpdater updateWindow = new frmUpdater();\r
400                 updateWindow.Show();\r
401             }\r
402             else\r
403                 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
404         }\r
405         private void mnu_about_Click(object sender, EventArgs e)\r
406         {\r
407             Form About = new frmAbout();\r
408             About.ShowDialog();\r
409         }\r
410 \r
411         #endregion\r
412 \r
413         // -------------------------------------------------------------- \r
414         // MainWindow Components, Actions and Functions\r
415         // --------------------------------------------------------------\r
416 \r
417         #region Actions\r
418 \r
419         // ToolBar\r
420         private void btn_start_Click(object sender, EventArgs e)\r
421         {\r
422             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
423                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
424             else\r
425             {\r
426                 String query;\r
427                 if (rtf_query.Text != "")\r
428                     query = rtf_query.Text;\r
429                 else\r
430                     query = hb_common_func.GenerateTheQuery(this);\r
431 \r
432                 ThreadPool.QueueUserWorkItem(procMonitor, query);\r
433                 lbl_encode.Visible = true;\r
434                 lbl_encode.Text = "Encoding in Progress";\r
435             }\r
436         }\r
437         private void btn_add2Queue_Click(object sender, EventArgs e)\r
438         {\r
439             if (text_source.Text == "" || text_source.Text == "Click 'Browse' to continue" || text_destination.Text == "")\r
440                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
441             else\r
442             {\r
443                 String query;\r
444                 if (rtf_query.Text != "")\r
445                     query = rtf_query.Text;\r
446                 else\r
447                     query = hb_common_func.GenerateTheQuery(this);\r
448 \r
449                 queueWindow.list_queue.Items.Add(query);\r
450                 queueWindow.Show();\r
451             }\r
452         }\r
453         private void btn_showQueue_Click(object sender, EventArgs e)\r
454         {\r
455             showQueue();\r
456         }\r
457         private void btn_ActivityWindow_Click(object sender, EventArgs e)\r
458         {\r
459             Form ActivityWindow = new frmActivityWindow();\r
460             ActivityWindow.ShowDialog();\r
461         }\r
462 \r
463         //Source\r
464         private void btn_Browse_Click(object sender, EventArgs e)\r
465         {\r
466             String filename = "";\r
467             text_source.Text = "";\r
468             frmDvdInfo dvdInfoWindow = new frmDvdInfo();\r
469 \r
470             if (check_fileMode.Checked)\r
471             {\r
472                 ISO_Open.ShowDialog();\r
473                 filename = ISO_Open.FileName;\r
474             }\r
475             else\r
476             {\r
477                 DVD_Open.ShowDialog();\r
478                 filename = DVD_Open.SelectedPath;\r
479             }\r
480 \r
481             if (filename.StartsWith("\\"))\r
482                 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
483             else\r
484             {\r
485                 if (filename != "")\r
486                 {\r
487                     Form frmRD = new frmReadDVD(filename, this, dvdInfoWindow);\r
488                     text_source.Text = filename;\r
489                     frmRD.ShowDialog();\r
490                 }\r
491                 else\r
492                     text_source.Text = "Click 'Browse' to continue";\r
493 \r
494                 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
495                 if (drp_dvdtitle.Items.Count == 0)\r
496                     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
497 \r
498             }\r
499         }\r
500         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
501         {\r
502             if (drp_dvdtitle.Items.Count == 1)\r
503                 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
504         }\r
505         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
506         {\r
507             // Reset some values on the form\r
508             lbl_Aspect.Text = "Select a Title";\r
509             lbl_RecomendedCrop.Text = "Select a Title";\r
510             drop_chapterStart.Items.Clear();\r
511             drop_chapterFinish.Items.Clear();\r
512 \r
513             // If the dropdown is set to automatic nothing else needs to be done.\r
514             // Otheriwse if its not, title data has to be loased from parsing.\r
515             if (drp_dvdtitle.Text != "Automatic")\r
516             {\r
517                 Parsing.Title selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
518 \r
519                 // Set the Aspect Ratio\r
520                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
521 \r
522                 // Set the Recommended Cropping values\r
523                 lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
524 \r
525                 // Populate the Start chapter Dropdown\r
526                 drop_chapterStart.Items.Clear();\r
527                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
528                 if (drop_chapterStart.Items.Count > 0)\r
529                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
530 \r
531                 // Populate the Final Chapter Dropdown\r
532                 drop_chapterFinish.Items.Clear();\r
533                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
534                 if (drop_chapterFinish.Items.Count > 0)\r
535                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
536 \r
537                 // Populate the Audio Channels Dropdown\r
538                 drp_track1Audio.Items.Clear();\r
539                 drp_track1Audio.Items.Add("Automatic");\r
540                 drp_track1Audio.Items.Add("None");\r
541                 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
542                 drp_track1Audio.SelectedIndex = 0;\r
543 \r
544                 drp_track2Audio.Items.Clear();\r
545                 drp_track2Audio.Items.Add("None");\r
546                 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
547                 drp_track2Audio.SelectedIndex = 0;\r
548 \r
549                 drp_track3Audio.Items.Clear();\r
550                 drp_track3Audio.Items.Add("None");\r
551                 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
552                 drp_track3Audio.SelectedIndex = 0;\r
553 \r
554                 drp_track4Audio.Items.Clear();\r
555                 drp_track4Audio.Items.Add("None");\r
556                 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
557                 drp_track4Audio.SelectedIndex = 0;\r
558 \r
559                 // Populate the Subtitles dropdown\r
560                 drp_subtitle.Items.Clear();\r
561                 drp_subtitle.Items.Add("None");\r
562                 drp_subtitle.Items.Add("Autoselect");\r
563                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
564                 if (drp_subtitle.Items.Count > 0)\r
565                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
566 \r
567             }\r
568 \r
569             // Run the autoName & chapterNaming functions\r
570             hb_common_func.autoName(this);\r
571             hb_common_func.chapterNaming(this);\r
572         }\r
573         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
574         {\r
575             drop_chapterStart.BackColor = Color.White;\r
576             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
577             {\r
578                 try\r
579                 {\r
580                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
581                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
582 \r
583                     if (chapterFinish < chapterStart)\r
584                         drop_chapterStart.BackColor = Color.LightCoral;\r
585                 }\r
586                 catch (Exception)\r
587                 {\r
588                     drop_chapterStart.BackColor = Color.LightCoral;\r
589                 }\r
590             }\r
591             // Run the Autonaming function\r
592             hb_common_func.autoName(this);\r
593         }\r
594         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
595         {\r
596             drop_chapterFinish.BackColor = Color.White;\r
597             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
598             {\r
599                 try\r
600                 {\r
601                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
602                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
603 \r
604                     if (chapterFinish < chapterStart)\r
605                         drop_chapterFinish.BackColor = Color.LightCoral;\r
606                 }\r
607                 catch (Exception)\r
608                 {\r
609                     drop_chapterFinish.BackColor = Color.LightCoral;\r
610                 }\r
611             }\r
612 \r
613             // Run the Autonaming function\r
614             hb_common_func.autoName(this);\r
615         }\r
616 \r
617         //Destination\r
618         private void btn_destBrowse_Click(object sender, EventArgs e)\r
619         {\r
620             // This removes the file extension from the filename box on the save file dialog.\r
621             // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.\r
622             DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");\r
623 \r
624             // Show the dialog and set the main form file path\r
625             DVD_Save.ShowDialog();\r
626             if (DVD_Save.FileName.StartsWith("\\"))\r
627                 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
628             else\r
629             {\r
630                 setAudioByContainer(DVD_Save.FileName);\r
631 \r
632                 text_destination.Text = DVD_Save.FileName;\r
633 \r
634                 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)\r
635                 if (Check_ChapterMarkers.Checked)\r
636                     text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");\r
637             }\r
638         }\r
639         private void text_destination_TextChanged(object sender, EventArgs e)\r
640         {\r
641             setAudioByContainer(text_destination.Text);\r
642             setVideoByContainer(text_destination.Text);\r
643         }\r
644 \r
645         // Output Settings\r
646         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
647         {\r
648             if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
649             {\r
650                 check_largeFile.Enabled = true;\r
651                 check_iPodAtom.Enabled = true;\r
652                 check_optimiseMP4.Enabled = true;\r
653                 check_largeFile.Visible = true;\r
654                 check_iPodAtom.Visible = true;\r
655                 check_optimiseMP4.Visible = true;\r
656             }\r
657             else\r
658             {\r
659                 check_largeFile.Checked = false;\r
660                 check_iPodAtom.Checked = false;\r
661                 check_optimiseMP4.Checked = false;\r
662                 check_largeFile.Visible = false;\r
663                 check_iPodAtom.Visible = false;\r
664                 check_optimiseMP4.Visible = false;\r
665             }\r
666 \r
667 \r
668             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
669             if (!drp_videoEncoder.Text.Contains("H.264"))\r
670             {\r
671                 check_turbo.CheckState = CheckState.Unchecked;\r
672                 check_turbo.Enabled = false;\r
673                 h264Tab.Enabled = false;\r
674                 rtf_x264Query.Text = "";\r
675                 check_iPodAtom.Enabled = false;\r
676                 check_iPodAtom.Checked = false;\r
677                 check_optimiseMP4.Enabled = false;\r
678                 if (drp_anamorphic.Items.Count == 3)\r
679                     drp_anamorphic.Items.RemoveAt(2);\r
680             }\r
681             else\r
682             {\r
683                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
684                     check_turbo.Enabled = true;\r
685 \r
686                 h264Tab.Enabled = true;\r
687                 check_iPodAtom.Enabled = true;\r
688                 check_optimiseMP4.Enabled = true;\r
689                 if (!drp_anamorphic.Items.Contains("Loose"))\r
690                     drp_anamorphic.Items.Add("Loose");\r
691             }\r
692 \r
693         }\r
694 \r
695         //Video Tab\r
696         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
697         {\r
698             text_filesize.Text = "";\r
699             slider_videoQuality.Value = 0;\r
700             SliderValue.Text = "0%";\r
701         }\r
702         private void text_filesize_TextChanged(object sender, EventArgs e)\r
703         {\r
704             text_bitrate.Text = "";\r
705             slider_videoQuality.Value = 0;\r
706             SliderValue.Text = "0%";\r
707         }\r
708         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
709         {\r
710             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
711             text_bitrate.Text = "";\r
712             text_filesize.Text = "";\r
713         }\r
714         private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)\r
715         {\r
716             if (check_2PassEncode.CheckState.ToString() == "Checked")\r
717             {\r
718                 if (drp_videoEncoder.Text.Contains("H.264"))\r
719                     check_turbo.Enabled = true;\r
720             }\r
721             else\r
722             {\r
723                 check_turbo.Enabled = false;\r
724                 check_turbo.CheckState = CheckState.Unchecked;\r
725             }\r
726         }\r
727 \r
728         //Picture Tab\r
729         private void text_width_TextChanged(object sender, EventArgs e)\r
730         {\r
731             try\r
732             {\r
733                 if ((int.Parse(text_width.Text) % 16) != 0)\r
734                     text_width.BackColor = Color.LightCoral;\r
735                 else\r
736                     text_width.BackColor = Color.LightGreen;\r
737 \r
738 \r
739                 if ((lbl_Aspect.Text != "Select a Title") && (drp_crop.SelectedIndex == 2))\r
740                 {\r
741                     double height = int.Parse(text_width.Text) / double.Parse(lbl_Aspect.Text);\r
742                     double mod16 = height % 16;\r
743                     height = height - mod16;\r
744 \r
745                     if (text_width.Text == "")\r
746                     {\r
747                         text_height.Text = "";\r
748                         text_width.BackColor = Color.White;\r
749                     }\r
750                     else\r
751                         text_height.Text = height.ToString();\r
752                 }\r
753             }\r
754             catch (Exception)\r
755             {\r
756                 // No need to throw an error here.\r
757             }\r
758         }\r
759         private void text_height_TextChanged(object sender, EventArgs e)\r
760         {\r
761             try\r
762             {\r
763                 if ((int.Parse(text_height.Text) % 16) != 0)\r
764                     text_height.BackColor = Color.LightCoral;\r
765                 else\r
766                     text_height.BackColor = Color.LightGreen;\r
767             }\r
768             catch (Exception)\r
769             {\r
770                 // No need to alert the user.\r
771             }\r
772         }\r
773         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
774         {\r
775             if ((string)drp_crop.SelectedItem == "Custom")\r
776             {\r
777                 text_left.Enabled = true;\r
778                 text_right.Enabled = true;\r
779                 text_top.Enabled = true;\r
780                 text_bottom.Enabled = true;\r
781                 text_left.Text = "0";\r
782                 text_right.Text = "0";\r
783                 text_top.Text = "0";\r
784                 text_bottom.Text = "0";\r
785             }\r
786 \r
787             if ((string)drp_crop.SelectedItem == "Automatic")\r
788             {\r
789                 text_left.Enabled = false;\r
790                 text_right.Enabled = false;\r
791                 text_top.Enabled = false;\r
792                 text_bottom.Enabled = false;\r
793 \r
794                 if (lbl_RecomendedCrop.Text != "Select a Title")\r
795                 {\r
796                     string[] temp = new string[4];\r
797                     temp = lbl_RecomendedCrop.Text.Split('/');\r
798                     text_left.Text = temp[2];\r
799                     text_right.Text = temp[3];\r
800                     text_top.Text = temp[0];\r
801                     text_bottom.Text = temp[1];\r
802                 }\r
803                 else\r
804                 {\r
805                     text_left.Text = "";\r
806                     text_right.Text = "";\r
807                     text_top.Text = "";\r
808                     text_bottom.Text = "";\r
809                 }\r
810             }\r
811 \r
812             if ((string)drp_crop.SelectedItem == "No Crop")\r
813             {\r
814                 text_left.Enabled = false;\r
815                 text_right.Enabled = false;\r
816                 text_top.Enabled = false;\r
817                 text_bottom.Enabled = false;\r
818                 text_left.Text = "0";\r
819                 text_right.Text = "0";\r
820                 text_top.Text = "0";\r
821                 text_bottom.Text = "0";\r
822             }\r
823         }\r
824         private void check_vfr_CheckedChanged(object sender, EventArgs e)\r
825         {\r
826             if (check_vfr.CheckState == CheckState.Checked)\r
827             {\r
828                 check_detelecine.Enabled = false;\r
829                 check_detelecine.CheckState = CheckState.Checked;\r
830                 drp_videoFramerate.Enabled = false;\r
831                 drp_videoFramerate.SelectedItem = "29.97";\r
832                 lbl_vfr.Visible = true;\r
833             }\r
834             else\r
835             {\r
836                 check_detelecine.Enabled = true;\r
837                 drp_videoFramerate.Enabled = true;\r
838                 drp_videoFramerate.SelectedItem = "Automatic";\r
839                 lbl_vfr.Visible = false;\r
840             }\r
841         }\r
842         private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)\r
843         {\r
844             if (drp_anamorphic.SelectedIndex == 1)\r
845             {\r
846                 text_height.BackColor = Color.LightGray;\r
847                 text_width.BackColor = Color.LightGray;\r
848                 text_height.Text = "";\r
849                 text_width.Text = "";\r
850                 text_height.Enabled = false;\r
851                 text_width.Enabled = false;\r
852             }\r
853 \r
854             if (drp_anamorphic.SelectedIndex == 2)\r
855             {\r
856                 text_height.Text = "";\r
857                 text_height.Enabled = false;\r
858                 text_height.BackColor = Color.LightGray;\r
859 \r
860                 text_width.Enabled = true;\r
861                 text_width.BackColor = Color.White;\r
862             }\r
863 \r
864             if (drp_anamorphic.SelectedIndex == 0)\r
865             {\r
866                 text_height.BackColor = Color.White;\r
867                 text_width.BackColor = Color.White;\r
868                 text_height.Enabled = true;\r
869                 text_width.Enabled = true;\r
870             }\r
871         }\r
872 \r
873         // Audio Tab\r
874         private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)\r
875         {\r
876             if (drp_track2Audio.SelectedItem.Equals("None"))\r
877             {\r
878                 drp_audbit_2.Enabled = false;\r
879                 drp_audenc_2.Enabled = false;\r
880                 drp_audsr_2.Enabled = false;\r
881                 drp_audmix_2.Enabled = false;\r
882                 trackBar2.Enabled = false;\r
883                 drp_audbit_2.Text = "";\r
884                 drp_audenc_2.Text = "";\r
885                 drp_audsr_2.Text = "";\r
886                 drp_audmix_2.Text = "Automatic";\r
887                 trackBar2.Value = 0;\r
888 \r
889                 // Disable the 3rd Track.\r
890                 drp_track3Audio.Enabled = false;\r
891                 drp_track3Audio.Text = "None";\r
892                 drp_audbit_3.Text = "";\r
893                 drp_audenc_3.Text = "";\r
894                 drp_audsr_3.Text = "";\r
895                 drp_audmix_3.Text = "Automatic";\r
896                 trackBar3.Value = 0;\r
897             }\r
898             else\r
899             {\r
900                 drp_audbit_2.Enabled = true;\r
901                 drp_audenc_2.Enabled = true;\r
902                 drp_audsr_2.Enabled = true;\r
903                 drp_audmix_2.Enabled = true;\r
904                 trackBar2.Enabled = true;\r
905                 drp_audbit_2.Text = "160";\r
906                 drp_audenc_2.Text = "AAC";\r
907                 drp_audsr_2.Text = "48";\r
908                 drp_audmix_2.Text = "Automatic";\r
909 \r
910                 // Enable the 3rd Track.\r
911                 drp_track3Audio.Enabled = true;\r
912                 drp_audbit_3.Text = "";\r
913                 drp_audenc_3.Text = "";\r
914                 drp_audsr_3.Text = "";\r
915                 drp_audmix_3.Text = "Automatic";\r
916             }\r
917         }\r
918         private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)\r
919         {\r
920             if (drp_track3Audio.SelectedItem.Equals("None"))\r
921             {\r
922                 drp_audbit_3.Enabled = false;\r
923                 drp_audenc_3.Enabled = false;\r
924                 drp_audsr_3.Enabled = false;\r
925                 drp_audmix_3.Enabled = false;\r
926                 trackBar3.Enabled = false;\r
927                 drp_audbit_3.Text = "";\r
928                 drp_audenc_3.Text = "";\r
929                 drp_audsr_3.Text = "";\r
930                 drp_audmix_3.Text = "Automatic";\r
931                 trackBar3.Value = 0;\r
932 \r
933                 // Disable the 4th Track.\r
934                 drp_track4Audio.Enabled = false;\r
935                 drp_track4Audio.Text = "None";\r
936                 drp_audbit_4.Text = "";\r
937                 drp_audenc_4.Text = "";\r
938                 drp_audsr_4.Text = "";\r
939                 drp_audmix_4.Text = "Automatic";\r
940                 \r
941             }\r
942             else\r
943             {\r
944                 drp_audbit_3.Enabled = true;\r
945                 drp_audenc_3.Enabled = true;\r
946                 drp_audsr_3.Enabled = true;\r
947                 drp_audmix_3.Enabled = true;\r
948                 trackBar3.Enabled = true;\r
949                 drp_audbit_3.Text = "160";\r
950                 drp_audenc_3.Text = "AAC";\r
951                 drp_audsr_3.Text = "48";\r
952                 drp_audmix_3.Text = "Automatic";\r
953 \r
954                 // Enable the 4th Track.\r
955                 drp_track4Audio.Enabled = true;\r
956                 drp_audbit_4.Text = "";\r
957                 drp_audenc_4.Text = "";\r
958                 drp_audsr_4.Text = "";\r
959                 drp_audmix_4.Text = "Automatic";\r
960             }\r
961             \r
962         }\r
963         private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)\r
964         {\r
965             if (drp_track4Audio.SelectedItem.Equals("None"))\r
966             {\r
967                 drp_audbit_4.Enabled = false;\r
968                 drp_audenc_4.Enabled = false;\r
969                 drp_audsr_4.Enabled = false;\r
970                 drp_audmix_4.Enabled = false;\r
971                 trackBar4.Enabled = false;\r
972                 drp_audbit_4.Text = "";\r
973                 drp_audenc_4.Text = "";\r
974                 drp_audsr_4.Text = "";\r
975                 drp_audmix_4.Text = "Automatic";\r
976                 trackBar4.Value = 0;\r
977             }\r
978             else\r
979             {\r
980                 drp_audbit_4.Enabled = true;\r
981                 drp_audenc_4.Enabled = true;\r
982                 drp_audsr_4.Enabled = true;\r
983                 drp_audmix_4.Enabled = true;\r
984                 trackBar4.Enabled = true;\r
985                 drp_audbit_4.Text = "160";\r
986                 drp_audenc_4.Text = "AAC";\r
987                 drp_audsr_4.Text = "48";\r
988                 drp_audmix_4.Text = "Automatic";\r
989             }\r
990         }\r
991 \r
992         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
993         {\r
994             if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))\r
995                 setBitrateSelections384(drp_audbit_1);\r
996             else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))\r
997             {\r
998                 setBitrateSelections160(drp_audbit_1);\r
999                 drp_audbit_1.Text = "160";\r
1000             }\r
1001         }\r
1002         private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)\r
1003         {\r
1004             if (drp_audmix_1.Text == "Automatic")\r
1005                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1006 \r
1007             if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))\r
1008                 setBitrateSelections384(drp_audbit_2);\r
1009             else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))\r
1010             {\r
1011                 setBitrateSelections160(drp_audbit_2);\r
1012                 drp_audbit_2.Text = "160";\r
1013             }\r
1014         }\r
1015         private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)\r
1016         {\r
1017             if (drp_audmix_2.Text == "Automatic")\r
1018                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1019 \r
1020             if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))\r
1021                 setBitrateSelections384(drp_audbit_3);\r
1022             else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))\r
1023             {\r
1024                 setBitrateSelections160(drp_audbit_3);\r
1025                 drp_audbit_3.Text = "160";\r
1026             }\r
1027         }\r
1028         private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)\r
1029         {\r
1030             if (drp_audmix_3.Text == "Automatic")\r
1031                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1032 \r
1033             if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))\r
1034                 setBitrateSelections384(drp_audbit_4);\r
1035             else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))\r
1036             {\r
1037                 setBitrateSelections160(drp_audbit_4);\r
1038                 drp_audbit_4.Text = "160";\r
1039             }\r
1040         }\r
1041 \r
1042         private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)\r
1043         {\r
1044             if (drp_audenc_1.Text == "AC3")\r
1045             {\r
1046                 drp_audmix_1.Enabled = false;\r
1047                 drp_audbit_1.Enabled = false;\r
1048                 drp_audsr_1.Enabled = false;\r
1049             }\r
1050             else\r
1051             {\r
1052                 drp_audmix_1.Enabled = true;\r
1053                 drp_audbit_1.Enabled = true;\r
1054                 drp_audsr_1.Enabled = true;\r
1055 \r
1056                 drp_audmix_1.Text = "Automatic";\r
1057                 drp_audbit_1.Text = "160";\r
1058                 drp_audsr_1.Text = "48";\r
1059             }\r
1060 \r
1061 \r
1062             if (drp_audenc_1.Text == "AAC")\r
1063             {\r
1064                 drp_audmix_1.Items.Clear();\r
1065                 drp_audmix_1.Items.Add("Mono");\r
1066                 drp_audmix_1.Items.Add("Stereo");\r
1067                 drp_audmix_1.Items.Add("Dolby Surround");\r
1068                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1069                 drp_audmix_1.Items.Add("6 Channel Discrete");\r
1070 \r
1071                 setBitrateSelections160(drp_audbit_1);\r
1072             }\r
1073             else\r
1074             {\r
1075                 drp_audmix_1.Items.Clear();\r
1076                 drp_audmix_1.Items.Add("Stereo");\r
1077                 drp_audmix_1.Items.Add("Dolby Surround");\r
1078                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1079 \r
1080                 setBitrateSelections320(drp_audbit_1);\r
1081             }\r
1082         }\r
1083         private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)\r
1084         {\r
1085             if (drp_audenc_2.Text == "AC3")\r
1086             {\r
1087                 drp_audmix_2.Enabled = false;\r
1088                 drp_audbit_2.Enabled = false;\r
1089                 drp_audsr_2.Enabled = false;\r
1090 \r
1091                 drp_audmix_2.Text = "Automatic";\r
1092                 drp_audbit_2.Text = "160";\r
1093                 drp_audsr_2.Text = "48";\r
1094             }\r
1095             else\r
1096             {\r
1097                 // Just make sure not to re-enable the following boxes if the track2 is none\r
1098                 if (drp_track2Audio.Text != "None")\r
1099                 {\r
1100                     drp_audmix_2.Enabled = true;\r
1101                     drp_audbit_2.Enabled = true;\r
1102                     drp_audsr_2.Enabled = true;\r
1103 \r
1104                     drp_audmix_2.Text = "Automatic";\r
1105                     drp_audbit_2.Text = "160";\r
1106                     drp_audsr_2.Text = "48";\r
1107                 }\r
1108             }\r
1109 \r
1110             if (drp_audenc_2.Text == "AAC")\r
1111             {\r
1112                 drp_audmix_2.Items.Clear();\r
1113                 drp_audmix_2.Items.Add("Mono");\r
1114                 drp_audmix_2.Items.Add("Stereo");\r
1115                 drp_audmix_2.Items.Add("Dolby Surround");\r
1116                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1117                 drp_audmix_2.Items.Add("6 Channel Discrete");\r
1118 \r
1119                 setBitrateSelections160(drp_audbit_2);\r
1120             }\r
1121             else\r
1122             {\r
1123                 drp_audmix_2.Items.Clear();\r
1124                 drp_audmix_2.Items.Add("Stereo");\r
1125                 drp_audmix_2.Items.Add("Dolby Surround");\r
1126                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1127 \r
1128                 setBitrateSelections320(drp_audbit_2);\r
1129             }\r
1130         }\r
1131         private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)\r
1132         {\r
1133             if (drp_audenc_3.Text == "AC3")\r
1134             {\r
1135                 drp_audmix_3.Enabled = false;\r
1136                 drp_audbit_3.Enabled = false;\r
1137                 drp_audsr_3.Enabled = false;\r
1138 \r
1139                 drp_audmix_3.Text = "Automatic";\r
1140                 drp_audbit_3.Text = "160";\r
1141                 drp_audsr_3.Text = "48";\r
1142             }\r
1143             else\r
1144             {\r
1145                 // Just make sure not to re-enable the following boxes if the track above is none\r
1146                 if (drp_track2Audio.Text != "None")\r
1147                 {\r
1148                     drp_audmix_3.Enabled = true;\r
1149                     drp_audbit_3.Enabled = true;\r
1150                     drp_audsr_3.Enabled = true;\r
1151 \r
1152                     drp_audmix_3.Text = "Automatic";\r
1153                     drp_audbit_3.Text = "160";\r
1154                     drp_audsr_3.Text = "48";\r
1155                 }\r
1156             }\r
1157 \r
1158 \r
1159             if (drp_audenc_3.Text == "AAC")\r
1160             {\r
1161                 drp_audmix_3.Items.Clear();\r
1162                 drp_audmix_3.Items.Add("Mono");\r
1163                 drp_audmix_3.Items.Add("Stereo");\r
1164                 drp_audmix_3.Items.Add("Dolby Surround");\r
1165                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1166                 drp_audmix_3.Items.Add("6 Channel Discrete");\r
1167 \r
1168                 setBitrateSelections160(drp_audbit_3);\r
1169             }\r
1170             else\r
1171             {\r
1172                 drp_audmix_3.Items.Clear();\r
1173                 drp_audmix_3.Items.Add("Stereo");\r
1174                 drp_audmix_3.Items.Add("Dolby Surround");\r
1175                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1176 \r
1177                 setBitrateSelections320(drp_audbit_3);\r
1178             }\r
1179         }\r
1180         private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)\r
1181         {\r
1182             if (drp_audenc_4.Text == "AC3")\r
1183             {\r
1184                 drp_audmix_4.Enabled = false;\r
1185                 drp_audbit_4.Enabled = false;\r
1186                 drp_audsr_4.Enabled = false;\r
1187 \r
1188                 drp_audmix_4.Text = "Automatic";\r
1189                 drp_audbit_4.Text = "160";\r
1190                 drp_audsr_4.Text = "48";\r
1191             }\r
1192             else\r
1193             {\r
1194                 // Just make sure not to re-enable the following boxes if the track above is none\r
1195                 if (drp_track2Audio.Text != "None")\r
1196                 {\r
1197                     drp_audmix_4.Enabled = true;\r
1198                     drp_audbit_4.Enabled = true;\r
1199                     drp_audsr_4.Enabled = true;\r
1200 \r
1201                     drp_audmix_4.Text = "Automatic";\r
1202                     drp_audbit_4.Text = "160";\r
1203                     drp_audsr_4.Text = "48";\r
1204                 }\r
1205             }\r
1206 \r
1207 \r
1208             if (drp_audenc_4.Text == "AAC")\r
1209             {\r
1210                 drp_audmix_4.Items.Clear();\r
1211                 drp_audmix_4.Items.Add("Mono");\r
1212                 drp_audmix_4.Items.Add("Stereo");\r
1213                 drp_audmix_4.Items.Add("Dolby Surround");\r
1214                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1215                 drp_audmix_4.Items.Add("6 Channel Discrete");\r
1216 \r
1217                 setBitrateSelections160(drp_audbit_4);\r
1218             }\r
1219             else\r
1220             {\r
1221                 drp_audmix_4.Items.Clear();\r
1222                 drp_audmix_4.Items.Add("Stereo");\r
1223                 drp_audmix_4.Items.Add("Dolby Surround");\r
1224                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1225 \r
1226                 setBitrateSelections320(drp_audbit_4);\r
1227             }\r
1228         }\r
1229 \r
1230         private void trackBar1_Scroll(object sender, EventArgs e)\r
1231         {\r
1232             double value = trackBar1.Value / 10.0;\r
1233             value++;\r
1234 \r
1235             lbl_drc1.Text = value.ToString();\r
1236         }\r
1237         private void trackBar2_Scroll(object sender, EventArgs e)\r
1238         {\r
1239             double value = trackBar2.Value / 10.0;\r
1240             value++;\r
1241 \r
1242             lbl_drc2.Text = value.ToString();\r
1243         }\r
1244         private void trackBar3_Scroll(object sender, EventArgs e)\r
1245         {\r
1246             double value = trackBar3.Value / 10.0;\r
1247             value++;\r
1248 \r
1249             lbl_drc3.Text = value.ToString();\r
1250         }\r
1251         private void trackBar4_Scroll(object sender, EventArgs e)\r
1252         {\r
1253             double value = trackBar4.Value / 10.0;\r
1254             value++;\r
1255 \r
1256             lbl_drc4.Text = value.ToString();\r
1257         }\r
1258 \r
1259         private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1260         {\r
1261             if (drp_subtitle.Text.Contains("None"))\r
1262             {\r
1263                 check_forced.Enabled = false;\r
1264                 check_forced.Checked = false;\r
1265             }\r
1266             else\r
1267                 check_forced.Enabled = true;\r
1268         }\r
1269 \r
1270         // Chapter Marker Tab\r
1271         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1272         {\r
1273             if (Check_ChapterMarkers.Checked)\r
1274             {\r
1275                 string destination = text_destination.Text;\r
1276                 destination = destination.Replace(".mp4", ".m4v");\r
1277                 text_destination.Text = destination;\r
1278                 data_chpt.Rows.Clear();\r
1279                 data_chpt.Enabled = true;\r
1280                 hb_common_func.chapterNaming(this);\r
1281             }\r
1282             else\r
1283             {\r
1284                 string destination = text_destination.Text;\r
1285                 destination = destination.Replace(".m4v", ".mp4");\r
1286                 text_destination.Text = destination;\r
1287                 data_chpt.Rows.Clear();\r
1288                 data_chpt.Enabled = false;\r
1289             }\r
1290         }\r
1291 \r
1292         // Advanced Tab\r
1293         private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1294         {\r
1295             x264PanelFunctions.on_x264_WidgetChange("ref", this);\r
1296         }\r
1297         private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)\r
1298         {\r
1299             x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);\r
1300         }\r
1301         private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1302         {\r
1303             x264PanelFunctions.on_x264_WidgetChange("bframes", this);\r
1304         }\r
1305         private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)\r
1306         {\r
1307             x264PanelFunctions.on_x264_WidgetChange("direct", this);\r
1308         }\r
1309         private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)\r
1310         {\r
1311             x264PanelFunctions.on_x264_WidgetChange("weightb", this);\r
1312         }\r
1313         private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)\r
1314         {\r
1315             x264PanelFunctions.on_x264_WidgetChange("brdo", this);\r
1316         }\r
1317         private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)\r
1318         {\r
1319             x264PanelFunctions.on_x264_WidgetChange("bime", this);\r
1320         }\r
1321         private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)\r
1322         {\r
1323             x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);\r
1324         }\r
1325         private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)\r
1326         {\r
1327             x264PanelFunctions.on_x264_WidgetChange("me", this);\r
1328         }\r
1329         private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)\r
1330         {\r
1331             x264PanelFunctions.on_x264_WidgetChange("merange", this);\r
1332         }\r
1333         private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)\r
1334         {\r
1335             x264PanelFunctions.on_x264_WidgetChange("subq", this);\r
1336         }\r
1337         private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)\r
1338         {\r
1339             x264PanelFunctions.on_x264_WidgetChange("analyse", this);\r
1340         }\r
1341         private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)\r
1342         {\r
1343             x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);\r
1344         }\r
1345         private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)\r
1346         {\r
1347             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1348 \r
1349         }\r
1350         private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)\r
1351         {\r
1352             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1353 \r
1354         }\r
1355         private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)\r
1356         {\r
1357             x264PanelFunctions.on_x264_WidgetChange("trellis", this);\r
1358         }\r
1359         private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)\r
1360         {\r
1361             x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);\r
1362         }\r
1363         private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)\r
1364         {\r
1365             x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);\r
1366 \r
1367         }\r
1368         private void check_Cabac_CheckedChanged(object sender, EventArgs e)\r
1369         {\r
1370             x264PanelFunctions.on_x264_WidgetChange("cabac", this);\r
1371         }\r
1372 \r
1373         private void rtf_x264Query_TextChanged(object sender, EventArgs e)\r
1374         {\r
1375             if (rtf_x264Query.Text.EndsWith("\n"))\r
1376             {\r
1377                 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");\r
1378                 x264PanelFunctions.X264_StandardizeOptString(this);\r
1379                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1380 \r
1381                 if (rtf_x264Query.Text == "")\r
1382                     x264PanelFunctions.reset2Defaults(this);\r
1383             }\r
1384         }\r
1385         private void btn_reset_Click(object sender, EventArgs e)\r
1386         {\r
1387             rtf_x264Query.Text = "";\r
1388             x264PanelFunctions.reset2Defaults(this);\r
1389         }\r
1390 \r
1391         // Query Editor Tab\r
1392         private void btn_generate_Query_Click(object sender, EventArgs e)\r
1393         {\r
1394             rtf_query.Text = hb_common_func.GenerateTheQuery(this);\r
1395         }\r
1396         private void btn_clear_Click(object sender, EventArgs e)\r
1397         {\r
1398             rtf_query.Clear();\r
1399         }\r
1400         private void btn_copy2C_Click(object sender, EventArgs e)\r
1401         {\r
1402             if (rtf_query.Text != "")\r
1403                 Clipboard.SetText(rtf_query.Text, TextDataFormat.Text);\r
1404         }\r
1405 \r
1406         // Presets\r
1407         private void btn_addPreset_Click(object sender, EventArgs e)\r
1408         {\r
1409             Form preset = new frmAddPreset(this);\r
1410             preset.ShowDialog();\r
1411         }\r
1412         private void btn_removePreset_Click(object sender, EventArgs e)\r
1413         {\r
1414             ArrayList user_presets = new ArrayList();\r
1415             ArrayList modified_presets_list = new ArrayList();\r
1416             string selectedPreset = null;\r
1417             selectedPreset = treeView_presets.SelectedNode.Text;\r
1418 \r
1419             if (!selectedPreset.StartsWith("--"))\r
1420                 MessageBox.Show("Sorry, You can not remove any of the built in presets.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1421 \r
1422 \r
1423             // Scan through the users presets and dump them all in an arraylist\r
1424             string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1425             if (File.Exists(userPresets))\r
1426             {\r
1427                 StreamReader presetInput = new StreamReader(userPresets);\r
1428                 while (!presetInput.EndOfStream)\r
1429                 {\r
1430                     if ((char)presetInput.Peek() == '+')\r
1431                     {\r
1432                         string item = presetInput.ReadLine();\r
1433                         user_presets.Add(item);\r
1434                         modified_presets_list.Add(item);\r
1435                     }\r
1436                     else\r
1437                         presetInput.ReadLine();\r
1438                 }\r
1439 \r
1440                 presetInput.Close();\r
1441                 presetInput.Dispose();\r
1442             }\r
1443 \r
1444             // now lets scan through the arraylist and remove the preset with the\r
1445             // same name as the one selected.\r
1446             int c = 0;\r
1447             foreach (string item in user_presets)\r
1448             {\r
1449                 string preset_name = selectedPreset.Replace("--", "");\r
1450                 if (item.Contains(preset_name))\r
1451                     modified_presets_list.RemoveAt(c);\r
1452                 c++;\r
1453             }\r
1454 \r
1455             // Now we need to rebuilt the user presets file.\r
1456             StreamWriter line = new StreamWriter(userPresets);\r
1457             foreach (string item in modified_presets_list)\r
1458             {\r
1459                 line.WriteLine(item);\r
1460             }\r
1461             line.Close();\r
1462             line.Dispose();\r
1463 \r
1464             // Now reload the preset panel\r
1465             loadPresetPanel();\r
1466         }\r
1467         private void btn_setDefault_Click(object sender, EventArgs e)\r
1468         {\r
1469             String query = hb_common_func.GenerateTheQuery(this);\r
1470             Properties.Settings.Default.defaultUserSettings = query;\r
1471             // Save the new default Settings\r
1472             Properties.Settings.Default.Save();\r
1473             MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
1474         }\r
1475         private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)\r
1476         {\r
1477             //When the user select a preset from the treeview, load it\r
1478             try\r
1479             {\r
1480                 // Scan through the built in presets\r
1481                 string builtInPresets = Application.StartupPath.ToString() + "\\presets.dat";\r
1482                 if (File.Exists(builtInPresets))\r
1483                 {\r
1484                     StreamReader presetInput = new StreamReader(builtInPresets);\r
1485                     while (!presetInput.EndOfStream)\r
1486                     {\r
1487                         if ((char)presetInput.Peek() == '+')\r
1488                         {\r
1489                             string preset = presetInput.ReadLine().Replace("+ ", "");\r
1490                             checkSelectedPreset(preset);\r
1491                         }\r
1492                         else\r
1493                             presetInput.ReadLine();\r
1494                     }\r
1495 \r
1496                     presetInput.Close();\r
1497                 }\r
1498 \r
1499                 // Scan through the users presets\r
1500                 string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1501                 if (File.Exists(userPresets))\r
1502                 {\r
1503                     StreamReader presetInput = new StreamReader(userPresets);\r
1504                     while (!presetInput.EndOfStream)\r
1505                     {\r
1506                         if ((char)presetInput.Peek() == '+')\r
1507                         {\r
1508                             string preset = presetInput.ReadLine().Replace("+ ", "");\r
1509                             checkSelectedPreset(preset);\r
1510                         }\r
1511                         else\r
1512                             presetInput.ReadLine();\r
1513                     }\r
1514 \r
1515                     presetInput.Close();\r
1516                     presetInput.Dispose();\r
1517                 }\r
1518             }\r
1519             catch (Exception exc)\r
1520             {\r
1521                 MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
1522             }\r
1523         }\r
1524 \r
1525         #endregion\r
1526 \r
1527         #region Functions\r
1528         // DVD Parsing\r
1529         public void setStreamReader(Parsing.DVD dvd)\r
1530         {\r
1531             this.thisDVD = dvd;\r
1532         }\r
1533 \r
1534         // Audio system functions\r
1535         private void setAudioByContainer(String path)\r
1536         {\r
1537             string oldval = "";\r
1538 \r
1539             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1540             {\r
1541                 oldval = drp_audenc_1.Text;\r
1542                 drp_audenc_1.Items.Clear();\r
1543                 drp_audenc_1.Items.Add("AAC");\r
1544                 drp_audenc_1.Items.Add("AC3");\r
1545                 if ((oldval != "AAC") && (oldval != "AC3"))\r
1546                     drp_audenc_1.SelectedIndex = 0;\r
1547 \r
1548                 oldval = drp_audenc_2.Text;\r
1549                 drp_audenc_2.Items.Clear();\r
1550                 drp_audenc_2.Items.Add("AAC");\r
1551                 drp_audenc_2.Items.Add("AC3");\r
1552                 if (drp_audenc_2.Enabled)\r
1553                 {\r
1554                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1555                         drp_audenc_2.SelectedIndex = 0;\r
1556                 }\r
1557 \r
1558                 oldval = drp_audenc_3.Text;\r
1559                 drp_audenc_3.Items.Clear();\r
1560                 drp_audenc_3.Items.Add("AAC");\r
1561                 drp_audenc_3.Items.Add("AC3");\r
1562                 if (drp_audenc_3.Enabled)\r
1563                 {\r
1564                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1565                         drp_audenc_3.SelectedIndex = 0;\r
1566                 }\r
1567 \r
1568                 oldval = drp_audenc_4.Text;\r
1569                 drp_audenc_4.Items.Clear();\r
1570                 drp_audenc_4.Items.Add("AAC");\r
1571                 drp_audenc_4.Items.Add("AC3");\r
1572                 if (drp_audenc_4.Enabled)\r
1573                 {\r
1574                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1575                         drp_audenc_4.SelectedIndex = 0;\r
1576                 }\r
1577             }\r
1578             else if (path.EndsWith(".avi"))\r
1579             {\r
1580                 oldval = drp_audenc_1.Text;\r
1581                 drp_audenc_1.Items.Clear();\r
1582                 drp_audenc_1.Items.Add("MP3");\r
1583                 drp_audenc_1.Items.Add("AC3");\r
1584                 if ((oldval != "MP3") && (oldval != "AC3"))\r
1585                     drp_audenc_1.SelectedIndex = 0;\r
1586 \r
1587                 oldval = drp_audenc_2.Text;\r
1588                 drp_audenc_2.Items.Clear();\r
1589                 drp_audenc_2.Items.Add("MP3");\r
1590                 drp_audenc_2.Items.Add("AC3");\r
1591                 if (drp_audenc_2.Enabled)\r
1592                 {\r
1593                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1594                         drp_audenc_2.SelectedIndex = 0;\r
1595                 }\r
1596 \r
1597 \r
1598                 oldval = drp_audenc_3.Text;\r
1599                 drp_audenc_3.Items.Clear();\r
1600                 drp_audenc_3.Items.Add("MP3");\r
1601                 drp_audenc_3.Items.Add("AC3");\r
1602                 if (drp_audenc_3.Enabled)\r
1603                 {\r
1604                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1605                         drp_audenc_3.SelectedIndex = 0;\r
1606                 }\r
1607 \r
1608                 oldval = drp_audenc_4.Text;\r
1609                 drp_audenc_4.Items.Clear();\r
1610                 drp_audenc_4.Items.Add("MP3");\r
1611                 drp_audenc_4.Items.Add("AC3");\r
1612                 if (drp_audenc_4.Enabled)\r
1613                 {\r
1614                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1615                         drp_audenc_4.SelectedIndex = 0;\r
1616                 }\r
1617             }\r
1618             else if (path.EndsWith(".ogm"))\r
1619             {\r
1620                 drp_audenc_1.Items.Clear();\r
1621                 drp_audenc_1.Items.Add("Vorbis");\r
1622                 drp_audenc_1.SelectedIndex = 0;\r
1623 \r
1624                 drp_audenc_2.Items.Clear();\r
1625                 drp_audenc_2.Items.Add("Vorbis");\r
1626                 if (drp_audenc_2.Enabled)\r
1627                     drp_audenc_2.SelectedIndex = 0;\r
1628 \r
1629                 drp_audenc_3.Items.Clear();\r
1630                 drp_audenc_3.Items.Add("Vorbis");\r
1631                 if (drp_audenc_3.Enabled)\r
1632                     drp_audenc_3.SelectedIndex = 0;\r
1633 \r
1634                 drp_audenc_4.Items.Clear();\r
1635                 drp_audenc_4.Items.Add("Vorbis");\r
1636                 if (drp_audenc_4.Enabled)\r
1637                     drp_audenc_4.SelectedIndex = 0;\r
1638             }\r
1639             else if (path.EndsWith(".mkv"))\r
1640             {\r
1641                 drp_audenc_1.Items.Clear();\r
1642                 drp_audenc_1.Items.Add("AAC");\r
1643                 drp_audenc_1.Items.Add("MP3");\r
1644                 drp_audenc_1.Items.Add("AC3");\r
1645                 drp_audenc_1.Items.Add("Vorbis");\r
1646                 if (drp_audenc_1.Text == "")\r
1647                     drp_audenc_1.SelectedIndex = 0;\r
1648 \r
1649 \r
1650                 drp_audenc_2.Items.Clear();\r
1651                 drp_audenc_2.Items.Add("AAC");\r
1652                 drp_audenc_2.Items.Add("MP3");\r
1653                 drp_audenc_2.Items.Add("AC3");\r
1654                 drp_audenc_2.Items.Add("Vorbis");\r
1655                 if (drp_audenc_2.Enabled)\r
1656                 {\r
1657                     if (drp_audenc_2.Text == "")\r
1658                         drp_audenc_2.SelectedIndex = 0;\r
1659                 }\r
1660 \r
1661                 drp_audenc_3.Items.Clear();\r
1662                 drp_audenc_3.Items.Add("AAC");\r
1663                 drp_audenc_3.Items.Add("MP3");\r
1664                 drp_audenc_3.Items.Add("AC3");\r
1665                 drp_audenc_3.Items.Add("Vorbis");\r
1666                 if (drp_audenc_3.Enabled)\r
1667                 {\r
1668                     if (drp_audenc_3.Text == "")\r
1669                         drp_audenc_3.SelectedIndex = 0;\r
1670                 }\r
1671 \r
1672                 drp_audenc_4.Items.Clear();\r
1673                 drp_audenc_4.Items.Add("AAC");\r
1674                 drp_audenc_4.Items.Add("MP3");\r
1675                 drp_audenc_4.Items.Add("AC3");\r
1676                 drp_audenc_4.Items.Add("Vorbis");\r
1677                 if (drp_audenc_4.Enabled)\r
1678                 {\r
1679                     if (drp_audenc_4.Text == "")\r
1680                         drp_audenc_4.SelectedIndex = 0;\r
1681                 }\r
1682             }\r
1683         }\r
1684         private void setVideoByContainer(String path)\r
1685         {\r
1686             string oldval = "";\r
1687 \r
1688             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1689             {\r
1690                 oldval = drp_videoEncoder.Text;\r
1691                 drp_videoEncoder.Items.Clear();\r
1692                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1693                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1694                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1695                 if (oldval == "VP3 (Theora)")\r
1696                     drp_videoEncoder.SelectedIndex = 2;\r
1697                 else\r
1698                     drp_videoEncoder.Text = oldval;\r
1699 \r
1700             }\r
1701             else if (path.EndsWith(".avi"))\r
1702             {\r
1703                 oldval = drp_videoEncoder.Text;\r
1704                 drp_videoEncoder.Items.Clear();\r
1705                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1706                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1707                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1708                 if (oldval == "VP3 (Theora)")\r
1709                     drp_videoEncoder.SelectedIndex = 2;\r
1710                 else\r
1711                     drp_videoEncoder.Text = oldval;\r
1712             }\r
1713             else if (path.EndsWith(".ogm"))\r
1714             {\r
1715                 oldval = drp_videoEncoder.Text;\r
1716                 drp_videoEncoder.Items.Clear();\r
1717                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1718                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1719                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1720                 if (oldval == "H.264 (x264)")\r
1721                     drp_videoEncoder.SelectedIndex = 2;\r
1722                 else\r
1723                     drp_videoEncoder.Text = oldval;\r
1724             }\r
1725             else if (path.EndsWith(".mkv"))\r
1726             {\r
1727                 oldval = drp_videoEncoder.Text;\r
1728                 drp_videoEncoder.Items.Clear();\r
1729                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1730                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1731                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1732                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1733                 drp_videoEncoder.Text = oldval;\r
1734             }\r
1735         }\r
1736         private void setBitrateSelections384(ComboBox dropDown)\r
1737         {\r
1738             dropDown.Items.Clear();\r
1739             dropDown.Items.Add("32");\r
1740             dropDown.Items.Add("40");\r
1741             dropDown.Items.Add("48");\r
1742             dropDown.Items.Add("56");\r
1743             dropDown.Items.Add("64");\r
1744             dropDown.Items.Add("80");\r
1745             dropDown.Items.Add("86");\r
1746             dropDown.Items.Add("112");\r
1747             dropDown.Items.Add("128");\r
1748             dropDown.Items.Add("160");\r
1749             dropDown.Items.Add("192");\r
1750             dropDown.Items.Add("224");\r
1751             dropDown.Items.Add("256");\r
1752             dropDown.Items.Add("320");\r
1753             dropDown.Items.Add("384");\r
1754         }\r
1755         private void setBitrateSelections320(ComboBox dropDown)\r
1756         {\r
1757             dropDown.Items.Clear();\r
1758             dropDown.Items.Add("32");\r
1759             dropDown.Items.Add("40");\r
1760             dropDown.Items.Add("48");\r
1761             dropDown.Items.Add("56");\r
1762             dropDown.Items.Add("64");\r
1763             dropDown.Items.Add("80");\r
1764             dropDown.Items.Add("86");\r
1765             dropDown.Items.Add("112");\r
1766             dropDown.Items.Add("128");\r
1767             dropDown.Items.Add("160");\r
1768             dropDown.Items.Add("192");\r
1769             dropDown.Items.Add("224");\r
1770             dropDown.Items.Add("256");\r
1771             dropDown.Items.Add("320");\r
1772         }\r
1773         private void setBitrateSelections160(ComboBox dropDown)\r
1774         {\r
1775             dropDown.Items.Clear();\r
1776             dropDown.Items.Add("32");\r
1777             dropDown.Items.Add("40");\r
1778             dropDown.Items.Add("48");\r
1779             dropDown.Items.Add("56");\r
1780             dropDown.Items.Add("64");\r
1781             dropDown.Items.Add("80");\r
1782             dropDown.Items.Add("86");\r
1783             dropDown.Items.Add("112");\r
1784             dropDown.Items.Add("128");\r
1785             dropDown.Items.Add("160");\r
1786         }\r
1787 \r
1788         // Preset system functions\r
1789         private void addPresetToList(ArrayList presetNameList)\r
1790         {\r
1791             // Adds a new preset name to the preset list.\r
1792             TreeNode preset_treeview = new TreeNode();\r
1793             foreach (string[] preset in presetNameList)\r
1794             {\r
1795                 preset_treeview = new TreeNode(preset[0]);\r
1796 \r
1797                 // Now Fill Out List View with Items\r
1798                 treeView_presets.Nodes.Add(preset_treeview);\r
1799             }\r
1800         }\r
1801         private void grabCLIPresets()\r
1802         {\r
1803             // Gets the presets from the CLI and stores them in presets.dat\r
1804             string appPath = Application.StartupPath.ToString() + "\\";\r
1805             string strCmdLine = "cmd /c " + '"' + '"' + appPath + "HandBrakeCLI.exe" + '"' + " --preset-list >" + '"' + appPath + "presets.dat" + '"' + " 2>&1" + '"';\r
1806             Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
1807             hbproc.WaitForExit();\r
1808             hbproc.Dispose();\r
1809             hbproc.Close();\r
1810         }\r
1811         private void loadNormalPreset()\r
1812         {\r
1813             //Loads the preset called "normal"\r
1814             try\r
1815             {\r
1816                 string appPath = Application.StartupPath.ToString() + "\\presets.dat";\r
1817                 if (File.Exists(appPath))\r
1818                 {\r
1819 \r
1820                     int normal = 0;\r
1821                     foreach (TreeNode treenode in treeView_presets.Nodes)\r
1822                     {\r
1823                         if (treenode.ToString().Equals("TreeNode: Normal"))\r
1824                             normal = treenode.Index;\r
1825                     }\r
1826 \r
1827                     TreeNode np = treeView_presets.Nodes[normal];\r
1828 \r
1829                     treeView_presets.SelectedNode = np;\r
1830                 }\r
1831             }\r
1832             catch (Exception)\r
1833             {\r
1834                 // Do nothing\r
1835             }\r
1836         }\r
1837         public void loadPresetPanel()\r
1838         {\r
1839             treeView_presets.Nodes.Clear();\r
1840             ArrayList presetNameList = new ArrayList();\r
1841 \r
1842             // Load in the built in presets from presets.dat\r
1843             string filePath = Application.StartupPath.ToString() + "\\presets.dat";\r
1844             if (File.Exists(filePath))\r
1845             {\r
1846                 StreamReader presetInput = new StreamReader(filePath);\r
1847                 while (!presetInput.EndOfStream)\r
1848                 {\r
1849                     if ((char)presetInput.Peek() == '+')\r
1850                     {\r
1851                         string preset = presetInput.ReadLine().Replace("+ ", "");\r
1852                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
1853                         presetNameList.Add(r.Split(preset));\r
1854                     }\r
1855                     else\r
1856                         presetInput.ReadLine();\r
1857                 }\r
1858 \r
1859                 presetInput.Close();\r
1860                 presetInput.Dispose();\r
1861             }\r
1862             addPresetToList(presetNameList);\r
1863             presetNameList.Clear();\r
1864 \r
1865             // Load in the users presets from user_presets.dat\r
1866             filePath = Application.StartupPath.ToString() + "\\user_presets.dat";\r
1867             if (File.Exists(filePath))\r
1868             {\r
1869                 StreamReader presetInput = new StreamReader(filePath);\r
1870                 while (!presetInput.EndOfStream)\r
1871                 {\r
1872                     if ((char)presetInput.Peek() == '+')\r
1873                     {\r
1874                         string preset = "--" + presetInput.ReadLine().Replace("+ ", "");\r
1875                         Regex r = new Regex("(:  )"); // Split on hyphens. \r
1876                         presetNameList.Add(r.Split(preset));\r
1877                     }\r
1878                     else\r
1879                         presetInput.ReadLine();\r
1880                 }\r
1881 \r
1882                 presetInput.Close();\r
1883                 presetInput.Dispose();\r
1884             }\r
1885             addPresetToList(presetNameList);\r
1886         }\r
1887         private void checkSelectedPreset(string preset)\r
1888         {\r
1889             string selectedPreset = null;\r
1890             selectedPreset = treeView_presets.SelectedNode.Text;\r
1891 \r
1892             Regex r = new Regex("(:  )"); // Split on hyphens. \r
1893             string[] presetName = r.Split(preset);\r
1894 \r
1895             if ((selectedPreset == (presetName[0])) || (selectedPreset == ("--" + presetName[0])))\r
1896             {\r
1897                 //Ok, Reset all the H264 widgets before changing the preset\r
1898                 x264PanelFunctions.reset2Defaults(this);\r
1899 \r
1900                 // Send the query from the file to the Query Parser class\r
1901                 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(preset);\r
1902 \r
1903                 // Now load the preset\r
1904                 hb_common_func.presetLoader(this, presetQuery, selectedPreset);\r
1905 \r
1906                 // The x264 widgets will need updated, so do this now:\r
1907                 x264PanelFunctions.X264_StandardizeOptString(this);\r
1908                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1909             }\r
1910         }\r
1911 \r
1912         // Queue system functions\r
1913         private void showQueue()\r
1914         {\r
1915             queueWindow.Show();\r
1916         }\r
1917         #endregion\r
1918 \r
1919         #region Encoding and Queue\r
1920 \r
1921         // Declarations\r
1922         Functions.CLI process = new Functions.CLI();\r
1923         private delegate void UpdateUIHandler();\r
1924         [DllImport("user32.dll")]\r
1925         public static extern void LockWorkStation();\r
1926         [DllImport("user32.dll")]\r
1927         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
1928 \r
1929         // Encoding Functions\r
1930         private void procMonitor(object state)\r
1931         {\r
1932             // Make sure we are not already encoding and if we are then display an error.\r
1933             if (hbProc != null)\r
1934                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1935             else\r
1936             {\r
1937                 hbProc = process.runCli(this, (string)state, false, false, false, false);\r
1938                 hbProc.WaitForExit();\r
1939 \r
1940                 setEncodeLabelFinished();\r
1941                 hbProc = null;\r
1942 \r
1943                 // Do something whent he encode ends.\r
1944                 switch (Properties.Settings.Default.CompletionOption)\r
1945                 {\r
1946                     case "Shutdown":\r
1947                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
1948                         break;\r
1949                     case "Log Off":\r
1950                         ExitWindowsEx(0, 0);\r
1951                         break;\r
1952                     case "Suspend":\r
1953                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
1954                         break;\r
1955                     case "Hibernate":\r
1956                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
1957                         break;\r
1958                     case "Lock System":\r
1959                         LockWorkStation();\r
1960                         break;\r
1961                     case "Quit HandBrake":\r
1962                         Application.Exit();\r
1963                         break;\r
1964                     default:\r
1965                         break;\r
1966                 }\r
1967             }\r
1968         }\r
1969         private void setEncodeLabelFinished()\r
1970         {\r
1971             if (this.InvokeRequired)\r
1972             {\r
1973                 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));\r
1974                 return;\r
1975             }\r
1976             lbl_encode.Text = "Encoding Finished";\r
1977         }\r
1978 \r
1979         #endregion\r
1980 \r
1981 \r
1982         // This is the END of the road ------------------------------------------------------------------------------\r
1983     }\r
1984 }