OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmMain.cs
1 /*  frmMain.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr/>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Collections;\r
9 using System.Drawing;\r
10 using System.Text;\r
11 using System.Windows.Forms;\r
12 using System.IO;\r
13 using System.Diagnostics;\r
14 using System.Threading;\r
15 using System.Runtime.InteropServices;\r
16 using System.Globalization;\r
17 using System.Text.RegularExpressions;\r
18 \r
19 namespace Handbrake\r
20 {\r
21     public partial class frmMain : Form\r
22     {\r
23 \r
24         // 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();\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         }\r
465         private void btn_add2Queue_Click(object sender, EventArgs e)\r
466         {\r
467             if (text_source.Text == "" || text_source.Text == "Click 'Source' to continue" || text_destination.Text == "")\r
468                 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
469             else\r
470             {\r
471 \r
472                 String query = hb_common_func.GenerateTheQuery(this);\r
473                 if (rtf_query.Text != "")\r
474                     query = rtf_query.Text;\r
475 \r
476                 encodeQueue.add(query);\r
477 \r
478                 queueWindow.setQueue(encodeQueue);\r
479                 queueWindow.Show();\r
480             }\r
481         }\r
482         private void btn_showQueue_Click(object sender, EventArgs e)\r
483         {\r
484             queueWindow.setQueue(encodeQueue);\r
485             queueWindow.Show();\r
486         }\r
487         private void btn_ActivityWindow_Click(object sender, EventArgs e)\r
488         {\r
489             frmActivityWindow ActivityWindow = new frmActivityWindow("hb_encode_log.dat", this, queueWindow);\r
490             ActivityWindow.Show();\r
491         }\r
492 \r
493         //Source\r
494         private void btn_dvd_source_Click(object sender, EventArgs e)\r
495         {\r
496             String filename = "";\r
497             text_source.Text = "";\r
498 \r
499             DVD_Open.ShowDialog();\r
500             filename = DVD_Open.SelectedPath;\r
501 \r
502             if (filename.StartsWith("\\"))\r
503                 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
504             else\r
505             {\r
506                 if (filename != "")\r
507                 {\r
508                     Form frmRD = new frmReadDVD(filename, this);\r
509                     text_source.Text = filename;\r
510                     frmRD.ShowDialog();\r
511                 }\r
512                 else\r
513                     text_source.Text = "Click 'Source' to continue";\r
514 \r
515                 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
516                 if (drp_dvdtitle.Items.Count == 0)\r
517                     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
518 \r
519             }\r
520         }\r
521         private void btn_file_source_Click(object sender, EventArgs e)\r
522         {\r
523             String filename = "";\r
524             text_source.Text = "";\r
525 \r
526             ISO_Open.ShowDialog();\r
527             filename = ISO_Open.FileName;\r
528 \r
529             if (filename.StartsWith("\\"))\r
530                 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
531             else\r
532             {\r
533                 if (filename != "")\r
534                 {\r
535                     Form frmRD = new frmReadDVD(filename, this);\r
536                     text_source.Text = filename;\r
537                     frmRD.ShowDialog();\r
538                 }\r
539                 else\r
540                     text_source.Text = "Click 'Source' to continue";\r
541 \r
542                 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
543                 if (drp_dvdtitle.Items.Count == 0)\r
544                     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
545 \r
546             }\r
547         }\r
548         private void mnu_dvd_drive_Click(object sender, EventArgs e)\r
549         {\r
550             String filename = "";\r
551             if (mnu_dvd_drive.Text.Contains("VIDEO_TS"))\r
552             {\r
553                 string[] path = mnu_dvd_drive.Text.Split(' ');\r
554                 filename = path[0];\r
555                 Form frmRD = new frmReadDVD(filename, this);\r
556                 text_source.Text = filename;\r
557                 frmRD.ShowDialog();\r
558             }\r
559 \r
560             // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.\r
561             if (drp_dvdtitle.Items.Count == 0)\r
562                 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
563 \r
564         }\r
565 \r
566         private void drp_dvdtitle_Click(object sender, EventArgs e)\r
567         {\r
568             if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))\r
569                 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
570         }\r
571         private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)\r
572         {\r
573             // Reset some values on the form\r
574             lbl_Aspect.Text = "Select a Title";\r
575             //lbl_RecomendedCrop.Text = "Select a Title";\r
576             drop_chapterStart.Items.Clear();\r
577             drop_chapterFinish.Items.Clear();\r
578 \r
579             // If the dropdown is set to automatic nothing else needs to be done.\r
580             // Otheriwse if its not, title data has to be loased from parsing.\r
581             if (drp_dvdtitle.Text != "Automatic")\r
582             {\r
583                 selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;\r
584 \r
585                 // Set the Aspect Ratio\r
586                 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();\r
587                 lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;\r
588                 lbl_duration.Text = selectedTitle.Duration.ToString();\r
589 \r
590                 // Set the Recommended Cropping values\r
591                 //lbl_RecomendedCrop.Text = string.Format("{0}/{1}/{2}/{3}", selectedTitle.AutoCropDimensions[0], selectedTitle.AutoCropDimensions[1], selectedTitle.AutoCropDimensions[2], selectedTitle.AutoCropDimensions[3]);\r
592 \r
593                 // Populate the Start chapter Dropdown\r
594                 drop_chapterStart.Items.Clear();\r
595                 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());\r
596                 if (drop_chapterStart.Items.Count > 0)\r
597                     drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();\r
598 \r
599                 // Populate the Final Chapter Dropdown\r
600                 drop_chapterFinish.Items.Clear();\r
601                 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());\r
602                 if (drop_chapterFinish.Items.Count > 0)\r
603                     drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();\r
604 \r
605                 // Populate the Audio Channels Dropdown\r
606                 drp_track1Audio.Items.Clear();\r
607                 drp_track1Audio.Items.Add("Automatic");\r
608                 drp_track1Audio.Items.Add("None");\r
609                 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
610                 drp_track1Audio.SelectedIndex = 0;\r
611 \r
612                 drp_track2Audio.Items.Clear();\r
613                 drp_track2Audio.Items.Add("None");\r
614                 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
615                 drp_track2Audio.SelectedIndex = 0;\r
616 \r
617                 drp_track3Audio.Items.Clear();\r
618                 drp_track3Audio.Items.Add("None");\r
619                 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
620                 drp_track3Audio.SelectedIndex = 0;\r
621 \r
622                 drp_track4Audio.Items.Clear();\r
623                 drp_track4Audio.Items.Add("None");\r
624                 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
625                 drp_track4Audio.SelectedIndex = 0;\r
626 \r
627                 // Populate the Subtitles dropdown\r
628                 drp_subtitle.Items.Clear();\r
629                 drp_subtitle.Items.Add("None");\r
630                 drp_subtitle.Items.Add("Autoselect");\r
631                 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());\r
632                 if (drp_subtitle.Items.Count > 0)\r
633                     drp_subtitle.Text = drp_subtitle.Items[0].ToString();\r
634 \r
635             }\r
636 \r
637             // Run the autoName & chapterNaming functions\r
638             hb_common_func.autoName(this);\r
639             hb_common_func.chapterNaming(this);\r
640         }\r
641         private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)\r
642         {\r
643             calculateDuration();\r
644 \r
645             drop_chapterStart.BackColor = Color.White;\r
646             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
647             {\r
648                 try\r
649                 {\r
650                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
651                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
652 \r
653                     if (chapterFinish < chapterStart)\r
654                         drop_chapterStart.BackColor = Color.LightCoral;\r
655                 }\r
656                 catch (Exception)\r
657                 {\r
658                     drop_chapterStart.BackColor = Color.LightCoral;\r
659                 }\r
660             }\r
661             // Run the Autonaming function\r
662             hb_common_func.autoName(this);\r
663         }\r
664         private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)\r
665         {\r
666             calculateDuration();\r
667 \r
668             drop_chapterFinish.BackColor = Color.White;\r
669             if ((drop_chapterFinish.Text != "Auto") && (drop_chapterStart.Text != "Auto"))\r
670             {\r
671                 try\r
672                 {\r
673                     int chapterFinish = int.Parse(drop_chapterFinish.Text);\r
674                     int chapterStart = int.Parse(drop_chapterStart.Text);\r
675 \r
676                     if (chapterFinish < chapterStart)\r
677                         drop_chapterFinish.BackColor = Color.LightCoral;\r
678                 }\r
679                 catch (Exception)\r
680                 {\r
681                     drop_chapterFinish.BackColor = Color.LightCoral;\r
682                 }\r
683             }\r
684 \r
685             // Run the Autonaming function\r
686             hb_common_func.autoName(this);\r
687         }\r
688 \r
689         //Destination\r
690         private void btn_destBrowse_Click(object sender, EventArgs e)\r
691         {\r
692             // This removes the file extension from the filename box on the save file dialog.\r
693             // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.\r
694             DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");\r
695 \r
696             // Show the dialog and set the main form file path\r
697             DVD_Save.ShowDialog();\r
698             if (DVD_Save.FileName.StartsWith("\\"))\r
699                 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
700             else\r
701             {\r
702                 setAudioByContainer(DVD_Save.FileName);\r
703 \r
704                 text_destination.Text = DVD_Save.FileName;\r
705 \r
706                 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)\r
707                 if (Check_ChapterMarkers.Checked)\r
708                     text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");\r
709             }\r
710         }\r
711         private void text_destination_TextChanged(object sender, EventArgs e)\r
712         {\r
713             setAudioByContainer(text_destination.Text);\r
714             setVideoByContainer(text_destination.Text);\r
715             string path = text_destination.Text;\r
716             if (path.EndsWith(".mp4"))\r
717                 drop_format.SelectedIndex = 0;\r
718             else if (path.EndsWith(".m4v"))\r
719                 drop_format.SelectedIndex = 1;\r
720             else if (path.EndsWith(".mkv"))\r
721                 drop_format.SelectedIndex = 2;\r
722             else if (path.EndsWith(".avi"))\r
723                 drop_format.SelectedIndex = 3;\r
724             else if (path.EndsWith(".ogm"))\r
725                 drop_format.SelectedIndex = 4;\r
726 \r
727         }\r
728 \r
729         // Output Settings\r
730         private void drop_format_SelectedIndexChanged(object sender, EventArgs e)\r
731         {\r
732             \r
733             if (drop_format.SelectedIndex == 0)\r
734                 setExtension(".mp4");\r
735             else if (drop_format.SelectedIndex == 1)\r
736                 setExtension(".m4v");\r
737             else if (drop_format.SelectedIndex == 2)\r
738                 setExtension(".mkv");\r
739             else if (drop_format.SelectedIndex == 3)\r
740                 setExtension(".avi");\r
741             else if (drop_format.SelectedIndex == 4)\r
742                 setExtension(".ogm");\r
743         }\r
744 \r
745         //Video Tab\r
746         private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)\r
747         {\r
748             if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
749             {\r
750                 check_largeFile.Enabled = true;\r
751                 check_optimiseMP4.Enabled = true;\r
752                 check_iPodAtom.Enabled = true;\r
753             }\r
754             else\r
755             {\r
756                 check_largeFile.Enabled = false;\r
757                 check_optimiseMP4.Enabled = false;\r
758                 check_iPodAtom.Enabled = false;\r
759                 check_largeFile.Checked = false;\r
760                 check_optimiseMP4.Checked = false;\r
761                 check_iPodAtom.Checked = false;\r
762             }\r
763 \r
764 \r
765             //Turn off some options which are H.264 only when the user selects a non h.264 encoder\r
766             if (drp_videoEncoder.Text.Contains("H.264"))\r
767             {\r
768                 if (check_2PassEncode.CheckState == CheckState.Checked)\r
769                     check_turbo.Enabled = true;\r
770 \r
771                 h264Tab.Enabled = true;\r
772                 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))\r
773                     check_iPodAtom.Enabled = true;\r
774                 else\r
775                     check_iPodAtom.Enabled = false;\r
776                 if (!drp_anamorphic.Items.Contains("Loose"))\r
777                     drp_anamorphic.Items.Add("Loose");\r
778             }\r
779             else\r
780             {\r
781                 check_turbo.CheckState = CheckState.Unchecked;\r
782                 check_turbo.Enabled = false;\r
783                 h264Tab.Enabled = false;\r
784                 rtf_x264Query.Text = "";\r
785                 check_iPodAtom.Enabled = false;\r
786                 check_iPodAtom.Checked = false;\r
787                 if (drp_anamorphic.Items.Count == 3)\r
788                     drp_anamorphic.Items.RemoveAt(2);\r
789             }\r
790 \r
791         }\r
792         private void text_bitrate_TextChanged(object sender, EventArgs e)\r
793         {\r
794             text_filesize.Text = "";\r
795             slider_videoQuality.Value = 0;\r
796             SliderValue.Text = "0%";\r
797         }\r
798         private void text_filesize_TextChanged(object sender, EventArgs e)\r
799         {\r
800             text_bitrate.Text = "";\r
801             slider_videoQuality.Value = 0;\r
802             SliderValue.Text = "0%";\r
803         }\r
804         private void slider_videoQuality_Scroll(object sender, EventArgs e)\r
805         {\r
806             SliderValue.Text = slider_videoQuality.Value.ToString() + "%";\r
807             text_bitrate.Text = "";\r
808             text_filesize.Text = "";\r
809         }\r
810         private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)\r
811         {\r
812             if (check_2PassEncode.CheckState.ToString() == "Checked")\r
813             {\r
814                 if (drp_videoEncoder.Text.Contains("H.264"))\r
815                     check_turbo.Enabled = true;\r
816             }\r
817             else\r
818             {\r
819                 check_turbo.Enabled = false;\r
820                 check_turbo.CheckState = CheckState.Unchecked;\r
821             }\r
822         }\r
823 \r
824         //Picture Tab\r
825         private void text_width_TextChanged(object sender, EventArgs e)\r
826         {\r
827             try\r
828             {\r
829                 if ((int.Parse(text_width.Text) % 16) != 0)\r
830                     text_width.BackColor = Color.LightCoral;\r
831                 else\r
832                     text_width.BackColor = Color.LightGreen;\r
833 \r
834 \r
835                 if (lbl_Aspect.Text != "Select a Title")\r
836                 {\r
837                     if (drp_anamorphic.Text == "None")\r
838                     {\r
839                         int height = cacluateNonAnamorphicHeight(int.Parse(text_width.Text));\r
840                         text_height.Text = height.ToString();\r
841                     }\r
842                 }\r
843             }\r
844             catch (Exception)\r
845             {\r
846                 // No need to throw an error here.\r
847             }\r
848         }\r
849         private void text_height_TextChanged(object sender, EventArgs e)\r
850         {\r
851             try\r
852             {\r
853                 if ((int.Parse(text_height.Text) % 16) != 0)\r
854                     text_height.BackColor = Color.LightCoral;\r
855                 else\r
856                     text_height.BackColor = Color.LightGreen;\r
857             }\r
858             catch (Exception)\r
859             {\r
860                 // No need to alert the user.\r
861             }\r
862         }\r
863         private void drp_crop_SelectedIndexChanged(object sender, EventArgs e)\r
864         {\r
865             if ((string)drp_crop.SelectedItem == "Custom")\r
866             {\r
867                 text_left.Enabled = true;\r
868                 text_right.Enabled = true;\r
869                 text_top.Enabled = true;\r
870                 text_bottom.Enabled = true;\r
871                 text_left.Text = "0";\r
872                 text_right.Text = "0";\r
873                 text_top.Text = "0";\r
874                 text_bottom.Text = "0";\r
875             }\r
876 \r
877             if ((string)drp_crop.SelectedItem == "Automatic")\r
878             {\r
879                 text_left.Enabled = false;\r
880                 text_right.Enabled = false;\r
881                 text_top.Enabled = false;\r
882                 text_bottom.Enabled = false;\r
883 \r
884                 if ((drp_dvdtitle.Text != "Automatic") && (selectedTitle != null))\r
885                 {\r
886                     text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();\r
887                     text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();\r
888                     text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();\r
889                     text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();\r
890                 }\r
891                 else\r
892                 {\r
893                     text_left.Text = "";\r
894                     text_right.Text = "";\r
895                     text_top.Text = "";\r
896                     text_bottom.Text = "";\r
897                 }\r
898 \r
899             }\r
900 \r
901             if ((string)drp_crop.SelectedItem == "No Crop")\r
902             {\r
903                 text_left.Enabled = false;\r
904                 text_right.Enabled = false;\r
905                 text_top.Enabled = false;\r
906                 text_bottom.Enabled = false;\r
907                 text_left.Text = "0";\r
908                 text_right.Text = "0";\r
909                 text_top.Text = "0";\r
910                 text_bottom.Text = "0";\r
911             }\r
912         }\r
913         private void check_vfr_CheckedChanged(object sender, EventArgs e)\r
914         {\r
915             if (check_vfr.CheckState == CheckState.Checked)\r
916             {\r
917                 check_detelecine.Enabled = false;\r
918                 check_detelecine.CheckState = CheckState.Checked;\r
919                 drp_videoFramerate.Enabled = false;\r
920                 drp_videoFramerate.SelectedItem = "29.97";\r
921                 lbl_vfr.Visible = true;\r
922             }\r
923             else\r
924             {\r
925                 check_detelecine.Enabled = true;\r
926                 drp_videoFramerate.Enabled = true;\r
927                 drp_videoFramerate.SelectedItem = "Automatic";\r
928                 lbl_vfr.Visible = false;\r
929             }\r
930         }\r
931         private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)\r
932         {\r
933             if (drp_anamorphic.SelectedIndex == 1)\r
934             {\r
935                 text_height.BackColor = Color.LightGray;\r
936                 text_width.BackColor = Color.LightGray;\r
937                 text_height.Text = "";\r
938                 text_width.Text = "";\r
939                 text_height.Enabled = false;\r
940                 text_width.Enabled = false;\r
941             }\r
942 \r
943             if (drp_anamorphic.SelectedIndex == 2)\r
944             {\r
945                 text_height.Text = "";\r
946                 text_height.Enabled = false;\r
947                 text_height.BackColor = Color.LightGray;\r
948 \r
949                 text_width.Enabled = true;\r
950                 text_width.BackColor = Color.White;\r
951             }\r
952 \r
953             if (drp_anamorphic.SelectedIndex == 0)\r
954             {\r
955                 text_height.BackColor = Color.White;\r
956                 text_width.BackColor = Color.White;\r
957                 text_height.Enabled = true;\r
958                 text_width.Enabled = true;\r
959             }\r
960         }\r
961 \r
962         // Audio Tab\r
963         private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)\r
964         {\r
965             if (drp_track2Audio.SelectedItem.Equals("None"))\r
966             {\r
967                 drp_audbit_2.Enabled = false;\r
968                 drp_audenc_2.Enabled = false;\r
969                 drp_audsr_2.Enabled = false;\r
970                 drp_audmix_2.Enabled = false;\r
971                 trackBar2.Enabled = false;\r
972                 drp_audbit_2.Text = "";\r
973                 drp_audenc_2.Text = "";\r
974                 drp_audsr_2.Text = "";\r
975                 drp_audmix_2.Text = "Automatic";\r
976                 trackBar2.Value = 0;\r
977 \r
978                 // Disable the 3rd Track.\r
979                 drp_track3Audio.Enabled = false;\r
980                 drp_track3Audio.Text = "None";\r
981                 drp_audbit_3.Text = "";\r
982                 drp_audenc_3.Text = "";\r
983                 drp_audsr_3.Text = "";\r
984                 drp_audmix_3.Text = "Automatic";\r
985                 trackBar3.Value = 0;\r
986             }\r
987             else\r
988             {\r
989                 drp_audbit_2.Enabled = true;\r
990                 drp_audenc_2.Enabled = true;\r
991                 drp_audsr_2.Enabled = true;\r
992                 drp_audmix_2.Enabled = true;\r
993                 trackBar2.Enabled = true;\r
994                 drp_audbit_2.Text = "160";\r
995                 drp_audenc_2.Text = "AAC";\r
996                 drp_audsr_2.Text = "48";\r
997                 drp_audmix_2.Text = "Automatic";\r
998 \r
999                 // Enable the 3rd Track.\r
1000                 drp_track3Audio.Enabled = true;\r
1001                 drp_audbit_3.Text = "";\r
1002                 drp_audenc_3.Text = "";\r
1003                 drp_audsr_3.Text = "";\r
1004                 drp_audmix_3.Text = "Automatic";\r
1005             }\r
1006         }\r
1007         private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)\r
1008         {\r
1009             if (drp_track3Audio.SelectedItem.Equals("None"))\r
1010             {\r
1011                 drp_audbit_3.Enabled = false;\r
1012                 drp_audenc_3.Enabled = false;\r
1013                 drp_audsr_3.Enabled = false;\r
1014                 drp_audmix_3.Enabled = false;\r
1015                 trackBar3.Enabled = false;\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                 trackBar3.Value = 0;\r
1021 \r
1022                 // Disable the 4th Track.\r
1023                 drp_track4Audio.Enabled = false;\r
1024                 drp_track4Audio.Text = "None";\r
1025                 drp_audbit_4.Text = "";\r
1026                 drp_audenc_4.Text = "";\r
1027                 drp_audsr_4.Text = "";\r
1028                 drp_audmix_4.Text = "Automatic";\r
1029 \r
1030             }\r
1031             else\r
1032             {\r
1033                 drp_audbit_3.Enabled = true;\r
1034                 drp_audenc_3.Enabled = true;\r
1035                 drp_audsr_3.Enabled = true;\r
1036                 drp_audmix_3.Enabled = true;\r
1037                 trackBar3.Enabled = true;\r
1038                 drp_audbit_3.Text = "160";\r
1039                 drp_audenc_3.Text = "AAC";\r
1040                 drp_audsr_3.Text = "48";\r
1041                 drp_audmix_3.Text = "Automatic";\r
1042 \r
1043                 // Enable the 4th Track.\r
1044                 drp_track4Audio.Enabled = true;\r
1045                 drp_audbit_4.Text = "";\r
1046                 drp_audenc_4.Text = "";\r
1047                 drp_audsr_4.Text = "";\r
1048                 drp_audmix_4.Text = "Automatic";\r
1049             }\r
1050 \r
1051         }\r
1052         private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)\r
1053         {\r
1054             if (drp_track4Audio.SelectedItem.Equals("None"))\r
1055             {\r
1056                 drp_audbit_4.Enabled = false;\r
1057                 drp_audenc_4.Enabled = false;\r
1058                 drp_audsr_4.Enabled = false;\r
1059                 drp_audmix_4.Enabled = false;\r
1060                 trackBar4.Enabled = false;\r
1061                 drp_audbit_4.Text = "";\r
1062                 drp_audenc_4.Text = "";\r
1063                 drp_audsr_4.Text = "";\r
1064                 drp_audmix_4.Text = "Automatic";\r
1065                 trackBar4.Value = 0;\r
1066             }\r
1067             else\r
1068             {\r
1069                 drp_audbit_4.Enabled = true;\r
1070                 drp_audenc_4.Enabled = true;\r
1071                 drp_audsr_4.Enabled = true;\r
1072                 drp_audmix_4.Enabled = true;\r
1073                 trackBar4.Enabled = true;\r
1074                 drp_audbit_4.Text = "160";\r
1075                 drp_audenc_4.Text = "AAC";\r
1076                 drp_audsr_4.Text = "48";\r
1077                 drp_audmix_4.Text = "Automatic";\r
1078             }\r
1079         }\r
1080 \r
1081         private void drp_audioMixDown_SelectedIndexChanged(object sender, EventArgs e)\r
1082         {\r
1083             if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))\r
1084                 setBitrateSelections384(drp_audbit_1);\r
1085             else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))\r
1086             {\r
1087                 setBitrateSelections160(drp_audbit_1);\r
1088                 drp_audbit_1.Text = "160";\r
1089             }\r
1090         }\r
1091         private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)\r
1092         {\r
1093             if (drp_audmix_1.Text == "Automatic")\r
1094                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1095 \r
1096             if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))\r
1097                 setBitrateSelections384(drp_audbit_2);\r
1098             else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))\r
1099             {\r
1100                 setBitrateSelections160(drp_audbit_2);\r
1101                 drp_audbit_2.Text = "160";\r
1102             }\r
1103         }\r
1104         private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)\r
1105         {\r
1106             if (drp_audmix_2.Text == "Automatic")\r
1107                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1108 \r
1109             if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))\r
1110                 setBitrateSelections384(drp_audbit_3);\r
1111             else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))\r
1112             {\r
1113                 setBitrateSelections160(drp_audbit_3);\r
1114                 drp_audbit_3.Text = "160";\r
1115             }\r
1116         }\r
1117         private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)\r
1118         {\r
1119             if (drp_audmix_3.Text == "Automatic")\r
1120                 MessageBox.Show("Please select a mixdown for the previous track(s).", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1121 \r
1122             if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))\r
1123                 setBitrateSelections384(drp_audbit_4);\r
1124             else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))\r
1125             {\r
1126                 setBitrateSelections160(drp_audbit_4);\r
1127                 drp_audbit_4.Text = "160";\r
1128             }\r
1129         }\r
1130 \r
1131         private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)\r
1132         {\r
1133             if (drp_audenc_1.Text == "AC3")\r
1134             {\r
1135                 drp_audmix_1.Enabled = false;\r
1136                 drp_audbit_1.Enabled = false;\r
1137                 drp_audsr_1.Enabled = false;\r
1138             }\r
1139             else\r
1140             {\r
1141                 drp_audmix_1.Enabled = true;\r
1142                 drp_audbit_1.Enabled = true;\r
1143                 drp_audsr_1.Enabled = true;\r
1144 \r
1145                 drp_audmix_1.Text = "Automatic";\r
1146                 drp_audbit_1.Text = "160";\r
1147                 drp_audsr_1.Text = "48";\r
1148             }\r
1149 \r
1150 \r
1151             if (drp_audenc_1.Text == "AAC")\r
1152             {\r
1153                 drp_audmix_1.Items.Clear();\r
1154                 drp_audmix_1.Items.Add("Mono");\r
1155                 drp_audmix_1.Items.Add("Stereo");\r
1156                 drp_audmix_1.Items.Add("Dolby Surround");\r
1157                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1158                 drp_audmix_1.Items.Add("6 Channel Discrete");\r
1159 \r
1160                 setBitrateSelections160(drp_audbit_1);\r
1161             }\r
1162             else\r
1163             {\r
1164                 drp_audmix_1.Items.Clear();\r
1165                 drp_audmix_1.Items.Add("Stereo");\r
1166                 drp_audmix_1.Items.Add("Dolby Surround");\r
1167                 drp_audmix_1.Items.Add("Dolby Pro Logic II");\r
1168 \r
1169                 setBitrateSelections320(drp_audbit_1);\r
1170             }\r
1171         }\r
1172         private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)\r
1173         {\r
1174             if (drp_audenc_2.Text == "AC3")\r
1175             {\r
1176                 drp_audmix_2.Enabled = false;\r
1177                 drp_audbit_2.Enabled = false;\r
1178                 drp_audsr_2.Enabled = false;\r
1179 \r
1180                 drp_audmix_2.Text = "Automatic";\r
1181                 drp_audbit_2.Text = "160";\r
1182                 drp_audsr_2.Text = "48";\r
1183             }\r
1184             else\r
1185             {\r
1186                 // Just make sure not to re-enable the following boxes if the track2 is none\r
1187                 if (drp_track2Audio.Text != "None")\r
1188                 {\r
1189                     drp_audmix_2.Enabled = true;\r
1190                     drp_audbit_2.Enabled = true;\r
1191                     drp_audsr_2.Enabled = true;\r
1192 \r
1193                     drp_audmix_2.Text = "Automatic";\r
1194                     drp_audbit_2.Text = "160";\r
1195                     drp_audsr_2.Text = "48";\r
1196                 }\r
1197             }\r
1198 \r
1199             if (drp_audenc_2.Text == "AAC")\r
1200             {\r
1201                 drp_audmix_2.Items.Clear();\r
1202                 drp_audmix_2.Items.Add("Mono");\r
1203                 drp_audmix_2.Items.Add("Stereo");\r
1204                 drp_audmix_2.Items.Add("Dolby Surround");\r
1205                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1206                 drp_audmix_2.Items.Add("6 Channel Discrete");\r
1207 \r
1208                 setBitrateSelections160(drp_audbit_2);\r
1209             }\r
1210             else\r
1211             {\r
1212                 drp_audmix_2.Items.Clear();\r
1213                 drp_audmix_2.Items.Add("Stereo");\r
1214                 drp_audmix_2.Items.Add("Dolby Surround");\r
1215                 drp_audmix_2.Items.Add("Dolby Pro Logic II");\r
1216 \r
1217                 setBitrateSelections320(drp_audbit_2);\r
1218             }\r
1219         }\r
1220         private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)\r
1221         {\r
1222             if (drp_audenc_3.Text == "AC3")\r
1223             {\r
1224                 drp_audmix_3.Enabled = false;\r
1225                 drp_audbit_3.Enabled = false;\r
1226                 drp_audsr_3.Enabled = false;\r
1227 \r
1228                 drp_audmix_3.Text = "Automatic";\r
1229                 drp_audbit_3.Text = "160";\r
1230                 drp_audsr_3.Text = "48";\r
1231             }\r
1232             else\r
1233             {\r
1234                 // Just make sure not to re-enable the following boxes if the track above is none\r
1235                 if (drp_track2Audio.Text != "None")\r
1236                 {\r
1237                     drp_audmix_3.Enabled = true;\r
1238                     drp_audbit_3.Enabled = true;\r
1239                     drp_audsr_3.Enabled = true;\r
1240 \r
1241                     drp_audmix_3.Text = "Automatic";\r
1242                     drp_audbit_3.Text = "160";\r
1243                     drp_audsr_3.Text = "48";\r
1244                 }\r
1245             }\r
1246 \r
1247 \r
1248             if (drp_audenc_3.Text == "AAC")\r
1249             {\r
1250                 drp_audmix_3.Items.Clear();\r
1251                 drp_audmix_3.Items.Add("Mono");\r
1252                 drp_audmix_3.Items.Add("Stereo");\r
1253                 drp_audmix_3.Items.Add("Dolby Surround");\r
1254                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1255                 drp_audmix_3.Items.Add("6 Channel Discrete");\r
1256 \r
1257                 setBitrateSelections160(drp_audbit_3);\r
1258             }\r
1259             else\r
1260             {\r
1261                 drp_audmix_3.Items.Clear();\r
1262                 drp_audmix_3.Items.Add("Stereo");\r
1263                 drp_audmix_3.Items.Add("Dolby Surround");\r
1264                 drp_audmix_3.Items.Add("Dolby Pro Logic II");\r
1265 \r
1266                 setBitrateSelections320(drp_audbit_3);\r
1267             }\r
1268         }\r
1269         private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)\r
1270         {\r
1271             if (drp_audenc_4.Text == "AC3")\r
1272             {\r
1273                 drp_audmix_4.Enabled = false;\r
1274                 drp_audbit_4.Enabled = false;\r
1275                 drp_audsr_4.Enabled = false;\r
1276 \r
1277                 drp_audmix_4.Text = "Automatic";\r
1278                 drp_audbit_4.Text = "160";\r
1279                 drp_audsr_4.Text = "48";\r
1280             }\r
1281             else\r
1282             {\r
1283                 // Just make sure not to re-enable the following boxes if the track above is none\r
1284                 if (drp_track2Audio.Text != "None")\r
1285                 {\r
1286                     drp_audmix_4.Enabled = true;\r
1287                     drp_audbit_4.Enabled = true;\r
1288                     drp_audsr_4.Enabled = true;\r
1289 \r
1290                     drp_audmix_4.Text = "Automatic";\r
1291                     drp_audbit_4.Text = "160";\r
1292                     drp_audsr_4.Text = "48";\r
1293                 }\r
1294             }\r
1295 \r
1296 \r
1297             if (drp_audenc_4.Text == "AAC")\r
1298             {\r
1299                 drp_audmix_4.Items.Clear();\r
1300                 drp_audmix_4.Items.Add("Mono");\r
1301                 drp_audmix_4.Items.Add("Stereo");\r
1302                 drp_audmix_4.Items.Add("Dolby Surround");\r
1303                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1304                 drp_audmix_4.Items.Add("6 Channel Discrete");\r
1305 \r
1306                 setBitrateSelections160(drp_audbit_4);\r
1307             }\r
1308             else\r
1309             {\r
1310                 drp_audmix_4.Items.Clear();\r
1311                 drp_audmix_4.Items.Add("Stereo");\r
1312                 drp_audmix_4.Items.Add("Dolby Surround");\r
1313                 drp_audmix_4.Items.Add("Dolby Pro Logic II");\r
1314 \r
1315                 setBitrateSelections320(drp_audbit_4);\r
1316             }\r
1317         }\r
1318 \r
1319         private void trackBar1_Scroll(object sender, EventArgs e)\r
1320         {\r
1321             double value = trackBar1.Value / 10.0;\r
1322             value++;\r
1323 \r
1324             lbl_drc1.Text = value.ToString();\r
1325         }\r
1326         private void trackBar2_Scroll(object sender, EventArgs e)\r
1327         {\r
1328             double value = trackBar2.Value / 10.0;\r
1329             value++;\r
1330 \r
1331             lbl_drc2.Text = value.ToString();\r
1332         }\r
1333         private void trackBar3_Scroll(object sender, EventArgs e)\r
1334         {\r
1335             double value = trackBar3.Value / 10.0;\r
1336             value++;\r
1337 \r
1338             lbl_drc3.Text = value.ToString();\r
1339         }\r
1340         private void trackBar4_Scroll(object sender, EventArgs e)\r
1341         {\r
1342             double value = trackBar4.Value / 10.0;\r
1343             value++;\r
1344 \r
1345             lbl_drc4.Text = value.ToString();\r
1346         }\r
1347 \r
1348         private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)\r
1349         {\r
1350             if (drp_subtitle.Text.Contains("None"))\r
1351             {\r
1352                 check_forced.Enabled = false;\r
1353                 check_forced.Checked = false;\r
1354             }\r
1355             else\r
1356                 check_forced.Enabled = true;\r
1357         }\r
1358 \r
1359         // Chapter Marker Tab\r
1360         private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)\r
1361         {\r
1362             if (Check_ChapterMarkers.Checked)\r
1363             {\r
1364                 string destination = text_destination.Text;\r
1365                 destination = destination.Replace(".mp4", ".m4v");\r
1366                 text_destination.Text = destination;\r
1367                 data_chpt.Rows.Clear();\r
1368                 data_chpt.Enabled = true;\r
1369                 hb_common_func.chapterNaming(this);\r
1370             }\r
1371             else\r
1372             {\r
1373                 string destination = text_destination.Text;\r
1374                 destination = destination.Replace(".m4v", ".mp4");\r
1375                 text_destination.Text = destination;\r
1376                 data_chpt.Rows.Clear();\r
1377                 data_chpt.Enabled = false;\r
1378             }\r
1379         }\r
1380 \r
1381         // Advanced Tab\r
1382         private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1383         {\r
1384             x264PanelFunctions.on_x264_WidgetChange("ref", this);\r
1385         }\r
1386         private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)\r
1387         {\r
1388             x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);\r
1389         }\r
1390         private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)\r
1391         {\r
1392             x264PanelFunctions.on_x264_WidgetChange("bframes", this);\r
1393         }\r
1394         private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)\r
1395         {\r
1396             x264PanelFunctions.on_x264_WidgetChange("direct", this);\r
1397         }\r
1398         private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)\r
1399         {\r
1400             x264PanelFunctions.on_x264_WidgetChange("weightb", this);\r
1401         }\r
1402         private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)\r
1403         {\r
1404             x264PanelFunctions.on_x264_WidgetChange("brdo", this);\r
1405         }\r
1406         private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)\r
1407         {\r
1408             x264PanelFunctions.on_x264_WidgetChange("bime", this);\r
1409         }\r
1410         private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)\r
1411         {\r
1412             x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);\r
1413         }\r
1414         private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)\r
1415         {\r
1416             x264PanelFunctions.on_x264_WidgetChange("me", this);\r
1417         }\r
1418         private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)\r
1419         {\r
1420             x264PanelFunctions.on_x264_WidgetChange("merange", this);\r
1421         }\r
1422         private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)\r
1423         {\r
1424             x264PanelFunctions.on_x264_WidgetChange("subq", this);\r
1425         }\r
1426         private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)\r
1427         {\r
1428             x264PanelFunctions.on_x264_WidgetChange("analyse", this);\r
1429         }\r
1430         private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)\r
1431         {\r
1432             x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);\r
1433         }\r
1434         private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)\r
1435         {\r
1436             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1437 \r
1438         }\r
1439         private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)\r
1440         {\r
1441             x264PanelFunctions.on_x264_WidgetChange("deblock", this);\r
1442 \r
1443         }\r
1444         private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)\r
1445         {\r
1446             x264PanelFunctions.on_x264_WidgetChange("trellis", this);\r
1447         }\r
1448         private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)\r
1449         {\r
1450             x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);\r
1451         }\r
1452         private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)\r
1453         {\r
1454             x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);\r
1455 \r
1456         }\r
1457         private void check_Cabac_CheckedChanged(object sender, EventArgs e)\r
1458         {\r
1459             x264PanelFunctions.on_x264_WidgetChange("cabac", this);\r
1460         }\r
1461 \r
1462         private void rtf_x264Query_TextChanged(object sender, EventArgs e)\r
1463         {\r
1464             if (rtf_x264Query.Text.EndsWith("\n"))\r
1465             {\r
1466                 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");\r
1467                 x264PanelFunctions.X264_StandardizeOptString(this);\r
1468                 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1469 \r
1470                 if (rtf_x264Query.Text == "")\r
1471                     x264PanelFunctions.reset2Defaults(this);\r
1472             }\r
1473         }\r
1474         private void btn_reset_Click(object sender, EventArgs e)\r
1475         {\r
1476             rtf_x264Query.Text = "";\r
1477             x264PanelFunctions.reset2Defaults(this);\r
1478         }\r
1479 \r
1480         // Query Editor Tab\r
1481         private void btn_generate_Query_Click(object sender, EventArgs e)\r
1482         {\r
1483             rtf_query.Text = hb_common_func.GenerateTheQuery(this);\r
1484         }\r
1485         private void btn_clear_Click(object sender, EventArgs e)\r
1486         {\r
1487             rtf_query.Clear();\r
1488         }\r
1489 \r
1490         // Presets\r
1491         private void btn_addPreset_Click(object sender, EventArgs e)\r
1492         {\r
1493             Form preset = new frmAddPreset(this, presetHandler);\r
1494             preset.ShowDialog();\r
1495         }\r
1496         private void btn_removePreset_Click(object sender, EventArgs e)\r
1497         {\r
1498             if (treeView_presets.SelectedNode != null)\r
1499                 presetHandler.remove(treeView_presets.SelectedNode.Text);\r
1500             // Now reload the preset panel\r
1501             loadPresetPanel();\r
1502         }\r
1503         private void btn_setDefault_Click(object sender, EventArgs e)\r
1504         {\r
1505             String query = hb_common_func.GenerateTheQuery(this);\r
1506             Properties.Settings.Default.defaultUserSettings = query;\r
1507             // Save the new default Settings\r
1508             Properties.Settings.Default.Save();\r
1509             MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
1510         }\r
1511         private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)\r
1512         {\r
1513             // Ok, so, we've selected a preset. Now we want to load it.\r
1514             string presetName = treeView_presets.SelectedNode.Text;\r
1515             string query = presetHandler.getCliForPreset(presetName);\r
1516 \r
1517             //Ok, Reset all the H264 widgets before changing the preset\r
1518             x264PanelFunctions.reset2Defaults(this);\r
1519 \r
1520             // Send the query from the file to the Query Parser class\r
1521             Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);\r
1522 \r
1523             // Now load the preset\r
1524             hb_common_func.presetLoader(this, presetQuery, presetName);\r
1525 \r
1526             // The x264 widgets will need updated, so do this now:\r
1527             x264PanelFunctions.X264_StandardizeOptString(this);\r
1528             x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);\r
1529         }\r
1530 \r
1531         #endregion\r
1532 \r
1533         #region Functions\r
1534         // Replace File extenstion.\r
1535         public void setExtension(string newExtension)\r
1536         {\r
1537             text_destination.Text = text_destination.Text.Replace(".mp4", newExtension);\r
1538             text_destination.Text = text_destination.Text.Replace(".m4v", newExtension);\r
1539             text_destination.Text = text_destination.Text.Replace(".mkv", newExtension);\r
1540             text_destination.Text = text_destination.Text.Replace(".avi", newExtension);\r
1541             text_destination.Text = text_destination.Text.Replace(".ogm", newExtension);\r
1542         }\r
1543 \r
1544         // DVD Parsing\r
1545         public void setStreamReader(Parsing.DVD dvd)\r
1546         {\r
1547             this.thisDVD = dvd;\r
1548         }\r
1549 \r
1550         // Chapter Selection Duration calculation\r
1551         public void calculateDuration()\r
1552         {\r
1553 \r
1554             int start_chapter;\r
1555             int end_chapter;\r
1556             TimeSpan Duration = TimeSpan.FromSeconds(0.0);\r
1557 \r
1558             try\r
1559             {\r
1560                 // Get the durations between the 2 chapter points and add them together.\r
1561                 if (drop_chapterStart.Text != "Auto" && drop_chapterFinish.Text != "Auto")\r
1562                 {\r
1563                     start_chapter = int.Parse(drop_chapterStart.Text);\r
1564                     end_chapter = int.Parse(drop_chapterFinish.Text);\r
1565 \r
1566                     int position = start_chapter - 1;\r
1567 \r
1568                     while (position != end_chapter)\r
1569                     {\r
1570                         TimeSpan dur = selectedTitle.Chapters[position].Duration;\r
1571                         Duration = Duration + dur;\r
1572                         position++;\r
1573                     }\r
1574                 }\r
1575             }\r
1576             catch (Exception)\r
1577             {\r
1578                 // Don't do anything\r
1579             }\r
1580 \r
1581             // Set the Duration\r
1582             lbl_duration.Text = Duration.ToString();\r
1583         }\r
1584         public int cacluateNonAnamorphicHeight(int width)\r
1585         {\r
1586             float aspect = selectedTitle.AspectRatio;\r
1587             int aw;\r
1588             int ah;\r
1589             if (aspect.ToString() == "1.78")\r
1590             {\r
1591                 aw = 16;\r
1592                 ah = 9;\r
1593             }\r
1594             else\r
1595             {\r
1596                 aw = 4;\r
1597                 ah = 3;\r
1598             }\r
1599 \r
1600             double a = width * selectedTitle.Resolution.Width * ah * (selectedTitle.Resolution.Height - (double)text_top.Value - (double)text_bottom.Value);\r
1601             double b = selectedTitle.Resolution.Height * aw * (selectedTitle.Resolution.Width - (double)text_left.Value - (double)text_right.Value);\r
1602 \r
1603             double y = a / b;\r
1604 \r
1605             // If it's not Mod 16, make it mod 16\r
1606             if ((y % 16) != 0)\r
1607             {\r
1608                 double mod16 = y % 16;\r
1609                 if (mod16 >= 8)\r
1610                 {\r
1611                     mod16 = 16 - mod16;\r
1612                     y = y + mod16;\r
1613                 }\r
1614                 else\r
1615                 {\r
1616                     y = y - mod16;\r
1617                 }\r
1618             }\r
1619 \r
1620             //16 * (421 / 16)\r
1621             //double z = ( 16 * (( y + 8 ) / 16 ) );\r
1622             int x = int.Parse(y.ToString());\r
1623             return x;\r
1624         }\r
1625 \r
1626         // Audio system functions\r
1627         private void setAudioByContainer(String path)\r
1628         {\r
1629             string oldval = "";\r
1630 \r
1631             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1632             {\r
1633                 oldval = drp_audenc_1.Text;\r
1634                 drp_audenc_1.Items.Clear();\r
1635                 drp_audenc_1.Items.Add("AAC");\r
1636                 drp_audenc_1.Items.Add("AC3");\r
1637                 if ((oldval != "AAC") && (oldval != "AC3"))\r
1638                     drp_audenc_1.SelectedIndex = 0;\r
1639 \r
1640                 oldval = drp_audenc_2.Text;\r
1641                 drp_audenc_2.Items.Clear();\r
1642                 drp_audenc_2.Items.Add("AAC");\r
1643                 drp_audenc_2.Items.Add("AC3");\r
1644                 if (drp_audenc_2.Enabled)\r
1645                 {\r
1646                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1647                         drp_audenc_2.SelectedIndex = 0;\r
1648                 }\r
1649 \r
1650                 oldval = drp_audenc_3.Text;\r
1651                 drp_audenc_3.Items.Clear();\r
1652                 drp_audenc_3.Items.Add("AAC");\r
1653                 drp_audenc_3.Items.Add("AC3");\r
1654                 if (drp_audenc_3.Enabled)\r
1655                 {\r
1656                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1657                         drp_audenc_3.SelectedIndex = 0;\r
1658                 }\r
1659 \r
1660                 oldval = drp_audenc_4.Text;\r
1661                 drp_audenc_4.Items.Clear();\r
1662                 drp_audenc_4.Items.Add("AAC");\r
1663                 drp_audenc_4.Items.Add("AC3");\r
1664                 if (drp_audenc_4.Enabled)\r
1665                 {\r
1666                     if ((oldval != "AAC") && (oldval != "AC3"))\r
1667                         drp_audenc_4.SelectedIndex = 0;\r
1668                 }\r
1669             }\r
1670             else if (path.EndsWith(".avi"))\r
1671             {\r
1672                 oldval = drp_audenc_1.Text;\r
1673                 drp_audenc_1.Items.Clear();\r
1674                 drp_audenc_1.Items.Add("MP3");\r
1675                 drp_audenc_1.Items.Add("AC3");\r
1676                 if ((oldval != "MP3") && (oldval != "AC3"))\r
1677                     drp_audenc_1.SelectedIndex = 0;\r
1678 \r
1679                 oldval = drp_audenc_2.Text;\r
1680                 drp_audenc_2.Items.Clear();\r
1681                 drp_audenc_2.Items.Add("MP3");\r
1682                 drp_audenc_2.Items.Add("AC3");\r
1683                 if (drp_audenc_2.Enabled)\r
1684                 {\r
1685                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1686                         drp_audenc_2.SelectedIndex = 0;\r
1687                 }\r
1688 \r
1689 \r
1690                 oldval = drp_audenc_3.Text;\r
1691                 drp_audenc_3.Items.Clear();\r
1692                 drp_audenc_3.Items.Add("MP3");\r
1693                 drp_audenc_3.Items.Add("AC3");\r
1694                 if (drp_audenc_3.Enabled)\r
1695                 {\r
1696                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1697                         drp_audenc_3.SelectedIndex = 0;\r
1698                 }\r
1699 \r
1700                 oldval = drp_audenc_4.Text;\r
1701                 drp_audenc_4.Items.Clear();\r
1702                 drp_audenc_4.Items.Add("MP3");\r
1703                 drp_audenc_4.Items.Add("AC3");\r
1704                 if (drp_audenc_4.Enabled)\r
1705                 {\r
1706                     if ((oldval != "MP3") && (oldval != "AC3"))\r
1707                         drp_audenc_4.SelectedIndex = 0;\r
1708                 }\r
1709             }\r
1710             else if (path.EndsWith(".ogm"))\r
1711             {\r
1712                 drp_audenc_1.Items.Clear();\r
1713                 drp_audenc_1.Items.Add("Vorbis");\r
1714                 drp_audenc_1.SelectedIndex = 0;\r
1715 \r
1716                 drp_audenc_2.Items.Clear();\r
1717                 drp_audenc_2.Items.Add("Vorbis");\r
1718                 if (drp_audenc_2.Enabled)\r
1719                     drp_audenc_2.SelectedIndex = 0;\r
1720 \r
1721                 drp_audenc_3.Items.Clear();\r
1722                 drp_audenc_3.Items.Add("Vorbis");\r
1723                 if (drp_audenc_3.Enabled)\r
1724                     drp_audenc_3.SelectedIndex = 0;\r
1725 \r
1726                 drp_audenc_4.Items.Clear();\r
1727                 drp_audenc_4.Items.Add("Vorbis");\r
1728                 if (drp_audenc_4.Enabled)\r
1729                     drp_audenc_4.SelectedIndex = 0;\r
1730             }\r
1731             else if (path.EndsWith(".mkv"))\r
1732             {\r
1733                 drp_audenc_1.Items.Clear();\r
1734                 drp_audenc_1.Items.Add("AAC");\r
1735                 drp_audenc_1.Items.Add("MP3");\r
1736                 drp_audenc_1.Items.Add("AC3");\r
1737                 drp_audenc_1.Items.Add("Vorbis");\r
1738                 if (drp_audenc_1.Text == "")\r
1739                     drp_audenc_1.SelectedIndex = 0;\r
1740 \r
1741 \r
1742                 drp_audenc_2.Items.Clear();\r
1743                 drp_audenc_2.Items.Add("AAC");\r
1744                 drp_audenc_2.Items.Add("MP3");\r
1745                 drp_audenc_2.Items.Add("AC3");\r
1746                 drp_audenc_2.Items.Add("Vorbis");\r
1747                 if (drp_audenc_2.Enabled)\r
1748                 {\r
1749                     if (drp_audenc_2.Text == "")\r
1750                         drp_audenc_2.SelectedIndex = 0;\r
1751                 }\r
1752 \r
1753                 drp_audenc_3.Items.Clear();\r
1754                 drp_audenc_3.Items.Add("AAC");\r
1755                 drp_audenc_3.Items.Add("MP3");\r
1756                 drp_audenc_3.Items.Add("AC3");\r
1757                 drp_audenc_3.Items.Add("Vorbis");\r
1758                 if (drp_audenc_3.Enabled)\r
1759                 {\r
1760                     if (drp_audenc_3.Text == "")\r
1761                         drp_audenc_3.SelectedIndex = 0;\r
1762                 }\r
1763 \r
1764                 drp_audenc_4.Items.Clear();\r
1765                 drp_audenc_4.Items.Add("AAC");\r
1766                 drp_audenc_4.Items.Add("MP3");\r
1767                 drp_audenc_4.Items.Add("AC3");\r
1768                 drp_audenc_4.Items.Add("Vorbis");\r
1769                 if (drp_audenc_4.Enabled)\r
1770                 {\r
1771                     if (drp_audenc_4.Text == "")\r
1772                         drp_audenc_4.SelectedIndex = 0;\r
1773                 }\r
1774             }\r
1775         }\r
1776         private void setVideoByContainer(String path)\r
1777         {\r
1778             string oldval = "";\r
1779 \r
1780             if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))\r
1781             {\r
1782                 oldval = drp_videoEncoder.Text;\r
1783                 drp_videoEncoder.Items.Clear();\r
1784                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1785                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1786                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1787                 if (oldval == "VP3 (Theora)")\r
1788                     drp_videoEncoder.SelectedIndex = 2;\r
1789                 else\r
1790                     drp_videoEncoder.Text = oldval;\r
1791 \r
1792             }\r
1793             else if (path.EndsWith(".avi"))\r
1794             {\r
1795                 oldval = drp_videoEncoder.Text;\r
1796                 drp_videoEncoder.Items.Clear();\r
1797                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1798                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1799                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1800                 if (oldval == "VP3 (Theora)")\r
1801                     drp_videoEncoder.SelectedIndex = 2;\r
1802                 else\r
1803                     drp_videoEncoder.Text = oldval;\r
1804             }\r
1805             else if (path.EndsWith(".ogm"))\r
1806             {\r
1807                 oldval = drp_videoEncoder.Text;\r
1808                 drp_videoEncoder.Items.Clear();\r
1809                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1810                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1811                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1812                 if (oldval == "H.264 (x264)")\r
1813                     drp_videoEncoder.SelectedIndex = 2;\r
1814                 else\r
1815                     drp_videoEncoder.Text = oldval;\r
1816             }\r
1817             else if (path.EndsWith(".mkv"))\r
1818             {\r
1819                 oldval = drp_videoEncoder.Text;\r
1820                 drp_videoEncoder.Items.Clear();\r
1821                 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");\r
1822                 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");\r
1823                 drp_videoEncoder.Items.Add("H.264 (x264)");\r
1824                 drp_videoEncoder.Items.Add("VP3 (Theora)");\r
1825                 drp_videoEncoder.Text = oldval;\r
1826             }\r
1827         }\r
1828         private void setBitrateSelections384(ComboBox dropDown)\r
1829         {\r
1830             dropDown.Items.Clear();\r
1831             dropDown.Items.Add("32");\r
1832             dropDown.Items.Add("40");\r
1833             dropDown.Items.Add("48");\r
1834             dropDown.Items.Add("56");\r
1835             dropDown.Items.Add("64");\r
1836             dropDown.Items.Add("80");\r
1837             dropDown.Items.Add("86");\r
1838             dropDown.Items.Add("112");\r
1839             dropDown.Items.Add("128");\r
1840             dropDown.Items.Add("160");\r
1841             dropDown.Items.Add("192");\r
1842             dropDown.Items.Add("224");\r
1843             dropDown.Items.Add("256");\r
1844             dropDown.Items.Add("320");\r
1845             dropDown.Items.Add("384");\r
1846         }\r
1847         private void setBitrateSelections320(ComboBox dropDown)\r
1848         {\r
1849             dropDown.Items.Clear();\r
1850             dropDown.Items.Add("32");\r
1851             dropDown.Items.Add("40");\r
1852             dropDown.Items.Add("48");\r
1853             dropDown.Items.Add("56");\r
1854             dropDown.Items.Add("64");\r
1855             dropDown.Items.Add("80");\r
1856             dropDown.Items.Add("86");\r
1857             dropDown.Items.Add("112");\r
1858             dropDown.Items.Add("128");\r
1859             dropDown.Items.Add("160");\r
1860             dropDown.Items.Add("192");\r
1861             dropDown.Items.Add("224");\r
1862             dropDown.Items.Add("256");\r
1863             dropDown.Items.Add("320");\r
1864         }\r
1865         private void setBitrateSelections160(ComboBox dropDown)\r
1866         {\r
1867             dropDown.Items.Clear();\r
1868             dropDown.Items.Add("32");\r
1869             dropDown.Items.Add("40");\r
1870             dropDown.Items.Add("48");\r
1871             dropDown.Items.Add("56");\r
1872             dropDown.Items.Add("64");\r
1873             dropDown.Items.Add("80");\r
1874             dropDown.Items.Add("86");\r
1875             dropDown.Items.Add("112");\r
1876             dropDown.Items.Add("128");\r
1877             dropDown.Items.Add("160");\r
1878         }\r
1879 \r
1880         // Preset system functions\r
1881         private void loadNormalPreset()\r
1882         {\r
1883             // Select the "Normal" preset if it exists.\r
1884             int normal = -1;\r
1885             foreach (TreeNode treenode in treeView_presets.Nodes)\r
1886             {\r
1887                 if (treenode.Text.ToString().Equals("Normal"))\r
1888                     normal = treenode.Index;\r
1889             }\r
1890             if (normal != -1)\r
1891             {\r
1892                 TreeNode np = treeView_presets.Nodes[normal];\r
1893                 treeView_presets.SelectedNode = np;\r
1894             }\r
1895         }\r
1896         public void loadPresetPanel()\r
1897         {\r
1898             presetHandler.loadPresetFiles();\r
1899 \r
1900             treeView_presets.Nodes.Clear();\r
1901             ArrayList presetNameList = new ArrayList();\r
1902             presetNameList = presetHandler.getPresetNames();\r
1903 \r
1904             // Adds a new preset name to the preset list.\r
1905             TreeNode preset_treeview = new TreeNode();\r
1906             foreach (string preset in presetNameList)\r
1907             {\r
1908                 preset_treeview = new TreeNode(preset);\r
1909 \r
1910                 // Now Fill Out List View with Items\r
1911                 treeView_presets.Nodes.Add(preset_treeview);\r
1912             }\r
1913         }\r
1914 \r
1915         // Source Button Drive Detection\r
1916         private delegate void ProgressUpdateHandler();\r
1917         private void getDriveInfoThread()\r
1918         {\r
1919             try\r
1920             {\r
1921                 if (this.InvokeRequired)\r
1922                 {\r
1923                     this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));\r
1924                     return;\r
1925                 }\r
1926 \r
1927                 Boolean foundDrive = false;\r
1928                 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();\r
1929                 foreach (DriveInfo curDrive in theCollectionOfDrives)\r
1930                 {\r
1931                     if (curDrive.DriveType == DriveType.CDRom)\r
1932                     {\r
1933                         if (curDrive.IsReady)\r
1934                         {\r
1935                             if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))\r
1936                                 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";\r
1937                             else\r
1938                                 mnu_dvd_drive.Text = "[No DVD Drive Ready]";\r
1939 \r
1940                             foundDrive = true;\r
1941 \r
1942                         }\r
1943                     }\r
1944                 }\r
1945 \r
1946                 if (foundDrive == false)\r
1947                     mnu_dvd_drive.Text = "[No DVD Drive Ready]";\r
1948             }\r
1949             catch (Exception exc)\r
1950             {\r
1951                 MessageBox.Show("Drive Detection Error. \n Error Information: \n\n " + exc.ToString());\r
1952             }\r
1953         }\r
1954 \r
1955         #endregion\r
1956 \r
1957         #region Encoding and Queue\r
1958 \r
1959         // Declarations\r
1960         private delegate void UpdateUIHandler();\r
1961 \r
1962         // Encoding Functions\r
1963         private void procMonitor(object state)\r
1964         {\r
1965             // Make sure we are not already encoding and if we are then display an error.\r
1966             if (hbProc != null)\r
1967                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
1968             else\r
1969             {\r
1970                 hbProc = cliObj.runCli(this, (string)state);\r
1971 \r
1972                 hbProc.WaitForExit();\r
1973 \r
1974                 setEncodeLabelFinished();\r
1975                 hbProc = null;\r
1976 \r
1977                 // If the window is minimized, display the notification in a popup.\r
1978                 if (FormWindowState.Minimized == this.WindowState)\r
1979                 {\r
1980                     notifyIcon.BalloonTipText = lbl_encode.Text;\r
1981                     notifyIcon.ShowBalloonTip(500);\r
1982                 }\r
1983 \r
1984                 // After the encode is done, we may want to shutdown, suspend etc.\r
1985                 cliObj.afterEncodeAction();\r
1986             }\r
1987         }\r
1988         private void setEncodeLabelFinished()\r
1989         {\r
1990             if (this.InvokeRequired)\r
1991             {\r
1992                 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));\r
1993                 return;\r
1994             }\r
1995             lbl_encode.Text = "Encoding Finished";\r
1996         }\r
1997         public Boolean isEncoding()\r
1998         {\r
1999             if (hbProc == null)\r
2000                 return false;\r
2001             else\r
2002                 return true;\r
2003         }\r
2004 \r
2005         #endregion\r
2006 \r
2007         #region Taskbar\r
2008         private void frmMain_Resize(object sender, EventArgs e)\r
2009         {\r
2010             if (FormWindowState.Minimized == this.WindowState)\r
2011             {\r
2012                 notifyIcon.Visible = true;\r
2013                 notifyIcon.BalloonTipText = lbl_encode.Text;\r
2014                 notifyIcon.ShowBalloonTip(500);\r
2015                 this.Hide();\r
2016             }\r
2017             else if (FormWindowState.Normal == this.WindowState)\r
2018             {\r
2019                 notifyIcon.Visible = false;\r
2020             }\r
2021         }\r
2022 \r
2023         private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)\r
2024         {\r
2025             this.Visible = true;\r
2026             this.Activate();\r
2027             this.WindowState = FormWindowState.Normal;\r
2028             notifyIcon.Visible = false;\r
2029         }\r
2030 \r
2031         private void btn_minimize_Click(object sender, EventArgs e)\r
2032         {\r
2033             this.WindowState = FormWindowState.Minimized;\r
2034         }\r
2035 \r
2036         private void btn_restore_Click(object sender, EventArgs e)\r
2037         {\r
2038             this.Visible = true;\r
2039             this.Activate();\r
2040             this.WindowState = FormWindowState.Normal;\r
2041             notifyIcon.Visible = false;\r
2042         }\r
2043 \r
2044         #endregion\r
2045 \r
2046 \r
2047         // This is the END of the road ------------------------------------------------------------------------------\r
2048     }\r
2049 }