OSDN Git Service

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