+\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 != null && !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