OSDN Git Service

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