-using System;\r
-using System.Collections.Generic;\r
-using System.ComponentModel;\r
-using System.Data;\r
-using System.Drawing;\r
-using System.Text;\r
-using System.Windows.Forms;\r
-using System.Threading;\r
-using System.Diagnostics;\r
+/* frmQueue.cs $\r
+ This file is part of the HandBrake source code.\r
+ Homepage: <http://handbrake.fr>.\r
+ It may be used under the terms of the GNU General Public License. */\r
\r
namespace Handbrake\r
{\r
+ using System;\r
+ using System.Collections.Generic;\r
+ using System.Collections.ObjectModel;\r
+ using System.ComponentModel;\r
+ using System.IO;\r
+ using System.Windows.Forms;\r
+ using Functions;\r
+\r
+ using HandBrake.ApplicationServices.Model;\r
+ using HandBrake.ApplicationServices.Services;\r
+ using HandBrake.ApplicationServices.Services.Interfaces;\r
+\r
+ using Model;\r
+\r
+ /// <summary>\r
+ /// The Queue Window\r
+ /// </summary>\r
public partial class frmQueue : Form\r
{\r
- private frmQueue thisWindow;\r
+ /// <summary>\r
+ /// Update Handler Delegate\r
+ /// </summary>\r
+ private delegate void UpdateHandler();\r
+\r
+ /// <summary>\r
+ /// An instance of the Queue service\r
+ /// </summary>\r
+ private readonly IQueue queue;\r
+\r
+ /// <summary>\r
+ /// A reference to the main application window\r
+ /// </summary>\r
+ private readonly frmMain mainWindow;\r
\r
- public frmQueue()\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="frmQueue"/> class.\r
+ /// </summary>\r
+ /// <param name="q">\r
+ /// An instance of the queue service.\r
+ /// </param>\r
+ /// <param name="mw">\r
+ /// The main window.\r
+ /// </param>\r
+ public frmQueue(IQueue q, frmMain mw)\r
{\r
InitializeComponent();\r
+\r
+ this.mainWindow = mw;\r
+\r
+ this.queue = q;\r
+ queue.EncodeStarted += new EventHandler(QueueOnEncodeStart);\r
+ queue.QueueCompleted += new EventHandler(QueueOnQueueFinished);\r
+ queue.QueuePauseRequested += new EventHandler(QueueOnPaused);\r
+ queue.QueueListChanged += new EventHandler(queue_QueueListChanged);\r
+\r
+ queue.EncodeStarted += new EventHandler(queue_EncodeStarted);\r
+ queue.EncodeEnded += new EventHandler(queue_EncodeEnded);\r
+\r
+ drp_completeOption.Text = Properties.Settings.Default.CompletionOption;\r
}\r
\r
- private void btn_Close_Click(object sender, EventArgs e)\r
+ /// <summary>\r
+ /// Queue Changed\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void queue_QueueListChanged(object sender, EventArgs e)\r
{\r
- this.Hide();\r
+ UpdateUiElementsOnQueueChange();\r
}\r
\r
- private void btn_delete_Click(object sender, EventArgs e)\r
+ /// <summary>\r
+ /// Encode Ended\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void queue_EncodeEnded(object sender, EventArgs e)\r
{\r
- list_queue.Items.Remove(list_queue.SelectedItem);\r
+ queue.EncodeStatusChanged -= EncodeQueue_EncodeStatusChanged;\r
+ ResetEncodeText();\r
}\r
\r
- private void btn_up_Click(object sender, EventArgs e)\r
+ /// <summary>\r
+ /// Queue Started\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void queue_EncodeStarted(object sender, EventArgs e)\r
{\r
- int count = list_queue.Items.Count;\r
- int itemToMove = list_queue.SelectedIndex;\r
- int previousItemint = 0; \r
- String previousItem = "";\r
+ this.SetCurrentEncodeInformation();\r
+ queue.EncodeStatusChanged += EncodeQueue_EncodeStatusChanged; \r
+ }\r
\r
- if (itemToMove > 0){\r
- previousItemint = itemToMove - 1;\r
- previousItem = list_queue.Items[previousItemint].ToString();\r
- list_queue.Items[previousItemint] = list_queue.Items[itemToMove];\r
- list_queue.Items[itemToMove] = previousItem;\r
- list_queue.SelectedIndex = list_queue.SelectedIndex - 1;\r
+ /// <summary>\r
+ /// Display the Encode Status\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void EncodeQueue_EncodeStatusChanged(object sender, HandBrake.ApplicationServices.EncodeProgressEventArgs e)\r
+ {\r
+ if (this.InvokeRequired)\r
+ {\r
+ this.BeginInvoke(new Encode.EncodeProgessStatus(EncodeQueue_EncodeStatusChanged), new[] { sender, e });\r
+ return;\r
}\r
+\r
+ lbl_encodeStatus.Text =\r
+ string.Format(\r
+ "Encoding: Pass {0} of {1}, {2:00.00}% Time Remaining: {3}",\r
+ e.Task,\r
+ e.Task,\r
+ e.PercentComplete,\r
+ e.EstimatedTimeLeft);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handle the Queue Paused event\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The EventArgs.\r
+ /// </param>\r
+ private void QueueOnPaused(object sender, EventArgs e)\r
+ {\r
+ SetUiEncodeFinished();\r
+ UpdateUiElementsOnQueueChange();\r
}\r
\r
- private void btn_down_Click(object sender, EventArgs e)\r
+ /// <summary>\r
+ /// Handle the Queue Finished event.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The EventArgs.\r
+ /// </param>\r
+ private void QueueOnQueueFinished(object sender, EventArgs e)\r
{\r
- int count = list_queue.Items.Count;\r
- int itemToMove = list_queue.SelectedIndex;\r
- int itemAfterInt = 0; \r
- String itemAfter = "";\r
+ SetUiEncodeFinished();\r
+ ResetQueue(); // Reset the Queue Window\r
+ }\r
\r
- if (itemToMove < (count - 1))\r
+ /// <summary>\r
+ /// Handle the Encode Started event\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void QueueOnEncodeStart(object sender, EventArgs e)\r
+ {\r
+ SetUiEncodeStarted(); // make sure the UI is set correctly\r
+ UpdateUiElementsOnQueueChange(); // Redraw the Queue, a new encode has started.\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes the Queue list with the Arraylist from the Queue class\r
+ /// </summary>\r
+ public void SetQueue()\r
+ {\r
+ UpdateUiElementsOnQueueChange();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes the Queue list, then shows and activates the window\r
+ /// </summary>\r
+ public new void Show()\r
+ {\r
+ Show(true);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes the Queue list only if doSetQueue is true, then shows and activates the window\r
+ /// </summary>\r
+ /// <param name="doSetQueue">Indicates whether to call setQueue() before showing the window</param>\r
+ public void Show(bool doSetQueue)\r
+ {\r
+ if (doSetQueue) SetQueue();\r
+ base.Show();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handle the Encode button Click event\r
+ /// </summary>\r
+ /// <param name="sender">The sender</param>\r
+ /// <param name="e">the EventArgs</param>\r
+ private void BtnEncodeClick(object sender, EventArgs e)\r
+ {\r
+ if (queue.Paused)\r
{\r
- itemAfterInt = itemToMove + 1;\r
- itemAfter = list_queue.Items[itemAfterInt].ToString();\r
- list_queue.Items[itemAfterInt] = list_queue.Items[itemToMove];\r
- list_queue.Items[itemToMove] = itemAfter;\r
- list_queue.SelectedIndex = list_queue.SelectedIndex + 1;\r
+ SetUiEncodeStarted();\r
}\r
+\r
+ lbl_encodeStatus.Text = "Encoding ...";\r
+ queue.Start();\r
}\r
\r
- private void btn_q_encoder_Click(object sender, EventArgs e)\r
+ /// <summary>\r
+ /// Handle the Pause button click event.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The EventArgs.\r
+ /// </param>\r
+ private void BtnPauseClick(object sender, EventArgs e)\r
{\r
- progressBar.Value = 0;\r
- lbl_progressValue.Text = "0 %";\r
- progressBar.Update();\r
- ThreadPool.QueueUserWorkItem(startProc);\r
+ queue.Pause();\r
+ MessageBox.Show(\r
+ "No further items on the queue will start. The current encode process will continue until it is finished. \nClick 'Encode' when you wish to continue encoding the queue.",\r
+ "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
+ }\r
+\r
+ // UI Work\r
+\r
+ /// <summary>\r
+ /// Setup the UI to show that an encode has started\r
+ /// </summary>\r
+ private void SetUiEncodeStarted()\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(SetUiEncodeStarted));\r
+ return;\r
+ }\r
+ btn_encode.Enabled = false;\r
+ btn_pause.Visible = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Setup the UI to indicate that an encode has finished.\r
+ /// </summary>\r
+ private void SetUiEncodeFinished()\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(SetUiEncodeFinished));\r
+ return;\r
+ }\r
+ btn_pause.Visible = false;\r
+ btn_encode.Enabled = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Reset the Queue Window display\r
+ /// </summary>\r
+ private void ResetQueue()\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(ResetQueue));\r
+ return;\r
+ }\r
+ btn_pause.Visible = false;\r
+ btn_encode.Enabled = true;\r
+\r
+ ResetEncodeText();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Reset the current job text\r
+ /// </summary>\r
+ private void ResetEncodeText()\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(ResetEncodeText));\r
+ return;\r
+ }\r
+ lbl_encodeStatus.Text = "Ready";\r
+\r
+ lbl_source.Text = "-";\r
+ lbl_dest.Text = "-";\r
+ lbl_encodeOptions.Text = "-";\r
+\r
+ lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
+ }\r
+\r
+ /// <summary>\r
+ /// Redraw the Queue window with the latest information about HandBrakes status\r
+ /// </summary>\r
+ private void RedrawQueue()\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(RedrawQueue));\r
+ return;\r
+ }\r
+\r
+ list_queue.Items.Clear();\r
+ ReadOnlyCollection<Job> theQueue = queue.CurrentQueue;\r
+ foreach (Job queueItem in theQueue)\r
+ {\r
+ string qItem = queueItem.Query;\r
+ QueryParser parsed = Functions.QueryParser.Parse(qItem);\r
+\r
+ // Get the DVD Title\r
+ string title = parsed.Title == 0 ? "Auto" : parsed.Title.ToString();\r
+\r
+ // Get the DVD Chapters\r
+ string chapters;\r
+ if (parsed.ChapterStart == 0)\r
+ chapters = "Auto";\r
+ else\r
+ {\r
+ chapters = parsed.ChapterStart.ToString();\r
+ if (parsed.ChapterFinish != 0)\r
+ chapters = chapters + " - " + parsed.ChapterFinish;\r
+ }\r
+\r
+ ListViewItem item = new ListViewItem();\r
+ item.Text = title; // Title\r
+ item.SubItems.Add(chapters); // Chapters\r
+ item.SubItems.Add(queueItem.Source); // Source\r
+ item.SubItems.Add(queueItem.Destination); // Destination\r
+ item.SubItems.Add(parsed.VideoEncoder); // Video\r
+\r
+ // Display The Audio Track Information\r
+ string audio = string.Empty;\r
+ foreach (AudioTrack track in parsed.AudioInformation)\r
+ {\r
+ if (audio != string.Empty)\r
+ audio += ", " + track.Encoder;\r
+ else\r
+ audio = track.Encoder;\r
+ }\r
+ item.SubItems.Add(audio); // Audio\r
+\r
+ list_queue.Items.Add(item);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Update the UI elements\r
+ /// </summary>\r
+ private void UpdateUiElementsOnQueueChange()\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(UpdateUiElementsOnQueueChange));\r
+ return;\r
+ }\r
+\r
+ RedrawQueue();\r
+ lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
}\r
\r
- private void startProc(object state)\r
+ /// <summary>\r
+ /// Set the window up with the current encode information\r
+ /// </summary>\r
+ private void SetCurrentEncodeInformation()\r
{\r
- int listSize = list_queue.Items.Count;\r
- listSize--;\r
- int counter = 0;\r
- int progressSplit = listSize / 100;\r
+ try\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new UpdateHandler(SetCurrentEncodeInformation));\r
+ }\r
+\r
+ QueryParser parsed = QueryParser.Parse(queue.LastEncode.Query);\r
+\r
+ // Get title and chapters\r
+ string title = parsed.Title == 0 ? "Auto" : parsed.Title.ToString();\r
+ string chapterlbl;\r
+ if (Equals(parsed.ChapterStart, 0))\r
+ chapterlbl = "Auto";\r
+ else\r
+ {\r
+ string chapters = parsed.ChapterStart.ToString();\r
+ if (parsed.ChapterFinish != 0)\r
+ chapters = chapters + " - " + parsed.ChapterFinish;\r
+ chapterlbl = chapters;\r
+ }\r
+\r
+ // Get audio information\r
+ string audio = string.Empty;\r
+ foreach (AudioTrack track in parsed.AudioInformation)\r
+ {\r
+ if (audio != string.Empty) \r
+ audio += ", " + track.Encoder;\r
+ else\r
+ audio = track.Encoder;\r
+ }\r
\r
- while (counter <= listSize)\r
+ // found query is a global varible \r
+ lbl_encodeStatus.Text = "Encoding ...";\r
+ lbl_source.Text = queue.LastEncode.Source + "(Title: " + title + " Chapters: " + chapterlbl + ")";\r
+ lbl_dest.Text = queue.LastEncode.Destination;\r
+ lbl_encodeOptions.Text = "Video: " + parsed.VideoEncoder + " Audio: " + audio + Environment.NewLine +\r
+ "x264 Options: " + parsed.H264Query;\r
+ }\r
+ catch (Exception)\r
{\r
- String query = list_queue.Items[0].ToString();\r
+ // Do Nothing\r
+ }\r
+ }\r
+\r
+ /* Right Click Menu */\r
\r
- Process hbProc = new Process();\r
- hbProc.StartInfo.FileName = "hbcli.exe";\r
- hbProc.StartInfo.Arguments = query;\r
- hbProc.StartInfo.UseShellExecute = false;\r
- hbProc.Start();\r
- // Set the process Priority\r
- string priority = Properties.Settings.Default.processPriority;\r
- switch (priority)\r
+ /// <summary>\r
+ /// Handle the Move Up 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 MnuUpClick(object sender, EventArgs e)\r
+ {\r
+ MoveUp();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handle the Move down 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 MnuDownClick(object sender, EventArgs e)\r
+ {\r
+ MoveDown();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Edit a job\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void MnuEditClick(object sender, EventArgs e)\r
+ {\r
+ if (list_queue.SelectedIndices != null && list_queue.SelectedIndices.Count != 0)\r
+ {\r
+ lock (queue)\r
{\r
- case "Realtime":\r
- hbProc.PriorityClass = ProcessPriorityClass.RealTime;\r
- break;\r
- case "High":\r
- hbProc.PriorityClass = ProcessPriorityClass.High;\r
- break;\r
- case "Above Normal":\r
- hbProc.PriorityClass = ProcessPriorityClass.AboveNormal;\r
- break;\r
- case "Normal":\r
- hbProc.PriorityClass = ProcessPriorityClass.Normal;\r
- break;\r
- case "Low":\r
- hbProc.PriorityClass = ProcessPriorityClass.Idle;\r
- break;\r
- default:\r
- hbProc.PriorityClass = ProcessPriorityClass.BelowNormal;\r
- break;\r
+ lock (list_queue)\r
+ {\r
+ int index = list_queue.SelectedIndices[0];\r
+ mainWindow.RecievingJob(queue.GetJob(index));\r
+ queue.Remove(index);\r
+ RedrawQueue();\r
+ }\r
}\r
+ }\r
+ }\r
\r
- hbProc.WaitForExit();\r
- hbProc.Close();\r
- counter++;\r
- //updateUIElements(progressSplit);\r
+ /// <summary>\r
+ /// Handle the delete 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 MnuDeleteClick(object sender, EventArgs e)\r
+ {\r
+ DeleteSelectedItems();\r
+ }\r
+\r
+ /* Keyboard Shortcuts */\r
+\r
+ /// <summary>\r
+ /// Handle the delete keyboard press\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void ListQueueDeleteKey(object sender, KeyEventArgs e)\r
+ {\r
+ if (e.KeyCode == Keys.Delete)\r
+ DeleteSelectedItems();\r
+ }\r
+\r
+ /* Queue Management */\r
+\r
+ /// <summary>\r
+ /// Move items up in the queue\r
+ /// </summary>\r
+ private void MoveUp()\r
+ {\r
+ // If there are selected items and the first item is not selected\r
+ if (list_queue.SelectedIndices.Count > 0 && !list_queue.SelectedIndices.Contains(0))\r
+ {\r
+ // Copy the selected indices to preserve them during the movement\r
+ List<int> selectedIndices = new List<int>(list_queue.SelectedIndices.Count);\r
+ foreach (int selectedIndex in list_queue.SelectedIndices)\r
+ selectedIndices.Add(selectedIndex);\r
+\r
+ // Move up each selected item\r
+ foreach (int selectedIndex in selectedIndices)\r
+ queue.MoveUp(selectedIndex);\r
+\r
+ // Keep the selected item(s) selected, now moved up one index\r
+ foreach (int selectedIndex in selectedIndices)\r
+ if (selectedIndex - 1 > -1) // Defensive programming: ensure index is good\r
+ list_queue.Items[selectedIndex - 1].Selected = true;\r
}\r
+\r
+ list_queue.Select(); // Activate the control to show the selected items\r
+ }\r
+\r
+ /// <summary>\r
+ /// Move items down in the queue\r
+ /// </summary>\r
+ private void MoveDown()\r
+ {\r
+ // If there are selected items and the last item is not selected\r
+ if (list_queue.SelectedIndices.Count > 0 &&\r
+ !list_queue.SelectedIndices.Contains(list_queue.Items[list_queue.Items.Count - 1].Index))\r
+ {\r
+ // Copy the selected indices to preserve them during the movement\r
+ List<int> selectedIndices = new List<int>(list_queue.SelectedIndices.Count);\r
+ foreach (int selectedIndex in list_queue.SelectedIndices)\r
+ selectedIndices.Add(selectedIndex);\r
+\r
+ // Reverse the indices to move the items down from last to first (preserves indices)\r
+ selectedIndices.Reverse();\r
+\r
+ // Move down each selected item\r
+ foreach (int selectedIndex in selectedIndices)\r
+ queue.MoveDown(selectedIndex);\r
+\r
+ // Keep the selected item(s) selected, now moved down one index\r
+ foreach (int selectedIndex in selectedIndices)\r
+ if (selectedIndex + 1 < list_queue.Items.Count) // Defensive programming: ensure index is good\r
+ list_queue.Items[selectedIndex + 1].Selected = true;\r
+ }\r
+\r
+ list_queue.Select(); // Activate the control to show the selected items\r
+ }\r
+\r
+ /// <summary>\r
+ /// Delete the currently selected items on the queue\r
+ /// </summary>\r
+ private void DeleteSelectedItems()\r
+ {\r
+ // If there are selected items\r
+ if (list_queue.SelectedIndices.Count > 0)\r
+ {\r
+ // Save the selected indices to select them after the move\r
+ List<int> selectedIndices = new List<int>(list_queue.SelectedIndices.Count);\r
+ foreach (int selectedIndex in list_queue.SelectedIndices)\r
+ selectedIndices.Add(selectedIndex);\r
+\r
+ int firstSelectedIndex = selectedIndices[0];\r
+\r
+ // Reverse the list to delete the items from last to first (preserves indices)\r
+ selectedIndices.Reverse();\r
+\r
+ // Remove each selected item\r
+ foreach (int selectedIndex in selectedIndices)\r
+ queue.Remove(selectedIndex);\r
+\r
+ // Select the item where the first deleted item was previously\r
+ if (firstSelectedIndex < list_queue.Items.Count)\r
+ list_queue.Items[firstSelectedIndex].Selected = true;\r
+ }\r
+\r
+ list_queue.Select(); // Activate the control to show the selected items\r
+ }\r
+\r
+ /* Queue Import / Export features */\r
+\r
+ /// <summary>\r
+ /// Create a batch script\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void MnuBatchClick(object sender, EventArgs e)\r
+ {\r
+ SaveFile.FileName = string.Empty;\r
+ SaveFile.Filter = "Batch|.bat";\r
+ SaveFile.ShowDialog();\r
+ if (SaveFile.FileName != String.Empty)\r
+ queue.WriteBatchScriptToFile(SaveFile.FileName);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Export Queue\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void MnuExportClick(object sender, EventArgs e)\r
+ {\r
+ SaveFile.FileName = string.Empty;\r
+ SaveFile.Filter = "HandBrake Queue|*.queue";\r
+ SaveFile.ShowDialog();\r
+ if (SaveFile.FileName != String.Empty)\r
+ queue.WriteQueueStateToFile(SaveFile.FileName);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Import Queue\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void MnuImportClick(object sender, EventArgs e)\r
+ {\r
+ OpenFile.FileName = string.Empty;\r
+ OpenFile.ShowDialog();\r
+ if (OpenFile.FileName != String.Empty)\r
+ queue.LoadQueueFromFile(OpenFile.FileName);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Readd current job to queue\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void MnuReaddClick(object sender, EventArgs e)\r
+ {\r
+ if (!queue.LastEncode.IsEmpty)\r
+ {\r
+ queue.Add(\r
+ queue.LastEncode.Query, \r
+ queue.LastEncode.Title, \r
+ queue.LastEncode.Source,\r
+ queue.LastEncode.Destination,\r
+ queue.LastEncode.CustomQuery);\r
+ }\r
+ }\r
+\r
+ /* Overrides */\r
+\r
+ /// <summary>\r
+ /// Hide's the window when the user tries to "x" out of the window instead of closing it.\r
+ /// </summary>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ protected override void OnClosing(CancelEventArgs e)\r
+ {\r
+ e.Cancel = true;\r
+ this.Hide();\r
+ base.OnClosing(e);\r
}\r
\r
- private void updateUIElements(int progressSplit)\r
+ /// <summary>\r
+ /// Change the OnComplete option setting.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The EventArgs.\r
+ /// </param>\r
+ private void CompleteOptionChanged(object sender, EventArgs e)\r
{\r
- // This needs to be written so there is no cross-thread problems ********************\r
- thisWindow.list_queue.Items.Remove(0);\r
- progressBar.Value = progressBar.Value + progressSplit;\r
- progressBar.Update();\r
+ Properties.Settings.Default.CompletionOption = drp_completeOption.Text;\r
+ Properties.Settings.Default.Save();\r
}\r
}\r
}
\ No newline at end of file