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 // Expand the preset Nodes
\r
106 treeView_presets.ExpandAll();
\r
107 // Enabled GUI tooltip's if Required
\r
108 if (Properties.Settings.Default.tooltipEnable == "Checked")
\r
109 ToolTip.Active = true;
\r
110 lbl_encode.Text = "";
\r
113 lblStatus.Text = "Loading Complete!";
\r
114 Application.DoEvents();
\r
116 //Close the splash screen
\r
120 // Turn the interface back to the user
\r
121 this.Enabled = true;
\r
123 // Some event Handlers. Used for minimize to taskbar
\r
124 this.Resize += new EventHandler(frmMain_Resize);
\r
130 // Startup Functions
\r
131 private void startupUpdateCheck()
\r
135 if (this.InvokeRequired)
\r
137 this.BeginInvoke(new updateStatusChanger(startupUpdateCheck));
\r
141 Boolean update = hb_common_func.updateCheck(false);
\r
142 if (update == true)
\r
144 frmUpdater updateWindow = new frmUpdater();
\r
145 updateWindow.Show();
\r
148 catch (Exception) { /* Do Nothing*/ }
\r
150 private void setupH264Panel()
\r
152 // Set the default settings of the x264 panel
\r
153 drop_bFrames.Text = "Default (0)";
\r
154 drop_refFrames.Text = "Default (1)";
\r
155 drop_subpixelMotionEstimation.Text = "Default (4)";
\r
156 drop_trellis.Text = "Default (0)";
\r
157 drop_MotionEstimationMethod.Text = "Default (Hexagon)";
\r
158 drop_MotionEstimationRange.Text = "Default (16)";
\r
159 drop_directPrediction.Text = "Default (Spatial)";
\r
160 drop_deblockAlpha.Text = "Default (0)";
\r
161 drop_deblockBeta.Text = "Default (0)";
\r
162 drop_analysis.Text = "Default (some)";
\r
163 rtf_x264Query.Text = "";
\r
165 private void loadUserDefaults()
\r
167 // Try to load the users default settings.
\r
168 string userDefaults = Properties.Settings.Default.defaultUserSettings;
\r
170 if (userDefaults == "")
\r
171 loadNormalPreset();
\r
174 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(userDefaults);
\r
175 presetLoader.presetLoader(this, presetQuery, "User Defaults ");
\r
178 private void queueRecovery()
\r
180 if (hb_common_func.check_queue_recovery() == true)
\r
182 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
184 if (result == DialogResult.Yes)
\r
185 encodeQueue.recoverQueue("hb_queue_recovery.dat"); // Start Recovery
\r
188 // Remove the Queue recovery file if the user doesn't want to recovery the last queue.
\r
189 string queuePath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat");
\r
190 if (File.Exists(queuePath))
\r
191 File.Delete(queuePath);
\r
198 // The Applications Main Menu and Menus *******************************
\r
201 private void mnu_exit_Click(object sender, EventArgs e)
\r
203 Application.Exit();
\r
208 private void mnu_encode_Click(object sender, EventArgs e)
\r
210 queueWindow.setQueue(encodeQueue);
\r
211 queueWindow.Show();
\r
213 private void mnu_encodeLog_Click(object sender, EventArgs e)
\r
215 String file = String.Empty;
\r
216 if (lastAction == "scan")
\r
217 file = "dvdinfo.dat";
\r
219 file = "hb_encode_log.dat";
\r
221 frmActivityWindow dvdInfoWindow = new frmActivityWindow(file, this, queueWindow);
\r
222 dvdInfoWindow.Show();
\r
224 private void mnu_options_Click(object sender, EventArgs e)
\r
226 Form Options = new frmOptions(this);
\r
227 Options.ShowDialog();
\r
231 #region Presets Menu
\r
232 private void mnu_presetReset_Click(object sender, EventArgs e)
\r
234 presetHandler.updateBuiltInPresets();
\r
236 if (treeView_presets.Nodes.Count == 0)
\r
237 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
239 MessageBox.Show("Presets have been updated!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
241 private void mnu_delete_preset_Click(object sender, EventArgs e)
\r
243 // Empty the preset file
\r
244 string presetsFile = Application.StartupPath.ToString() + "\\presets.dat";
\r
245 if (File.Exists(presetsFile))
\r
246 File.Delete(presetsFile);
\r
250 FileStream strm = new FileStream(presetsFile, FileMode.Create, FileAccess.Write);
\r
254 catch (Exception exc)
\r
256 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
259 // Reload the preset panel
\r
262 private void mnu_SelectDefault_Click(object sender, EventArgs e)
\r
264 loadNormalPreset();
\r
266 private void btn_new_preset_Click(object sender, EventArgs e)
\r
268 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
269 preset.ShowDialog();
\r
274 private void mnu_handbrake_forums_Click(object sender, EventArgs e)
\r
276 Process.Start("http://forum.handbrake.fr/");
\r
278 private void mnu_user_guide_Click(object sender, EventArgs e)
\r
280 Process.Start("http://trac.handbrake.fr/wiki/HandBrakeGuide");
\r
282 private void mnu_handbrake_home_Click(object sender, EventArgs e)
\r
284 Process.Start("http://handbrake.fr");
\r
286 private void mnu_UpdateCheck_Click(object sender, EventArgs e)
\r
288 Boolean update = hb_common_func.updateCheck(true);
\r
289 if (update == true)
\r
291 frmUpdater updateWindow = new frmUpdater();
\r
292 updateWindow.Show();
\r
295 MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
297 private void mnu_about_Click(object sender, EventArgs e)
\r
299 Form About = new frmAbout();
\r
300 About.ShowDialog();
\r
304 #region Preset Menu
\r
305 private void pmnu_expandAll_Click(object sender, EventArgs e)
\r
307 treeView_presets.ExpandAll();
\r
309 private void pmnu_collapse_Click(object sender, EventArgs e)
\r
311 treeView_presets.CollapseAll();
\r
313 private void treeview_presets_mouseUp(object sender, MouseEventArgs e)
\r
315 if (e.Button == MouseButtons.Right)
\r
316 treeView_presets.SelectedNode = treeView_presets.GetNodeAt(e.Location);
\r
317 treeView_presets.Select();
\r
319 private void pmnu_delete_click(object sender, EventArgs e)
\r
321 if (treeView_presets.SelectedNode != null)
\r
323 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
325 // Remember each nodes expanded status so we can reload it
\r
326 List<Boolean> nodeStatus = new List<Boolean>();
\r
327 foreach (TreeNode node in treeView_presets.Nodes)
\r
329 nodeStatus.Add(node.IsExpanded);
\r
335 foreach (TreeNode node in treeView_presets.Nodes)
\r
337 if (nodeStatus[i] == true)
\r
343 treeView_presets.Select();
\r
348 // MainWindow Components, Actions and Functions ***********************
\r
353 private void btn_source_Click(object sender, EventArgs e)
\r
355 if (Properties.Settings.Default.drive_detection == "Checked")
\r
357 mnu_dvd_drive.Visible = true;
\r
358 Thread driveInfoThread = new Thread(getDriveInfoThread);
\r
359 driveInfoThread.Start();
\r
362 mnu_dvd_drive.Visible = false;
\r
364 private void btn_start_Click(object sender, EventArgs e)
\r
366 if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)
\r
367 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
370 // Set the last action to encode.
\r
371 // This is used for tracking which file to load in the activity window
\r
372 lastAction = "encode";
\r
375 if (rtf_query.Text != "")
\r
376 query = rtf_query.Text;
\r
378 query = queryGen.GenerateTheQuery(this);
\r
380 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
381 lbl_encode.Visible = true;
\r
382 lbl_encode.Text = "Encoding in Progress";
\r
384 btn_start.Text = "Stop";
\r
385 btn_start.ToolTipText = "Stop the encoding process. \nWarning: This may break your file. Press ctrl-c in the CLI window if you wish it to exit cleanly.";
\r
386 btn_start.Image = Properties.Resources.stop;
\r
389 private void btn_add2Queue_Click(object sender, EventArgs e)
\r
391 if (text_source.Text == string.Empty || text_source.Text == "Click 'Source' to continue" || text_destination.Text == string.Empty)
\r
392 MessageBox.Show("No source OR destination selected.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
396 String query = queryGen.GenerateTheQuery(this);
\r
397 if (rtf_query.Text != "")
\r
398 query = rtf_query.Text;
\r
400 encodeQueue.add(query);
\r
401 encodeQueue.write2disk("hb_queue_recovery.dat"); // Writes the queue to the recovery file, just incase the GUI crashes.
\r
403 queueWindow.setQueue(encodeQueue);
\r
404 queueWindow.Show();
\r
407 private void btn_showQueue_Click(object sender, EventArgs e)
\r
409 queueWindow.setQueue(encodeQueue);
\r
410 queueWindow.Show();
\r
412 private void btn_ActivityWindow_Click(object sender, EventArgs e)
\r
414 String file = String.Empty;
\r
415 if (lastAction == "scan")
\r
416 file = "dvdinfo.dat";
\r
418 file = "hb_encode_log.dat";
\r
420 frmActivityWindow ActivityWindow = new frmActivityWindow(file, this, queueWindow);
\r
421 ActivityWindow.Show();
\r
425 private void btn_dvd_source_Click(object sender, EventArgs e)
\r
427 // Set the last action to scan.
\r
428 // This is used for tracking which file to load in the activity window
\r
429 lastAction = "scan";
\r
431 String filename = "";
\r
432 text_source.Text = "";
\r
434 DVD_Open.ShowDialog();
\r
435 filename = DVD_Open.SelectedPath;
\r
437 if (filename.StartsWith("\\"))
\r
438 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
441 if (filename != "")
\r
443 Form frmRD = new frmReadDVD(filename, this);
\r
444 text_source.Text = filename;
\r
445 lbl_encode.Text = "Scanning ...";
\r
446 frmRD.ShowDialog();
\r
449 text_source.Text = "Click 'Source' to continue";
\r
451 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
452 if (drp_dvdtitle.Items.Count == 0)
\r
453 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
455 lbl_encode.Text = "";
\r
458 private void btn_file_source_Click(object sender, EventArgs e)
\r
460 // Set the last action to scan.
\r
461 // This is used for tracking which file to load in the activity window
\r
462 lastAction = "scan";
\r
464 String filename = "";
\r
465 text_source.Text = "";
\r
467 ISO_Open.ShowDialog();
\r
468 filename = ISO_Open.FileName;
\r
470 if (filename.StartsWith("\\"))
\r
471 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
474 if (filename != "")
\r
476 Form frmRD = new frmReadDVD(filename, this);
\r
477 text_source.Text = filename;
\r
478 lbl_encode.Text = "Scanning ...";
\r
479 frmRD.ShowDialog();
\r
482 text_source.Text = "Click 'Source' to continue";
\r
484 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
485 if (drp_dvdtitle.Items.Count == 0)
\r
486 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
488 lbl_encode.Text = "";
\r
491 private void mnu_dvd_drive_Click(object sender, EventArgs e)
\r
493 // Set the last action to scan.
\r
494 // This is used for tracking which file to load in the activity window
\r
495 lastAction = "scan";
\r
497 String filename = "";
\r
498 if (mnu_dvd_drive.Text.Contains("VIDEO_TS"))
\r
500 string[] path = mnu_dvd_drive.Text.Split(' ');
\r
501 filename = path[0];
\r
502 lbl_encode.Text = "Scanning ...";
\r
503 Form frmRD = new frmReadDVD(filename, this);
\r
504 text_source.Text = filename;
\r
505 frmRD.ShowDialog();
\r
508 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
509 if (drp_dvdtitle.Items.Count == 0)
\r
510 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
512 lbl_encode.Text = "";
\r
515 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
517 if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "Automatic"))
\r
518 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
520 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
522 // Reset some values on the form
\r
523 lbl_Aspect.Text = "Select a Title";
\r
524 //lbl_RecomendedCrop.Text = "Select a Title";
\r
525 drop_chapterStart.Items.Clear();
\r
526 drop_chapterFinish.Items.Clear();
\r
528 // If the dropdown is set to automatic nothing else needs to be done.
\r
529 // Otheriwse if its not, title data has to be loased from parsing.
\r
530 if (drp_dvdtitle.Text != "Automatic")
\r
532 selectedTitle = drp_dvdtitle.SelectedItem as Parsing.Title;
\r
534 // Set the Aspect Ratio
\r
535 lbl_Aspect.Text = selectedTitle.AspectRatio.ToString();
\r
536 lbl_src_res.Text = selectedTitle.Resolution.Width + " x " + selectedTitle.Resolution.Height;
\r
537 lbl_duration.Text = selectedTitle.Duration.ToString();
\r
539 // Set the Recommended Cropping values
\r
540 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
541 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
542 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
543 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
545 // Populate the Start chapter Dropdown
\r
546 drop_chapterStart.Items.Clear();
\r
547 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
548 if (drop_chapterStart.Items.Count > 0)
\r
549 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
551 // Populate the Final Chapter Dropdown
\r
552 drop_chapterFinish.Items.Clear();
\r
553 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
554 if (drop_chapterFinish.Items.Count > 0)
\r
555 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
557 // Populate the Audio Channels Dropdown
\r
558 drp_track1Audio.Items.Clear();
\r
559 drp_track1Audio.Items.Add("Automatic");
\r
560 drp_track1Audio.Items.Add("None");
\r
561 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
562 drp_track1Audio.SelectedIndex = 0;
\r
564 drp_track2Audio.Items.Clear();
\r
565 drp_track2Audio.Items.Add("None");
\r
566 drp_track2Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
567 drp_track2Audio.SelectedIndex = 0;
\r
569 drp_track3Audio.Items.Clear();
\r
570 drp_track3Audio.Items.Add("None");
\r
571 drp_track3Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
572 drp_track3Audio.SelectedIndex = 0;
\r
574 drp_track4Audio.Items.Clear();
\r
575 drp_track4Audio.Items.Add("None");
\r
576 drp_track4Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
577 drp_track4Audio.SelectedIndex = 0;
\r
579 // Populate the Subtitles dropdown
\r
580 drp_subtitle.Items.Clear();
\r
581 drp_subtitle.Items.Add("None");
\r
582 drp_subtitle.Items.Add("Autoselect");
\r
583 drp_subtitle.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
584 if (drp_subtitle.Items.Count > 0)
\r
585 drp_subtitle.Text = drp_subtitle.Items[0].ToString();
\r
589 // Run the autoName & chapterNaming functions
\r
590 if (Properties.Settings.Default.autoNaming == "Checked")
\r
591 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
593 data_chpt.Rows.Clear();
\r
594 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
595 if (chapterGridView != null)
\r
596 data_chpt = chapterGridView;
\r
598 private void drop_chapterStart_SelectedIndexChanged(object sender, EventArgs e)
\r
600 int c_start, c_end = 1;
\r
602 if (drop_chapterFinish.Text == "Auto" && drop_chapterFinish.Items.Count != 0)
\r
603 drop_chapterFinish.SelectedIndex = drop_chapterFinish.Items.Count - 1;
\r
605 int.TryParse(drop_chapterStart.Text, out c_start);
\r
606 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
610 if (c_start > c_end)
\r
611 drop_chapterFinish.Text = c_start.ToString();
\r
614 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
616 // Run the Autonaming function
\r
617 if (Properties.Settings.Default.autoNaming == "Checked")
\r
618 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
620 private void drop_chapterFinish_SelectedIndexChanged(object sender, EventArgs e)
\r
622 int c_start, c_end = 1;
\r
624 if (drop_chapterStart.Text == "Auto" && drop_chapterStart.Items.Count >= 1)
\r
625 drop_chapterStart.SelectedIndex = 1;
\r
627 int.TryParse(drop_chapterStart.Text, out c_start);
\r
628 int.TryParse(drop_chapterFinish.Text, out c_end);
\r
632 if (c_end < c_start)
\r
633 drop_chapterFinish.Text = c_start.ToString();
\r
636 lbl_duration.Text = hb_common_func.calculateDuration(drop_chapterStart.Text, drop_chapterFinish.Text, selectedTitle).ToString();
\r
638 // Run the Autonaming function
\r
639 if (Properties.Settings.Default.autoNaming == "Checked")
\r
640 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
644 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
646 // This removes the file extension from the filename box on the save file dialog.
\r
647 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
648 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", "").Replace(".m4v", "").Replace(".mkv", "").Replace(".ogm", "").Replace(".avi", "");
\r
650 // Show the dialog and set the main form file path
\r
651 DVD_Save.ShowDialog();
\r
652 if (DVD_Save.FileName.StartsWith("\\"))
\r
653 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
656 setAudioByContainer(DVD_Save.FileName);
\r
658 text_destination.Text = DVD_Save.FileName;
\r
660 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
661 if (Check_ChapterMarkers.Checked)
\r
662 text_destination.Text = text_destination.Text.Replace(".mp4", ".m4v");
\r
665 private void text_destination_TextChanged(object sender, EventArgs e)
\r
667 setAudioByContainer(text_destination.Text);
\r
668 setVideoByContainer(text_destination.Text);
\r
669 string path = text_destination.Text;
\r
670 if (path.EndsWith(".mp4"))
\r
671 drop_format.SelectedIndex = 0;
\r
672 else if (path.EndsWith(".m4v"))
\r
673 drop_format.SelectedIndex = 1;
\r
674 else if (path.EndsWith(".mkv"))
\r
675 drop_format.SelectedIndex = 2;
\r
676 else if (path.EndsWith(".avi"))
\r
677 drop_format.SelectedIndex = 3;
\r
678 else if (path.EndsWith(".ogm"))
\r
679 drop_format.SelectedIndex = 4;
\r
684 private void drop_format_SelectedIndexChanged(object sender, EventArgs e)
\r
686 if (drop_format.SelectedIndex == 0)
\r
687 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mp4");
\r
688 else if (drop_format.SelectedIndex == 1)
\r
689 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".m4v");
\r
690 else if (drop_format.SelectedIndex == 2)
\r
691 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".mkv");
\r
692 else if (drop_format.SelectedIndex == 3)
\r
693 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".avi");
\r
694 else if (drop_format.SelectedIndex == 4)
\r
695 text_destination.Text = hb_common_func.setExtension(text_destination.Text, ".ogm");
\r
699 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
701 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
703 check_largeFile.Enabled = true;
\r
704 check_optimiseMP4.Enabled = true;
\r
705 check_iPodAtom.Enabled = true;
\r
709 check_largeFile.Enabled = false;
\r
710 check_optimiseMP4.Enabled = false;
\r
711 check_iPodAtom.Enabled = false;
\r
712 check_largeFile.Checked = false;
\r
713 check_optimiseMP4.Checked = false;
\r
714 check_iPodAtom.Checked = false;
\r
718 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
719 if (drp_videoEncoder.Text.Contains("H.264"))
\r
721 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
722 check_turbo.Enabled = true;
\r
724 h264Tab.Enabled = true;
\r
725 if ((text_destination.Text.Contains(".mp4")) || (text_destination.Text.Contains(".m4v")))
\r
726 check_iPodAtom.Enabled = true;
\r
728 check_iPodAtom.Enabled = false;
\r
729 if (!drp_anamorphic.Items.Contains("Loose"))
\r
730 drp_anamorphic.Items.Add("Loose");
\r
734 check_turbo.CheckState = CheckState.Unchecked;
\r
735 check_turbo.Enabled = false;
\r
736 h264Tab.Enabled = false;
\r
737 rtf_x264Query.Text = "";
\r
738 check_iPodAtom.Enabled = false;
\r
739 check_iPodAtom.Checked = false;
\r
740 if (drp_anamorphic.Items.Count == 3)
\r
741 drp_anamorphic.Items.RemoveAt(2);
\r
745 private void text_bitrate_TextChanged(object sender, EventArgs e)
\r
747 text_filesize.Text = "";
\r
748 slider_videoQuality.Value = 0;
\r
749 SliderValue.Text = "0%";
\r
750 check_2PassEncode.Enabled = true;
\r
752 private void text_filesize_TextChanged(object sender, EventArgs e)
\r
754 text_bitrate.Text = "";
\r
755 slider_videoQuality.Value = 0;
\r
756 SliderValue.Text = "0%";
\r
757 check_2PassEncode.Enabled = true;
\r
759 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
761 SliderValue.Text = slider_videoQuality.Value.ToString() + "%";
\r
762 text_bitrate.Text = "";
\r
763 text_filesize.Text = "";
\r
764 check_2PassEncode.Enabled = false;
\r
765 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
767 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
769 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
771 if (drp_videoEncoder.Text.Contains("H.264"))
\r
772 check_turbo.Enabled = true;
\r
776 check_turbo.Enabled = false;
\r
777 check_turbo.CheckState = CheckState.Unchecked;
\r
782 private void text_width_TextChanged(object sender, EventArgs e)
\r
785 Boolean parsed = int.TryParse(text_width.Text, out width);
\r
786 if (parsed != false)
\r
788 if ((width % 16) != 0)
\r
789 text_width.BackColor = Color.LightCoral;
\r
791 text_width.BackColor = Color.LightGreen;
\r
794 if (lbl_Aspect.Text != "Select a Title")
\r
796 if (drp_anamorphic.Text == "None")
\r
798 int height = hb_common_func.cacluateNonAnamorphicHeight(width, text_top.Value, text_bottom.Value, text_left.Value, text_right.Value, selectedTitle);
\r
799 text_height.Text = height.ToString();
\r
804 private void text_height_TextChanged(object sender, EventArgs e)
\r
807 Boolean parsed = int.TryParse(text_height.Text, out height);
\r
808 if (parsed != false)
\r
810 if ((height % 16) != 0)
\r
811 text_height.BackColor = Color.LightCoral;
\r
813 text_height.BackColor = Color.LightGreen;
\r
816 private void check_customCrop_CheckedChanged(object sender, EventArgs e)
\r
818 text_left.Enabled = true;
\r
819 text_right.Enabled = true;
\r
820 text_top.Enabled = true;
\r
821 text_bottom.Enabled = true;
\r
822 if (selectedTitle != null)
\r
824 text_top.Text = selectedTitle.AutoCropDimensions[0].ToString();
\r
825 text_bottom.Text = selectedTitle.AutoCropDimensions[1].ToString();
\r
826 text_left.Text = selectedTitle.AutoCropDimensions[2].ToString();
\r
827 text_right.Text = selectedTitle.AutoCropDimensions[3].ToString();
\r
831 text_left.Text = "0";
\r
832 text_right.Text = "0";
\r
833 text_top.Text = "0";
\r
834 text_bottom.Text = "0";
\r
837 private void check_autoCrop_CheckedChanged(object sender, EventArgs e)
\r
839 text_left.Enabled = false;
\r
840 text_right.Enabled = false;
\r
841 text_top.Enabled = false;
\r
842 text_bottom.Enabled = false;
\r
844 private void drp_anamorphic_SelectedIndexChanged(object sender, EventArgs e)
\r
846 if (drp_anamorphic.SelectedIndex == 1)
\r
848 text_height.BackColor = Color.LightGray;
\r
849 text_width.BackColor = Color.LightGray;
\r
850 text_height.Text = "";
\r
851 text_width.Text = "";
\r
852 text_height.Enabled = false;
\r
853 text_width.Enabled = false;
\r
856 if (drp_anamorphic.SelectedIndex == 2)
\r
858 text_height.Text = "";
\r
859 text_height.Enabled = false;
\r
860 text_height.BackColor = Color.LightGray;
\r
862 text_width.Enabled = true;
\r
863 text_width.BackColor = Color.White;
\r
866 if (drp_anamorphic.SelectedIndex == 0)
\r
868 text_height.BackColor = Color.White;
\r
869 text_width.BackColor = Color.White;
\r
870 text_height.Enabled = true;
\r
871 text_width.Enabled = true;
\r
874 private void slider_deblock_Scroll(object sender, EventArgs e)
\r
876 if (slider_deblock.Value == 4)
\r
877 lbl_deblockVal.Text = "Off";
\r
879 lbl_deblockVal.Text = slider_deblock.Value.ToString();
\r
883 private void drp_track2Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
885 if (drp_track2Audio.SelectedItem.Equals("None"))
\r
887 drp_audbit_2.Enabled = false;
\r
888 drp_audenc_2.Enabled = false;
\r
889 drp_audsr_2.Enabled = false;
\r
890 drp_audmix_2.Enabled = false;
\r
891 trackBar2.Enabled = false;
\r
892 drp_audbit_2.Text = "";
\r
893 drp_audenc_2.Text = "";
\r
894 drp_audsr_2.Text = "";
\r
895 drp_audmix_2.Text = "Automatic";
\r
896 trackBar2.Value = 0;
\r
898 // Disable the 3rd Track.
\r
899 drp_track3Audio.Enabled = false;
\r
900 drp_track3Audio.Text = "None";
\r
901 drp_audbit_3.Text = "";
\r
902 drp_audenc_3.Text = "";
\r
903 drp_audsr_3.Text = "";
\r
904 drp_audmix_3.Text = "Automatic";
\r
905 trackBar3.Value = 0;
\r
909 drp_audbit_2.Enabled = true;
\r
910 drp_audenc_2.Enabled = true;
\r
911 drp_audsr_2.Enabled = true;
\r
912 drp_audmix_2.Enabled = true;
\r
913 trackBar2.Enabled = true;
\r
914 drp_audbit_2.Text = "160";
\r
915 drp_audenc_2.Text = "AAC";
\r
916 drp_audsr_2.Text = "Auto";
\r
917 drp_audmix_2.Text = "Automatic";
\r
919 // Enable the 3rd Track.
\r
920 drp_track3Audio.Enabled = true;
\r
921 drp_audbit_3.Text = "";
\r
922 drp_audenc_3.Text = "";
\r
923 drp_audsr_3.Text = "";
\r
924 drp_audmix_3.Text = "Automatic";
\r
927 private void drp_track3Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
929 if (drp_track3Audio.SelectedItem.Equals("None"))
\r
931 drp_audbit_3.Enabled = false;
\r
932 drp_audenc_3.Enabled = false;
\r
933 drp_audsr_3.Enabled = false;
\r
934 drp_audmix_3.Enabled = false;
\r
935 trackBar3.Enabled = false;
\r
936 drp_audbit_3.Text = "";
\r
937 drp_audenc_3.Text = "";
\r
938 drp_audsr_3.Text = "";
\r
939 drp_audmix_3.Text = "Automatic";
\r
940 trackBar3.Value = 0;
\r
942 // Disable the 4th Track.
\r
943 drp_track4Audio.Enabled = false;
\r
944 drp_track4Audio.Text = "None";
\r
945 drp_audbit_4.Text = "";
\r
946 drp_audenc_4.Text = "";
\r
947 drp_audsr_4.Text = "";
\r
948 drp_audmix_4.Text = "Automatic";
\r
953 drp_audbit_3.Enabled = true;
\r
954 drp_audenc_3.Enabled = true;
\r
955 drp_audsr_3.Enabled = true;
\r
956 drp_audmix_3.Enabled = true;
\r
957 trackBar3.Enabled = true;
\r
958 drp_audbit_3.Text = "160";
\r
959 drp_audenc_3.Text = "AAC";
\r
960 drp_audsr_3.Text = "Auto";
\r
961 drp_audmix_3.Text = "Automatic";
\r
963 // Enable the 4th Track.
\r
964 drp_track4Audio.Enabled = true;
\r
965 drp_audbit_4.Text = "";
\r
966 drp_audenc_4.Text = "";
\r
967 drp_audsr_4.Text = "";
\r
968 drp_audmix_4.Text = "Automatic";
\r
972 private void drp_track4Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
974 if (drp_track4Audio.SelectedItem.Equals("None"))
\r
976 drp_audbit_4.Enabled = false;
\r
977 drp_audenc_4.Enabled = false;
\r
978 drp_audsr_4.Enabled = false;
\r
979 drp_audmix_4.Enabled = false;
\r
980 trackBar4.Enabled = false;
\r
981 drp_audbit_4.Text = "";
\r
982 drp_audenc_4.Text = "";
\r
983 drp_audsr_4.Text = "";
\r
984 drp_audmix_4.Text = "Automatic";
\r
985 trackBar4.Value = 0;
\r
989 drp_audbit_4.Enabled = true;
\r
990 drp_audenc_4.Enabled = true;
\r
991 drp_audsr_4.Enabled = true;
\r
992 drp_audmix_4.Enabled = true;
\r
993 trackBar4.Enabled = true;
\r
994 drp_audbit_4.Text = "160";
\r
995 drp_audenc_4.Text = "AAC";
\r
996 drp_audsr_4.Text = "Auto";
\r
997 drp_audmix_4.Text = "Automatic";
\r
1001 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1003 if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
1004 setBitrateSelections384(drp_audbit_1);
\r
1005 else if ((drp_audenc_1.Text == "AAC") && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
1007 setBitrateSelections160(drp_audbit_1);
\r
1008 drp_audbit_1.Text = "160";
\r
1011 private void drp_audmix_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1013 if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text == "6 Channel Discrete"))
\r
1014 setBitrateSelections384(drp_audbit_2);
\r
1015 else if ((drp_audenc_2.Text == "AAC") && (drp_audmix_2.Text != "6 Channel Discrete"))
\r
1017 setBitrateSelections160(drp_audbit_2);
\r
1018 drp_audbit_2.Text = "160";
\r
1021 private void drp_audmix_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1023 if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text == "6 Channel Discrete"))
\r
1024 setBitrateSelections384(drp_audbit_3);
\r
1025 else if ((drp_audenc_3.Text == "AAC") && (drp_audmix_3.Text != "6 Channel Discrete"))
\r
1027 setBitrateSelections160(drp_audbit_3);
\r
1028 drp_audbit_3.Text = "160";
\r
1031 private void drp_audmix_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1033 if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text == "6 Channel Discrete"))
\r
1034 setBitrateSelections384(drp_audbit_4);
\r
1035 else if ((drp_audenc_4.Text == "AAC") && (drp_audmix_4.Text != "6 Channel Discrete"))
\r
1037 setBitrateSelections160(drp_audbit_4);
\r
1038 drp_audbit_4.Text = "160";
\r
1042 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
1044 if (drp_audenc_1.Text == "AC3")
\r
1046 drp_audmix_1.Enabled = false;
\r
1047 drp_audbit_1.Enabled = false;
\r
1048 drp_audsr_1.Enabled = false;
\r
1052 drp_audmix_1.Enabled = true;
\r
1053 drp_audbit_1.Enabled = true;
\r
1054 drp_audsr_1.Enabled = true;
\r
1056 drp_audmix_1.Text = "Automatic";
\r
1057 drp_audbit_1.Text = "160";
\r
1058 drp_audsr_1.Text = "Auto";
\r
1062 if (drp_audenc_1.Text == "AAC")
\r
1064 drp_audmix_1.Items.Clear();
\r
1065 drp_audmix_1.Items.Add("Mono");
\r
1066 drp_audmix_1.Items.Add("Stereo");
\r
1067 drp_audmix_1.Items.Add("Dolby Surround");
\r
1068 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1069 drp_audmix_1.Items.Add("6 Channel Discrete");
\r
1071 setBitrateSelections160(drp_audbit_1);
\r
1075 drp_audmix_1.Items.Clear();
\r
1076 drp_audmix_1.Items.Add("Stereo");
\r
1077 drp_audmix_1.Items.Add("Dolby Surround");
\r
1078 drp_audmix_1.Items.Add("Dolby Pro Logic II");
\r
1080 setBitrateSelections320(drp_audbit_1);
\r
1083 private void drp_audenc_2_SelectedIndexChanged(object sender, EventArgs e)
\r
1085 if (drp_audenc_2.Text == "AC3")
\r
1087 drp_audmix_2.Enabled = false;
\r
1088 drp_audbit_2.Enabled = false;
\r
1089 drp_audsr_2.Enabled = false;
\r
1091 drp_audmix_2.Text = "Automatic";
\r
1092 drp_audbit_2.Text = "160";
\r
1093 drp_audsr_2.Text = "Auto";
\r
1097 // Just make sure not to re-enable the following boxes if the track2 is none
\r
1098 if (drp_track2Audio.Text != "None")
\r
1100 drp_audmix_2.Enabled = true;
\r
1101 drp_audbit_2.Enabled = true;
\r
1102 drp_audsr_2.Enabled = true;
\r
1104 drp_audmix_2.Text = "Automatic";
\r
1105 drp_audbit_2.Text = "160";
\r
1106 drp_audsr_2.Text = "Auto";
\r
1110 if (drp_audenc_2.Text == "AAC")
\r
1112 drp_audmix_2.Items.Clear();
\r
1113 drp_audmix_2.Items.Add("Mono");
\r
1114 drp_audmix_2.Items.Add("Stereo");
\r
1115 drp_audmix_2.Items.Add("Dolby Surround");
\r
1116 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1117 drp_audmix_2.Items.Add("6 Channel Discrete");
\r
1119 setBitrateSelections160(drp_audbit_2);
\r
1123 drp_audmix_2.Items.Clear();
\r
1124 drp_audmix_2.Items.Add("Stereo");
\r
1125 drp_audmix_2.Items.Add("Dolby Surround");
\r
1126 drp_audmix_2.Items.Add("Dolby Pro Logic II");
\r
1128 setBitrateSelections320(drp_audbit_2);
\r
1131 private void drp_audenc_3_SelectedIndexChanged(object sender, EventArgs e)
\r
1133 if (drp_audenc_3.Text == "AC3")
\r
1135 drp_audmix_3.Enabled = false;
\r
1136 drp_audbit_3.Enabled = false;
\r
1137 drp_audsr_3.Enabled = false;
\r
1139 drp_audmix_3.Text = "Automatic";
\r
1140 drp_audbit_3.Text = "160";
\r
1141 drp_audsr_3.Text = "Auto";
\r
1145 // Just make sure not to re-enable the following boxes if the track above is none
\r
1146 if (drp_track2Audio.Text != "None")
\r
1148 drp_audmix_3.Enabled = true;
\r
1149 drp_audbit_3.Enabled = true;
\r
1150 drp_audsr_3.Enabled = true;
\r
1152 drp_audmix_3.Text = "Automatic";
\r
1153 drp_audbit_3.Text = "160";
\r
1154 drp_audsr_3.Text = "Auto";
\r
1159 if (drp_audenc_3.Text == "AAC")
\r
1161 drp_audmix_3.Items.Clear();
\r
1162 drp_audmix_3.Items.Add("Mono");
\r
1163 drp_audmix_3.Items.Add("Stereo");
\r
1164 drp_audmix_3.Items.Add("Dolby Surround");
\r
1165 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1166 drp_audmix_3.Items.Add("6 Channel Discrete");
\r
1168 setBitrateSelections160(drp_audbit_3);
\r
1172 drp_audmix_3.Items.Clear();
\r
1173 drp_audmix_3.Items.Add("Stereo");
\r
1174 drp_audmix_3.Items.Add("Dolby Surround");
\r
1175 drp_audmix_3.Items.Add("Dolby Pro Logic II");
\r
1177 setBitrateSelections320(drp_audbit_3);
\r
1180 private void drp_audenc_4_SelectedIndexChanged(object sender, EventArgs e)
\r
1182 if (drp_audenc_4.Text == "AC3")
\r
1184 drp_audmix_4.Enabled = false;
\r
1185 drp_audbit_4.Enabled = false;
\r
1186 drp_audsr_4.Enabled = false;
\r
1188 drp_audmix_4.Text = "Automatic";
\r
1189 drp_audbit_4.Text = "160";
\r
1190 drp_audsr_4.Text = "Auto";
\r
1194 // Just make sure not to re-enable the following boxes if the track above is none
\r
1195 if (drp_track2Audio.Text != "None")
\r
1197 drp_audmix_4.Enabled = true;
\r
1198 drp_audbit_4.Enabled = true;
\r
1199 drp_audsr_4.Enabled = true;
\r
1201 drp_audmix_4.Text = "Automatic";
\r
1202 drp_audbit_4.Text = "160";
\r
1203 drp_audsr_4.Text = "Auto";
\r
1208 if (drp_audenc_4.Text == "AAC")
\r
1210 drp_audmix_4.Items.Clear();
\r
1211 drp_audmix_4.Items.Add("Mono");
\r
1212 drp_audmix_4.Items.Add("Stereo");
\r
1213 drp_audmix_4.Items.Add("Dolby Surround");
\r
1214 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1215 drp_audmix_4.Items.Add("6 Channel Discrete");
\r
1217 setBitrateSelections160(drp_audbit_4);
\r
1221 drp_audmix_4.Items.Clear();
\r
1222 drp_audmix_4.Items.Add("Stereo");
\r
1223 drp_audmix_4.Items.Add("Dolby Surround");
\r
1224 drp_audmix_4.Items.Add("Dolby Pro Logic II");
\r
1226 setBitrateSelections320(drp_audbit_4);
\r
1230 private void trackBar1_Scroll(object sender, EventArgs e)
\r
1232 double value = trackBar1.Value / 10.0;
\r
1235 lbl_drc1.Text = value.ToString();
\r
1237 private void trackBar2_Scroll(object sender, EventArgs e)
\r
1239 double value = trackBar2.Value / 10.0;
\r
1242 lbl_drc2.Text = value.ToString();
\r
1244 private void trackBar3_Scroll(object sender, EventArgs e)
\r
1246 double value = trackBar3.Value / 10.0;
\r
1249 lbl_drc3.Text = value.ToString();
\r
1251 private void trackBar4_Scroll(object sender, EventArgs e)
\r
1253 double value = trackBar4.Value / 10.0;
\r
1256 lbl_drc4.Text = value.ToString();
\r
1259 private void drp_subtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1261 if (drp_subtitle.Text.Contains("None"))
\r
1263 check_forced.Enabled = false;
\r
1264 check_forced.Checked = false;
\r
1267 check_forced.Enabled = true;
\r
1270 // Chapter Marker Tab
\r
1271 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1273 if (Check_ChapterMarkers.Checked)
\r
1275 string destination = text_destination.Text;
\r
1276 destination = destination.Replace(".mp4", ".m4v");
\r
1277 text_destination.Text = destination;
\r
1278 data_chpt.Rows.Clear();
\r
1279 data_chpt.Enabled = true;
\r
1280 DataGridView chapterGridView = hb_common_func.chapterNaming(data_chpt, drop_chapterStart.Text, drop_chapterFinish.Text);
\r
1281 if (chapterGridView != null)
\r
1282 data_chpt = chapterGridView;
\r
1286 string destination = text_destination.Text;
\r
1287 destination = destination.Replace(".m4v", ".mp4");
\r
1288 text_destination.Text = destination;
\r
1289 data_chpt.Rows.Clear();
\r
1290 data_chpt.Enabled = false;
\r
1295 private void drop_refFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1297 x264PanelFunctions.on_x264_WidgetChange("ref", this);
\r
1299 private void check_mixedReferences_CheckedChanged(object sender, EventArgs e)
\r
1301 x264PanelFunctions.on_x264_WidgetChange("mixed-refs", this);
\r
1303 private void drop_bFrames_SelectedIndexChanged(object sender, EventArgs e)
\r
1305 x264PanelFunctions.on_x264_WidgetChange("bframes", this);
\r
1307 private void drop_directPrediction_SelectedIndexChanged(object sender, EventArgs e)
\r
1309 x264PanelFunctions.on_x264_WidgetChange("direct", this);
\r
1311 private void check_weightedBFrames_CheckedChanged(object sender, EventArgs e)
\r
1313 x264PanelFunctions.on_x264_WidgetChange("weightb", this);
\r
1315 private void check_bFrameDistortion_CheckedChanged(object sender, EventArgs e)
\r
1317 x264PanelFunctions.on_x264_WidgetChange("brdo", this);
\r
1319 private void check_BidirectionalRefinement_CheckedChanged(object sender, EventArgs e)
\r
1321 x264PanelFunctions.on_x264_WidgetChange("bime", this);
\r
1323 private void check_pyrmidalBFrames_CheckedChanged(object sender, EventArgs e)
\r
1325 x264PanelFunctions.on_x264_WidgetChange("b-pyramid", this);
\r
1327 private void drop_MotionEstimationMethod_SelectedIndexChanged(object sender, EventArgs e)
\r
1329 x264PanelFunctions.on_x264_WidgetChange("me", this);
\r
1331 private void drop_MotionEstimationRange_SelectedIndexChanged(object sender, EventArgs e)
\r
1333 x264PanelFunctions.on_x264_WidgetChange("merange", this);
\r
1335 private void drop_subpixelMotionEstimation_SelectedIndexChanged(object sender, EventArgs e)
\r
1337 x264PanelFunctions.on_x264_WidgetChange("subq", this);
\r
1339 private void drop_analysis_SelectedIndexChanged(object sender, EventArgs e)
\r
1341 x264PanelFunctions.on_x264_WidgetChange("analyse", this);
\r
1343 private void check_8x8DCT_CheckedChanged(object sender, EventArgs e)
\r
1345 x264PanelFunctions.on_x264_WidgetChange("8x8dct", this);
\r
1347 private void drop_deblockAlpha_SelectedIndexChanged(object sender, EventArgs e)
\r
1349 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1352 private void drop_deblockBeta_SelectedIndexChanged(object sender, EventArgs e)
\r
1354 x264PanelFunctions.on_x264_WidgetChange("deblock", this);
\r
1357 private void drop_trellis_SelectedIndexChanged(object sender, EventArgs e)
\r
1359 x264PanelFunctions.on_x264_WidgetChange("trellis", this);
\r
1361 private void check_noFastPSkip_CheckedChanged(object sender, EventArgs e)
\r
1363 x264PanelFunctions.on_x264_WidgetChange("no-fast-pskip", this);
\r
1365 private void check_noDCTDecimate_CheckedChanged(object sender, EventArgs e)
\r
1367 x264PanelFunctions.on_x264_WidgetChange("no-dct-decimate", this);
\r
1370 private void check_Cabac_CheckedChanged(object sender, EventArgs e)
\r
1373 x264PanelFunctions.on_x264_WidgetChange("cabac", this);
\r
1376 private void rtf_x264Query_TextChanged(object sender, EventArgs e)
\r
1378 if (rtf_x264Query.Text.EndsWith("\n"))
\r
1380 rtf_x264Query.Text = rtf_x264Query.Text.Replace("\n", "");
\r
1381 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1382 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1384 if (rtf_x264Query.Text == string.Empty)
\r
1385 x264PanelFunctions.reset2Defaults(this);
\r
1388 private void btn_reset_Click(object sender, EventArgs e)
\r
1390 rtf_x264Query.Text = "";
\r
1391 x264PanelFunctions.reset2Defaults(this);
\r
1394 // Query Editor Tab
\r
1395 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1397 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1399 private void btn_clear_Click(object sender, EventArgs e)
\r
1401 rtf_query.Clear();
\r
1405 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1407 // Remember each nodes expanded status so we can reload it
\r
1408 List<Boolean> nodeStatus = new List<Boolean>();
\r
1409 foreach (TreeNode node in treeView_presets.Nodes)
\r
1410 nodeStatus.Add(node.IsExpanded);
\r
1411 nodeStatus.Add(true);
\r
1413 // Now add the new preset
\r
1414 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1415 preset.ShowDialog();
\r
1417 // And finally, re-expand any of the nodes if required
\r
1419 foreach (TreeNode node in treeView_presets.Nodes)
\r
1421 if (nodeStatus[i] == true)
\r
1427 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1429 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1430 if (result == DialogResult.Yes)
\r
1432 if (treeView_presets.SelectedNode != null)
\r
1433 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1435 // Remember each nodes expanded status so we can reload it
\r
1436 List<Boolean> nodeStatus = new List<Boolean>();
\r
1437 foreach (TreeNode node in treeView_presets.Nodes)
\r
1438 nodeStatus.Add(node.IsExpanded);
\r
1440 // Now reload the preset panel
\r
1441 loadPresetPanel();
\r
1443 // And finally, re-expand any of the nodes if required
\r
1445 foreach (TreeNode node in treeView_presets.Nodes)
\r
1447 if (nodeStatus[i] == true)
\r
1453 treeView_presets.Select();
\r
1455 private void btn_setDefault_Click(object sender, EventArgs e)
\r
1457 String query = queryGen.GenerateTheQuery(this);
\r
1458 Properties.Settings.Default.defaultUserSettings = query;
\r
1459 // Save the new default Settings
\r
1460 Properties.Settings.Default.Save();
\r
1461 MessageBox.Show("New default settings saved.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1463 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
1465 // Ok, so, we've selected a preset. Now we want to load it.
\r
1466 string presetName = treeView_presets.SelectedNode.Text;
\r
1467 string query = presetHandler.getCliForPreset(presetName);
\r
1469 if (query != null)
\r
1471 //Ok, Reset all the H264 widgets before changing the preset
\r
1472 x264PanelFunctions.reset2Defaults(this);
\r
1474 // Send the query from the file to the Query Parser class
\r
1475 Functions.QueryParser presetQuery = Functions.QueryParser.Parse(query);
\r
1477 // Now load the preset
\r
1478 presetLoader.presetLoader(this, presetQuery, presetName);
\r
1480 // The x264 widgets will need updated, so do this now:
\r
1481 x264PanelFunctions.X264_StandardizeOptString(this);
\r
1482 x264PanelFunctions.X264_SetCurrentSettingsInPanel(this);
\r
1485 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
1487 if (e.KeyCode == Keys.Delete)
\r
1489 DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1490 if (result == DialogResult.Yes)
\r
1492 if (treeView_presets.SelectedNode != null)
\r
1493 presetHandler.remove(treeView_presets.SelectedNode.Text);
\r
1495 // Remember each nodes expanded status so we can reload it
\r
1496 List<Boolean> nodeStatus = new List<Boolean>();
\r
1497 foreach (TreeNode node in treeView_presets.Nodes)
\r
1498 nodeStatus.Add(node.IsExpanded);
\r
1500 // Now reload the preset panel
\r
1501 loadPresetPanel();
\r
1503 // And finally, re-expand any of the nodes if required
\r
1505 foreach (TreeNode node in treeView_presets.Nodes)
\r
1507 if (nodeStatus[i] == true)
\r
1519 private void loadNormalPreset()
\r
1521 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
1523 if (treenode.Text.ToString().Equals("Normal"))
\r
1524 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index];
\r
1529 #region Drive Detection
\r
1530 // Source Button Drive Detection
\r
1531 private delegate void ProgressUpdateHandler();
\r
1532 private void getDriveInfoThread()
\r
1536 if (this.InvokeRequired)
\r
1538 this.BeginInvoke(new ProgressUpdateHandler(getDriveInfoThread));
\r
1542 Boolean foundDrive = false;
\r
1543 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1544 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1546 if (curDrive.DriveType == DriveType.CDRom)
\r
1548 if (curDrive.IsReady)
\r
1550 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1551 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1553 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1555 foundDrive = true;
\r
1561 if (foundDrive == false)
\r
1562 mnu_dvd_drive.Text = "[No DVD Drive Ready]";
\r
1566 mnu_dvd_drive.Text = "[No DVD Drive Ready / Found]";
\r
1571 #region Audio Panel Stuff
\r
1572 public void setAudioByContainer(String path)
\r
1574 string oldval = "";
\r
1576 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1578 oldval = drp_audenc_1.Text;
\r
1579 drp_audenc_1.Items.Clear();
\r
1580 drp_audenc_1.Items.Add("AAC");
\r
1581 drp_audenc_1.Items.Add("AC3");
\r
1582 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1583 drp_audenc_1.SelectedIndex = 0;
\r
1585 oldval = drp_audenc_2.Text;
\r
1586 drp_audenc_2.Items.Clear();
\r
1587 drp_audenc_2.Items.Add("AAC");
\r
1588 drp_audenc_2.Items.Add("AC3");
\r
1589 if (drp_audenc_2.Enabled)
\r
1591 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1592 drp_audenc_2.SelectedIndex = 0;
\r
1595 oldval = drp_audenc_3.Text;
\r
1596 drp_audenc_3.Items.Clear();
\r
1597 drp_audenc_3.Items.Add("AAC");
\r
1598 drp_audenc_3.Items.Add("AC3");
\r
1599 if (drp_audenc_3.Enabled)
\r
1601 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1602 drp_audenc_3.SelectedIndex = 0;
\r
1605 oldval = drp_audenc_4.Text;
\r
1606 drp_audenc_4.Items.Clear();
\r
1607 drp_audenc_4.Items.Add("AAC");
\r
1608 drp_audenc_4.Items.Add("AC3");
\r
1609 if (drp_audenc_4.Enabled)
\r
1611 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1612 drp_audenc_4.SelectedIndex = 0;
\r
1615 else if (path.EndsWith(".avi"))
\r
1617 oldval = drp_audenc_1.Text;
\r
1618 drp_audenc_1.Items.Clear();
\r
1619 drp_audenc_1.Items.Add("MP3");
\r
1620 drp_audenc_1.Items.Add("AC3");
\r
1621 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1622 drp_audenc_1.SelectedIndex = 0;
\r
1624 oldval = drp_audenc_2.Text;
\r
1625 drp_audenc_2.Items.Clear();
\r
1626 drp_audenc_2.Items.Add("MP3");
\r
1627 drp_audenc_2.Items.Add("AC3");
\r
1628 if (drp_audenc_2.Enabled)
\r
1630 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1631 drp_audenc_2.SelectedIndex = 0;
\r
1635 oldval = drp_audenc_3.Text;
\r
1636 drp_audenc_3.Items.Clear();
\r
1637 drp_audenc_3.Items.Add("MP3");
\r
1638 drp_audenc_3.Items.Add("AC3");
\r
1639 if (drp_audenc_3.Enabled)
\r
1641 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1642 drp_audenc_3.SelectedIndex = 0;
\r
1645 oldval = drp_audenc_4.Text;
\r
1646 drp_audenc_4.Items.Clear();
\r
1647 drp_audenc_4.Items.Add("MP3");
\r
1648 drp_audenc_4.Items.Add("AC3");
\r
1649 if (drp_audenc_4.Enabled)
\r
1651 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1652 drp_audenc_4.SelectedIndex = 0;
\r
1655 else if (path.EndsWith(".ogm"))
\r
1657 drp_audenc_1.Items.Clear();
\r
1658 drp_audenc_1.Items.Add("Vorbis");
\r
1659 drp_audenc_1.SelectedIndex = 0;
\r
1661 drp_audenc_2.Items.Clear();
\r
1662 drp_audenc_2.Items.Add("Vorbis");
\r
1663 if (drp_audenc_2.Enabled)
\r
1664 drp_audenc_2.SelectedIndex = 0;
\r
1666 drp_audenc_3.Items.Clear();
\r
1667 drp_audenc_3.Items.Add("Vorbis");
\r
1668 if (drp_audenc_3.Enabled)
\r
1669 drp_audenc_3.SelectedIndex = 0;
\r
1671 drp_audenc_4.Items.Clear();
\r
1672 drp_audenc_4.Items.Add("Vorbis");
\r
1673 if (drp_audenc_4.Enabled)
\r
1674 drp_audenc_4.SelectedIndex = 0;
\r
1676 else if (path.EndsWith(".mkv"))
\r
1678 drp_audenc_1.Items.Clear();
\r
1679 drp_audenc_1.Items.Add("AAC");
\r
1680 drp_audenc_1.Items.Add("MP3");
\r
1681 drp_audenc_1.Items.Add("AC3");
\r
1682 drp_audenc_1.Items.Add("Vorbis");
\r
1683 if (drp_audenc_1.Text == string.Empty)
\r
1684 drp_audenc_1.SelectedIndex = 0;
\r
1687 drp_audenc_2.Items.Clear();
\r
1688 drp_audenc_2.Items.Add("AAC");
\r
1689 drp_audenc_2.Items.Add("MP3");
\r
1690 drp_audenc_2.Items.Add("AC3");
\r
1691 drp_audenc_2.Items.Add("Vorbis");
\r
1692 if (drp_audenc_2.Enabled)
\r
1694 if (drp_audenc_2.Text == string.Empty)
\r
1695 drp_audenc_2.SelectedIndex = 0;
\r
1698 drp_audenc_3.Items.Clear();
\r
1699 drp_audenc_3.Items.Add("AAC");
\r
1700 drp_audenc_3.Items.Add("MP3");
\r
1701 drp_audenc_3.Items.Add("AC3");
\r
1702 drp_audenc_3.Items.Add("Vorbis");
\r
1703 if (drp_audenc_3.Enabled)
\r
1705 if (drp_audenc_3.Text == string.Empty)
\r
1706 drp_audenc_3.SelectedIndex = 0;
\r
1709 drp_audenc_4.Items.Clear();
\r
1710 drp_audenc_4.Items.Add("AAC");
\r
1711 drp_audenc_4.Items.Add("MP3");
\r
1712 drp_audenc_4.Items.Add("AC3");
\r
1713 drp_audenc_4.Items.Add("Vorbis");
\r
1714 if (drp_audenc_4.Enabled)
\r
1716 if (drp_audenc_4.Text == string.Empty)
\r
1717 drp_audenc_4.SelectedIndex = 0;
\r
1721 public void setVideoByContainer(String path)
\r
1723 string oldval = "";
\r
1725 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1727 oldval = drp_videoEncoder.Text;
\r
1728 drp_videoEncoder.Items.Clear();
\r
1729 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1730 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1731 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1732 if (oldval == "VP3 (Theora)")
\r
1733 drp_videoEncoder.SelectedIndex = 2;
\r
1735 drp_videoEncoder.Text = oldval;
\r
1738 else if (path.EndsWith(".avi"))
\r
1740 oldval = drp_videoEncoder.Text;
\r
1741 drp_videoEncoder.Items.Clear();
\r
1742 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1743 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1744 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1745 if (oldval == "VP3 (Theora)")
\r
1746 drp_videoEncoder.SelectedIndex = 2;
\r
1748 drp_videoEncoder.Text = oldval;
\r
1750 else if (path.EndsWith(".ogm"))
\r
1752 oldval = drp_videoEncoder.Text;
\r
1753 drp_videoEncoder.Items.Clear();
\r
1754 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1755 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1756 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1757 if (oldval == "H.264 (x264)")
\r
1758 drp_videoEncoder.SelectedIndex = 2;
\r
1760 drp_videoEncoder.Text = oldval;
\r
1762 else if (path.EndsWith(".mkv"))
\r
1764 oldval = drp_videoEncoder.Text;
\r
1765 drp_videoEncoder.Items.Clear();
\r
1766 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
1767 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
1768 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
1769 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1770 drp_videoEncoder.Text = oldval;
\r
1773 public void setBitrateSelections384(ComboBox dropDown)
\r
1775 dropDown.Items.Clear();
\r
1776 dropDown.Items.Add("32");
\r
1777 dropDown.Items.Add("40");
\r
1778 dropDown.Items.Add("48");
\r
1779 dropDown.Items.Add("56");
\r
1780 dropDown.Items.Add("64");
\r
1781 dropDown.Items.Add("80");
\r
1782 dropDown.Items.Add("86");
\r
1783 dropDown.Items.Add("112");
\r
1784 dropDown.Items.Add("128");
\r
1785 dropDown.Items.Add("160");
\r
1786 dropDown.Items.Add("192");
\r
1787 dropDown.Items.Add("224");
\r
1788 dropDown.Items.Add("256");
\r
1789 dropDown.Items.Add("320");
\r
1790 dropDown.Items.Add("384");
\r
1792 public void setBitrateSelections320(ComboBox dropDown)
\r
1794 dropDown.Items.Clear();
\r
1795 dropDown.Items.Add("32");
\r
1796 dropDown.Items.Add("40");
\r
1797 dropDown.Items.Add("48");
\r
1798 dropDown.Items.Add("56");
\r
1799 dropDown.Items.Add("64");
\r
1800 dropDown.Items.Add("80");
\r
1801 dropDown.Items.Add("86");
\r
1802 dropDown.Items.Add("112");
\r
1803 dropDown.Items.Add("128");
\r
1804 dropDown.Items.Add("160");
\r
1805 dropDown.Items.Add("192");
\r
1806 dropDown.Items.Add("224");
\r
1807 dropDown.Items.Add("256");
\r
1808 dropDown.Items.Add("320");
\r
1810 public void setBitrateSelections160(ComboBox dropDown)
\r
1812 dropDown.Items.Clear();
\r
1813 dropDown.Items.Add("32");
\r
1814 dropDown.Items.Add("40");
\r
1815 dropDown.Items.Add("48");
\r
1816 dropDown.Items.Add("56");
\r
1817 dropDown.Items.Add("64");
\r
1818 dropDown.Items.Add("80");
\r
1819 dropDown.Items.Add("86");
\r
1820 dropDown.Items.Add("112");
\r
1821 dropDown.Items.Add("128");
\r
1822 dropDown.Items.Add("160");
\r
1829 private delegate void UpdateUIHandler();
\r
1831 // Encoding Functions
\r
1832 private void procMonitor(object state)
\r
1834 // Make sure we are not already encoding and if we are then display an error.
\r
1835 if (hbProc != null)
\r
1836 hbProc.CloseMainWindow();
\r
1839 hbProc = cliObj.runCli(this, (string)state);
\r
1840 hbProc.WaitForExit();
\r
1841 setEncodeLabelFinished();
\r
1844 // If the window is minimized, display the notification in a popup.
\r
1845 if (FormWindowState.Minimized == this.WindowState)
\r
1847 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1848 notifyIcon.ShowBalloonTip(500);
\r
1851 // After the encode is done, we may want to shutdown, suspend etc.
\r
1852 cliObj.copyLog((string)state);
\r
1853 cliObj.afterEncodeAction();
\r
1856 private void setEncodeLabelFinished()
\r
1858 if (this.InvokeRequired)
\r
1860 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
1863 lbl_encode.Text = "Encoding Finished";
\r
1864 btn_start.Text = "Start";
\r
1865 btn_start.ToolTipText = "Start the encoding process";
\r
1866 btn_start.Image = Properties.Resources.Play;
\r
1871 #region Public Methods
\r
1874 /// Is the mainWindow currently monitoring an encoding session
\r
1876 /// <returns>boolean</returns>
\r
1877 public Boolean isEncoding()
\r
1879 if (hbProc == null)
\r
1886 /// Action can be "encode" or "scan"
\r
1887 /// Set the last action varible in the main window.
\r
1888 /// This is used to control which log file is displayed when the Activity window is displayed.
\r
1890 /// <param name="last">String</param>
\r
1891 public void setLastAction(string last)
\r
1893 this.lastAction = last;
\r
1897 /// DVD parseing. Pass in a parsed DVD.
\r
1899 /// <param name="dvd"></param>
\r
1900 public void setStreamReader(Parsing.DVD dvd)
\r
1902 this.thisDVD = dvd;
\r
1906 /// Reload the preset panel display
\r
1908 public void loadPresetPanel()
\r
1910 presetHandler.loadPresetData();
\r
1912 treeView_presets.Nodes.Clear();
\r
1914 List<Presets.Preset> presetNameList = new List<Presets.Preset>();
\r
1915 List<string> presetNames = new List<string>();
\r
1916 TreeNode preset_treeview = new TreeNode();
\r
1918 TreeNode rootNode = new TreeNode();
\r
1919 TreeNode rootNodeTwo = new TreeNode();
\r
1920 TreeNode childNode = new TreeNode();
\r
1921 int workingLevel = 0;
\r
1922 string previousCategory = String.Empty;
\r
1923 string currentCategory = String.Empty;
\r
1925 presetNameList = presetHandler.getBuildInPresets();
\r
1926 if (presetNameList.Count != 0)
\r
1928 foreach (Presets.Preset preset in presetNameList)
\r
1930 // Handle Root Nodes
\r
1932 // First Case - No presets have been read yet so setup the root category
\r
1933 if (preset.Level == 1 && currentCategory == String.Empty)
\r
1935 rootNode = new TreeNode(preset.Category);
\r
1936 workingLevel = preset.Level;
\r
1937 currentCategory = preset.Category;
\r
1938 previousCategory = preset.Category;
\r
1941 // Second Case - This is the first sub child node.
\r
1942 if (preset.Level == 2 && workingLevel == 1 && currentCategory != preset.Category)
\r
1944 rootNodeTwo = new TreeNode(preset.Category);
\r
1945 workingLevel = preset.Level;
\r
1946 currentCategory = preset.Category;
\r
1947 rootNode.Nodes.Add(rootNodeTwo);
\r
1950 // Third Case - Any presets the sub presets detected in the above if statment.
\r
1951 if (preset.Level == 1 && workingLevel == 2 && previousCategory == preset.Category)
\r
1953 workingLevel = preset.Level;
\r
1954 currentCategory = preset.Category;
\r
1957 // Fourth Case - We've finished this root node and are onto the next root node.
\r
1958 if (preset.Level == 1 && workingLevel == 1 && previousCategory != preset.Category)
\r
1960 treeView_presets.Nodes.Add(rootNode); // Add the finished node
\r
1962 rootNode = new TreeNode(preset.Category);
\r
1963 workingLevel = preset.Level;
\r
1964 currentCategory = preset.Category;
\r
1965 previousCategory = preset.Category;
\r
1968 // Handle Child Nodes
\r
1969 // Add First level child nodes to the current root node
\r
1970 if (preset.Level == 1 && workingLevel == 1 && currentCategory == preset.Category)
\r
1972 childNode = new TreeNode(preset.Name);
\r
1973 rootNode.Nodes.Add(childNode);
\r
1976 // Add Second level child nodes to the current sub root node
\r
1977 if (preset.Level == 2 && workingLevel == 2 && currentCategory == preset.Category)
\r
1979 childNode = new TreeNode(preset.Name);
\r
1980 rootNodeTwo.Nodes.Add(childNode);
\r
1984 // Add the final root node which does not get added above.
\r
1985 treeView_presets.Nodes.Add(rootNode);
\r
1990 presetNames = presetHandler.getUserPresetNames();
\r
1991 foreach (string preset in presetNames)
\r
1993 preset_treeview = new TreeNode(preset);
\r
1994 preset_treeview.ForeColor = Color.Black;
\r
1996 // Now Fill Out List View with Items
\r
1997 treeView_presets.Nodes.Add(preset_treeview);
\r
2003 #region Taskbar Tray Icon
\r
2004 private void frmMain_Resize(object sender, EventArgs e)
\r
2006 if (FormWindowState.Minimized == this.WindowState)
\r
2008 notifyIcon.Visible = true;
\r
2009 if (lbl_encode.Text != "")
\r
2010 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
2012 notifyIcon.BalloonTipText = "Not Encoding";
\r
2013 notifyIcon.ShowBalloonTip(500);
\r
2016 else if (FormWindowState.Normal == this.WindowState)
\r
2017 notifyIcon.Visible = false;
\r
2019 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
2021 this.Visible = true;
\r
2023 this.WindowState = FormWindowState.Normal;
\r
2024 notifyIcon.Visible = false;
\r
2026 private void btn_minimize_Click(object sender, EventArgs e)
\r
2028 this.WindowState = FormWindowState.Minimized;
\r
2030 private void btn_restore_Click(object sender, EventArgs e)
\r
2032 this.Visible = true;
\r
2034 this.WindowState = FormWindowState.Normal;
\r
2035 notifyIcon.Visible = false;
\r
2039 // This is the END of the road ------------------------------------------------------------------------------
\r