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