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