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
8 using System.Collections;
\r
9 using System.Collections.Generic;
\r
10 using System.Drawing;
\r
12 using System.Windows.Forms;
\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
22 public partial class frmMain : Form
\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
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
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
43 // Applicaiton Startup ************************************************
\r
45 #region Application Startup
\r
49 // Load the splash screen in this thread
\r
50 Form splash = new frmSplashScreen();
\r
53 // Initialize the queue window.
\r
54 queueWindow = new frmQueue(this);
\r
55 //Create a label that can be updated from the parent thread.
\r
56 Label lblStatus = new Label();
\r
57 lblStatus.Size = new Size(250, 20);
\r
58 lblStatus.Location = new Point(10, 280);
\r
59 splash.Controls.Add(lblStatus);
\r
61 InitializeComponent();
\r
63 // Update the users config file with the CLI version data.
\r
64 lblStatus.Text = "Setting Version Data ...";
\r
65 Application.DoEvents();
\r
66 ArrayList x = hb_common_func.getCliVersionData();
\r
71 Properties.Settings.Default.hb_build = int.Parse(x[1].ToString());
\r
72 Properties.Settings.Default.hb_version = x[0].ToString();
\r
76 Properties.Settings.Default.hb_build = 0;
\r
77 Properties.Settings.Default.hb_version = "0";
\r
81 // show the form, but leave disabled until preloading is complete then show the main form
\r
82 this.Enabled = false;
\r
84 Application.DoEvents(); // Forces frmMain to draw
\r
86 // update the status
\r
87 if (Properties.Settings.Default.updateStatus == "Checked")
\r
89 lblStatus.Text = "Checking for updates ...";
\r
90 Application.DoEvents();
\r
91 Thread updateCheckThread = new Thread(startupUpdateCheck);
\r
92 updateCheckThread.Start();
\r
95 // Setup the GUI components
\r
96 lblStatus.Text = "Setting up the GUI ...";
\r
97 Application.DoEvents();
\r
98 setupH264Panel(); // Initalize the H.264 Panel
\r
99 loadPresetPanel(); // Load the Preset Panel
\r
100 // Load the user's default settings or Normal Preset
\r
101 if (Properties.Settings.Default.defaultSettings == "Checked")
\r
102 loadUserDefaults();
\r
104 loadNormalPreset();
\r
105 // Enabled GUI tooltip's if Required
\r
106 if (Properties.Settings.Default.tooltipEnable == "Checked")
\r
107 ToolTip.Active = true;
\r
108 lbl_encode.Text = "";
\r
111 lblStatus.Text = "Loading Complete!";
\r
112 Application.DoEvents();
\r
114 //Close the splash screen
\r
118 // Turn the interface back to the user
\r
119 this.Enabled = true;
\r
121 // Some event Handlers. Used for minimize to taskbar
\r
122 this.Resize += new EventHandler(frmMain_Resize);
\r
128 // Startup Functions
\r
129 private void startupUpdateCheck()
\r
133 if (this.InvokeRequired)
\r
135 this.BeginInvoke(new updateStatusChanger(startupUpdateCheck));
\r
139 Boolean update = hb_common_func.updateCheck(false);
\r
140 if (update == true)
\r
142 frmUpdater updateWindow = new frmUpdater();
\r
143 updateWindow.Show();
\r
146 catch (Exception) { /* Do Nothing*/ }
\r
148 private void setupH264Panel()
\r
150 // Set the default settings of the x264 panel
\r
151 drop_bFrames.Text = "Default (0)";
\r
152 drop_refFrames.Text = "Default (1)";
\r
153 drop_subpixelMotionEstimation.Text = "Default (4)";
\r
154 drop_trellis.Text = "Default (0)";
\r
155 drop_MotionEstimationMethod.Text = "Default (Hexagon)";
\r
156 drop_MotionEstimationRange.Text = "Default (16)";
\r
157 drop_directPrediction.Text = "Default (Spatial)";
\r
158 drop_deblockAlpha.Text = "Default (0)";
\r
159 drop_deblockBeta.Text = "Default (0)";
\r
160 drop_analysis.Text = "Default (some)";
\r
161 rtf_x264Query.Text = "";
\r
163 private void loadUserDefaults()
\r
165 // Try to load the users default settings.
\r
166 string userDefaults = Properties.Settings.Default.defaultUserSettings;
\r
168 if (userDefaults == "")
\r
169 loadNormalPreset();
\r
172 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);
\r
173 presetLoader.presetLoader(this, presetQuery, "User Defaults ");
\r
176 private void queueRecovery()
\r
178 if (hb_common_func.check_queue_recovery() == true)
\r
180 DialogResult result = MessageBox.Show("HandBrake has detected unfinished items on the queue from the last time the application was launched. Would you like to recover these?", "Queue Recovery Possible", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
182 if (result == DialogResult.Yes)
\r
183 encodeQueue.recoverQueue("hb_queue_recovery.dat"); // Start Recovery
\r
186 // Remove the Queue recovery file if the user doesn't want to recovery the last queue.
\r
187 string queuePath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat");
\r
188 if (File.Exists(queuePath))
\r
189 File.Delete(queuePath);
\r
196 // The Applications Main Menu and Menus *******************************
\r
199 private void mnu_exit_Click(object sender, EventArgs e)
\r
201 Application.Exit();
\r
206 private void mnu_encode_Click(object sender, EventArgs e)
\r
208 queueWindow.setQueue(encodeQueue);
\r
209 queueWindow.Show();
\r
211 private void mnu_encodeLog_Click(object sender, EventArgs e)
\r
213 String file = String.Empty;
\r
214 if (lastAction == "scan")
\r
215 file = "dvdinfo.dat";
\r
217 file = "hb_encode_log.dat";
\r
219 frmActivityWindow dvdInfoWindow = new frmActivityWindow(file, this, queueWindow);
\r
220 dvdInfoWindow.Show();
\r
222 private void mnu_options_Click(object sender, EventArgs e)
\r
224 Form Options = new frmOptions(this);
\r
225 Options.ShowDialog();
\r
229 #region Presets Menu
\r
230 private void mnu_presetReset_Click(object sender, EventArgs e)
\r
232 presetHandler.updateBuiltInPresets();
\r
234 if (treeView_presets.Nodes.Count == 0)
\r
235 MessageBox.Show("Unable to load the presets.dat file. Please select \"Update Built-in Presets\" from the Presets Menu \nMake sure you are running the program in Admin mode if running on Vista. See Windows FAQ for details!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
237 MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
239 private void mnu_delete_preset_Click(object sender, EventArgs e)
\r
241 // Empty the preset file
\r
242 string presetsFile = Application.StartupPath.ToString() + "\\presets.dat";
\r
243 if (File.Exists(presetsFile))
\r
244 File.Delete(presetsFile);
\r
248 FileStream strm = new FileStream(presetsFile, FileMode.Create, FileAccess.Write);
\r
252 catch (Exception exc)
\r
254 MessageBox.Show("An error has occured during the preset removal process.\n If you are using Windows Vista, you may need to run under Administrator Mode to complete this task. \n" + exc.ToString());
\r
257 // Reload the preset panel
\r
260 private void mnu_SelectDefault_Click(object sender, EventArgs e)
\r
262 loadNormalPreset();
\r
264 private void btn_new_preset_Click(object sender, EventArgs e)
\r
266 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
267 preset.ShowDialog();
\r
272 private void mnu_handbrake_forums_Click(object sender, EventArgs e)
\r
274 Process.Start("http://forum.handbrake.fr/");
\r
276 private void mnu_user_guide_Click(object sender, EventArgs e)
\r
278 Process.Start("http://trac.handbrake.fr/wiki/HandBrakeGuide");
\r
280 private void mnu_handbrake_home_Click(object sender, EventArgs e)
\r
282 Process.Start("http://handbrake.fr");
\r
284 private void mnu_UpdateCheck_Click(object sender, EventArgs e)
\r
286 Boolean update = hb_common_func.updateCheck(true);
\r
287 if (update == true)
\r
289 frmUpdater updateWindow = new frmUpdater();
\r
290 updateWindow.Show();
\r
293 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
295 private void mnu_about_Click(object sender, EventArgs e)
\r
297 Form About = new frmAbout();
\r
298 About.ShowDialog();
\r
302 #region Preset Menu
\r
303 private void pmnu_expandAll_Click(object sender, EventArgs e)
\r
305 treeView_presets.ExpandAll();
\r
307 private void pmnu_collapse_Click(object sender, EventArgs e)
\r
309 treeView_presets.CollapseAll();
\r
311 private void treeview_presets_mouseUp(object sender, MouseEventArgs e)
\r
313 if (e.Button == MouseButtons.Right)
\r
314 treeView_presets.SelectedNode = treeView_presets.GetNodeAt(e.Location);
\r
315 treeView_presets.Select();
\r
317 private void pmnu_delete_click(object sender, EventArgs e)
\r
319 if (treeView_presets.SelectedNode != null)
\r
321 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
324 treeView_presets.Select();
\r
329 // MainWindow Components, Actions and Functions ***********************
\r
334 private void btn_source_Click(object sender, EventArgs e)
\r
336 if (Properties.Settings.Default.drive_detection == "Checked")
\r
338 mnu_dvd_drive.Visible = true;
\r
339 Thread driveInfoThread = new Thread(getDriveInfoThread);
\r
340 driveInfoThread.Start();
\r
343 mnu_dvd_drive.Visible = false;
\r
345 private void btn_start_Click(object sender, EventArgs e)
\r
347 if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)
\r
348 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
351 // Set the last action to encode.
\r
352 // This is used for tracking which file to load in the activity window
\r
353 lastAction = "encode";
\r
356 if (rtf_query.Text != "")
\r
357 query = rtf_query.Text;
\r
359 query = queryGen.GenerateTheQuery(this);
\r
361 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
362 lbl_encode.Visible = true;
\r
363 lbl_encode.Text = "Encoding in Progress";
\r
365 btn_start.Text = "Stop";
\r
366 btn_start.ToolTipText = "Stop the encoding process. \nWarning: This may break your file. Press ctrl-c in the CLI window if you wish it to exit cleanly.";
\r
367 btn_start.Image = Properties.Resources.stop;
\r
370 private void btn_add2Queue_Click(object sender, EventArgs e)
\r
372 if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)
\r
373 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
377 String query = queryGen.GenerateTheQuery(this);
\r
378 if (rtf_query.Text != "")
\r
379 query = rtf_query.Text;
\r
381 encodeQueue.add(query);
\r
382 encodeQueue.write2disk("hb_queue_recovery.dat"); // Writes the queue to the recovery file, just incase the GUI crashes.
\r
384 queueWindow.setQueue(encodeQueue);
\r
385 queueWindow.Show();
\r
388 private void btn_showQueue_Click(object sender, EventArgs e)
\r
390 queueWindow.setQueue(encodeQueue);
\r
391 queueWindow.Show();
\r
393 private void btn_ActivityWindow_Click(object sender, EventArgs e)
\r
395 String file = String.Empty;
\r
396 if (lastAction == "scan")
\r
397 file = "dvdinfo.dat";
\r
399 file = "hb_encode_log.dat";
\r
401 frmActivityWindow ActivityWindow = new frmActivityWindow(file, this, queueWindow);
\r
402 ActivityWindow.Show();
\r
406 private void btn_dvd_source_Click(object sender, EventArgs e)
\r
408 // Set the last action to scan.
\r
409 // This is used for tracking which file to load in the activity window
\r
410 lastAction = "scan";
\r
412 String filename = "";
\r
413 text_source.Text = "";
\r
415 DVD_Open.ShowDialog();
\r
416 filename = DVD_Open.SelectedPath;
\r
418 if (filename.StartsWith("\\"))
\r
419 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
422 if (filename != "")
\r
424 Form frmRD = new frmReadDVD(filename, this);
\r
425 text_source.Text = filename;
\r
426 lbl_encode.Text = "Scanning ...";
\r
427 frmRD.ShowDialog();
\r
430 text_source.Text = "Click 'Source' to continue";
\r
432 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
433 if (drp_dvdtitle.Items.Count == 0)
\r
434 MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source.\nYour Source may be copy protected, badly mastered or a format which HandBrake does not support. \nPlease refer to the Documentation and FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
436 lbl_encode.Text = "";
\r
439 private void btn_file_source_Click(object sender, EventArgs e)
\r
441 // Set the last action to scan.
\r
442 // This is used for tracking which file to load in the activity window
\r
443 lastAction = "scan";
\r
445 String filename = "";
\r
446 text_source.Text = "";
\r
448 ISO_Open.ShowDialog();
\r
449 filename = ISO_Open.FileName;
\r
451 if (filename.StartsWith("\\"))
\r
452 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
455 if (filename != "")
\r
457 Form frmRD = new frmReadDVD(filename, this);
\r
458 text_source.Text = filename;
\r
459 lbl_encode.Text = "Scanning ...";
\r
460 frmRD.ShowDialog();
\r
463 text_source.Text = "Click 'Source' to continue";
\r
465 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
466 if (drp_dvdtitle.Items.Count == 0)
\r
467 MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source.\nYour Source may be copy protected, badly mastered or a format which HandBrake does not support. \nPlease refer to the Documentation and FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
469 lbl_encode.Text = "";
\r
472 private void mnu_dvd_drive_Click(object sender, EventArgs e)
\r
474 // Set the last action to scan.
\r
475 // This is used for tracking which file to load in the activity window
\r
476 lastAction = "scan";
\r
478 String filename = "";
\r
479 if (mnu_dvd_drive.Text.Contains("VIDEO_TS"))
\r
481 string[] path = mnu_dvd_drive.Text.Split(' ');
\r
482 filename = path[0];
\r
483 lbl_encode.Text = "Scanning ...";
\r
484 Form frmRD = new frmReadDVD(filename, this);
\r
485 text_source.Text = filename;
\r
486 frmRD.ShowDialog();
\r
489 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
490 if (drp_dvdtitle.Items.Count == 0)
\r
491 MessageBox.Show("No Title(s) found. Please make sure you have selected a valid, non-copy protected source.\nYour Source may be copy protected, badly mastered or a format which HandBrake does not support. \nPlease refer to the Documentation and FAQ (see Help Menu).", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
493 lbl_encode.Text = "";
\r
496 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
498 if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))
\r
499 MessageBox.Show("There are no titles to select. Please load a source file by clicking the 'Source' button above before trying to select a title.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
501 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
503 // Reset some values on the form
\r
504 lbl_Aspect.Text = "Select a Title";
\r
505 //lbl_RecomendedCrop.Text = "Select a Title";
\r
506 drop_chapterStart.Items.Clear();
\r
507 drop_chapterFinish.Items.Clear();
\r
509 // If the dropdown is set to automatic nothing else needs to be done.
\r
510 // Otheriwse if its not, title data has to be loased from parsing.
\r
511 if (drp_dvdtitle.Text != "Automatic")
\r
513 selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;
\r
515 // Set the Aspect Ratio
\r
516 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();
\r
517 lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;
\r
518 lbl_duration.Text = selectedTitle.Duration.ToString();
\r
520 // Set the Recommended Cropping values
\r
521 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
522 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
523 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
524 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
526 // Populate the Start chapter Dropdown
\r
527 drop_chapterStart.Items.Clear();
\r
528 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
529 if (drop_chapterStart.Items.Count > 0)
\r
530 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
532 // Populate the Final Chapter Dropdown
\r
533 drop_chapterFinish.Items.Clear();
\r
534 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
535 if (drop_chapterFinish.Items.Count > 0)
\r
536 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
538 // Populate the Audio Channels Dropdown
\r
539 drp_track1Audio.Items.Clear();
\r
540 drp_track1Audio.Items.Add("Automatic");
\r
541 drp_track1Audio.Items.Add("None");
\r
542 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
543 drp_track1Audio.SelectedIndex = 0;
\r
545 drp_track2Audio.Items.Clear();
\r
546 drp_track2Audio.Items.Add("None");
\r
547 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
548 drp_track2Audio.SelectedIndex = 0;
\r
550 drp_track3Audio.Items.Clear();
\r
551 drp_track3Audio.Items.Add("None");
\r
552 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
553 drp_track3Audio.SelectedIndex = 0;
\r
555 drp_track4Audio.Items.Clear();
\r
556 drp_track4Audio.Items.Add("None");
\r
557 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
558 drp_track4Audio.SelectedIndex = 0;
\r
560 // Populate the Subtitles dropdown
\r
561 drp_subtitle.Items.Clear();
\r
562 drp_subtitle.Items.Add("None");
\r
563 drp_subtitle.Items.Add("Autoselect");
\r
564 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
565 if (drp_subtitle.Items.Count > 0)
\r
566 drp_subtitle.Text = drp_subtitle.Items[0].ToString();
\r
570 // Run the autoName & chapterNaming functions
\r
571 if (Properties.Settings.Default.autoNaming == "Checked")
\r
572 text_destination.Text = hb_common_func.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, text_source.Text, text_destination.Text, drop_format.SelectedIndex);
\r
574 data_chpt.Rows.Clear();
\r
575 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
576 if (chapterGridView != null)
\r
577 data_chpt = chapterGridView;
\r
579 private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)
\r
581 int c_start, c_end = 1;
\r
583 if (drop_chapterFinish.Text == "Auto" && drop_chapterFinish.Items.Count != 0)
\r
584 drop_chapterFinish.SelectedIndex = drop_chapterFinish.Items.Count - 1;
\r
586 int.TryParse(drop_chapterStart.Text, out c_start);
\r
587 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
591 if (c_start > c_end)
\r
592 drop_chapterFinish.Text = c_start.ToString();
\r
595 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
597 // Run the Autonaming function
\r
598 if (Properties.Settings.Default.autoNaming == "Checked")
\r
599 text_destination.Text = hb_common_func.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, text_source.Text, text_destination.Text, drop_format.SelectedIndex);
\r
601 private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)
\r
603 int c_start, c_end = 1;
\r
605 if (drop_chapterStart.Text == "Auto" && drop_chapterStart.Items.Count >= 1)
\r
606 drop_chapterStart.SelectedIndex = 1;
\r
608 int.TryParse(drop_chapterStart.Text, out c_start);
\r
609 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
613 if (c_end < c_start)
\r
614 drop_chapterFinish.Text = c_start.ToString();
\r
617 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
619 // Run the Autonaming function
\r
620 if (Properties.Settings.Default.autoNaming == "Checked")
\r
621 text_destination.Text = hb_common_func.autoName(drp_dvdtitle, drop_chapterStart.Text, drop_chapterFinish.Text, text_source.Text, text_destination.Text, drop_format.SelectedIndex);
\r
625 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
627 // This removes the file extension from the filename box on the save file dialog.
\r
628 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
629 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");
\r
631 // Show the dialog and set the main form file path
\r
632 DVD_Save.ShowDialog();
\r
633 if (DVD_Save.FileName.StartsWith("\\"))
\r
634 MessageBox.Show("Sorry, HandBrake does not support UNC file paths. \nTry mounting the share as a network drive in My Computer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
637 setAudioByContainer(DVD_Save.FileName);
\r
639 text_destination.Text = DVD_Save.FileName;
\r
641 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
642 if (Check_ChapterMarkers.Checked)
\r
643 text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");
\r
646 private void text_destination_TextChanged(object sender, EventArgs e)
\r
648 setAudioByContainer(text_destination.Text);
\r
649 setVideoByContainer(text_destination.Text);
\r
650 string path = text_destination.Text;
\r
651 if (path.EndsWith(".mp4"))
\r
652 drop_format.SelectedIndex = 0;
\r
653 else if (path.EndsWith(".m4v"))
\r
654 drop_format.SelectedIndex = 1;
\r
655 else if (path.EndsWith(".mkv"))
\r
656 drop_format.SelectedIndex = 2;
\r
657 else if (path.EndsWith(".avi"))
\r
658 drop_format.SelectedIndex = 3;
\r
659 else if (path.EndsWith(".ogm"))
\r
660 drop_format.SelectedIndex = 4;
\r
665 private void drop_format_SelectedIndexChanged(object sender, EventArgs e)
\r
667 if (drop_format.SelectedIndex == 0)
\r
668 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mp4");
\r
669 else if (drop_format.SelectedIndex == 1)
\r
670 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".m4v");
\r
671 else if (drop_format.SelectedIndex == 2)
\r
672 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mkv");
\r
673 else if (drop_format.SelectedIndex == 3)
\r
674 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".avi");
\r
675 else if (drop_format.SelectedIndex == 4)
\r
676 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".ogm");
\r
680 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
682 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
684 check_largeFile.Enabled = true;
\r
685 check_optimiseMP4.Enabled = true;
\r
686 check_iPodAtom.Enabled = true;
\r
690 check_largeFile.Enabled = false;
\r
691 check_optimiseMP4.Enabled = false;
\r
692 check_iPodAtom.Enabled = false;
\r
693 check_largeFile.Checked = false;
\r
694 check_optimiseMP4.Checked = false;
\r
695 check_iPodAtom.Checked = false;
\r
699 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
700 if (drp_videoEncoder.Text.Contains("H.264"))
\r
702 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
703 check_turbo.Enabled = true;
\r
705 h264Tab.Enabled = true;
\r
706 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
707 check_iPodAtom.Enabled = true;
\r
709 check_iPodAtom.Enabled = false;
\r
710 if (!drp_anamorphic.Items.Contains("Loose"))
\r
711 drp_anamorphic.Items.Add("Loose");
\r
715 check_turbo.CheckState = CheckState.Unchecked;
\r
716 check_turbo.Enabled = false;
\r
717 h264Tab.Enabled = false;
\r
718 rtf_x264Query.Text = "";
\r
719 check_iPodAtom.Enabled = false;
\r
720 check_iPodAtom.Checked = false;
\r
721 if (drp_anamorphic.Items.Count == 3)
\r
722 drp_anamorphic.Items.RemoveAt(2);
\r
726 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
728 text_filesize.Text = "";
\r
729 slider_videoQuality.Value = 0;
\r
730 SliderValue.Text = "0%";
\r
731 check_2PassEncode.Enabled = true;
\r
733 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
735 text_bitrate.Text = "";
\r
736 slider_videoQuality.Value = 0;
\r
737 SliderValue.Text = "0%";
\r
738 check_2PassEncode.Enabled = true;
\r
740 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
742 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
743 text_bitrate.Text = "";
\r
744 text_filesize.Text = "";
\r
745 check_2PassEncode.Enabled = false;
\r
746 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
748 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
750 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
752 if (drp_videoEncoder.Text.Contains("H.264"))
\r
753 check_turbo.Enabled = true;
\r
757 check_turbo.Enabled = false;
\r
758 check_turbo.CheckState = CheckState.Unchecked;
\r
763 private void text_width_TextChanged(object sender, EventArgs e)
\r
766 Boolean parsed = int.TryParse(text_width.Text, out width);
\r
767 if (parsed != false)
\r
769 if ((width % 16) != 0)
\r
770 text_width.BackColor = Color.LightCoral;
\r
772 text_width.BackColor = Color.LightGreen;
\r
775 if (lbl_Aspect.Text != "Select a Title")
\r
777 if (drp_anamorphic.Text == "None")
\r
779 int height = hb_common_func.cacluateNonAnamorphicHeight(width, text_top.Value, text_bottom.Value, text_left.Value, text_right.Value, selectedTitle);
\r
780 text_height.Text = height.ToString();
\r
785 private void text_height_TextChanged(object sender, EventArgs e)
\r
788 Boolean parsed = int.TryParse(text_height.Text, out height);
\r
789 if (parsed != false)
\r
791 if ((height % 16) != 0)
\r
792 text_height.BackColor = Color.LightCoral;
\r
794 text_height.BackColor = Color.LightGreen;
\r
797 private void check_customCrop_CheckedChanged(object sender, EventArgs e)
\r
799 text_left.Enabled = true;
\r
800 text_right.Enabled = true;
\r
801 text_top.Enabled = true;
\r
802 text_bottom.Enabled = true;
\r
803 if (selectedTitle != null)
\r
805 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
806 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
807 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
808 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
812 text_left.Text = "0";
\r
813 text_right.Text = "0";
\r
814 text_top.Text = "0";
\r
815 text_bottom.Text = "0";
\r
818 private void check_autoCrop_CheckedChanged(object sender, EventArgs e)
\r
820 text_left.Enabled = false;
\r
821 text_right.Enabled = false;
\r
822 text_top.Enabled = false;
\r
823 text_bottom.Enabled = false;
\r
825 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
827 if (drp_anamorphic.SelectedIndex == 1)
\r
829 text_height.BackColor = Color.LightGray;
\r
830 text_width.BackColor = Color.LightGray;
\r
831 text_height.Text = "";
\r
832 text_width.Text = "";
\r
833 text_height.Enabled = false;
\r
834 text_width.Enabled = false;
\r
837 if (drp_anamorphic.SelectedIndex == 2)
\r
839 text_height.Text = "";
\r
840 text_height.Enabled = false;
\r
841 text_height.BackColor = Color.LightGray;
\r
843 text_width.Enabled = true;
\r
844 text_width.BackColor = Color.White;
\r
847 if (drp_anamorphic.SelectedIndex == 0)
\r
849 text_height.BackColor = Color.White;
\r
850 text_width.BackColor = Color.White;
\r
851 text_height.Enabled = true;
\r
852 text_width.Enabled = true;
\r
855 private void slider_deblock_Scroll(object sender, EventArgs e)
\r
857 if (slider_deblock.Value == 4)
\r
858 lbl_deblockVal.Text = "Off";
\r
860 lbl_deblockVal.Text = slider_deblock.Value.ToString();
\r
864 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
866 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
868 drp_audbit_2.Enabled = false;
\r
869 drp_audenc_2.Enabled = false;
\r
870 drp_audsr_2.Enabled = false;
\r
871 drp_audmix_2.Enabled = false;
\r
872 trackBar2.Enabled = false;
\r
873 drp_audbit_2.Text = "";
\r
874 drp_audenc_2.Text = "";
\r
875 drp_audsr_2.Text = "";
\r
876 drp_audmix_2.Text = "Automatic";
\r
877 trackBar2.Value = 0;
\r
879 // Disable the 3rd Track.
\r
880 drp_track3Audio.Enabled = false;
\r
881 drp_track3Audio.Text = "None";
\r
882 drp_audbit_3.Text = "";
\r
883 drp_audenc_3.Text = "";
\r
884 drp_audsr_3.Text = "";
\r
885 drp_audmix_3.Text = "Automatic";
\r
886 trackBar3.Value = 0;
\r
890 drp_audbit_2.Enabled = true;
\r
891 drp_audenc_2.Enabled = true;
\r
892 drp_audsr_2.Enabled = true;
\r
893 drp_audmix_2.Enabled = true;
\r
894 trackBar2.Enabled = true;
\r
895 drp_audbit_2.Text = "160";
\r
896 drp_audenc_2.Text = "AAC";
\r
897 drp_audsr_2.Text = "Auto";
\r
898 drp_audmix_2.Text = "Automatic";
\r
900 // Enable the 3rd Track.
\r
901 drp_track3Audio.Enabled = true;
\r
902 drp_audbit_3.Text = "";
\r
903 drp_audenc_3.Text = "";
\r
904 drp_audsr_3.Text = "";
\r
905 drp_audmix_3.Text = "Automatic";
\r
908 private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
910 if (drp_track3Audio.SelectedItem.Equals("None"))
\r
912 drp_audbit_3.Enabled = false;
\r
913 drp_audenc_3.Enabled = false;
\r
914 drp_audsr_3.Enabled = false;
\r
915 drp_audmix_3.Enabled = false;
\r
916 trackBar3.Enabled = false;
\r
917 drp_audbit_3.Text = "";
\r
918 drp_audenc_3.Text = "";
\r
919 drp_audsr_3.Text = "";
\r
920 drp_audmix_3.Text = "Automatic";
\r
921 trackBar3.Value = 0;
\r
923 // Disable the 4th Track.
\r
924 drp_track4Audio.Enabled = false;
\r
925 drp_track4Audio.Text = "None";
\r
926 drp_audbit_4.Text = "";
\r
927 drp_audenc_4.Text = "";
\r
928 drp_audsr_4.Text = "";
\r
929 drp_audmix_4.Text = "Automatic";
\r
934 drp_audbit_3.Enabled = true;
\r
935 drp_audenc_3.Enabled = true;
\r
936 drp_audsr_3.Enabled = true;
\r
937 drp_audmix_3.Enabled = true;
\r
938 trackBar3.Enabled = true;
\r
939 drp_audbit_3.Text = "160";
\r
940 drp_audenc_3.Text = "AAC";
\r
941 drp_audsr_3.Text = "Auto";
\r
942 drp_audmix_3.Text = "Automatic";
\r
944 // Enable the 4th Track.
\r
945 drp_track4Audio.Enabled = true;
\r
946 drp_audbit_4.Text = "";
\r
947 drp_audenc_4.Text = "";
\r
948 drp_audsr_4.Text = "";
\r
949 drp_audmix_4.Text = "Automatic";
\r
953 private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
955 if (drp_track4Audio.SelectedItem.Equals("None"))
\r
957 drp_audbit_4.Enabled = false;
\r
958 drp_audenc_4.Enabled = false;
\r
959 drp_audsr_4.Enabled = false;
\r
960 drp_audmix_4.Enabled = false;
\r
961 trackBar4.Enabled = false;
\r
962 drp_audbit_4.Text = "";
\r
963 drp_audenc_4.Text = "";
\r
964 drp_audsr_4.Text = "";
\r
965 drp_audmix_4.Text = "Automatic";
\r
966 trackBar4.Value = 0;
\r
970 drp_audbit_4.Enabled = true;
\r
971 drp_audenc_4.Enabled = true;
\r
972 drp_audsr_4.Enabled = true;
\r
973 drp_audmix_4.Enabled = true;
\r
974 trackBar4.Enabled = true;
\r
975 drp_audbit_4.Text = "160";
\r
976 drp_audenc_4.Text = "AAC";
\r
977 drp_audsr_4.Text = "Auto";
\r
978 drp_audmix_4.Text = "Automatic";
\r
982 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
984 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
985 setBitrateSelections384(drp_audbit_1);
\r
986 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
988 setBitrateSelections160(drp_audbit_1);
\r
989 drp_audbit_1.Text = "160";
\r
992 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
994 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
995 setBitrateSelections384(drp_audbit_2);
\r
996 else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))
\r
998 setBitrateSelections160(drp_audbit_2);
\r
999 drp_audbit_2.Text = "160";
\r
1002 private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1004 if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))
\r
1005 setBitrateSelections384(drp_audbit_3);
\r
1006 else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))
\r
1008 setBitrateSelections160(drp_audbit_3);
\r
1009 drp_audbit_3.Text = "160";
\r
1012 private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1014 if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))
\r
1015 setBitrateSelections384(drp_audbit_4);
\r
1016 else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))
\r
1018 setBitrateSelections160(drp_audbit_4);
\r
1019 drp_audbit_4.Text = "160";
\r
1023 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1025 if (drp_audenc_1.Text == "AC3")
\r
1027 drp_audmix_1.Enabled = false;
\r
1028 drp_audbit_1.Enabled = false;
\r
1029 drp_audsr_1.Enabled = false;
\r
1033 drp_audmix_1.Enabled = true;
\r
1034 drp_audbit_1.Enabled = true;
\r
1035 drp_audsr_1.Enabled = true;
\r
1037 drp_audmix_1.Text = "Automatic";
\r
1038 drp_audbit_1.Text = "160";
\r
1039 drp_audsr_1.Text = "Auto";
\r
1043 if (drp_audenc_1.Text == "AAC")
\r
1045 drp_audmix_1.Items.Clear();
\r
1046 drp_audmix_1.Items.Add("Mono");
\r
1047 drp_audmix_1.Items.Add("Stereo");
\r
1048 drp_audmix_1.Items.Add("Dolby Surround");
\r
1049 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1050 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1052 setBitrateSelections160(drp_audbit_1);
\r
1056 drp_audmix_1.Items.Clear();
\r
1057 drp_audmix_1.Items.Add("Stereo");
\r
1058 drp_audmix_1.Items.Add("Dolby Surround");
\r
1059 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1061 setBitrateSelections320(drp_audbit_1);
\r
1064 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1066 if (drp_audenc_2.Text == "AC3")
\r
1068 drp_audmix_2.Enabled = false;
\r
1069 drp_audbit_2.Enabled = false;
\r
1070 drp_audsr_2.Enabled = false;
\r
1072 drp_audmix_2.Text = "Automatic";
\r
1073 drp_audbit_2.Text = "160";
\r
1074 drp_audsr_2.Text = "Auto";
\r
1078 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1079 if (drp_track2Audio.Text != "None")
\r
1081 drp_audmix_2.Enabled = true;
\r
1082 drp_audbit_2.Enabled = true;
\r
1083 drp_audsr_2.Enabled = true;
\r
1085 drp_audmix_2.Text = "Automatic";
\r
1086 drp_audbit_2.Text = "160";
\r
1087 drp_audsr_2.Text = "Auto";
\r
1091 if (drp_audenc_2.Text == "AAC")
\r
1093 drp_audmix_2.Items.Clear();
\r
1094 drp_audmix_2.Items.Add("Mono");
\r
1095 drp_audmix_2.Items.Add("Stereo");
\r
1096 drp_audmix_2.Items.Add("Dolby Surround");
\r
1097 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1098 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1100 setBitrateSelections160(drp_audbit_2);
\r
1104 drp_audmix_2.Items.Clear();
\r
1105 drp_audmix_2.Items.Add("Stereo");
\r
1106 drp_audmix_2.Items.Add("Dolby Surround");
\r
1107 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1109 setBitrateSelections320(drp_audbit_2);
\r
1112 private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1114 if (drp_audenc_3.Text == "AC3")
\r
1116 drp_audmix_3.Enabled = false;
\r
1117 drp_audbit_3.Enabled = false;
\r
1118 drp_audsr_3.Enabled = false;
\r
1120 drp_audmix_3.Text = "Automatic";
\r
1121 drp_audbit_3.Text = "160";
\r
1122 drp_audsr_3.Text = "Auto";
\r
1126 // Just make sure not to re-enable the following boxes if the track above is none
\r
1127 if (drp_track2Audio.Text != "None")
\r
1129 drp_audmix_3.Enabled = true;
\r
1130 drp_audbit_3.Enabled = true;
\r
1131 drp_audsr_3.Enabled = true;
\r
1133 drp_audmix_3.Text = "Automatic";
\r
1134 drp_audbit_3.Text = "160";
\r
1135 drp_audsr_3.Text = "Auto";
\r
1140 if (drp_audenc_3.Text == "AAC")
\r
1142 drp_audmix_3.Items.Clear();
\r
1143 drp_audmix_3.Items.Add("Mono");
\r
1144 drp_audmix_3.Items.Add("Stereo");
\r
1145 drp_audmix_3.Items.Add("Dolby Surround");
\r
1146 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1147 drp_audmix_3.Items.Add("6 Channel Discrete");
\r
1149 setBitrateSelections160(drp_audbit_3);
\r
1153 drp_audmix_3.Items.Clear();
\r
1154 drp_audmix_3.Items.Add("Stereo");
\r
1155 drp_audmix_3.Items.Add("Dolby Surround");
\r
1156 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1158 setBitrateSelections320(drp_audbit_3);
\r
1161 private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1163 if (drp_audenc_4.Text == "AC3")
\r
1165 drp_audmix_4.Enabled = false;
\r
1166 drp_audbit_4.Enabled = false;
\r
1167 drp_audsr_4.Enabled = false;
\r
1169 drp_audmix_4.Text = "Automatic";
\r
1170 drp_audbit_4.Text = "160";
\r
1171 drp_audsr_4.Text = "Auto";
\r
1175 // Just make sure not to re-enable the following boxes if the track above is none
\r
1176 if (drp_track2Audio.Text != "None")
\r
1178 drp_audmix_4.Enabled = true;
\r
1179 drp_audbit_4.Enabled = true;
\r
1180 drp_audsr_4.Enabled = true;
\r
1182 drp_audmix_4.Text = "Automatic";
\r
1183 drp_audbit_4.Text = "160";
\r
1184 drp_audsr_4.Text = "Auto";
\r
1189 if (drp_audenc_4.Text == "AAC")
\r
1191 drp_audmix_4.Items.Clear();
\r
1192 drp_audmix_4.Items.Add("Mono");
\r
1193 drp_audmix_4.Items.Add("Stereo");
\r
1194 drp_audmix_4.Items.Add("Dolby Surround");
\r
1195 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1196 drp_audmix_4.Items.Add("6 Channel Discrete");
\r
1198 setBitrateSelections160(drp_audbit_4);
\r
1202 drp_audmix_4.Items.Clear();
\r
1203 drp_audmix_4.Items.Add("Stereo");
\r
1204 drp_audmix_4.Items.Add("Dolby Surround");
\r
1205 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1207 setBitrateSelections320(drp_audbit_4);
\r
1211 private void trackBar1_Scroll(object sender, EventArgs e)
\r
1213 double value = trackBar1.Value / 10.0;
\r
1216 lbl_drc1.Text = value.ToString();
\r
1218 private void trackBar2_Scroll(object sender, EventArgs e)
\r
1220 double value = trackBar2.Value / 10.0;
\r
1223 lbl_drc2.Text = value.ToString();
\r
1225 private void trackBar3_Scroll(object sender, EventArgs e)
\r
1227 double value = trackBar3.Value / 10.0;
\r
1230 lbl_drc3.Text = value.ToString();
\r
1232 private void trackBar4_Scroll(object sender, EventArgs e)
\r
1234 double value = trackBar4.Value / 10.0;
\r
1237 lbl_drc4.Text = value.ToString();
\r
1240 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1242 if (drp_subtitle.Text.Contains("None"))
\r
1244 check_forced.Enabled = false;
\r
1245 check_forced.Checked = false;
\r
1248 check_forced.Enabled = true;
\r
1251 // Chapter Marker Tab
\r
1252 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1254 if (Check_ChapterMarkers.Checked)
\r
1256 string destination = text_destination.Text;
\r
1257 destination = destination.Replace(".mp4", ".m4v");
\r
1258 text_destination.Text = destination;
\r
1259 data_chpt.Rows.Clear();
\r
1260 data_chpt.Enabled = true;
\r
1261 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
1262 if (chapterGridView != null)
\r
1263 data_chpt = chapterGridView;
\r
1267 string destination = text_destination.Text;
\r
1268 destination = destination.Replace(".m4v", ".mp4");
\r
1269 text_destination.Text = destination;
\r
1270 data_chpt.Rows.Clear();
\r
1271 data_chpt.Enabled = false;
\r
1276 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1278 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1280 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1282 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1284 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1286 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1288 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1290 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1292 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1294 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1296 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1298 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1300 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1302 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1304 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1306 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1308 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1310 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1312 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1314 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1316 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1318 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1320 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1322 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1324 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1326 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1328 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1330 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1333 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1335 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1338 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1340 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1342 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1344 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1346 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1348 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1351 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1354 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1357 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1359 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1361 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1362 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1363 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1365 if (rtf_x264Query.Text == string.Empty)
\r
1366 x264PanelFunctions.reset2Defaults(this);
\r
1369 private void btn_reset_Click(object sender, EventArgs e)
\r
1371 rtf_x264Query.Text = "";
\r
1372 x264PanelFunctions.reset2Defaults(this);
\r
1375 // Query Editor Tab
\r
1376 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1378 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1380 private void btn_clear_Click(object sender, EventArgs e)
\r
1382 rtf_query.Clear();
\r
1386 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1388 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1389 preset.ShowDialog();
\r
1391 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1393 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1394 if (result == DialogResult.Yes)
\r
1396 if (treeView_presets.SelectedNode != null)
\r
1397 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1398 // Now reload the preset panel
\r
1399 loadPresetPanel();
\r
1401 treeView_presets.Select();
\r
1403 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1405 String query = queryGen.GenerateTheQuery(this);
\r
1406 Properties.Settings.Default.defaultUserSettings = query;
\r
1407 // Save the new default Settings
\r
1408 Properties.Settings.Default.Save();
\r
1409 MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1411 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1413 // Ok, so, we've selected a preset. Now we want to load it.
\r
1414 string presetName = treeView_presets.SelectedNode.Text;
\r
1415 string query = presetHandler.getCliForPreset(presetName);
\r
1417 if (query != null)
\r
1419 //Ok, Reset all the H264 widgets before changing the preset
\r
1420 x264PanelFunctions.reset2Defaults(this);
\r
1422 // Send the query from the file to the Query Parser class
\r
1423 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);
\r
1425 // Now load the preset
\r
1426 presetLoader.presetLoader(this, presetQuery, presetName);
\r
1428 // The x264 widgets will need updated, so do this now:
\r
1429 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1430 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1433 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
1435 if (e.KeyCode == Keys.Delete)
\r
1437 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1438 if (result == DialogResult.Yes)
\r
1440 if (treeView_presets.SelectedNode != null)
\r
1441 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1442 // Now reload the preset panel
\r
1443 loadPresetPanel();
\r
1451 private void loadNormalPreset()
\r
1453 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1455 if (treenode.Text.ToString().Equals("Normal"))
\r
1456 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index];
\r
1461 #region Drive Detection
\r
1462 // Source Button Drive Detection
\r
1463 private delegate void ProgressUpdateHandler();
\r
1464 private void getDriveInfoThread()
\r
1468 if (this.InvokeRequired)
\r
1470 this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));
\r
1474 Boolean foundDrive = false;
\r
1475 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1476 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1478 if (curDrive.DriveType == DriveType.CDRom)
\r
1480 if (curDrive.IsReady)
\r
1482 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1483 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1485 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1487 foundDrive = true;
\r
1493 if (foundDrive == false)
\r
1494 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1498 mnu_dvd_drive.Text = "[No DVD Drive Ready / Found]";
\r
1503 #region Audio Panel Stuff
\r
1504 public void setAudioByContainer(String path)
\r
1506 string oldval = "";
\r
1508 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1510 oldval = drp_audenc_1.Text;
\r
1511 drp_audenc_1.Items.Clear();
\r
1512 drp_audenc_1.Items.Add("AAC");
\r
1513 drp_audenc_1.Items.Add("AC3");
\r
1514 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1515 drp_audenc_1.SelectedIndex = 0;
\r
1517 oldval = drp_audenc_2.Text;
\r
1518 drp_audenc_2.Items.Clear();
\r
1519 drp_audenc_2.Items.Add("AAC");
\r
1520 drp_audenc_2.Items.Add("AC3");
\r
1521 if (drp_audenc_2.Enabled)
\r
1523 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1524 drp_audenc_2.SelectedIndex = 0;
\r
1527 oldval = drp_audenc_3.Text;
\r
1528 drp_audenc_3.Items.Clear();
\r
1529 drp_audenc_3.Items.Add("AAC");
\r
1530 drp_audenc_3.Items.Add("AC3");
\r
1531 if (drp_audenc_3.Enabled)
\r
1533 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1534 drp_audenc_3.SelectedIndex = 0;
\r
1537 oldval = drp_audenc_4.Text;
\r
1538 drp_audenc_4.Items.Clear();
\r
1539 drp_audenc_4.Items.Add("AAC");
\r
1540 drp_audenc_4.Items.Add("AC3");
\r
1541 if (drp_audenc_4.Enabled)
\r
1543 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1544 drp_audenc_4.SelectedIndex = 0;
\r
1547 else if (path.EndsWith(".avi"))
\r
1549 oldval = drp_audenc_1.Text;
\r
1550 drp_audenc_1.Items.Clear();
\r
1551 drp_audenc_1.Items.Add("MP3");
\r
1552 drp_audenc_1.Items.Add("AC3");
\r
1553 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1554 drp_audenc_1.SelectedIndex = 0;
\r
1556 oldval = drp_audenc_2.Text;
\r
1557 drp_audenc_2.Items.Clear();
\r
1558 drp_audenc_2.Items.Add("MP3");
\r
1559 drp_audenc_2.Items.Add("AC3");
\r
1560 if (drp_audenc_2.Enabled)
\r
1562 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1563 drp_audenc_2.SelectedIndex = 0;
\r
1567 oldval = drp_audenc_3.Text;
\r
1568 drp_audenc_3.Items.Clear();
\r
1569 drp_audenc_3.Items.Add("MP3");
\r
1570 drp_audenc_3.Items.Add("AC3");
\r
1571 if (drp_audenc_3.Enabled)
\r
1573 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1574 drp_audenc_3.SelectedIndex = 0;
\r
1577 oldval = drp_audenc_4.Text;
\r
1578 drp_audenc_4.Items.Clear();
\r
1579 drp_audenc_4.Items.Add("MP3");
\r
1580 drp_audenc_4.Items.Add("AC3");
\r
1581 if (drp_audenc_4.Enabled)
\r
1583 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1584 drp_audenc_4.SelectedIndex = 0;
\r
1587 else if (path.EndsWith(".ogm"))
\r
1589 drp_audenc_1.Items.Clear();
\r
1590 drp_audenc_1.Items.Add("Vorbis");
\r
1591 drp_audenc_1.SelectedIndex = 0;
\r
1593 drp_audenc_2.Items.Clear();
\r
1594 drp_audenc_2.Items.Add("Vorbis");
\r
1595 if (drp_audenc_2.Enabled)
\r
1596 drp_audenc_2.SelectedIndex = 0;
\r
1598 drp_audenc_3.Items.Clear();
\r
1599 drp_audenc_3.Items.Add("Vorbis");
\r
1600 if (drp_audenc_3.Enabled)
\r
1601 drp_audenc_3.SelectedIndex = 0;
\r
1603 drp_audenc_4.Items.Clear();
\r
1604 drp_audenc_4.Items.Add("Vorbis");
\r
1605 if (drp_audenc_4.Enabled)
\r
1606 drp_audenc_4.SelectedIndex = 0;
\r
1608 else if (path.EndsWith(".mkv"))
\r
1610 drp_audenc_1.Items.Clear();
\r
1611 drp_audenc_1.Items.Add("AAC");
\r
1612 drp_audenc_1.Items.Add("MP3");
\r
1613 drp_audenc_1.Items.Add("AC3");
\r
1614 drp_audenc_1.Items.Add("Vorbis");
\r
1615 if (drp_audenc_1.Text == string.Empty)
\r
1616 drp_audenc_1.SelectedIndex = 0;
\r
1619 drp_audenc_2.Items.Clear();
\r
1620 drp_audenc_2.Items.Add("AAC");
\r
1621 drp_audenc_2.Items.Add("MP3");
\r
1622 drp_audenc_2.Items.Add("AC3");
\r
1623 drp_audenc_2.Items.Add("Vorbis");
\r
1624 if (drp_audenc_2.Enabled)
\r
1626 if (drp_audenc_2.Text == string.Empty)
\r
1627 drp_audenc_2.SelectedIndex = 0;
\r
1630 drp_audenc_3.Items.Clear();
\r
1631 drp_audenc_3.Items.Add("AAC");
\r
1632 drp_audenc_3.Items.Add("MP3");
\r
1633 drp_audenc_3.Items.Add("AC3");
\r
1634 drp_audenc_3.Items.Add("Vorbis");
\r
1635 if (drp_audenc_3.Enabled)
\r
1637 if (drp_audenc_3.Text == string.Empty)
\r
1638 drp_audenc_3.SelectedIndex = 0;
\r
1641 drp_audenc_4.Items.Clear();
\r
1642 drp_audenc_4.Items.Add("AAC");
\r
1643 drp_audenc_4.Items.Add("MP3");
\r
1644 drp_audenc_4.Items.Add("AC3");
\r
1645 drp_audenc_4.Items.Add("Vorbis");
\r
1646 if (drp_audenc_4.Enabled)
\r
1648 if (drp_audenc_4.Text == string.Empty)
\r
1649 drp_audenc_4.SelectedIndex = 0;
\r
1653 public void setVideoByContainer(String path)
\r
1655 string oldval = "";
\r
1657 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1659 oldval = drp_videoEncoder.Text;
\r
1660 drp_videoEncoder.Items.Clear();
\r
1661 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1662 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1663 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1664 if (oldval == "VP3 (Theora)")
\r
1665 drp_videoEncoder.SelectedIndex = 2;
\r
1667 drp_videoEncoder.Text = oldval;
\r
1670 else if (path.EndsWith(".avi"))
\r
1672 oldval = drp_videoEncoder.Text;
\r
1673 drp_videoEncoder.Items.Clear();
\r
1674 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1675 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1676 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1677 if (oldval == "VP3 (Theora)")
\r
1678 drp_videoEncoder.SelectedIndex = 2;
\r
1680 drp_videoEncoder.Text = oldval;
\r
1682 else if (path.EndsWith(".ogm"))
\r
1684 oldval = drp_videoEncoder.Text;
\r
1685 drp_videoEncoder.Items.Clear();
\r
1686 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1687 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1688 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1689 if (oldval == "H.264 (x264)")
\r
1690 drp_videoEncoder.SelectedIndex = 2;
\r
1692 drp_videoEncoder.Text = oldval;
\r
1694 else if (path.EndsWith(".mkv"))
\r
1696 oldval = drp_videoEncoder.Text;
\r
1697 drp_videoEncoder.Items.Clear();
\r
1698 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1699 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1700 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1701 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1702 drp_videoEncoder.Text = oldval;
\r
1705 public void setBitrateSelections384(ComboBox dropDown)
\r
1707 dropDown.Items.Clear();
\r
1708 dropDown.Items.Add("32");
\r
1709 dropDown.Items.Add("40");
\r
1710 dropDown.Items.Add("48");
\r
1711 dropDown.Items.Add("56");
\r
1712 dropDown.Items.Add("64");
\r
1713 dropDown.Items.Add("80");
\r
1714 dropDown.Items.Add("86");
\r
1715 dropDown.Items.Add("112");
\r
1716 dropDown.Items.Add("128");
\r
1717 dropDown.Items.Add("160");
\r
1718 dropDown.Items.Add("192");
\r
1719 dropDown.Items.Add("224");
\r
1720 dropDown.Items.Add("256");
\r
1721 dropDown.Items.Add("320");
\r
1722 dropDown.Items.Add("384");
\r
1724 public void setBitrateSelections320(ComboBox dropDown)
\r
1726 dropDown.Items.Clear();
\r
1727 dropDown.Items.Add("32");
\r
1728 dropDown.Items.Add("40");
\r
1729 dropDown.Items.Add("48");
\r
1730 dropDown.Items.Add("56");
\r
1731 dropDown.Items.Add("64");
\r
1732 dropDown.Items.Add("80");
\r
1733 dropDown.Items.Add("86");
\r
1734 dropDown.Items.Add("112");
\r
1735 dropDown.Items.Add("128");
\r
1736 dropDown.Items.Add("160");
\r
1737 dropDown.Items.Add("192");
\r
1738 dropDown.Items.Add("224");
\r
1739 dropDown.Items.Add("256");
\r
1740 dropDown.Items.Add("320");
\r
1742 public void setBitrateSelections160(ComboBox dropDown)
\r
1744 dropDown.Items.Clear();
\r
1745 dropDown.Items.Add("32");
\r
1746 dropDown.Items.Add("40");
\r
1747 dropDown.Items.Add("48");
\r
1748 dropDown.Items.Add("56");
\r
1749 dropDown.Items.Add("64");
\r
1750 dropDown.Items.Add("80");
\r
1751 dropDown.Items.Add("86");
\r
1752 dropDown.Items.Add("112");
\r
1753 dropDown.Items.Add("128");
\r
1754 dropDown.Items.Add("160");
\r
1761 private delegate void UpdateUIHandler();
\r
1763 // Encoding Functions
\r
1764 private void procMonitor(object state)
\r
1766 // Make sure we are not already encoding and if we are then display an error.
\r
1767 if (hbProc != null)
\r
1768 hbProc.CloseMainWindow();
\r
1771 hbProc = cliObj.runCli(this, (string)state);
\r
1772 hbProc.WaitForExit();
\r
1773 setEncodeLabelFinished();
\r
1776 // If the window is minimized, display the notification in a popup.
\r
1777 if (FormWindowState.Minimized == this.WindowState)
\r
1779 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1780 notifyIcon.ShowBalloonTip(500);
\r
1783 // After the encode is done, we may want to shutdown, suspend etc.
\r
1784 cliObj.afterEncodeAction();
\r
1787 private void setEncodeLabelFinished()
\r
1789 if (this.InvokeRequired)
\r
1791 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
1794 lbl_encode.Text = "Encoding Finished";
\r
1795 btn_start.Text = "Start";
\r
1796 btn_start.ToolTipText = "Start the encoding process";
\r
1797 btn_start.Image = Properties.Resources.Play;
\r
1802 #region Public Methods
\r
1805 /// Is the mainWindow currently monitoring an encoding session
\r
1807 /// <returns>boolean</returns>
\r
1808 public Boolean isEncoding()
\r
1810 if (hbProc == null)
\r
1817 /// Action can be "encode" or "scan"
\r
1818 /// Set the last action varible in the main window.
\r
1819 /// This is used to control which log file is displayed when the Activity window is displayed.
\r
1821 /// <param name="last">String</param>
\r
1822 public void setLastAction(string last)
\r
1824 this.lastAction = last;
\r
1828 /// DVD parseing. Pass in a parsed DVD.
\r
1830 /// <param name="dvd"></param>
\r
1831 public void setStreamReader(Parsing.DVD dvd)
\r
1833 this.thisDVD = dvd;
\r
1837 /// Reload the preset panel display
\r
1839 public void loadPresetPanel()
\r
1841 presetHandler.loadPresetData();
\r
1843 treeView_presets.Nodes.Clear();
\r
1845 List<Presets.Preset> presetNameList = new List<Presets.Preset>();
\r
1846 List<string> presetNames = new List<string>();
\r
1847 TreeNode preset_treeview = new TreeNode();
\r
1849 TreeNode rootNode = new TreeNode();
\r
1850 TreeNode rootNodeTwo = new TreeNode();
\r
1851 TreeNode childNode = new TreeNode();
\r
1852 int workingLevel = 0;
\r
1853 string previousCategory = String.Empty;
\r
1854 string currentCategory = String.Empty;
\r
1856 presetNameList = presetHandler.getBuildInPresets();
\r
1857 if (presetNameList.Count != 0)
\r
1859 foreach (Presets.Preset preset in presetNameList)
\r
1861 // Handle Root Nodes
\r
1863 // First Case - No presets have been read yet so setup the root category
\r
1864 if (preset.Level == 1 && currentCategory == String.Empty)
\r
1866 rootNode = new TreeNode(preset.Category);
\r
1867 workingLevel = preset.Level;
\r
1868 currentCategory = preset.Category;
\r
1869 previousCategory = preset.Category;
\r
1872 // Second Case - This is the first sub child node.
\r
1873 if (preset.Level == 2 && workingLevel == 1 && currentCategory != preset.Category)
\r
1875 rootNodeTwo = new TreeNode(preset.Category);
\r
1876 workingLevel = preset.Level;
\r
1877 currentCategory = preset.Category;
\r
1878 rootNode.Nodes.Add(rootNodeTwo);
\r
1881 // Third Case - Any presets the sub presets detected in the above if statment.
\r
1882 if (preset.Level == 1 && workingLevel == 2 && previousCategory == preset.Category)
\r
1884 workingLevel = preset.Level;
\r
1885 currentCategory = preset.Category;
\r
1888 // Fourth Case - We've finished this root node and are onto the next root node.
\r
1889 if (preset.Level == 1 && workingLevel == 1 && previousCategory != preset.Category)
\r
1891 treeView_presets.Nodes.Add(rootNode); // Add the finished node
\r
1893 rootNode = new TreeNode(preset.Category);
\r
1894 workingLevel = preset.Level;
\r
1895 currentCategory = preset.Category;
\r
1896 previousCategory = preset.Category;
\r
1899 // Handle Child Nodes
\r
1900 // Add First level child nodes to the current root node
\r
1901 if (preset.Level == 1 && workingLevel == 1 && currentCategory == preset.Category)
\r
1903 childNode = new TreeNode(preset.Name);
\r
1904 rootNode.Nodes.Add(childNode);
\r
1907 // Add Second level child nodes to the current sub root node
\r
1908 if (preset.Level == 2 && workingLevel == 2 && currentCategory == preset.Category)
\r
1910 childNode = new TreeNode(preset.Name);
\r
1911 rootNodeTwo.Nodes.Add(childNode);
\r
1915 // Add the final root node which does not get added above.
\r
1916 treeView_presets.Nodes.Add(rootNode);
\r
1921 presetNames = presetHandler.getUserPresetNames();
\r
1922 foreach (string preset in presetNames)
\r
1924 preset_treeview = new TreeNode(preset);
\r
1925 preset_treeview.ForeColor = Color.Black;
\r
1927 // Now Fill Out List View with Items
\r
1928 treeView_presets.Nodes.Add(preset_treeview);
\r
1934 #region Taskbar Tray Icon
\r
1935 private void frmMain_Resize(object sender, EventArgs e)
\r
1937 if (FormWindowState.Minimized == this.WindowState)
\r
1939 notifyIcon.Visible = true;
\r
1940 if (lbl_encode.Text != "")
\r
1941 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1943 notifyIcon.BalloonTipText = "Not Encoding";
\r
1944 notifyIcon.ShowBalloonTip(500);
\r
1947 else if (FormWindowState.Normal == this.WindowState)
\r
1948 notifyIcon.Visible = false;
\r
1950 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
1952 this.Visible = true;
\r
1954 this.WindowState = FormWindowState.Normal;
\r
1955 notifyIcon.Visible = false;
\r
1957 private void btn_minimize_Click(object sender, EventArgs e)
\r
1959 this.WindowState = FormWindowState.Minimized;
\r
1961 private void btn_restore_Click(object sender, EventArgs e)
\r
1963 this.Visible = true;
\r
1965 this.WindowState = FormWindowState.Normal;
\r
1966 notifyIcon.Visible = false;
\r
1970 // This is the END of the road ------------------------------------------------------------------------------
\r