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