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