OSDN Git Service

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