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.Generic;
\r
9 using System.Drawing;
\r
10 using System.Globalization;
\r
11 using System.Windows.Forms;
\r
13 using System.Diagnostics;
\r
14 using System.Threading;
\r
15 using Handbrake.EncodeQueue;
\r
16 using Handbrake.Functions;
\r
17 using Handbrake.Presets;
\r
18 using Handbrake.Parsing;
\r
22 public partial class frmMain : Form
\r
24 // Objects which may be used by one or more other objects *************
\r
25 EncodeAndQueueHandler encodeQueue = new EncodeAndQueueHandler();
\r
26 PresetsHandler presetHandler = new PresetsHandler();
\r
27 QueryGenerator queryGen = new QueryGenerator();
\r
29 // Globals: Mainly used for tracking. *********************************
\r
30 public Title selectedTitle;
\r
31 private DVD thisDVD;
\r
32 private frmQueue queueWindow;
\r
33 private frmPreview qtpreview;
\r
34 private frmActivityWindow ActivityWindow;
\r
35 private Form splash;
\r
36 public string sourcePath;
\r
37 private string lastAction;
\r
38 private SourceType selectedSourceType;
\r
39 private string dvdDrivePath;
\r
40 private string dvdDriveLabel;
\r
42 // Delegates **********************************************************
\r
43 private delegate void UpdateWindowHandler();
\r
45 // Applicaiton Startup ************************************************
\r
47 #region Application Startup
\r
50 // Load and setup the splash screen in this thread
\r
51 splash = new frmSplashScreen();
\r
53 Label lblStatus = new Label { Size = new Size(150, 20), Location = new Point(182, 102) };
\r
54 splash.Controls.Add(lblStatus);
\r
56 InitializeComponent();
\r
58 // Update the users config file with the CLI version data.
\r
59 lblStatus.Text = "
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
\82Ì
\8eæ
\93¾
\92\86...";
\r
60 Application.DoEvents();
\r
61 Main.setCliVersionData();
\r
63 // Show the form, but leave disabled until preloading is complete then show the main form
\r
64 this.Enabled = false;
\r
66 Application.DoEvents(); // Forces frmMain to draw
\r
68 // Check for new versions, if update checking is enabled
\r
69 if (Properties.Settings.Default.updateStatus)
\r
71 DateTime now = DateTime.Now;
\r
72 DateTime lastCheck = Properties.Settings.Default.lastUpdateCheckDate;
\r
73 TimeSpan elapsed = now.Subtract(lastCheck);
\r
74 if (elapsed.TotalDays > Properties.Settings.Default.daysBetweenUpdateCheck)
\r
76 lblStatus.Text = "
\83A
\83b
\83v
\83f
\81[
\83g
\82Ì
\8am
\94F
\92\86...";
\r
77 Application.DoEvents();
\r
79 Main.BeginCheckForUpdates(new AsyncCallback(UpdateCheckDone), false);
\r
83 // Setup the GUI components
\r
84 lblStatus.Text = "GUI
\82Ì
\90Ý
\92è
\92\86...";
\r
85 Application.DoEvents();
\r
86 loadPresetPanel(); // Load the Preset Panel
\r
87 treeView_presets.ExpandAll();
\r
88 lbl_encode.Text = "";
\r
89 queueWindow = new frmQueue(encodeQueue); // Prepare the Queue
\r
90 if (!Properties.Settings.Default.QueryEditorTab)
\r
91 tabs_panel.TabPages.RemoveAt(7); // Remove the query editor tab if the user does not want it enabled.
\r
93 // Load the user's default settings or Normal Preset
\r
94 if (Properties.Settings.Default.defaultPreset != "")
\r
96 if (presetHandler.GetPreset(Properties.Settings.Default.defaultPreset) != null)
\r
98 string query = presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).Query;
\r
99 Boolean loadPictureSettings = presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).PictureSettings;
\r
103 //Ok, Reset all the H264 widgets before changing the preset
\r
104 x264Panel.reset2Defaults();
\r
106 // Send the query from the file to the Query Parser class, then load the preset
\r
107 QueryParser presetQuery = QueryParser.Parse(query);
\r
108 PresetLoader.presetLoader(this, presetQuery, Properties.Settings.Default.defaultPreset, loadPictureSettings);
\r
110 // The x264 widgets will need updated, so do this now:
\r
111 x264Panel.X264_StandardizeOptString();
\r
112 x264Panel.X264_SetCurrentSettingsInPanel();
\r
116 loadNormalPreset();
\r
119 loadNormalPreset();
\r
121 // Enabled GUI tooltip's if Required
\r
122 if (Properties.Settings.Default.tooltipEnable)
\r
123 ToolTip.Active = true;
\r
125 // Register with Growl (if not using Growl for the encoding completion action, this wont hurt anything)
\r
126 GrowlCommunicator.Register();
\r
129 lblStatus.Text = "
\83\8d\81[
\83h
\8a®
\97¹
\81I";
\r
130 Application.DoEvents();
\r
133 this.Enabled = true;
\r
135 // Event Handlers and Queue Recovery
\r
140 private void UpdateCheckDone(IAsyncResult result)
\r
142 if (InvokeRequired)
\r
144 Invoke(new MethodInvoker(() => UpdateCheckDone(result)));
\r
148 UpdateCheckInformation info;
\r
152 info = Main.EndCheckForUpdates(result);
\r
154 if (info.NewVersionAvailable)
\r
156 frmUpdater updateWindow = new frmUpdater(info.BuildInformation);
\r
157 updateWindow.ShowDialog();
\r
160 catch (Exception ex)
\r
162 if ((bool)result.AsyncState)
\r
163 MessageBox.Show("
\83A
\83b
\83v
\83f
\81[
\83g
\82Ì
\8am
\94F
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B
\82µ
\82Î
\82ç
\82
\82µ
\82Ä
\82©
\82ç
\8dÄ
\93x
\8e\8e\82µ
\82Ä
\82Ý
\82Ä
\82
\82¾
\82³
\82¢
\81B\n\nDetailed Error Information:\n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
167 // Startup Functions
\r
168 private void queueRecovery()
\r
170 if (Main.checkQueueRecovery())
\r
172 DialogResult result = MessageBox.Show("
\83L
\83\85\81[
\82É
\96¢
\8a®
\97¹
\82Ì
\83A
\83C
\83e
\83\80\82ª
\8ec
\82³
\82ê
\82Ä
\82¢
\82Ü
\82·
\81B
\82±
\82ê
\82ç
\82ð
\95\9c\8c³
\82µ
\82Ü
\82·
\82©
\81H", "
\96¢
\8a®
\97¹
\82Ì
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82·", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
174 if (result == DialogResult.Yes)
\r
175 encodeQueue.LoadQueueFromFile("hb_queue_recovery.xml"); // Start Recovery
\r
178 // Remove the Queue recovery file if the user doesn't want to recovery the last queue.
\r
179 string queuePath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.xml");
\r
180 if (File.Exists(queuePath))
\r
181 File.Delete(queuePath);
\r
188 public string SourceName
\r
192 if (this.selectedSourceType == SourceType.DvdDrive)
\r
194 return this.dvdDriveLabel;
\r
197 return Path.GetFileNameWithoutExtension(this.sourcePath);
\r
203 // Encoding Events for setting up the GUI
\r
204 private void events()
\r
206 // Handle Widget changes when preset is selected.
\r
207 RegisterPresetEventHandler();
\r
209 // Handle Window Resize
\r
210 if (Properties.Settings.Default.MainWindowMinimize)
\r
211 this.Resize += new EventHandler(frmMain_Resize);
\r
213 // Handle Encode Start / Finish / Pause
\r
214 encodeQueue.CurrentJobCompleted += new EventHandler(encodeEnded);
\r
215 encodeQueue.QueuePauseRequested += new EventHandler(encodePaused);
\r
216 encodeQueue.NewJobStarted += new EventHandler(encodeStarted);
\r
218 // Handle a file being draged onto the GUI.
\r
219 this.DragEnter += new DragEventHandler(frmMain_DragEnter);
\r
220 this.DragDrop += new DragEventHandler(frmMain_DragDrop);
\r
223 // Change the preset label to custom when a user changes a setting. Don't want to give the impression that users can change settings and still be using a preset
\r
224 private void RegisterPresetEventHandler()
\r
227 drop_format.SelectedIndexChanged += new EventHandler(changePresetLabel);
\r
228 check_largeFile.CheckedChanged += new EventHandler(changePresetLabel);
\r
229 check_iPodAtom.CheckedChanged += new EventHandler(changePresetLabel);
\r
230 check_optimiseMP4.CheckedChanged += new EventHandler(changePresetLabel);
\r
232 // Picture Settings
\r
233 //PictureSettings.PictureSettingsChanged += new EventHandler(changePresetLabel);
\r
236 Filters.FilterSettingsChanged += new EventHandler(changePresetLabel);
\r
239 drp_videoEncoder.SelectedIndexChanged += new EventHandler(changePresetLabel);
\r
240 check_2PassEncode.CheckedChanged += new EventHandler(changePresetLabel);
\r
241 check_turbo.CheckedChanged += new EventHandler(changePresetLabel);
\r
242 text_filesize.TextChanged += new EventHandler(changePresetLabel);
\r
243 text_bitrate.TextChanged += new EventHandler(changePresetLabel);
\r
244 slider_videoQuality.ValueChanged += new EventHandler(changePresetLabel);
\r
247 AudioSettings.AudioListChanged += new EventHandler(changePresetLabel);
\r
250 x264Panel.rtf_x264Query.TextChanged += new EventHandler(changePresetLabel);
\r
252 private void UnRegisterPresetEventHandler()
\r
254 // Output Settings
\r
255 drop_format.SelectedIndexChanged -= new EventHandler(changePresetLabel);
\r
256 check_largeFile.CheckedChanged -= new EventHandler(changePresetLabel);
\r
257 check_iPodAtom.CheckedChanged -= new EventHandler(changePresetLabel);
\r
258 check_optimiseMP4.CheckedChanged -= new EventHandler(changePresetLabel);
\r
260 // Picture Settings
\r
261 //PictureSettings.PictureSettingsChanged -= new EventHandler(changePresetLabel);
\r
264 Filters.FilterSettingsChanged -= new EventHandler(changePresetLabel);
\r
267 drp_videoEncoder.SelectedIndexChanged -= new EventHandler(changePresetLabel);
\r
268 check_2PassEncode.CheckedChanged -= new EventHandler(changePresetLabel);
\r
269 check_turbo.CheckedChanged -= new EventHandler(changePresetLabel);
\r
270 text_filesize.TextChanged -= new EventHandler(changePresetLabel);
\r
271 text_bitrate.TextChanged -= new EventHandler(changePresetLabel);
\r
272 slider_videoQuality.ValueChanged -= new EventHandler(changePresetLabel);
\r
275 AudioSettings.AudioListChanged -= new EventHandler(changePresetLabel);
\r
278 x264Panel.rtf_x264Query.TextChanged -= new EventHandler(changePresetLabel);
\r
280 private void changePresetLabel(object sender, EventArgs e)
\r
282 labelPreset.Text = "
\8fo
\97Í
\90Ý
\92è
\81i
\83v
\83\8a\83Z
\83b
\83g
\81F
\83J
\83X
\83^
\83\80\81j";
\r
285 private static void frmMain_DragEnter(object sender, DragEventArgs e)
\r
287 if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
\r
288 e.Effect = DragDropEffects.All;
\r
290 private void frmMain_DragDrop(object sender, DragEventArgs e)
\r
292 string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
\r
293 sourcePath = string.Empty;
\r
295 if (fileList != null)
\r
297 if (fileList[0].StartsWith("\\"))
\r
300 "HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83l
\83b
\83g
\83\8f\81[
\83N
\83h
\83\89\83C
\83u
\82Æ
\82µ
\82Ä
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B",
\r
301 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
302 UpdateSourceLabel();
\r
306 if (fileList[0] != "")
\r
307 startScan(fileList[0]);
\r
309 UpdateSourceLabel();
\r
313 UpdateSourceLabel();
\r
315 private void encodeStarted(object sender, EventArgs e)
\r
317 lastAction = "encode";
\r
318 setEncodeStarted();
\r
320 // Experimental HBProc Process Monitoring.
\r
321 if (Properties.Settings.Default.enocdeStatusInGui)
\r
323 Thread encodeMon = new Thread(encodeMonitorThread);
\r
327 private void encodeEnded(object sender, EventArgs e)
\r
329 setEncodeFinished();
\r
331 private void encodePaused(object sender, EventArgs e)
\r
333 setEncodeFinished();
\r
337 // User Interface Menus / Tool Strips *********************************
\r
340 private void mnu_killCLI_Click(object sender, EventArgs e)
\r
344 private void mnu_exit_Click(object sender, EventArgs e)
\r
346 Application.Exit();
\r
351 private void mnu_encode_Click(object sender, EventArgs e)
\r
353 queueWindow.Show();
\r
355 private void mnu_encodeLog_Click(object sender, EventArgs e)
\r
357 String file = lastAction == "scan" ? "last_scan_log.txt" : "last_encode_log.txt";
\r
359 frmActivityWindow dvdInfoWindow = new frmActivityWindow(file, encodeQueue, this);
\r
360 dvdInfoWindow.Show();
\r
362 private void mnu_options_Click(object sender, EventArgs e)
\r
364 Form options = new frmOptions(this);
\r
365 options.ShowDialog();
\r
369 #region Presets Menu
\r
370 private void mnu_presetReset_Click(object sender, EventArgs e)
\r
372 presetHandler.UpdateBuiltInPresets();
\r
374 if (treeView_presets.Nodes.Count == 0)
\r
375 MessageBox.Show("presets.xml
\83t
\83@
\83C
\83\8b\82ð
\83\8d\81[
\83h
\82Å
\82«
\82Ü
\82¹
\82ñ
\81B
\81u
\83v
\83\8a\83Z
\83b
\83g
\81v
\83\81\83j
\83\85\81[
\82©
\82ç
\81u
\91g
\82Ý
\8d\9e\82Ý
\83v
\83\8a\83Z
\83b
\83g
\82Ì
\83A
\83b
\83v
\83f
\81[
\83g
\81v
\82ð
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B\n
\82Ü
\82½
\81AVista
\82Ì
\8fê
\8d\87\8aÇ
\97\9d\8eÒ
\83\82\81[
\83h
\82Å
\8eÀ
\8ds
\82µ
\82Ä
\82¢
\82é
\82©
\82Ç
\82¤
\82©
\8am
\94F
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B
\8fÚ
\82µ
\82
\82ÍFAQ
\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81I", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
377 MessageBox.Show("
\91g
\82Ý
\8d\9e\82Ý
\83v
\83\8a\83Z
\83b
\83g
\82ð
\83A
\83b
\83v
\83f
\81[
\83g
\82µ
\82Ü
\82µ
\82½
\81I", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
379 treeView_presets.ExpandAll();
\r
381 private void mnu_delete_preset_Click(object sender, EventArgs e)
\r
384 // Empty the preset file
\r
385 string presetsFile = Application.StartupPath.ToString() + "\\presets.dat";
\r
386 if (File.Exists(presetsFile))
\r
387 File.Delete(presetsFile);
\r
391 FileStream strm = new FileStream(presetsFile, FileMode.Create, FileAccess.Write);
\r
395 catch (Exception exc)
\r
397 MessageBox.Show("
\83v
\83\8a\83Z
\83b
\83g
\82Ì
\8dí
\8f\9c\8f\88\97\9d\82Å
\83G
\83\89\81[
\82ª
\94
\90¶
\82µ
\82Ü
\82µ
\82½
\81B\nWindows Vista
\82Ì
\8fê
\8d\87\81A
\8aÇ
\97\9d\8eÒ
\83\82\81[
\83h
\82Å
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢\n" + exc.ToString());
\r
400 // Reload the preset panel
\r
403 presetHandler.RemoveBuiltInPresets();
\r
404 loadPresetPanel(); // Reload the preset panel
\r
406 private void mnu_SelectDefault_Click(object sender, EventArgs e)
\r
408 loadNormalPreset();
\r
410 private void mnu_importMacPreset_Click(object sender, EventArgs e)
\r
414 private void btn_new_preset_Click(object sender, EventArgs e)
\r
416 Form preset = new frmAddPreset(this, queryGen.GenerateCLIQuery(this, 0, null), presetHandler);
\r
417 preset.ShowDialog();
\r
422 private void mnu_handbrake_forums_Click(object sender, EventArgs e)
\r
424 // Process.Start("http://forum.handbrake.fr/");
\r
425 Process.Start("http://sourceforge.jp/projects/handbrake-jp/wiki/Forum");
\r
427 private void mnu_user_guide_Click(object sender, EventArgs e)
\r
429 // Process.Start("http://trac.handbrake.fr/wiki/HandBrakeGuide");
\r
430 Process.Start("http://sourceforge.jp/projects/handbrake-jp/wiki/Guide");
\r
432 private void mnu_handbrake_home_Click(object sender, EventArgs e)
\r
434 // Process.Start("http://handbrake.fr");
\r
435 Process.Start("http://sourceforge.jp/projects/handbrake-jp/wiki/");
\r
437 private void mnu_UpdateCheck_Click(object sender, EventArgs e)
\r
439 lbl_updateCheck.Visible = true;
\r
440 Main.BeginCheckForUpdates(new AsyncCallback(updateCheckDoneMenu), false);
\r
442 private void updateCheckDoneMenu(IAsyncResult result)
\r
444 // Make sure it's running on the calling thread
\r
445 if (InvokeRequired)
\r
447 Invoke(new MethodInvoker(() => updateCheckDoneMenu(result)));
\r
450 UpdateCheckInformation info;
\r
453 // Get the information about the new build, if any, and close the window
\r
454 info = Main.EndCheckForUpdates(result);
\r
456 if (info.NewVersionAvailable && info.BuildInformation != null)
\r
458 frmUpdater updateWindow = new frmUpdater(info.BuildInformation);
\r
459 updateWindow.ShowDialog();
\r
462 MessageBox.Show("
\8c»
\8dÝ
\97\98\97p
\89Â
\94\
\82È
\83A
\83b
\83v
\83f
\81[
\83g
\82Í
\82 \82è
\82Ü
\82¹
\82ñ", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
463 lbl_updateCheck.Visible = false;
\r
466 catch (Exception ex)
\r
468 if ((bool)result.AsyncState)
\r
469 MessageBox.Show("
\83A
\83b
\83v
\83f
\81[
\83g
\82Ì
\8am
\94F
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B
\82µ
\82Î
\82ç
\82
\82µ
\82Ä
\82©
\82ç
\8dÄ
\93x
\8e\8e\82µ
\82Ä
\82Ý
\82Ä
\82
\82¾
\82³
\82¢
\81B\n\nDetailed Error Information:\n" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
473 MessageBox.Show("
\8c»
\8dÝ
\97\98\97p
\89Â
\94\
\82È
\83A
\83b
\83v
\83f
\81[
\83g
\82Í
\82 \82è
\82Ü
\82¹
\82ñ", "Update Check", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
476 private void mnu_about_Click(object sender, EventArgs e)
\r
478 using (frmAbout About = new frmAbout())
\r
480 About.ShowDialog();
\r
486 // Right Click Menu Code
\r
487 private void pmnu_expandAll_Click(object sender, EventArgs e)
\r
489 treeView_presets.ExpandAll();
\r
491 private void pmnu_collapse_Click(object sender, EventArgs e)
\r
493 treeView_presets.CollapseAll();
\r
495 private void pmnu_import_Click(object sender, EventArgs e)
\r
499 private void pmnu_saveChanges_Click(object sender, EventArgs e)
\r
501 DialogResult result = MessageBox.Show("
\83v
\83\8a\83Z
\83b
\83g
\82Ì
\83A
\83b
\83v
\83f
\81[
\83g
\82É
\83T
\83C
\83Y
\90Ý
\92è
\82à
\8aÜ
\82ß
\82Ü
\82·
\82©
\81H" + treeView_presets.SelectedNode.Text, "Update Preset", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
\r
502 if (result == DialogResult.Yes)
\r
503 presetHandler.Update(treeView_presets.SelectedNode.Text, QueryGenerator.GenerateTabbedComponentsQuery(this), true);
\r
504 else if (result == DialogResult.No)
\r
505 presetHandler.Update(treeView_presets.SelectedNode.Text, QueryGenerator.GenerateTabbedComponentsQuery(this), false);
\r
507 private void pmnu_delete_click(object sender, EventArgs e)
\r
509 if (treeView_presets.SelectedNode != null)
\r
511 presetHandler.Remove(treeView_presets.SelectedNode.Text);
\r
512 treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);
\r
514 treeView_presets.Select();
\r
516 private void presets_menu_Opening(object sender, System.ComponentModel.CancelEventArgs e)
\r
518 // Make sure that the save menu is always disabled by default
\r
519 pmnu_saveChanges.Enabled = false;
\r
521 // Now enable the save menu if the selected preset is a user preset
\r
522 if (treeView_presets.SelectedNode != null)
\r
523 if (presetHandler.CheckIfUserPresetExists(treeView_presets.SelectedNode.Text))
\r
524 pmnu_saveChanges.Enabled = true;
\r
526 treeView_presets.Select();
\r
529 // Presets Management
\r
530 private void btn_addPreset_Click(object sender, EventArgs e)
\r
532 Form preset = new frmAddPreset(this, QueryGenerator.GenerateTabbedComponentsQuery(this), presetHandler);
\r
533 preset.ShowDialog();
\r
535 private void btn_removePreset_Click(object sender, EventArgs e)
\r
538 if (text_source.Text == string.Empty || text_source.Text == "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð..." || text_destination.Text == string.Empty)
\r
539 MessageBox.Show("
\95Ï
\8a·
\8c³
\82à
\82µ
\82
\82Í
\95Û
\91¶
\90æ
\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
542 // Set the last action to encode.
\r
543 // This is used for tracking which file to load in the activity window
\r
544 lastAction = "encode";
\r
547 if (rtf_query.Text != "")
\r
548 query = rtf_query.Text;
\r
550 query = queryGen.GenerateTheQuery(this);
\r
552 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
553 lbl_encode.Visible = true;
\r
554 lbl_encode.Text = "
\83G
\83\93\83R
\81[
\83h
\8eÀ
\8ds
\92\86";
\r
556 btn_start.Text = "
\95Ï
\8a·
\92â
\8e~";
\r
557 btn_start.ToolTipText = "
\83G
\83\93\83R
\81[
\83h
\8f\88\97\9d\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\81B\nWarning:
\82±
\82ê
\82É
\82æ
\82è
\81A
\83t
\83@
\83C
\83\8b\82ª
\94j
\89ó
\82³
\82ê
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B
\88À
\91S
\82É
\83G
\83\93\83R
\81[
\83h
\82ð
\92\86\8e~
\82·
\82é
\82É
\82Í
\81A
\83R
\83}
\83\93\83h
\83E
\83B
\83\93\83h
\83E
\82Åctrl-C
\82ð
\93ü
\97Í
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B";
\r
558 btn_start.Image = Properties.Resources.stop;
\r
560 DialogResult result = MessageBox.Show("
\91I
\91ð
\82µ
\82½
\83v
\83\8a\83Z
\83b
\83g
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
561 if (result == DialogResult.Yes)
\r
563 if (treeView_presets.SelectedNode != null)
\r
565 presetHandler.Remove(treeView_presets.SelectedNode.Text);
\r
566 treeView_presets.Nodes.Remove(treeView_presets.SelectedNode);
\r
569 treeView_presets.Select();
\r
571 private void btn_setDefault_Click(object sender, EventArgs e)
\r
574 if (text_source.Text == string.Empty || text_source.Text == "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð..." || text_destination.Text == string.Empty)
\r
575 MessageBox.Show("
\95Ï
\8a·
\8c³
\82à
\82µ
\82
\82Í
\95Û
\91¶
\90æ
\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
578 if (treeView_presets.SelectedNode != null)
\r
580 DialogResult result = MessageBox.Show("
\82±
\82Ì
\83v
\83\8a\83Z
\83b
\83g
\82ð
\83f
\83t
\83H
\83\8b\83g
\82Ì
\83v
\83\8a\83Z
\83b
\83g
\82É
\90Ý
\92è
\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
581 if (result == DialogResult.Yes)
\r
583 Properties.Settings.Default.defaultPreset = treeView_presets.SelectedNode.Text;
\r
584 Properties.Settings.Default.Save();
\r
585 MessageBox.Show("
\83f
\83t
\83H
\83\8b\83g
\83v
\83\8a\83Z
\83b
\83g
\82ð
\95Ï
\8dX
\82µ
\82Ü
\82µ
\82½", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
589 MessageBox.Show("
\83v
\83\8a\83Z
\83b
\83g
\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
591 private void treeview_presets_mouseUp(object sender, MouseEventArgs e)
\r
593 if (e.Button == MouseButtons.Right)
\r
594 treeView_presets.SelectedNode = treeView_presets.GetNodeAt(e.Location);
\r
595 else if (e.Button == MouseButtons.Left)
\r
597 if (treeView_presets.GetNodeAt(e.Location) != null)
\r
599 if (labelPreset.Text.Contains(treeView_presets.GetNodeAt(e.Location).Text))
\r
604 treeView_presets.Select();
\r
606 private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)
\r
610 private void treeView_presets_deleteKey(object sender, KeyEventArgs e)
\r
612 if (e.KeyCode == Keys.Delete)
\r
614 DialogResult result = MessageBox.Show("
\91I
\91ð
\82µ
\82½
\83v
\83\8a\83Z
\83b
\83g
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
615 if (result == DialogResult.Yes)
\r
617 if (treeView_presets.SelectedNode != null)
\r
618 presetHandler.Remove(treeView_presets.SelectedNode.Text);
\r
620 // Remember each nodes expanded status so we can reload it
\r
621 List<Boolean> nodeStatus = new List<Boolean>();
\r
622 foreach (TreeNode node in treeView_presets.Nodes)
\r
623 nodeStatus.Add(node.IsExpanded);
\r
625 // Now reload the preset panel
\r
628 // And finally, re-expand any of the nodes if required
\r
630 foreach (TreeNode node in treeView_presets.Nodes)
\r
636 if (filename.StartsWith("\\"))
\r
637 MessageBox.Show("HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
640 if (filename != "")
\r
642 Form frmRD = new frmReadDVD(filename, this);
\r
643 text_source.Text = filename;
\r
644 lbl_encode.Text = "
\83X
\83L
\83\83\83\93\92\86...";
\r
645 frmRD.ShowDialog();
\r
648 text_source.Text = "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð...";
\r
650 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
651 if (drp_dvdtitle.Items.Count == 0)
\r
652 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B
\90³
\82µ
\82¢
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82©
\82²
\8am
\94F
\82
\82¾
\82³
\82¢
\81B
\82Ü
\82½
\81A
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82³
\82ê
\82½
\83f
\83B
\83X
\83N
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
654 lbl_encode.Text = "";
\r
661 private void selectPreset()
\r
663 if (treeView_presets.SelectedNode != null)
\r
665 // Ok, so, we've selected a preset. Now we want to load it.
\r
666 string presetName = treeView_presets.SelectedNode.Text;
\r
667 if (presetHandler.GetPreset(presetName) != null)
\r
669 string query = presetHandler.GetPreset(presetName).Query;
\r
670 Boolean loadPictureSettings = presetHandler.GetPreset(presetName).PictureSettings;
\r
674 //Ok, Reset all the H264 widgets before changing the preset
\r
675 x264Panel.reset2Defaults();
\r
677 // Send the query from the file to the Query Parser class
\r
678 QueryParser presetQuery = QueryParser.Parse(query);
\r
681 if (filename.StartsWith("\\"))
\r
682 MessageBox.Show("HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
685 // Now load the preset
\r
686 PresetLoader.presetLoader(this, presetQuery, presetName, loadPictureSettings);
\r
688 // The x264 widgets will need updated, so do this now:
\r
689 x264Panel.X264_StandardizeOptString();
\r
690 x264Panel.X264_SetCurrentSettingsInPanel();
\r
695 private void loadNormalPreset()
\r
697 foreach (TreeNode treenode in treeView_presets.Nodes)
\r
699 foreach (TreeNode node in treenode.Nodes)
\r
701 if (node.Text.Equals("Normal"))
\r
702 treeView_presets.SelectedNode = treeView_presets.Nodes[treenode.Index].Nodes[0];
\r
706 private void importPreset()
\r
708 Import imp = new Import();
\r
709 if (openPreset.ShowDialog() == DialogResult.OK)
\r
711 QueryParser parsed = imp.importMacPreset(openPreset.FileName);
\r
712 if (presetHandler.CheckIfUserPresetExists(parsed.PresetName + " (Imported)"))
\r
714 DialogResult result = MessageBox.Show("
\82±
\82Ì
\83v
\83\8a\83Z
\83b
\83g
\96¼
\82Í
\82·
\82Å
\82É
\91¶
\8dÝ
\82µ
\82Ä
\82¢
\82Ü
\82·
\81B
\8fã
\8f\91\82«
\95Û
\91¶
\82µ
\82Ü
\82·
\82©
\81H", "Overwrite preset?",
\r
715 MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
\r
716 if (result == DialogResult.Yes)
\r
718 PresetLoader.presetLoader(this, parsed, parsed.PresetName, parsed.UsesPictureSettings);
\r
719 presetHandler.Update(parsed.PresetName + " (Imported)", queryGen.GenerateCLIQuery(this, 0, null),
\r
720 parsed.UsesPictureSettings);
\r
725 text_source.Text = "
\81u
\95Ï
\8a·
\8c³
\81v
\83{
\83^
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\91I
\91ð...";
\r
727 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
728 if (drp_dvdtitle.Items.Count == 0)
\r
729 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B
\90³
\82µ
\82¢
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82©
\82²
\8am
\94F
\82
\82¾
\82³
\82¢
\81B
\82Ü
\82½
\81A
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82³
\82ê
\82½
\83f
\83B
\83X
\83N
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
732 PresetLoader.presetLoader(this, parsed, parsed.PresetName, parsed.UsesPictureSettings);
\r
733 presetHandler.Add(parsed.PresetName, queryGen.GenerateCLIQuery(this, 0, null), parsed.UsesPictureSettings);
\r
735 if (presetHandler.Add(parsed.PresetName + " (Imported)", queryGen.GenerateCLIQuery(this, 0, null), parsed.UsesPictureSettings))
\r
737 TreeNode preset_treeview = new TreeNode(parsed.PresetName + " (Imported)") { ForeColor = Color.Black };
\r
738 treeView_presets.Nodes.Add(preset_treeview);
\r
746 private void btn_source_Click(object sender, EventArgs e)
\r
748 mnu_dvd_drive.Visible = true;
\r
749 Thread driveInfoThread = new Thread(getDriveInfoThread);
\r
750 driveInfoThread.Start();
\r
752 private void btn_start_Click(object sender, EventArgs e)
\r
754 if (btn_start.Text == "
\92â
\8e~")
\r
756 DialogResult result = MessageBox.Show("
\95Ï
\8a·
\8f\88\97\9d\82ð
\92\86\8e~
\82µ
\82Ü
\82·
\82©
\81H", "Cancel Encode?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
758 if (result == DialogResult.Yes)
\r
761 encodeQueue.RequestPause();
\r
763 // Allow the CLI to exit cleanly
\r
764 Win32.SetForegroundWindow((int)encodeQueue.processHandle);
\r
765 SendKeys.Send("^C");
\r
768 setEncodeFinished();
\r
773 if (encodeQueue.Count != 0 || (!string.IsNullOrEmpty(sourcePath) && !string.IsNullOrEmpty(text_destination.Text)))
\r
775 string generatedQuery = queryGen.GenerateCLIQuery(this, 0, null);
\r
776 string specifiedQuery = rtf_query.Text != "" ? rtf_query.Text : queryGen.GenerateCLIQuery(this, 0, null);
\r
777 string query = string.Empty;
\r
779 // Check to make sure the generated query matches the GUI settings
\r
780 if (Properties.Settings.Default.PromptOnUnmatchingQueries && !string.IsNullOrEmpty(specifiedQuery) && generatedQuery != specifiedQuery)
\r
782 DialogResult result = MessageBox.Show("
\81u
\83R
\83}
\83\93\83h
\83\89\83C
\83\93\81v
\83^
\83u
\82Å
\90Ý
\92è
\82µ
\82½
\83N
\83G
\83\8a\82ª" +
\r
783 "
\8c»
\8dÝ
\82ÌGUI
\90Ý
\92è
\82Æ
\96µ
\8f\82\82µ
\82Ä
\82¢
\82Ü
\82·
\81B\n\n
\8eè
\93®
\82Å
\90Ý
\92è
\82µ
\82½
\83N
\83G
\83\8a\82Í" +
\r
784 "GUI
\90Ý
\92è
\82æ
\82è
\82à
\97D
\90æ
\82³
\82ê
\82é
\82½
\82ß
\81A
\95Ï
\8dX
\82µ
\82½
\90Ý
\92è
\82Í" +
\r
785 "
\94½
\89f
\82³
\82ê
\82È
\82¢
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B" + Environment.NewLine + Environment.NewLine +
\r
786 "
\83N
\83G
\83\8a\82ð
\8dX
\90V
\82µ
\82ÄGUI
\90Ý
\92è
\82ð
\94½
\89f
\82³
\82¹
\82Ü
\82·
\82©
\81H",
\r
787 "Manual Query does not Match GUI",
\r
788 MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk,
\r
789 MessageBoxDefaultButton.Button3);
\r
793 case DialogResult.Yes:
\r
794 // Replace the manual query with the generated one
\r
795 query = generatedQuery;
\r
796 rtf_query.Text = generatedQuery;
\r
798 case DialogResult.No:
\r
799 // Use the manual query
\r
800 query = specifiedQuery;
\r
802 case DialogResult.Cancel:
\r
803 // Don't start the encode
\r
809 query = specifiedQuery;
\r
812 DialogResult overwrite = DialogResult.Yes;
\r
813 if (text_destination.Text != "")
\r
814 if (File.Exists(text_destination.Text))
\r
815 overwrite = MessageBox.Show("
\95Û
\91¶
\90æ
\83t
\83@
\83C
\83\8b\82Í
\82·
\82Å
\82É
\91¶
\8dÝ
\82µ
\82Ä
\82¢
\82Ü
\82·
\81B
\8fã
\8f\91\82«
\82µ
\82Ü
\82·
\82©
\81H", "Overwrite File?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
817 if (overwrite == DialogResult.Yes)
\r
819 if (encodeQueue.Count == 0)
\r
820 encodeQueue.AddJob(query, sourcePath, text_destination.Text, (rtf_query.Text != ""));
\r
822 queueWindow.setQueue();
\r
823 if (encodeQueue.Count > 1)
\r
824 queueWindow.Show(false);
\r
826 setEncodeStarted(); // Encode is running, so setup the GUI appropriately
\r
827 encodeQueue.StartEncodeQueue(); // Start The Queue Encoding Process
\r
828 lastAction = "encode"; // Set the last action to encode - Used for activity window.
\r
830 if (ActivityWindow != null)
\r
831 ActivityWindow.SetLogView(false);
\r
836 else if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(text_destination.Text))
\r
837 MessageBox.Show("
\91I
\91ð
\82³
\82ê
\82½
\95Ï
\8a·
\8c³/
\95Û
\91¶
\90æ
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
840 private void btn_add2Queue_Click(object sender, EventArgs e)
\r
842 if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(text_destination.Text))
\r
843 MessageBox.Show("
\95Ï
\8a·
\8c³/
\95Û
\91¶
\90æ
\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
846 String query = queryGen.GenerateCLIQuery(this, 0, null);
\r
847 if (rtf_query.Text != "")
\r
848 query = rtf_query.Text;
\r
850 if (encodeQueue.CheckForDestinationDuplicate(text_destination.Text))
\r
852 DialogResult result = MessageBox.Show("
\8ew
\92è
\82µ
\82½
\95Û
\91¶
\90æ
\82É
\8fo
\97Í
\82·
\82é
\83A
\83C
\83e
\83\80\82ª
\82·
\82Å
\82É
\83L
\83\85\81[
\82É
\91¶
\8dÝ
\82µ
\82Ä
\82¢
\82Ü
\82·
\81B\n\n
\82»
\82Ì
\82½
\82ß
\81A
\95Ï
\8a·
\8c\8b\89Ê
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82é
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B
\82±
\82Ì
\82Ü
\82Ü
\91±
\82¯
\82Ü
\82·
\82©
\81H",
\r
853 "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
\r
854 if (result == DialogResult.Yes)
\r
855 encodeQueue.AddJob(query, sourcePath, text_destination.Text, (rtf_query.Text != ""));
\r
859 encodeQueue.AddJob(query, sourcePath, text_destination.Text, (rtf_query.Text != ""));
\r
861 lbl_encode.Text = encodeQueue.Count + "
\8cÂ
\82Ì
\83A
\83C
\83e
\83\80\82ª
\83L
\83\85\81[
\82É
\82 \82è
\82Ü
\82·";
\r
863 queueWindow.Show();
\r
866 private void btn_showQueue_Click(object sender, EventArgs e)
\r
868 queueWindow.Show();
\r
869 queueWindow.Activate();
\r
871 private void tb_preview_Click(object sender, EventArgs e)
\r
873 if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(text_destination.Text))
\r
874 MessageBox.Show("
\95Ï
\8a·
\8c³/
\95Û
\91¶
\90æ
\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
877 if (qtpreview == null)
\r
879 qtpreview = new frmPreview(this);
\r
882 else if (qtpreview.IsDisposed)
\r
884 qtpreview = new frmPreview(this);
\r
888 MessageBox.Show(qtpreview, "
\83v
\83\8c\83r
\83\85\81[
\83E
\83B
\83\93\83h
\83E
\82ð
\82·
\82Å
\82É
\8aJ
\82¢
\82Ä
\82¢
\82Ü
\82·", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
891 private void btn_ActivityWindow_Click(object sender, EventArgs e)
\r
893 String file = lastAction == "scan" ? "last_scan_log.txt" : "last_encode_log.txt";
\r
894 if (ActivityWindow == null)
\r
895 ActivityWindow = new frmActivityWindow(file, encodeQueue, this);
\r
897 ActivityWindow.SetLogView(!encodeQueue.isEncoding);
\r
899 ActivityWindow.Show();
\r
903 #region System Tray Icon
\r
904 private void frmMain_Resize(object sender, EventArgs e)
\r
906 if (FormWindowState.Minimized == this.WindowState)
\r
908 notifyIcon.Visible = true;
\r
911 else if (FormWindowState.Normal == this.WindowState)
\r
912 notifyIcon.Visible = false;
\r
914 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
\r
916 this.Visible = true;
\r
918 this.WindowState = FormWindowState.Normal;
\r
919 notifyIcon.Visible = false;
\r
921 private void btn_restore_Click(object sender, EventArgs e)
\r
923 this.Visible = true;
\r
925 this.WindowState = FormWindowState.Normal;
\r
926 notifyIcon.Visible = false;
\r
930 #region Tab Control
\r
933 private void btn_dvd_source_Click(object sender, EventArgs e)
\r
935 if (DVD_Open.ShowDialog() == DialogResult.OK)
\r
937 this.selectedSourceType = SourceType.Folder;
\r
938 selectSource(DVD_Open.SelectedPath);
\r
941 UpdateSourceLabel();
\r
943 private void btn_file_source_Click(object sender, EventArgs e)
\r
945 if (ISO_Open.ShowDialog() == DialogResult.OK)
\r
947 this.selectedSourceType = SourceType.VideoFile;
\r
948 selectSource(ISO_Open.FileName);
\r
951 UpdateSourceLabel();
\r
953 private void mnu_dvd_drive_Click(object sender, EventArgs e)
\r
955 if (this.dvdDrivePath == null) return;
\r
956 this.selectedSourceType = SourceType.DvdDrive;
\r
957 selectSource(this.dvdDrivePath);
\r
959 private void selectSource(string file)
\r
961 Check_ChapterMarkers.Enabled = true;
\r
962 lastAction = "scan";
\r
963 sourcePath = string.Empty;
\r
965 if (file == string.Empty) // Must have a file or path
\r
968 string[] path = mnu_dvd_drive.Text.Split(' ');
\r
969 filename = path[0];
\r
970 lbl_encode.Text = "
\83X
\83L
\83\83\83\93\92\86...";
\r
971 Form frmRD = new frmReadDVD(filename, this);
\r
972 text_source.Text = filename;
\r
973 frmRD.ShowDialog();
\r
976 // If there are no titles in the dropdown menu then the scan has obviously failed. Display an error message explaining to the user.
\r
977 if (drp_dvdtitle.Items.Count == 0)
\r
978 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B
\90³
\82µ
\82¢
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82¢
\82é
\82©
\82²
\8am
\94F
\82
\82¾
\82³
\82¢
\81B
\82Ü
\82½
\81A
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82³
\82ê
\82½
\83f
\83B
\83X
\83N
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
980 UpdateSourceLabel();
\r
984 if (file.StartsWith("\\")) // NO UNC Paths
\r
987 "HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\8eÀ
\8ds
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B",
\r
988 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
989 UpdateSourceLabel();
\r
993 sourcePath = Path.GetFileName(file);
\r
996 private void drp_dvdtitle_Click(object sender, EventArgs e)
\r
998 if ((drp_dvdtitle.Items.Count == 1) && (drp_dvdtitle.Items[0].ToString() == "
\8e©
\93®"))
\r
999 MessageBox.Show("
\83^
\83C
\83g
\83\8b\82ª
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B
\81u
\95Ï
\8a·
\8c³
\81v
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\95Ï
\8a·
\8c³
\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1001 private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e)
\r
1003 UnRegisterPresetEventHandler();
\r
1005 PictureSettings.lbl_Aspect.Text = "
\83^
\83C
\83g
\83\8b\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢"; // Reset some values on the form
\r
1006 drop_chapterStart.Items.Clear();
\r
1007 drop_chapterFinish.Items.Clear();
\r
1009 // If the dropdown is set to automatic nothing else needs to be done.
\r
1010 // Otheriwse if its not, title data has to be loased from parsing.
\r
1011 if (drp_dvdtitle.Text != "
\8e©
\93®")
\r
1013 selectedTitle = drp_dvdtitle.SelectedItem as Title;
\r
1014 lbl_duration.Text = selectedTitle.Duration.ToString();
\r
1015 PictureSettings.Source = selectedTitle; // Setup Picture Settings Tab Control
\r
1017 // Populate the Angles dropdown
\r
1018 drop_angle.Items.Clear();
\r
1019 if (!Properties.Settings.Default.noDvdNav)
\r
1021 drop_angle.Visible = true;
\r
1022 lbl_angle.Visible = true;
\r
1023 drop_angle.Items.AddRange(selectedTitle.Angles.ToArray());
\r
1024 if (drop_angle.Items.Count != 0)
\r
1025 drop_angle.SelectedIndex = 0;
\r
1029 drop_angle.Visible = false;
\r
1030 lbl_angle.Visible = false;
\r
1033 // Populate the Start chapter Dropdown
\r
1034 drop_chapterStart.Items.Clear();
\r
1035 drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
1036 if (drop_chapterStart.Items.Count > 0)
\r
1037 drop_chapterStart.Text = drop_chapterStart.Items[0].ToString();
\r
1039 // Populate the Final Chapter Dropdown
\r
1040 drop_chapterFinish.Items.Clear();
\r
1041 drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray());
\r
1042 if (drop_chapterFinish.Items.Count > 0)
\r
1043 drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString();
\r
1045 // Populate the Audio Channels Dropdown
\r
1046 AudioSettings.SetTrackList(selectedTitle);
\r
1048 // Populate the Subtitles dropdown
\r
1049 Subtitles.drp_subtitleTracks.Items.Clear();
\r
1050 Subtitles.drp_subtitleTracks.Items.Add("Foreign Audio Search (Bitmap)");
\r
1051 Subtitles.drp_subtitleTracks.Items.AddRange(selectedTitle.Subtitles.ToArray());
\r
1052 Subtitles.drp_subtitleTracks.SelectedIndex = 0;
\r
1053 Subtitles.Clear();
\r
1054 Subtitles.SetSubtitleTrackAuto();
\r
1057 // Run the autoName & chapterNaming functions
\r
1058 if (Properties.Settings.Default.autoNaming)
\r
1060 string autoPath = Main.autoName(this);
\r
1061 if (autoPath != null)
\r
1062 text_destination.Text = autoPath;
\r
1064 MessageBox.Show("
\90Ý
\92è
\82Å
\81u
\8fo
\97Í
\83t
\83@
\83C
\83\8b\96¼
\82ð
\8e©
\93®
\93I
\82É
\90Ý
\92è
\82·
\82é
\81v
\82ª
\97L
\8cø
\82É
\82È
\82Á
\82Ä
\82¢
\82Ü
\82·
\82ª
\81A
\95Û
\91¶
\90æ
\83t
\83H
\83\8b\83_
\82ª
\8ew
\92è
\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B
\81u
\83c
\81[
\83\8b\81v
\83\81\83j
\83\85\81[
\82Ì
\81u
\83I
\83v
\83V
\83\87\83\93\90Ý
\92è
\81v
\82Å
\90Ý
\92è
\82µ
\82Ä
\82
\82¾
\82³
\82¢", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1067 data_chpt.Rows.Clear();
\r
1068 if (selectedTitle.Chapters.Count != 1)
\r
1070 DataGridView chapterGridView = Main.chapterNaming(data_chpt, drop_chapterFinish.Text);
\r
1071 if (chapterGridView != null)
\r
1072 data_chpt = chapterGridView;
\r
1076 Check_ChapterMarkers.Checked = false;
\r
1077 Check_ChapterMarkers.Enabled = false;
\r
1080 // Hack to force the redraw of the scrollbars which don't resize properly when the control is disabled.
\r
1081 data_chpt.Columns[0].Width = 166;
\r
1082 data_chpt.Columns[0].Width = 165;
\r
1084 RegisterPresetEventHandler();
\r
1086 private void chapersChanged(object sender, EventArgs e)
\r
1088 Control ctl = (Control)sender;
\r
1089 int chapterStart, chapterEnd;
\r
1090 int.TryParse(drop_chapterStart.Text, out chapterStart);
\r
1091 int.TryParse(drop_chapterFinish.Text, out chapterEnd);
\r
1095 case "drop_chapterStart":
\r
1096 if (drop_chapterFinish.SelectedIndex == -1 && drop_chapterFinish.Items.Count != 0)
\r
1097 drop_chapterFinish.SelectedIndex = drop_chapterFinish.Items.Count - 1;
\r
1099 if (chapterEnd != 0)
\r
1100 if (chapterStart > chapterEnd)
\r
1101 drop_chapterFinish.Text = chapterStart.ToString();
\r
1103 case "drop_chapterFinish":
\r
1104 if (drop_chapterStart.Items.Count >= 1 && drop_chapterStart.SelectedIndex == -1)
\r
1105 drop_chapterStart.SelectedIndex = 0;
\r
1107 if (chapterStart != 0)
\r
1108 if (chapterEnd < chapterStart)
\r
1109 drop_chapterFinish.Text = chapterStart.ToString();
\r
1111 // Add more rows to the Chapter menu if needed.
\r
1112 if (Check_ChapterMarkers.Checked)
\r
1114 int i = data_chpt.Rows.Count, finish = 0;
\r
1115 int.TryParse(drop_chapterFinish.Text, out finish);
\r
1117 while (i < finish)
\r
1119 int n = data_chpt.Rows.Add();
\r
1120 data_chpt.Rows[n].Cells[0].Value = (i + 1);
\r
1121 data_chpt.Rows[n].Cells[1].Value = "
\83`
\83\83\83v
\83^
\81[ " + (i + 1);
\r
1122 data_chpt.Rows[n].Cells[0].ValueType = typeof(int);
\r
1123 data_chpt.Rows[n].Cells[1].ValueType = typeof(string);
\r
1130 // Update the Duration
\r
1131 lbl_duration.Text = Main.calculateDuration(drop_chapterStart.SelectedIndex, drop_chapterFinish.SelectedIndex, selectedTitle).ToString();
\r
1133 // Run the Autonaming function
\r
1134 if (Properties.Settings.Default.autoNaming)
\r
1135 text_destination.Text = Main.autoName(this);
\r
1137 // Disable chapter markers if only 1 chapter is selected.
\r
1138 if (chapterStart == chapterEnd)
\r
1140 Check_ChapterMarkers.Enabled = false;
\r
1141 btn_importChapters.Enabled = false;
\r
1142 data_chpt.Enabled = false;
\r
1146 Check_ChapterMarkers.Enabled = true;
\r
1147 if (Check_ChapterMarkers.Checked)
\r
1149 btn_importChapters.Enabled = true;
\r
1150 data_chpt.Enabled = true;
\r
1156 private void btn_destBrowse_Click(object sender, EventArgs e)
\r
1158 // This removes the file extension from the filename box on the save file dialog.
\r
1159 // It's daft but some users don't realise that typing an extension overrides the dropdown extension selected.
\r
1160 DVD_Save.FileName = Path.GetFileNameWithoutExtension(text_destination.Text);
\r
1162 if (Path.IsPathRooted(text_destination.Text))
\r
1163 DVD_Save.InitialDirectory = Path.GetDirectoryName(text_destination.Text);
\r
1165 // Show the dialog and set the main form file path
\r
1166 if (drop_format.SelectedIndex.Equals(0))
\r
1167 DVD_Save.FilterIndex = 1;
\r
1168 else if (drop_format.SelectedIndex.Equals(1))
\r
1169 DVD_Save.FilterIndex = 2;
\r
1171 if (DVD_Save.ShowDialog() == DialogResult.OK)
\r
1173 if (DVD_Save.FileName.StartsWith("\\"))
\r
1174 MessageBox.Show("HandBrake
\82ÍUNC
\83p
\83X
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ
\81B\n
\8b¤
\97L
\83t
\83H
\83\8b\83_
\82ð
\83}
\83E
\83\93\83g
\82µ
\82Ä
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢","Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
1177 // Add a file extension manually, as FileDialog.AddExtension has issues with dots in filenames
\r
1178 switch (DVD_Save.FilterIndex)
\r
1181 if (!Path.GetExtension(DVD_Save.FileName).Equals(".mp4", StringComparison.InvariantCultureIgnoreCase))
\r
1182 if (Properties.Settings.Default.useM4v)
\r
1183 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", ".m4v").Replace(".mkv", ".m4v");
\r
1185 DVD_Save.FileName = DVD_Save.FileName.Replace(".m4v", ".mp4").Replace(".mkv", ".mp4");
\r
1188 if (!Path.GetExtension(DVD_Save.FileName).Equals(".mkv", StringComparison.InvariantCultureIgnoreCase))
\r
1189 DVD_Save.FileName = DVD_Save.FileName.Replace(".mp4", ".mkv").Replace(".m4v", ".mkv");
\r
1195 text_destination.Text = DVD_Save.FileName;
\r
1197 // Quicktime requires .m4v file for chapter markers to work. If checked, change the extension to .m4v (mp4 and m4v are the same thing)
\r
1198 if (Check_ChapterMarkers.Checked && DVD_Save.FilterIndex != 2)
\r
1199 SetExtension(".m4v");
\r
1203 private void text_destination_TextChanged(object sender, EventArgs e)
\r
1205 string path = text_destination.Text;
\r
1206 if (path.EndsWith(".mp4") || path.EndsWith(".m4v"))
\r
1207 drop_format.SelectedIndex = 0;
\r
1208 else if (path.EndsWith(".mkv"))
\r
1209 drop_format.SelectedIndex = 1;
\r
1212 // Output Settings
\r
1213 private void drop_format_SelectedIndexChanged(object sender, EventArgs e)
\r
1215 switch (drop_format.SelectedIndex)
\r
1218 if (Properties.Settings.Default.useM4v || Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V())
\r
1219 SetExtension(".m4v");
\r
1221 SetExtension(".mp4");
\r
1224 SetExtension(".mkv");
\r
1228 AudioSettings.SetContainer(drop_format.Text);
\r
1229 Subtitles.SetContainer(drop_format.SelectedIndex);
\r
1231 if (drop_format.Text.Contains("MP4"))
\r
1233 if (drp_videoEncoder.Items.Contains("VP3 (Theora)"))
\r
1235 drp_videoEncoder.Items.Remove("VP3 (Theora)");
\r
1236 drp_videoEncoder.SelectedIndex = 1;
\r
1239 else if (drop_format.Text.Contains("MKV"))
\r
1240 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
1242 public void SetExtension(string newExtension)
\r
1244 if (newExtension == ".mp4" || newExtension == ".m4v")
\r
1245 if (Properties.Settings.Default.useM4v || Check_ChapterMarkers.Checked || AudioSettings.RequiresM4V() || Subtitles.RequiresM4V())
\r
1246 newExtension = ".m4v";
\r
1248 newExtension = ".mp4";
\r
1250 if (Path.HasExtension(newExtension))
\r
1251 text_destination.Text = Path.ChangeExtension(text_destination.Text, newExtension);
\r
1255 private void drp_videoEncoder_SelectedIndexChanged(object sender, EventArgs e)
\r
1257 setContainerOpts();
\r
1259 //Turn off some options which are H.264 only when the user selects a non h.264 encoder
\r
1260 if (drp_videoEncoder.Text.Contains("H.264"))
\r
1262 if (check_2PassEncode.CheckState == CheckState.Checked)
\r
1263 check_turbo.Enabled = true;
\r
1265 tab_advanced.Enabled = true;
\r
1266 if ((drop_format.Text.Contains("MP4")) || (drop_format.Text.Contains("M4V")))
\r
1267 check_iPodAtom.Enabled = true;
\r
1269 check_iPodAtom.Enabled = false;
\r
1273 check_turbo.CheckState = CheckState.Unchecked;
\r
1274 check_turbo.Enabled = false;
\r
1275 tab_advanced.Enabled = false;
\r
1276 x264Panel.x264Query = "";
\r
1277 check_iPodAtom.Enabled = false;
\r
1278 check_iPodAtom.Checked = false;
\r
1281 // Setup the CQ Slider
\r
1282 switch (drp_videoEncoder.Text)
\r
1284 case "MPEG-4 (FFmpeg)":
\r
1285 if (slider_videoQuality.Value > 31)
\r
1286 slider_videoQuality.Value = 20; // Just reset to 70% QP 10 on encode change.
\r
1287 slider_videoQuality.Minimum = 1;
\r
1288 slider_videoQuality.Maximum = 31;
\r
1290 case "H.264 (x264)":
\r
1291 slider_videoQuality.Minimum = 0;
\r
1292 slider_videoQuality.TickFrequency = 1;
\r
1294 CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
\r
1295 double cqStep = Properties.Settings.Default.x264cqstep;
\r
1296 double multiplier = 1.0 / cqStep;
\r
1297 double value = slider_videoQuality.Value * multiplier;
\r
1299 switch (Properties.Settings.Default.x264cqstep.ToString(culture))
\r
1302 slider_videoQuality.Maximum = 255;
\r
1305 slider_videoQuality.Maximum = 204;
\r
1308 slider_videoQuality.Maximum = 102;
\r
1311 slider_videoQuality.Maximum = 51;
\r
1314 slider_videoQuality.Maximum = 51;
\r
1317 if (value < slider_videoQuality.Maximum)
\r
1318 slider_videoQuality.Value = slider_videoQuality.Maximum - (int)value;
\r
1321 case "VP3 (Theora)":
\r
1322 if (slider_videoQuality.Value > 63)
\r
1323 slider_videoQuality.Value = 45; // Just reset to 70% QP 45 on encode change.
\r
1324 slider_videoQuality.Minimum = 0;
\r
1325 slider_videoQuality.Maximum = 63;
\r
1330 /// Set the container format options
\r
1332 public void setContainerOpts()
\r
1334 if ((drop_format.Text.Contains("MP4")) || (drop_format.Text.Contains("M4V")))
\r
1336 check_largeFile.Enabled = true;
\r
1337 check_optimiseMP4.Enabled = true;
\r
1338 check_iPodAtom.Enabled = true;
\r
1342 check_largeFile.Enabled = false;
\r
1343 check_optimiseMP4.Enabled = false;
\r
1344 check_iPodAtom.Enabled = false;
\r
1345 check_largeFile.Checked = false;
\r
1346 check_optimiseMP4.Checked = false;
\r
1347 check_iPodAtom.Checked = false;
\r
1350 private double _cachedCqStep = Properties.Settings.Default.x264cqstep;
\r
1352 /// Update the CQ slider for x264 for a new CQ step. This is set from option
\r
1354 public void setQualityFromSlider()
\r
1356 // Work out the current RF value.
\r
1357 double cqStep = _cachedCqStep;
\r
1358 double rfValue = 51.0 - slider_videoQuality.Value * cqStep;
\r
1360 // Change the maximum value for the slider
\r
1361 switch (Properties.Settings.Default.x264cqstep.ToString(new CultureInfo("en-US")))
\r
1364 slider_videoQuality.Maximum = 255;
\r
1367 slider_videoQuality.Maximum = 204;
\r
1370 slider_videoQuality.Maximum = 102;
\r
1373 slider_videoQuality.Maximum = 51;
\r
1376 slider_videoQuality.Maximum = 51;
\r
1380 // Reset the CQ slider to RF0
\r
1381 slider_videoQuality.Value = slider_videoQuality.Maximum;
\r
1383 // Reset the CQ slider back to the previous value as close as possible
\r
1384 double cqStepNew = Properties.Settings.Default.x264cqstep;
\r
1385 double rfValueCurrent = 51.0 - slider_videoQuality.Value * cqStepNew;
\r
1386 while (rfValueCurrent < rfValue)
\r
1388 slider_videoQuality.Value--;
\r
1389 rfValueCurrent = 51.0 - slider_videoQuality.Value * cqStepNew;
\r
1392 // Cache the CQ step for the next calculation
\r
1393 _cachedCqStep = Properties.Settings.Default.x264cqstep;
\r
1395 private void slider_videoQuality_Scroll(object sender, EventArgs e)
\r
1397 double cqStep = Properties.Settings.Default.x264cqstep;
\r
1398 switch (drp_videoEncoder.Text)
\r
1400 case "MPEG-4 (FFmpeg)":
\r
1401 double rfValue = 31 - (slider_videoQuality.Value - 1);
\r
1402 double max = slider_videoQuality.Maximum;
\r
1403 double min = slider_videoQuality.Minimum;
\r
1404 double val = ((max - min) - (rfValue - min)) / (max - min);
\r
1405 SliderValue.Text = Math.Round((val * 100), 2).ToString(new CultureInfo("en-US")) + "% QP:" + (32 - slider_videoQuality.Value);
\r
1407 case "H.264 (x264)":
\r
1408 rfValue = 51.0 - slider_videoQuality.Value * cqStep;
\r
1409 max = slider_videoQuality.Maximum * cqStep;
\r
1410 min = slider_videoQuality.Minimum;
\r
1411 val = ((max - min) - (rfValue - min)) / (max - min);
\r
1412 rfValue = Math.Round(rfValue, 2);
\r
1413 SliderValue.Text = Math.Round((val * 100), 2).ToString(new CultureInfo("en-US")) + "% RF:" + rfValue.ToString(new CultureInfo("en-US"));
\r
1415 case "VP3 (Theora)":
\r
1416 rfValue = slider_videoQuality.Value;
\r
1417 double value = rfValue / 63;
\r
1418 SliderValue.Text = Math.Round((value * 100), 2).ToString(new CultureInfo("en-US")) + "% QP:" + slider_videoQuality.Value;
\r
1422 private void radio_targetFilesize_CheckedChanged(object sender, EventArgs e)
\r
1424 text_bitrate.Enabled = false;
\r
1425 text_filesize.Enabled = true;
\r
1426 slider_videoQuality.Enabled = false;
\r
1428 check_2PassEncode.Enabled = true;
\r
1430 private void radio_avgBitrate_CheckedChanged(object sender, EventArgs e)
\r
1432 text_bitrate.Enabled = true;
\r
1433 text_filesize.Enabled = false;
\r
1434 slider_videoQuality.Enabled = false;
\r
1436 check_2PassEncode.Enabled = true;
\r
1438 private void radio_cq_CheckedChanged(object sender, EventArgs e)
\r
1440 text_bitrate.Enabled = false;
\r
1441 text_filesize.Enabled = false;
\r
1442 slider_videoQuality.Enabled = true;
\r
1444 check_2PassEncode.Enabled = false;
\r
1445 check_2PassEncode.CheckState = CheckState.Unchecked;
\r
1447 private void check_2PassEncode_CheckedChanged(object sender, EventArgs e)
\r
1449 if (check_2PassEncode.CheckState.ToString() == "Checked")
\r
1451 if (drp_videoEncoder.Text.Contains("H.264"))
\r
1452 check_turbo.Enabled = true;
\r
1456 check_turbo.Enabled = false;
\r
1457 check_turbo.CheckState = CheckState.Unchecked;
\r
1461 // Chapter Marker Tab
\r
1462 private void Check_ChapterMarkers_CheckedChanged(object sender, EventArgs e)
\r
1464 if (Check_ChapterMarkers.Checked)
\r
1466 if (drop_format.SelectedIndex != 1)
\r
1467 SetExtension(".m4v");
\r
1468 data_chpt.Enabled = true;
\r
1469 btn_importChapters.Enabled = true;
\r
1473 if (drop_format.SelectedIndex != 1 && !Properties.Settings.Default.useM4v)
\r
1474 SetExtension(".mp4");
\r
1475 data_chpt.Enabled = false;
\r
1476 btn_importChapters.Enabled = false;
\r
1479 private void btn_importChapters_Click(object sender, EventArgs e)
\r
1481 if (File_ChapterImport.ShowDialog() == DialogResult.OK)
\r
1483 String filename = File_ChapterImport.FileName;
\r
1484 DataGridView imported = Main.importChapterNames(data_chpt, filename);
\r
1485 if (imported != null)
\r
1486 data_chpt = imported;
\r
1489 private void mnu_resetChapters_Click(object sender, EventArgs e)
\r
1491 data_chpt.Rows.Clear();
\r
1492 DataGridView chapterGridView = Main.chapterNaming(data_chpt, drop_chapterFinish.Text);
\r
1493 if (chapterGridView != null)
\r
1495 data_chpt = chapterGridView;
\r
1499 // Query Editor Tab
\r
1500 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1502 rtf_query.Text = queryGen.GenerateCLIQuery(this, 0, null);
\r
1504 private void btn_clear_Click(object sender, EventArgs e)
\r
1506 rtf_query.Clear();
\r
1510 // MainWindow Components, Actions and Functions ***********************
\r
1512 #region Source Scan
\r
1513 public Boolean isScanning { get; set; }
\r
1514 private static int scanProcessID { get; set; }
\r
1515 private void startScan(String filename)
\r
1517 // Setup the GUI components for the scan.
\r
1518 sourcePath = filename;
\r
1519 foreach (Control ctrl in Controls)
\r
1520 if (!(ctrl is StatusStrip || ctrl is MenuStrip || ctrl is ToolStrip))
\r
1521 ctrl.Enabled = false;
\r
1523 lbl_encode.Visible = true;
\r
1524 lbl_encode.Text = "Scanning ...";
\r
1525 btn_source.Enabled = false;
\r
1526 btn_start.Enabled = false;
\r
1527 btn_showQueue.Enabled = false;
\r
1528 btn_add2Queue.Enabled = false;
\r
1529 tb_preview.Enabled = false;
\r
1530 mnu_killCLI.Visible = true;
\r
1532 // Start hte Scan Thread
\r
1535 if (ActivityWindow != null)
\r
1536 ActivityWindow.SetLogView(true);
\r
1537 isScanning = true;
\r
1538 ThreadPool.QueueUserWorkItem(scanProcess);
\r
1540 catch (Exception exc)
\r
1542 MessageBox.Show("frmMain.cs - startScan " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1545 private void scanProcess(object state)
\r
1549 string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe");
\r
1550 string logDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs";
\r
1551 string dvdInfoPath = Path.Combine(logDir, "last_scan_log.txt");
\r
1553 // Make we don't pick up a stale last_encode_log.txt (and that we have rights to the file)
\r
1554 if (File.Exists(dvdInfoPath))
\r
1555 File.Delete(dvdInfoPath);
\r
1557 String dvdnav = string.Empty;
\r
1558 if (Properties.Settings.Default.noDvdNav)
\r
1559 dvdnav = " --no-dvdnav";
\r
1560 string strCmdLine = String.Format(@"cmd /c """"{0}"" -i ""{1}"" -t0 {2} -v >""{3}"" 2>&1""", handbrakeCLIPath, sourcePath, dvdnav, dvdInfoPath);
\r
1562 ProcessStartInfo hbParseDvd = new ProcessStartInfo("CMD.exe", strCmdLine) { WindowStyle = ProcessWindowStyle.Hidden };
\r
1564 Boolean cleanExit = true;
\r
1565 using (hbproc = Process.Start(hbParseDvd))
\r
1567 Process[] before = Process.GetProcesses(); // Get a list of running processes before starting.
\r
1568 scanProcessID = Main.getCliProcess(before);
\r
1569 hbproc.WaitForExit();
\r
1570 if (hbproc.ExitCode != 0)
\r
1571 cleanExit = false;
\r
1574 if (cleanExit) // If 0 exit code, CLI exited cleanly.
\r
1576 if (!File.Exists(dvdInfoPath))
\r
1577 throw new Exception("Unable to retrieve the DVD Info. last_scan_log.txt is missing. \nExpected location of last_scan_log.txt: \n"
\r
1580 using (StreamReader sr = new StreamReader(dvdInfoPath))
\r
1582 thisDVD = DVD.Parse(sr);
\r
1587 updateUIafterScan();
\r
1590 catch (Exception exc)
\r
1592 MessageBox.Show("frmMain.cs - scanProcess() " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1596 private void updateUIafterScan()
\r
1600 if (InvokeRequired)
\r
1602 BeginInvoke(new UpdateWindowHandler(updateUIafterScan));
\r
1606 // Setup some GUI components
\r
1607 drp_dvdtitle.Items.Clear();
\r
1608 if (thisDVD.Titles.Count != 0)
\r
1609 drp_dvdtitle.Items.AddRange(thisDVD.Titles.ToArray());
\r
1611 // Now select the longest title
\r
1612 if (thisDVD.Titles.Count != 0)
\r
1613 drp_dvdtitle.SelectedItem = Main.selectLongestTitle(thisDVD);
\r
1615 // Enable the creation of chapter markers if the file is an image of a dvd.
\r
1616 if (sourcePath.ToLower().Contains(".iso") || sourcePath.Contains("VIDEO_TS"))
\r
1617 Check_ChapterMarkers.Enabled = true;
\r
1618 else if (Directory.Exists(Path.Combine(sourcePath, "VIDEO_TS")))
\r
1619 Check_ChapterMarkers.Enabled = true;
\r
1622 Check_ChapterMarkers.Enabled = false;
\r
1623 Check_ChapterMarkers.Checked = false;
\r
1624 data_chpt.Rows.Clear();
\r
1627 // If no titles were found, Display an error message
\r
1628 if (drp_dvdtitle.Items.Count == 0)
\r
1631 "
\83^
\83C
\83g
\83\8b\82ª
\8c©
\82Â
\82©
\82è
\82Ü
\82¹
\82ñ
\81B\n\n
\95Ï
\8a·
\8c³
\82É
\83R
\83s
\81[
\83v
\83\8d\83e
\83N
\83g
\82ª
\82©
\82¯
\82ç
\82ê
\82Ä
\82¢
\82é
\82©
\81A
\90³
\82µ
\82¢
\83\81\83f
\83B
\83A
\82Å
\82Í
\82È
\82¢
\81A
\82à
\82µ
\82
\82ÍHandBrake
\82ª
\83T
\83|
\81[
\83g
\82µ
\82Ä
\82¢
\82È
\82¢
\8c`
\8e®
\82Ì
\89Â
\94\
\90«
\82ª
\82 \82è
\82Ü
\82·
\81B\n
\83h
\83L
\83\85\83\81\83\93\83g
\82âFAQ
\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B",
\r
1632 "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
\r
1633 sourcePath = string.Empty;
\r
1635 UpdateSourceLabel();
\r
1637 // Enable the GUI components and enable any disabled components
\r
1640 catch (Exception exc)
\r
1642 MessageBox.Show("frmMain.cs - updateUIafterScan " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1646 private void enableGUI()
\r
1650 if (InvokeRequired)
\r
1651 BeginInvoke(new UpdateWindowHandler(enableGUI));
\r
1652 lbl_encode.Text = "Scan Completed";
\r
1653 foreach (Control ctrl in Controls)
\r
1654 ctrl.Enabled = true;
\r
1655 btn_start.Enabled = true;
\r
1656 btn_showQueue.Enabled = true;
\r
1657 btn_add2Queue.Enabled = true;
\r
1658 tb_preview.Enabled = true;
\r
1659 btn_source.Enabled = true;
\r
1660 mnu_killCLI.Visible = false;
\r
1662 catch (Exception exc)
\r
1664 MessageBox.Show("frmMain.cs - enableGUI() " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1667 private void killScan()
\r
1674 Process[] prs = Process.GetProcesses();
\r
1675 foreach (Process process in prs)
\r
1677 if (process.Id == scanProcessID)
\r
1679 process.Refresh();
\r
1680 if (!process.HasExited)
\r
1687 private void btn_reset_Click(object sender, EventArgs e)
\r
1689 rtf_x264Query.Text = "";
\r
1690 x264PanelFunctions.reset2Defaults(this);
\r
1693 // Query Editor Tab
\r
1694 private void btn_generate_Query_Click(object sender, EventArgs e)
\r
1696 rtf_query.Text = queryGen.GenerateTheQuery(this);
\r
1698 private void btn_clear_Click(object sender, EventArgs e)
\r
1700 rtf_query.Clear();
\r
1704 private void btn_addPreset_Click(object sender, EventArgs e)
\r
1706 // Remember each nodes expanded status so we can reload it
\r
1707 List<Boolean> nodeStatus = saveTreeViewState();
\r
1708 nodeStatus.Add(true);
\r
1710 // Now add the new preset
\r
1711 Form preset = new frmAddPreset(this, queryGen.GenerateTheQuery(this), presetHandler);
\r
1712 preset.ShowDialog();
\r
1714 // Now reload the TreeView states
\r
1715 loadTreeViewStates(nodeStatus);
\r
1717 private void btn_removePreset_Click(object sender, EventArgs e)
\r
1719 DialogResult result = MessageBox.Show("
\91I
\91ð
\82µ
\82½
\83v
\83\8a\83Z
\83b
\83g
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1720 if (result == DialogResult.Yes)
\r
1722 catch (Exception ex)
\r
1724 MessageBox.Show("HandBrakeCLI.exe
\82ð
\8fI
\97¹
\82Å
\82«
\82Ü
\82¹
\82ñ
\81B\n
\82à
\82µ
\90\94\95ª
\91Ò
\82Á
\82Ä
\82à
\8fI
\97¹
\82µ
\82È
\82¢
\8fê
\8d\87\81AWindows
\82Ì
\83^
\83X
\83N
\83}
\83l
\81[
\83W
\83\83\82ÅHandBrakeCLI.exe
\82ð
\8eè
\93®
\82Å
\8fI
\97¹
\82³
\82¹
\82é
\95K
\97v
\82ª
\82 \82é
\82©
\82à
\82µ
\82ê
\82Ü
\82¹
\82ñ
\81B\n\nError Information: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1727 private void resetGUI()
\r
1730 String query = queryGen.GenerateTheQuery(this);
\r
1731 Properties.Settings.Default.defaultUserSettings = query;
\r
1732 // Save the new default Settings
\r
1733 Properties.Settings.Default.Save();
\r
1734 MessageBox.Show("
\83f
\83t
\83H
\83\8b\83g
\90Ý
\92è
\82ª
\95Û
\91¶
\82³
\82ê
\82Ü
\82µ
\82½", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
\r
1736 drp_dvdtitle.Items.Clear();
\r
1737 drop_chapterStart.Items.Clear();
\r
1738 drop_chapterFinish.Items.Clear();
\r
1739 lbl_duration.Text = "
\83^
\83C
\83g
\83\8b\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢";
\r
1740 PictureSettings.lbl_src_res.Text = "
\83^
\83C
\83g
\83\8b\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢";
\r
1741 PictureSettings.lbl_Aspect.Text = "
\83^
\83C
\83g
\83\8b\82ð
\91I
\91ð
\82µ
\82Ä
\82
\82¾
\82³
\82¢";
\r
1742 sourcePath = String.Empty;
\r
1743 text_destination.Text = String.Empty;
\r
1745 selectedTitle = null;
\r
1746 isScanning = false;
\r
1748 private void UpdateSourceLabel()
\r
1750 labelSource.Text = string.IsNullOrEmpty(sourcePath) ? "
\81u
\95Ï
\8a·
\8c³
\81v
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82Ä
\82
\82¾
\82³
\82¢" : this.SourceName;
\r
1756 /// Set the GUI to it's finished encoding state.
\r
1758 private void setEncodeFinished()
\r
1763 DialogResult result = MessageBox.Show("
\91I
\91ð
\82µ
\82½
\83v
\83\8a\83Z
\83b
\83g
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©
\81H", "Preset", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
1764 if (result == DialogResult.Yes)
\r
1766 if (InvokeRequired)
\r
1768 BeginInvoke(new UpdateWindowHandler(setEncodeFinished));
\r
1772 lbl_encode.Text = "
\95Ï
\8a·
\8a®
\97¹";
\r
1773 btn_start.Text = "
\95Ï
\8a·
\8aJ
\8en";
\r
1774 btn_start.ToolTipText = "
\95Ï
\8a·
\8dì
\8bÆ
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·";
\r
1775 btn_start.Image = Properties.Resources.Play;
\r
1777 // If the window is minimized, display the notification in a popup.
\r
1778 if (Properties.Settings.Default.trayIconAlerts)
\r
1779 if (FormWindowState.Minimized == this.WindowState)
\r
1781 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
1782 notifyIcon.ShowBalloonTip(500);
\r
1785 catch (Exception exc)
\r
1787 MessageBox.Show(exc.ToString());
\r
1792 /// Set the GUI to it's started encoding state.
\r
1794 private void setEncodeStarted()
\r
1798 if (InvokeRequired)
\r
1800 BeginInvoke(new UpdateWindowHandler(setEncodeStarted));
\r
1804 lbl_encode.Visible = true;
\r
1805 lbl_encode.Text = "
\95Ï
\8a·
\92\86\81i" + encodeQueue.Count + "
\8cÂ
\82Ì
\83A
\83C
\83e
\83\80\82ª
\91Ò
\8b@
\92\86\81j";
\r
1806 btn_start.Text = "
\92\86\8e~";
\r
1807 btn_start.ToolTipText = "
\95Ï
\8a·
\8dì
\8bÆ
\82ð
\92\86\8e~
\82µ
\82Ü
\82·";
\r
1808 btn_start.Image = Properties.Resources.stop;
\r
1810 catch (Exception exc)
\r
1812 MessageBox.Show(exc.ToString());
\r
1817 #region DVD Drive Detection
\r
1818 private void getDriveInfoThread()
\r
1822 if (InvokeRequired)
\r
1824 BeginInvoke(new UpdateWindowHandler(getDriveInfoThread));
\r
1828 Boolean foundDrive = false;
\r
1829 DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives();
\r
1830 foreach (DriveInfo curDrive in theCollectionOfDrives)
\r
1832 if (curDrive.DriveType == DriveType.CDRom && curDrive.IsReady)
\r
1834 if (File.Exists(curDrive.RootDirectory + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1837 if (File.Exists(curDrive.RootDirectory.ToString() + "VIDEO_TS\\VIDEO_TS.IFO"))
\r
1838 mnu_dvd_drive.Text = curDrive.RootDirectory.ToString() + "VIDEO_TS (" + curDrive.VolumeLabel + ")";
\r
1840 mnu_dvd_drive.Text = "[DVD
\83h
\83\89\83C
\83u
\82É
\83f
\83B
\83X
\83N
\82ª
\82 \82è
\82Ü
\82¹
\82ñ]";
\r
1843 this.dvdDrivePath = curDrive.RootDirectory + "VIDEO_TS";
\r
1844 this.dvdDriveLabel = curDrive.VolumeLabel;
\r
1845 mnu_dvd_drive.Text = this.dvdDrivePath + " (" + this.dvdDriveLabel + ")";
\r
1846 foundDrive = true;
\r
1852 if (foundDrive == false)
\r
1853 mnu_dvd_drive.Text = "[DVD
\83h
\83\89\83C
\83u
\82É
\83f
\83B
\83X
\83N
\82ª
\82 \82è
\82Ü
\82¹
\82ñ]";
\r
1857 mnu_dvd_drive.Text = "[DVD
\83h
\83\89\83C
\83u
\82É
\83f
\83B
\83X
\83N
\82ª
\82 \82è
\82Ü
\82¹
\82ñ]";
\r
1863 #region Audio Panel Stuff
\r
1864 public void setAudioByContainer(String path)
\r
1866 string oldval = "";
\r
1868 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
1870 oldval = drp_audenc_1.Text;
\r
1871 drp_audenc_1.Items.Clear();
\r
1872 drp_audenc_1.Items.Add("AAC");
\r
1873 drp_audenc_1.Items.Add("AC3");
\r
1874 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1875 drp_audenc_1.SelectedIndex = 0;
\r
1877 oldval = drp_audenc_2.Text;
\r
1878 drp_audenc_2.Items.Clear();
\r
1879 drp_audenc_2.Items.Add("AAC");
\r
1880 drp_audenc_2.Items.Add("AC3");
\r
1881 if (drp_audenc_2.Enabled)
\r
1883 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1884 drp_audenc_2.SelectedIndex = 0;
\r
1887 oldval = drp_audenc_3.Text;
\r
1888 drp_audenc_3.Items.Clear();
\r
1889 drp_audenc_3.Items.Add("AAC");
\r
1890 drp_audenc_3.Items.Add("AC3");
\r
1891 if (drp_audenc_3.Enabled)
\r
1893 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1894 drp_audenc_3.SelectedIndex = 0;
\r
1897 oldval = drp_audenc_4.Text;
\r
1898 drp_audenc_4.Items.Clear();
\r
1899 drp_audenc_4.Items.Add("AAC");
\r
1900 drp_audenc_4.Items.Add("AC3");
\r
1901 if (drp_audenc_4.Enabled)
\r
1903 if ((oldval != "AAC") && (oldval != "AC3"))
\r
1904 drp_audenc_4.SelectedIndex = 0;
\r
1907 else if (path.EndsWith(".avi"))
\r
1909 oldval = drp_audenc_1.Text;
\r
1910 drp_audenc_1.Items.Clear();
\r
1911 drp_audenc_1.Items.Add("MP3");
\r
1912 drp_audenc_1.Items.Add("AC3");
\r
1913 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1914 drp_audenc_1.SelectedIndex = 0;
\r
1916 oldval = drp_audenc_2.Text;
\r
1917 drp_audenc_2.Items.Clear();
\r
1918 drp_audenc_2.Items.Add("MP3");
\r
1919 drp_audenc_2.Items.Add("AC3");
\r
1920 if (drp_audenc_2.Enabled)
\r
1922 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1923 drp_audenc_2.SelectedIndex = 0;
\r
1927 oldval = drp_audenc_3.Text;
\r
1928 drp_audenc_3.Items.Clear();
\r
1929 drp_audenc_3.Items.Add("MP3");
\r
1930 drp_audenc_3.Items.Add("AC3");
\r
1931 if (drp_audenc_3.Enabled)
\r
1933 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1934 drp_audenc_3.SelectedIndex = 0;
\r
1937 oldval = drp_audenc_4.Text;
\r
1938 drp_audenc_4.Items.Clear();
\r
1939 drp_audenc_4.Items.Add("MP3");
\r
1940 drp_audenc_4.Items.Add("AC3");
\r
1941 if (drp_audenc_4.Enabled)
\r
1943 if ((oldval != "MP3") && (oldval != "AC3"))
\r
1944 drp_audenc_4.SelectedIndex = 0;
\r
1947 else if (path.EndsWith(".ogm"))
\r
1949 drp_audenc_1.Items.Clear();
\r
1950 drp_audenc_1.Items.Add("Vorbis");
\r
1951 drp_audenc_1.SelectedIndex = 0;
\r
1953 drp_audenc_2.Items.Clear();
\r
1954 drp_audenc_2.Items.Add("Vorbis");
\r
1955 if (drp_audenc_2.Enabled)
\r
1956 drp_audenc_2.SelectedIndex = 0;
\r
1958 drp_audenc_3.Items.Clear();
\r
1959 drp_audenc_3.Items.Add("Vorbis");
\r
1960 if (drp_audenc_3.Enabled)
\r
1961 drp_audenc_3.SelectedIndex = 0;
\r
1963 drp_audenc_4.Items.Clear();
\r
1964 drp_audenc_4.Items.Add("Vorbis");
\r
1965 if (drp_audenc_4.Enabled)
\r
1966 drp_audenc_4.SelectedIndex = 0;
\r
1968 else if (path.EndsWith(".mkv"))
\r
1970 drp_audenc_1.Items.Clear();
\r
1971 drp_audenc_1.Items.Add("AAC");
\r
1972 drp_audenc_1.Items.Add("MP3");
\r
1973 drp_audenc_1.Items.Add("AC3");
\r
1974 drp_audenc_1.Items.Add("Vorbis");
\r
1975 if (drp_audenc_1.Text == string.Empty)
\r
1976 drp_audenc_1.SelectedIndex = 0;
\r
1979 drp_audenc_2.Items.Clear();
\r
1980 drp_audenc_2.Items.Add("AAC");
\r
1981 drp_audenc_2.Items.Add("MP3");
\r
1982 drp_audenc_2.Items.Add("AC3");
\r
1983 drp_audenc_2.Items.Add("Vorbis");
\r
1984 if (drp_audenc_2.Enabled)
\r
1986 if (drp_audenc_2.Text == string.Empty)
\r
1987 drp_audenc_2.SelectedIndex = 0;
\r
1990 drp_audenc_3.Items.Clear();
\r
1991 drp_audenc_3.Items.Add("AAC");
\r
1992 drp_audenc_3.Items.Add("MP3");
\r
1993 drp_audenc_3.Items.Add("AC3");
\r
1994 drp_audenc_3.Items.Add("Vorbis");
\r
1995 if (drp_audenc_3.Enabled)
\r
1997 if (drp_audenc_3.Text == string.Empty)
\r
1998 drp_audenc_3.SelectedIndex = 0;
\r
2001 drp_audenc_4.Items.Clear();
\r
2002 drp_audenc_4.Items.Add("AAC");
\r
2003 drp_audenc_4.Items.Add("MP3");
\r
2004 drp_audenc_4.Items.Add("AC3");
\r
2005 drp_audenc_4.Items.Add("Vorbis");
\r
2006 if (drp_audenc_4.Enabled)
\r
2008 if (drp_audenc_4.Text == string.Empty)
\r
2009 drp_audenc_4.SelectedIndex = 0;
\r
2013 public void setVideoByContainer(String path)
\r
2015 string oldval = "";
\r
2017 if ((path.EndsWith(".mp4")) || (path.EndsWith(".m4v")))
\r
2019 oldval = drp_videoEncoder.Text;
\r
2020 drp_videoEncoder.Items.Clear();
\r
2021 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
2022 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
2023 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
2024 if (oldval == "VP3 (Theora)")
\r
2025 drp_videoEncoder.SelectedIndex = 2;
\r
2027 drp_videoEncoder.Text = oldval;
\r
2030 else if (path.EndsWith(".avi"))
\r
2032 oldval = drp_videoEncoder.Text;
\r
2033 drp_videoEncoder.Items.Clear();
\r
2034 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
2035 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
2036 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
2037 if (oldval == "VP3 (Theora)")
\r
2038 drp_videoEncoder.SelectedIndex = 2;
\r
2040 drp_videoEncoder.Text = oldval;
\r
2042 else if (path.EndsWith(".ogm"))
\r
2044 oldval = drp_videoEncoder.Text;
\r
2045 drp_videoEncoder.Items.Clear();
\r
2046 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
2047 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
2048 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
2049 if (oldval == "H.264 (x264)")
\r
2050 drp_videoEncoder.SelectedIndex = 2;
\r
2052 drp_videoEncoder.Text = oldval;
\r
2054 else if (path.EndsWith(".mkv"))
\r
2056 oldval = drp_videoEncoder.Text;
\r
2057 drp_videoEncoder.Items.Clear();
\r
2058 drp_videoEncoder.Items.Add("MPEG-4 (FFmpeg)");
\r
2059 drp_videoEncoder.Items.Add("MPEG-4 (XviD)");
\r
2060 drp_videoEncoder.Items.Add("H.264 (x264)");
\r
2061 drp_videoEncoder.Items.Add("VP3 (Theora)");
\r
2062 drp_videoEncoder.Text = oldval;
\r
2065 public void setBitrateSelections384(ComboBox dropDown)
\r
2067 dropDown.Items.Clear();
\r
2068 dropDown.Items.Add("32");
\r
2069 dropDown.Items.Add("40");
\r
2070 dropDown.Items.Add("48");
\r
2071 dropDown.Items.Add("56");
\r
2072 dropDown.Items.Add("64");
\r
2073 dropDown.Items.Add("80");
\r
2074 dropDown.Items.Add("86");
\r
2075 dropDown.Items.Add("112");
\r
2076 dropDown.Items.Add("128");
\r
2077 dropDown.Items.Add("160");
\r
2078 dropDown.Items.Add("192");
\r
2079 dropDown.Items.Add("224");
\r
2080 dropDown.Items.Add("256");
\r
2081 dropDown.Items.Add("320");
\r
2082 dropDown.Items.Add("384");
\r
2084 public void setBitrateSelections320(ComboBox dropDown)
\r
2086 dropDown.Items.Clear();
\r
2087 dropDown.Items.Add("32");
\r
2088 dropDown.Items.Add("40");
\r
2089 dropDown.Items.Add("48");
\r
2090 dropDown.Items.Add("56");
\r
2091 dropDown.Items.Add("64");
\r
2092 dropDown.Items.Add("80");
\r
2093 dropDown.Items.Add("86");
\r
2094 dropDown.Items.Add("112");
\r
2095 dropDown.Items.Add("128");
\r
2096 dropDown.Items.Add("160");
\r
2097 dropDown.Items.Add("192");
\r
2098 dropDown.Items.Add("224");
\r
2099 dropDown.Items.Add("256");
\r
2100 dropDown.Items.Add("320");
\r
2102 public void setBitrateSelections160(ComboBox dropDown)
\r
2104 dropDown.Items.Clear();
\r
2105 dropDown.Items.Add("32");
\r
2106 dropDown.Items.Add("40");
\r
2107 dropDown.Items.Add("48");
\r
2108 dropDown.Items.Add("56");
\r
2109 dropDown.Items.Add("64");
\r
2110 dropDown.Items.Add("80");
\r
2111 dropDown.Items.Add("86");
\r
2112 dropDown.Items.Add("112");
\r
2113 dropDown.Items.Add("128");
\r
2114 dropDown.Items.Add("160");
\r
2121 private delegate void UpdateUIHandler();
\r
2123 // Encoding Functions
\r
2124 private void procMonitor(object state)
\r
2126 // Make sure we are not already encoding and if we are then display an error.
\r
2127 if (hbProc != null)
\r
2128 hbProc.CloseMainWindow();
\r
2131 hbProc = cliObj.runCli(this, (string)state);
\r
2132 hbProc.WaitForExit();
\r
2133 setEncodeLabelFinished();
\r
2136 // If the window is minimized, display the notification in a popup.
\r
2137 if (FormWindowState.Minimized == this.WindowState)
\r
2139 notifyIcon.BalloonTipText = lbl_encode.Text;
\r
2140 notifyIcon.ShowBalloonTip(500);
\r
2143 // After the encode is done, we may want to shutdown, suspend etc.
\r
2144 cliObj.addCLIQueryToLog((string)state);
\r
2145 cliObj.copyLog((string)state); // Make a copy of the log in the users desired location if necessary
\r
2146 cliObj.afterEncodeAction();
\r
2149 private void setEncodeLabelFinished()
\r
2151 if (this.InvokeRequired)
\r
2153 this.BeginInvoke(new UpdateUIHandler(setEncodeLabelFinished));
\r
2156 lbl_encode.Text = "
\83G
\83\93\83R
\81[
\83h
\8a®
\97¹";
\r
2157 btn_start.Text = "
\95Ï
\8a·
\8aJ
\8en";
\r
2158 btn_start.ToolTipText = "
\83G
\83\93\83R
\81[
\83h
\8f\88\97\9d\82ð
\8aJ
\8en
\82µ
\82Ü
\82·";
\r
2159 btn_start.Image = Properties.Resources.Play;
\r
2165 #region Public Methods
\r
2167 /// Access the preset Handler and setup the preset panel.
\r
2169 public void loadPresetPanel()
\r
2171 if (presetHandler.CheckIfPresetsAreOutOfDate())
\r
2172 if (!Properties.Settings.Default.presetNotification)
\r
2173 MessageBox.Show(splash,
\r
2174 "
\90V
\82µ
\82¢
\95W
\8f\80\83v
\83\8a\83Z
\83b
\83g
\82ª
\97\98\97p
\82Å
\82«
\82Ü
\82·",
\r
2175 "Preset Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
2177 presetHandler.GetPresetPanel(ref treeView_presets);
\r
2178 treeView_presets.Update();
\r
2184 /// If the queue is being processed, prompt the user to confirm application close.
\r
2186 /// <param name="e"></param>
\r
2187 protected override void OnFormClosing(FormClosingEventArgs e)
\r
2189 // If currently encoding, the queue isn't paused, and there are queue items to process, prompt to confirm close.
\r
2190 if ((encodeQueue.isEncoding) && (!encodeQueue.PauseRequested) && (encodeQueue.Count > 0))
\r
2192 DialogResult result = MessageBox.Show("
\8c»
\8dÝ
\95Ï
\8a·
\8dì
\8bÆ
\82ð
\8eÀ
\8ds
\92\86\82Å
\82·
\81BHandBrake
\82ð
\8fI
\97¹
\82µ
\82Ä
\82à
\81A
\8eÀ
\8ds
\92\86\82Ì
\8dì
\8bÆ
\82Í
\92\86\8e~
\82³
\82ê
\82Ü
\82¹
\82ñ
\81B
\82½
\82¾
\82µ
\81A
\83L
\83\85\81[
\82É
\82 \82é
\83A
\83C
\83e
\83\80\82É
\82Â
\82¢
\82Ä
\82Í
\95Ï
\8a·
\8dì
\8bÆ
\82ª
\92\86\8e~
\82³
\82ê
\82Ü
\82·
\81B\n\nHandBrake
\82ð
\8fI
\97¹
\82µ
\82Ü
\82·
\82©
\81H",
\r
2193 "Close HandBrake?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
\r
2194 if (result == DialogResult.No)
\r
2197 base.OnFormClosing(e);
\r
2201 #region In-GUI Encode Status (Experimental)
\r
2202 private void encodeMonitorThread()
\r
2206 Parser encode = new Parser(encodeQueue.hbProcess.StandardOutput.BaseStream);
\r
2207 encode.OnEncodeProgress += encodeOnEncodeProgress;
\r
2208 while (!encode.EndOfStream)
\r
2209 encode.readEncodeStatus();
\r
2211 catch (Exception exc)
\r
2213 MessageBox.Show(exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
2216 private void encodeOnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)
\r
2218 if (this.InvokeRequired)
\r
2220 this.BeginInvoke(new EncodeProgressEventHandler(encodeOnEncodeProgress),
\r
2221 new object[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });
\r
2224 lbl_encode.Text = string.Format("
\90i
\92»
\8fó
\8bµ: {0}%, FPS: {1},
\95½
\8bÏFPS: {2},
\8ec
\82è
\8e\9e\8aÔ: {3} ", PercentComplete, CurrentFps, AverageFps, TimeRemaining);
\r
2229 private enum SourceType
\r
2242 // This is the END of the road ****************************************
\r