using System.Collections.Generic;\r
using System.Collections.ObjectModel;\r
using System.IO;\r
+ using System.Linq;\r
using System.Threading;\r
using System.Windows.Forms;\r
using System.Xml.Serialization;\r
private int nextJobId;\r
\r
/// <summary>\r
+ /// Fires when the Queue has started\r
+ /// </summary>\r
+ public event EventHandler QueueStarted;\r
+\r
+ /// <summary>\r
+ /// Fires when a job is Added, Removed or Re-Ordered.\r
+ /// Should be used for triggering an update of the Queue Window.\r
+ /// </summary>\r
+ public event EventHandler QueueListChanged;\r
+\r
+ /// <summary>\r
/// Fires when a pause to the encode queue has been requested.\r
/// </summary>\r
public event EventHandler QueuePauseRequested;\r
/// </summary>\r
public event EventHandler QueueCompleted;\r
\r
- #region Queue\r
-\r
+ #region Properties\r
/// <summary>\r
- /// Gets and removes the next job in the queue.\r
+ /// Gets or sets the last encode that was processed.\r
/// </summary>\r
- /// <returns>The job that was removed from the queue.</returns>\r
- private Job GetNextJob()\r
- {\r
- Job job = this.queue[0];\r
- this.LastEncode = job;\r
- this.Remove(0); // Remove the item which we are about to pass out.\r
-\r
- this.WriteQueueStateToFile("hb_queue_recovery.xml");\r
+ /// <returns></returns> \r
+ public Job LastEncode { get; set; }\r
\r
- return job;\r
- }\r
+ /// <summary>\r
+ /// Gets a value indicating whether Request Pause\r
+ /// </summary>\r
+ public bool Paused { get; private set; }\r
\r
/// <summary>\r
/// Gets the current state of the encode queue.\r
{\r
get { return this.queue.Count; }\r
}\r
+ #endregion\r
+\r
+ #region Queue\r
+\r
+ /// <summary>\r
+ /// Gets and removes the next job in the queue.\r
+ /// </summary>\r
+ /// <returns>The job that was removed from the queue.</returns>\r
+ private Job GetNextJob()\r
+ {\r
+ Job job = this.queue[0];\r
+ this.LastEncode = job;\r
+ this.Remove(0); // Remove the item which we are about to pass out.\r
+\r
+ this.WriteQueueStateToFile("hb_queue_recovery.xml");\r
+\r
+ return job;\r
+ }\r
\r
/// <summary>\r
/// Adds an item to the queue.\r
{\r
Id = this.nextJobId++,\r
Title = title,\r
- Query = query, \r
- Source = source, \r
- Destination = destination, \r
+ Query = query,\r
+ Source = source,\r
+ Destination = destination,\r
CustomQuery = customJob\r
};\r
\r
this.queue.Add(newJob);\r
this.WriteQueueStateToFile("hb_queue_recovery.xml");\r
+\r
+ if (this.QueueListChanged != null)\r
+ this.QueueListChanged(this, new EventArgs());\r
}\r
\r
/// <summary>\r
{\r
this.queue.RemoveAt(index);\r
this.WriteQueueStateToFile("hb_queue_recovery.xml");\r
+\r
+ if (this.QueueListChanged != null)\r
+ this.QueueListChanged(this, new EventArgs());\r
}\r
\r
/// <summary>\r
}\r
\r
WriteQueueStateToFile("hb_queue_recovery.xml"); // Update the queue recovery file\r
+\r
+ if (this.QueueListChanged != null)\r
+ this.QueueListChanged(this, new EventArgs());\r
}\r
\r
/// <summary>\r
}\r
\r
this.WriteQueueStateToFile("hb_queue_recovery.xml"); // Update the queue recovery file\r
+\r
+ if (this.QueueListChanged != null)\r
+ this.QueueListChanged(this, new EventArgs());\r
}\r
\r
/// <summary>\r
/// <param name="file">The location of the file to write the queue to.</param>\r
public void WriteQueueStateToFile(string file)\r
{\r
- string appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \r
+ string appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),\r
@"HandBrake\hb_queue_recovery.xml");\r
string tempPath = file == "hb_queue_recovery.xml" ? appDataPath : file;\r
\r
using (FileStream strm = new FileStream(tempPath, FileMode.Create, FileAccess.Write))\r
{\r
if (serializer == null)\r
- serializer = new XmlSerializer(typeof (List<Job>));\r
+ serializer = new XmlSerializer(typeof(List<Job>));\r
serializer.Serialize(strm, queue);\r
strm.Close();\r
strm.Dispose();\r
line.WriteLine(strCmdLine);\r
}\r
\r
- MessageBox.Show("Your batch script has been sucessfully saved.", "Status", MessageBoxButtons.OK, \r
+ MessageBox.Show("Your batch script has been sucessfully saved.", "Status", MessageBoxButtons.OK,\r
MessageBoxIcon.Asterisk);\r
}\r
- catch (Exception)\r
+ catch (Exception exc)\r
{\r
- MessageBox.Show(\r
- "Unable to write to the file. Please make sure that the location has the correct permissions for file writing.", \r
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);\r
+ Main.ShowExceptiowWindow("Unable to write to the file. Please make sure that the location has the correct permissions for file writing.", exc.ToString());\r
}\r
}\r
}\r
/// <param name="file">The location of the file to read the queue from.</param>\r
public void LoadQueueFromFile(string file)\r
{\r
- string appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \r
+ string appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),\r
@"HandBrake\hb_queue_recovery.xml");\r
string tempPath = file == "hb_queue_recovery.xml" ? appDataPath : file;\r
\r
if (strm.Length != 0)\r
{\r
if (serializer == null)\r
- serializer = new XmlSerializer(typeof (List<Job>));\r
+ serializer = new XmlSerializer(typeof(List<Job>));\r
\r
List<Job> list = serializer.Deserialize(strm) as List<Job>;\r
\r
/// <returns>Whether or not the supplied destination is already in the queue.</returns>\r
public bool CheckForDestinationDuplicate(string destination)\r
{\r
- foreach (Job checkItem in this.queue)\r
- {\r
- if (checkItem.Destination.Contains(destination.Replace("\\\\", "\\")))\r
- return true;\r
- }\r
-\r
- return false;\r
+ return this.queue.Any(checkItem => checkItem.Destination.Contains(destination.Replace("\\\\", "\\")));\r
}\r
\r
#endregion\r
#region Encoding\r
\r
/// <summary>\r
- /// Gets or sets the last encode that was processed.\r
- /// </summary>\r
- /// <returns></returns> \r
- public Job LastEncode { get; set; }\r
-\r
- /// <summary>\r
- /// Gets a value indicating whether Request Pause\r
- /// </summary>\r
- public bool PauseRequested { get; private set; }\r
-\r
- /// <summary>\r
/// Starts encoding the first job in the queue and continues encoding until all jobs\r
/// have been encoded.\r
/// </summary>\r
{\r
if (this.Count != 0)\r
{\r
- if (this.PauseRequested)\r
- this.PauseRequested = false;\r
+ if (this.Paused)\r
+ this.Paused = false;\r
else\r
{\r
- this.PauseRequested = false;\r
+ this.Paused = false;\r
try\r
{\r
- Thread theQueue = new Thread(this.StartQueue) {IsBackground = true};\r
+ Thread theQueue = new Thread(this.StartQueue) { IsBackground = true };\r
theQueue.Start();\r
+\r
+ if (this.QueueStarted != null)\r
+ this.QueueStarted(this, new EventArgs());\r
}\r
catch (Exception exc)\r
{\r
- MessageBox.Show(exc.ToString());\r
+ Main.ShowExceptiowWindow("Unable to Start Queue", exc.ToString());\r
}\r
}\r
}\r
/// </summary>\r
public void Pause()\r
{\r
- this.PauseRequested = true;\r
+ this.Paused = true;\r
\r
if (this.QueuePauseRequested != null)\r
this.QueuePauseRequested(this, new EventArgs());\r
\r
// Growl\r
if (Properties.Settings.Default.growlEncode)\r
- GrowlCommunicator.Notify("Encode Completed", \r
+ GrowlCommunicator.Notify("Encode Completed",\r
"Put down that cocktail...\nyour Handbrake encode is done.");\r
\r
- while (this.PauseRequested) // Need to find a better way of doing this.\r
+ while (this.Paused) // Need to find a better way of doing this.\r
{\r
Thread.Sleep(2000);\r
}\r
private Queue encodeQueue = new Queue();\r
private PresetsHandler presetHandler = new PresetsHandler();\r
\r
- // Globals: Mainly used for tracking. *********************************\r
- public Title selectedTitle;\r
+ // Windows ************************************************************\r
private frmQueue queueWindow;\r
private frmPreview qtpreview;\r
private frmActivityWindow ActivityWindow;\r
- private Form splash;\r
+ private frmSplashScreen splash = new frmSplashScreen();\r
+\r
+ // Globals: Mainly used for tracking. *********************************\r
+ public Title selectedTitle;\r
public string sourcePath;\r
private SourceType selectedSourceType;\r
private string dvdDrivePath;\r
\r
// Applicaiton Startup ************************************************\r
\r
+ #region Properties\r
+\r
+ /// <summary>\r
+ /// Gets SourceName.\r
+ /// </summary>\r
+ public string SourceName\r
+ {\r
+ get\r
+ {\r
+ if (this.selectedSourceType == SourceType.DvdDrive)\r
+ {\r
+ return this.dvdDriveLabel;\r
+ }\r
+\r
+ if (Path.GetFileNameWithoutExtension(this.sourcePath) != "VIDEO_TS")\r
+ return Path.GetFileNameWithoutExtension(this.sourcePath);\r
+\r
+ return Path.GetFileNameWithoutExtension(Path.GetDirectoryName(this.sourcePath));\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
#region Application Startup\r
\r
public frmMain()\r
{\r
// Load and setup the splash screen in this thread\r
- splash = new frmSplashScreen();\r
splash.Show(this);\r
Label lblStatus = new Label { Size = new Size(150, 20), Location = new Point(182, 102) };\r
splash.Controls.Add(lblStatus);\r
InitializeComponent();\r
\r
// Update the users config file with the CLI version data.\r
- lblStatus.Text = "Checking CLI Version Data ...";\r
- Application.DoEvents();\r
+ UpdateSplashStatus(lblStatus, "Checking CLI Version Data ...");\r
Main.SetCliVersionData();\r
Main.CheckForValidCliVersion();\r
\r
TimeSpan elapsed = now.Subtract(lastCheck);\r
if (elapsed.TotalDays > Properties.Settings.Default.daysBetweenUpdateCheck)\r
{\r
- lblStatus.Text = "Checking for updates ...";\r
- Application.DoEvents();\r
-\r
+ UpdateSplashStatus(lblStatus, "Checking for updates ...");\r
Main.BeginCheckForUpdates(new AsyncCallback(UpdateCheckDone), false);\r
}\r
}\r
// Clear the log files in the background\r
if (Properties.Settings.Default.clearOldLogs)\r
{\r
- lblStatus.Text = "Clearing Old Log Files ...";\r
- Application.DoEvents();\r
+ UpdateSplashStatus(lblStatus, "Clearing Old Log Files ..");\r
Thread clearLog = new Thread(Main.ClearOldLogs);\r
clearLog.Start();\r
}\r
\r
// Setup the GUI components\r
- lblStatus.Text = "Setting up the GUI ...";\r
- Application.DoEvents();\r
+ UpdateSplashStatus(lblStatus, "Setting up the GUI ...");\r
LoadPresetPanel(); // Load the Preset Panel\r
treeView_presets.ExpandAll();\r
lbl_encode.Text = string.Empty;\r
queueWindow = new frmQueue(encodeQueue, this); // Prepare the Queue\r
if (!Properties.Settings.Default.QueryEditorTab)\r
tabs_panel.TabPages.RemoveAt(7); // Remove the query editor tab if the user does not want it enabled.\r
+ if (Properties.Settings.Default.tooltipEnable)\r
+ ToolTip.Active = true;\r
\r
// Load the user's default settings or Normal Preset\r
- if (Properties.Settings.Default.defaultPreset != string.Empty)\r
+ if (Properties.Settings.Default.defaultPreset != string.Empty && presetHandler.GetPreset(Properties.Settings.Default.defaultPreset) != null)\r
{\r
- if (presetHandler.GetPreset(Properties.Settings.Default.defaultPreset) != null)\r
+ string query = presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).Query;\r
+ if (query != null)\r
{\r
- string query = presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).Query;\r
- bool loadPictureSettings =\r
- presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).PictureSettings;\r
-\r
- if (query != null)\r
- {\r
- x264Panel.Reset2Defaults();\r
+ x264Panel.Reset2Defaults();\r
\r
- QueryParser presetQuery = QueryParser.Parse(query);\r
- PresetLoader.LoadPreset(this, presetQuery, Properties.Settings.Default.defaultPreset,\r
- loadPictureSettings);\r
+ QueryParser presetQuery = QueryParser.Parse(query);\r
+ PresetLoader.LoadPreset(this, presetQuery, Properties.Settings.Default.defaultPreset,\r
+ presetHandler.GetPreset(Properties.Settings.Default.defaultPreset).PictureSettings);\r
\r
- x264Panel.X264_StandardizeOptString();\r
- x264Panel.X264_SetCurrentSettingsInPanel();\r
- }\r
+ x264Panel.X264_StandardizeOptString();\r
+ x264Panel.X264_SetCurrentSettingsInPanel();\r
}\r
- else\r
- loadNormalPreset();\r
}\r
else\r
loadNormalPreset();\r
\r
- // Enabled GUI tooltip's if Required\r
- if (Properties.Settings.Default.tooltipEnable)\r
- ToolTip.Active = true;\r
-\r
// Register with Growl (if not using Growl for the encoding completion action, this wont hurt anything)\r
GrowlCommunicator.Register();\r
\r
// Finished Loading\r
- lblStatus.Text = "Loading Complete!";\r
- Application.DoEvents();\r
+ UpdateSplashStatus(lblStatus, "Loading Complete.");\r
splash.Close();\r
splash.Dispose();\r
this.Enabled = true;\r
catch (Exception ex)\r
{\r
if ((bool)result.AsyncState)\r
- MessageBox.Show(\r
- "Unable to check for updates, Please try again later.\n\nDetailed Error Information:\n" + ex,\r
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ Main.ShowExceptiowWindow("Unable to check for updates, Please try again later.", ex.ToString());\r
}\r
}\r
\r
}\r
}\r
\r
- #endregion\r
-\r
- #region Properties\r
-\r
- public string SourceName\r
+ private void UpdateSplashStatus(Label status, string text)\r
{\r
- get\r
- {\r
- if (this.selectedSourceType == SourceType.DvdDrive)\r
- {\r
- return this.dvdDriveLabel;\r
- }\r
-\r
- if (Path.GetFileNameWithoutExtension(this.sourcePath) != "VIDEO_TS")\r
- return Path.GetFileNameWithoutExtension(this.sourcePath);\r
-\r
- return Path.GetFileNameWithoutExtension(Path.GetDirectoryName(this.sourcePath));\r
- }\r
+ status.Text = text;\r
+ Application.DoEvents();\r
}\r
\r
#endregion\r
this.Resize += new EventHandler(frmMain_Resize);\r
\r
// Handle Encode Start / Finish / Pause\r
-\r
encodeQueue.QueuePauseRequested += new EventHandler(encodePaused);\r
encodeQueue.EncodeStarted += new EventHandler(encodeStarted);\r
encodeQueue.EncodeEnded += new EventHandler(encodeEnded);\r
check_optimiseMP4.CheckedChanged += new EventHandler(changePresetLabel);\r
\r
// Picture Settings\r
- // PictureSettings.PictureSettingsChanged += new EventHandler(changePresetLabel);\r
+ PictureSettings.PictureSettingsChanged += new EventHandler(changePresetLabel);\r
\r
// Filter Settings\r
Filters.FilterSettingsChanged += new EventHandler(changePresetLabel);\r
check_optimiseMP4.CheckedChanged -= new EventHandler(changePresetLabel);\r
\r
// Picture Settings\r
- // PictureSettings.PictureSettingsChanged -= new EventHandler(changePresetLabel);\r
+ PictureSettings.PictureSettingsChanged -= new EventHandler(changePresetLabel);\r
\r
// Filter Settings\r
Filters.FilterSettingsChanged -= new EventHandler(changePresetLabel);\r
\r
if (fileList != null)\r
{\r
- if (fileList[0] != string.Empty)\r
+ if (!string.IsNullOrEmpty(fileList[0]))\r
{\r
this.selectedSourceType = SourceType.VideoFile;\r
StartScan(fileList[0], 0);\r
\r
#region File Menu\r
\r
+ /// <summary>\r
+ /// Kill The scan menu Item\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_killCLI_Click(object sender, EventArgs e)\r
{\r
KillScan();\r
}\r
\r
+ /// <summary>\r
+ /// Exit the Application Menu Item\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_exit_Click(object sender, EventArgs e)\r
{\r
Application.Exit();\r
\r
#region Tools Menu\r
\r
+ /// <summary>\r
+ /// Menu - Start Button\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_encode_Click(object sender, EventArgs e)\r
{\r
queueWindow.Show();\r
}\r
\r
+ /// <summary>\r
+ /// Menu - Display the Log Window\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_encodeLog_Click(object sender, EventArgs e)\r
{\r
frmActivityWindow dvdInfoWindow = new frmActivityWindow(encodeQueue, SourceScan);\r
dvdInfoWindow.Show();\r
}\r
\r
+ /// <summary>\r
+ /// Menu - Display the Options Window\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_options_Click(object sender, EventArgs e)\r
{\r
Form options = new frmOptions(this);\r
\r
#region Presets Menu\r
\r
+ /// <summary>\r
+ /// Reset the Built in Presets\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_presetReset_Click(object sender, EventArgs e)\r
{\r
presetHandler.UpdateBuiltInPresets();\r
treeView_presets.ExpandAll();\r
}\r
\r
+ /// <summary>\r
+ /// Delete the selected preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_delete_preset_Click(object sender, EventArgs e)\r
{\r
presetHandler.RemoveBuiltInPresets();\r
LoadPresetPanel(); // Reload the preset panel\r
}\r
\r
+ /// <summary>\r
+ /// Select the Normal preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_SelectDefault_Click(object sender, EventArgs e)\r
{\r
loadNormalPreset();\r
}\r
\r
+ /// <summary>\r
+ /// Import a plist Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_importMacPreset_Click(object sender, EventArgs e)\r
{\r
ImportPreset();\r
}\r
\r
+ /// <summary>\r
+ /// Export a Plist Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_exportMacPreset_Click(object sender, EventArgs e)\r
{\r
ExportPreset();\r
}\r
\r
-\r
+ /// <summary>\r
+ /// Create a new Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_new_preset_Click(object sender, EventArgs e)\r
{\r
Form preset = new frmAddPreset(this, QueryGenerator.GenerateCliQuery(this, drop_mode.SelectedIndex, 0, null),\r
\r
#region Help Menu\r
\r
+ /// <summary>\r
+ /// Menu - Display the User Guide Web Page\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_user_guide_Click(object sender, EventArgs e)\r
{\r
Process.Start("http://trac.handbrake.fr/wiki/HandBrakeGuide");\r
}\r
\r
- private void mnu_handbrake_home_Click(object sender, EventArgs e)\r
- {\r
- Process.Start("http://handbrake.fr");\r
- }\r
-\r
+ /// <summary>\r
+ /// Menu - Check for Updates\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_UpdateCheck_Click(object sender, EventArgs e)\r
{\r
lbl_updateCheck.Visible = true;\r
Main.BeginCheckForUpdates(new AsyncCallback(updateCheckDoneMenu), false);\r
}\r
\r
- private void updateCheckDoneMenu(IAsyncResult result)\r
- {\r
- // Make sure it's running on the calling thread\r
- if (InvokeRequired)\r
- {\r
- Invoke(new MethodInvoker(() => updateCheckDoneMenu(result)));\r
- return;\r
- }\r
- UpdateCheckInformation info;\r
- try\r
- {\r
- // Get the information about the new build, if any, and close the window\r
- info = Main.EndCheckForUpdates(result);\r
-\r
- if (info.NewVersionAvailable && info.BuildInformation != null)\r
- {\r
- frmUpdater updateWindow = new frmUpdater(info.BuildInformation);\r
- updateWindow.ShowDialog();\r
- }\r
- else\r
- MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK,\r
- MessageBoxIcon.Information);\r
- lbl_updateCheck.Visible = false;\r
- return;\r
- }\r
- catch (Exception ex)\r
- {\r
- if ((bool)result.AsyncState)\r
- MessageBox.Show(\r
- "Unable to check for updates, Please try again later.\n\nDetailed Error Information:\n" + ex,\r
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
- }\r
- }\r
-\r
+ /// <summary>\r
+ /// Menu - Display the About Window\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void mnu_about_Click(object sender, EventArgs e)\r
{\r
using (frmAbout About = new frmAbout())\r
\r
#region Preset Bar\r
\r
- // Right Click Menu Code\r
+ /// <summary>\r
+ /// RMenu - Expand All\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void pmnu_expandAll_Click(object sender, EventArgs e)\r
{\r
treeView_presets.ExpandAll();\r
}\r
\r
+ /// <summary>\r
+ /// RMenu - Collaspe All\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void pmnu_collapse_Click(object sender, EventArgs e)\r
{\r
treeView_presets.CollapseAll();\r
}\r
\r
+ /// <summary>\r
+ /// Menu - Import Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void pmnu_import_Click(object sender, EventArgs e)\r
{\r
ImportPreset();\r
}\r
\r
+ /// <summary>\r
+ /// RMenu - Save Changes to Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void pmnu_saveChanges_Click(object sender, EventArgs e)\r
{\r
DialogResult result =\r
QueryGenerator.GenerateTabbedComponentsQuery(this), false);\r
}\r
\r
+ /// <summary>\r
+ /// RMenu - Delete Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void pmnu_delete_click(object sender, EventArgs e)\r
{\r
if (treeView_presets.SelectedNode != null)\r
treeView_presets.Select();\r
}\r
\r
+ /// <summary>\r
+ /// Preset Menu Is Opening. Setup the Menu\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void presets_menu_Opening(object sender, CancelEventArgs e)\r
{\r
// Make sure that the save menu is always disabled by default\r
}\r
\r
// Presets Management\r
+\r
+ /// <summary>\r
+ /// Button - Add a preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_addPreset_Click(object sender, EventArgs e)\r
{\r
Form preset = new frmAddPreset(this, QueryGenerator.GenerateTabbedComponentsQuery(this), presetHandler);\r
preset.ShowDialog();\r
}\r
\r
+ /// <summary>\r
+ /// Button - remove a Preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_removePreset_Click(object sender, EventArgs e)\r
{\r
DialogResult result = MessageBox.Show("Are you sure you wish to delete the selected preset?", "Preset",\r
treeView_presets.Select();\r
}\r
\r
+ /// <summary>\r
+ /// Button - Set the selected preset as the default\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_setDefault_Click(object sender, EventArgs e)\r
{\r
if (treeView_presets.SelectedNode != null)\r
MessageBox.Show("Please select a preset first.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
}\r
\r
+ /// <summary>\r
+ /// PresetBar Mouse Down event\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void treeview_presets_mouseUp(object sender, MouseEventArgs e)\r
{\r
if (e.Button == MouseButtons.Right)\r
treeView_presets.Select();\r
}\r
\r
+ /// <summary>\r
+ /// Preset Bar after selecting the preset\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void treeView_presets_AfterSelect(object sender, TreeViewEventArgs e)\r
{\r
selectPreset();\r
}\r
\r
+ /// <summary>\r
+ /// Preset Bar - Handle the Delete Key\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void treeView_presets_deleteKey(object sender, KeyEventArgs e)\r
{\r
if (e.KeyCode == Keys.Delete)\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Select the selected preset and setup the GUI\r
+ /// </summary>\r
private void selectPreset()\r
{\r
if (treeView_presets.SelectedNode != null)\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Load the Normal Preset\r
+ /// </summary>\r
private void loadNormalPreset()\r
{\r
foreach (TreeNode treenode in treeView_presets.Nodes)\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Import a plist preset\r
+ /// </summary>\r
private void ImportPreset()\r
{\r
if (openPreset.ShowDialog() == DialogResult.OK)\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Export a plist Preset\r
+ /// </summary>\r
private void ExportPreset()\r
{\r
MessageBox.Show("This feature has not been implimented yet.", "Not Implimented", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
\r
#region ToolStrip\r
\r
+ /// <summary>\r
+ /// Toolbar - When the Source button is clicked, Clear any DVD drives and add any available DVD drives that can be used as a source.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_source_Click(object sender, EventArgs e)\r
{\r
// Remove old Drive Menu Items.\r
driveInfoThread.Start();\r
}\r
\r
+ /// <summary>\r
+ /// Toolbar - Start The Encode\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_start_Click(object sender, EventArgs e)\r
{\r
if (btn_start.Text == "Stop")\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Toolbar - Add the current job to the Queue\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_add2Queue_Click(object sender, EventArgs e)\r
{\r
if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(text_destination.Text))\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Toolbar - Show the Queue\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_showQueue_Click(object sender, EventArgs e)\r
{\r
queueWindow.Show();\r
queueWindow.Activate();\r
}\r
\r
+ /// <summary>\r
+ /// Toolbar - Show the Preview Window\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void tb_preview_Click(object sender, EventArgs e)\r
{\r
if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(text_destination.Text))\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Toolbar - Show the Activity log Window\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_ActivityWindow_Click(object sender, EventArgs e)\r
{\r
if (ActivityWindow == null || !ActivityWindow.IsHandleCreated)\r
\r
#region System Tray Icon\r
\r
+ /// <summary>\r
+ /// Handle Resizing of the main window when deaing with the Notify Icon\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void frmMain_Resize(object sender, EventArgs e)\r
{\r
if (FormWindowState.Minimized == this.WindowState)\r
notifyIcon.Visible = false;\r
}\r
\r
+ /// <summary>\r
+ /// Double Click the Tray Icon\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)\r
{\r
this.Visible = true;\r
notifyIcon.Visible = false;\r
}\r
\r
+ /// <summary>\r
+ /// Tray Icon - Restore Menu Item - Resture the Window\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void btn_restore_Click(object sender, EventArgs e)\r
{\r
this.Visible = true;\r
\r
#endregion\r
\r
- #region Tab Control\r
+ #region Main Window and Tab Control\r
\r
// Source\r
private void btn_dvd_source_Click(object sender, EventArgs e)\r
\r
#region Source Scan\r
\r
- public bool isScanning { get; set; }\r
-\r
+ /// <summary>\r
+ /// Start the Scan Process\r
+ /// </summary>\r
+ /// <param name="filename">\r
+ /// The filename.\r
+ /// </param>\r
+ /// <param name="title">\r
+ /// The title.\r
+ /// </param>\r
private void StartScan(string filename, int title)\r
{\r
// Setup the GUI components for the scan.\r
// Start the Scan\r
try\r
{\r
- isScanning = true;\r
SourceScan.Scan(sourcePath, title);\r
SourceScan.ScanStatusChanged += new EventHandler(SourceScan_ScanStatusChanged);\r
SourceScan.ScanCompleted += new EventHandler(SourceScan_ScanCompleted);\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Update the Status label for the scan\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void SourceScan_ScanStatusChanged(object sender, EventArgs e)\r
{\r
UpdateScanStatusLabel();\r
}\r
\r
+ /// <summary>\r
+ /// Update the UI after the scan has completed\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
private void SourceScan_ScanCompleted(object sender, EventArgs e)\r
{\r
UpdateGuiAfterScan();\r
}\r
\r
+ /// <summary>\r
+ /// Update the Scan Status Label\r
+ /// </summary>\r
private void UpdateScanStatusLabel()\r
{\r
if (InvokeRequired)\r
lbl_encode.Text = SourceScan.ScanStatus;\r
}\r
\r
+ /// <summary>\r
+ /// Reset the GUI when the scan has completed\r
+ /// </summary>\r
private void UpdateGuiAfterScan()\r
{\r
if (InvokeRequired)\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Enable the GUI\r
+ /// </summary>\r
private void EnableGUI()\r
{\r
try\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Disable the GUI\r
+ /// </summary>\r
private void DisableGUI()\r
{\r
foreach (Control ctrl in Controls)\r
mnu_killCLI.Visible = true;\r
}\r
\r
+ /// <summary>\r
+ /// Kill the Scan\r
+ /// </summary>\r
private void KillScan()\r
{\r
SourceScan.ScanCompleted -= new EventHandler(SourceScan_ScanCompleted);\r
lbl_encode.Text = "Scan Cancelled!";\r
}\r
\r
+ /// <summary>\r
+ /// Reset the GUI\r
+ /// </summary>\r
private void ResetGUI()\r
{\r
drp_dvdtitle.Items.Clear();\r
sourcePath = String.Empty;\r
text_destination.Text = String.Empty;\r
selectedTitle = null;\r
- isScanning = false;\r
}\r
\r
+ /// <summary>\r
+ /// Update the Source Label\r
+ /// </summary>\r
private void UpdateSourceLabel()\r
{\r
labelSource.Text = string.IsNullOrEmpty(sourcePath) ? "Select \"Source\" to continue." : this.SourceName;\r
labelSource.Text = Path.GetFileName(selectedTitle.SourceName);\r
}\r
\r
+ /// <summary>\r
+ /// Take a job from the Queue, rescan it, and reload the GUI for that job.\r
+ /// </summary>\r
+ /// <param name="job">\r
+ /// The job.\r
+ /// </param>\r
public void RecievingJob(Job job)\r
{\r
string query = job.Query;\r
List<ToolStripMenuItem> menuItems = new List<ToolStripMenuItem>();\r
foreach (DriveInformation drive in drives)\r
{\r
- ToolStripMenuItem menuItem = new ToolStripMenuItem();\r
- menuItem.Name = drive.ToString();\r
- menuItem.Text = drive.RootDirectory + " (" + drive.VolumeLabel + ")";\r
- menuItem.Image = Resources.disc_small;\r
+ ToolStripMenuItem menuItem = new ToolStripMenuItem\r
+ {\r
+ Name = drive.ToString(),\r
+ Text = drive.RootDirectory + " (" + drive.VolumeLabel + ")",\r
+ Image = Resources.disc_small\r
+ };\r
menuItem.Click += new EventHandler(mnu_dvd_drive_Click);\r
menuItems.Add(menuItem);\r
}\r
return title;\r
}\r
\r
+ /// <summary>\r
+ /// Handle the Update Check Finishing.\r
+ /// </summary>\r
+ /// <param name="result">\r
+ /// The result.\r
+ /// </param>\r
+ private void updateCheckDoneMenu(IAsyncResult result)\r
+ {\r
+ // Make sure it's running on the calling thread\r
+ if (InvokeRequired)\r
+ {\r
+ Invoke(new MethodInvoker(() => updateCheckDoneMenu(result)));\r
+ return;\r
+ }\r
+ UpdateCheckInformation info;\r
+ try\r
+ {\r
+ // Get the information about the new build, if any, and close the window\r
+ info = Main.EndCheckForUpdates(result);\r
+\r
+ if (info.NewVersionAvailable && info.BuildInformation != null)\r
+ {\r
+ frmUpdater updateWindow = new frmUpdater(info.BuildInformation);\r
+ updateWindow.ShowDialog();\r
+ }\r
+ else\r
+ MessageBox.Show("There are no new updates at this time.", "Update Check", MessageBoxButtons.OK,\r
+ MessageBoxIcon.Information);\r
+ lbl_updateCheck.Visible = false;\r
+ return;\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ if ((bool)result.AsyncState)\r
+ MessageBox.Show(\r
+ "Unable to check for updates, Please try again later.\n\nDetailed Error Information:\n" + ex,\r
+ "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+ }\r
+\r
#endregion\r
\r
#region Overrides\r
\r
#endregion\r
\r
- #region In-GUI Encode Status (Experimental)\r
+ #region In-GUI Encode Status\r
\r
/// <summary>\r
/// Starts a new thread to monitor and process the CLI encode status\r
/// <summary>\r
/// Displays the Encode status in the GUI\r
/// </summary>\r
- /// <param name="Sender"></param>\r
- /// <param name="CurrentTask"></param>\r
- /// <param name="TaskCount"></param>\r
- /// <param name="PercentComplete"></param>\r
- /// <param name="CurrentFps"></param>\r
- /// <param name="AverageFps"></param>\r
- /// <param name="TimeRemaining"></param>\r
- private void EncodeOnEncodeProgress(object Sender, int CurrentTask, int TaskCount, float PercentComplete, float CurrentFps, float AverageFps, TimeSpan TimeRemaining)\r
+ /// <param name="sender">The sender</param>\r
+ /// <param name="currentTask">The current task</param>\r
+ /// <param name="taskCount">Number of tasks</param>\r
+ /// <param name="percentComplete">Percent complete</param>\r
+ /// <param name="currentFps">Current encode speed in fps</param>\r
+ /// <param name="av">Avg encode speed</param>\r
+ /// <param name="timeRemaining">Time Left</param>\r
+ private void EncodeOnEncodeProgress(object sender, int currentTask, int taskCount, float percentComplete, float currentFps, float av, TimeSpan timeRemaining)\r
{\r
if (this.InvokeRequired)\r
{\r
this.BeginInvoke(\r
new EncodeProgressEventHandler(EncodeOnEncodeProgress),\r
- new[] { Sender, CurrentTask, TaskCount, PercentComplete, CurrentFps, AverageFps, TimeRemaining });\r
+ new[] { sender, currentTask, taskCount, percentComplete, currentFps, av, timeRemaining });\r
return;\r
}\r
lbl_encode.Text =\r
string.Format(\r
- "{0:00.00}%, FPS: {1:000.0}, Avg FPS: {2:000.0}, Time Remaining: {3}", \r
- PercentComplete, \r
- CurrentFps, \r
- AverageFps, \r
- TimeRemaining);\r
+ "{0:00.00}%, FPS: {1:000.0}, Avg FPS: {2:000.0}, Time Remaining: {3}",\r
+ percentComplete,\r
+ currentFps,\r
+ av,\r
+ timeRemaining);\r
\r
- ProgressBarStatus.Value = (int)Math.Round(PercentComplete);\r
+ ProgressBarStatus.Value = (int)Math.Round(percentComplete);\r
}\r
\r
#endregion\r