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.Collections;
\r
10 using System.ComponentModel;
\r
12 using System.Drawing;
\r
14 using System.Windows.Forms;
\r
15 using System.Threading;
\r
16 using System.Diagnostics;
\r
17 using System.Runtime.InteropServices;
\r
22 public partial class frmQueue : Form
\r
24 private delegate void UpdateHandler();
\r
25 Queue.QueueHandler queue;
\r
27 public frmQueue(Queue.QueueHandler q)
\r
29 InitializeComponent();
\r
32 queue.OnEncodeStart += new EventHandler(queue_OnEncodeStart);
\r
33 queue.OnQueueFinished += new EventHandler(queue_OnQueueFinished);
\r
34 queue.OnPaused += new EventHandler(queue_OnPaused);
\r
36 void queue_OnPaused(object sender, EventArgs e)
\r
38 setUIEncodeFinished();
\r
41 void queue_OnQueueFinished(object sender, EventArgs e)
\r
43 setUIEncodeFinished();
\r
44 resetQueue(); // Reset the Queue Window
\r
46 void queue_OnEncodeStart(object sender, EventArgs e)
\r
48 setUIEncodeStarted(); // make sure the UI is set correctly
\r
49 setCurrentEncodeInformation();
\r
50 updateUIElements(); // Redraw the Queue, a new encode has started.
\r
54 /// Initializes the Queue list with the Arraylist from the Queue class
\r
56 /// <param name="qw"></param>
\r
57 public void setQueue()
\r
62 // Start and Stop Controls
\r
63 private void btn_encode_Click(object sender, EventArgs e)
\r
65 if (queue.isPaused == true)
\r
67 setUIEncodeStarted();
\r
68 MessageBox.Show("Encoding restarted", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
71 if (!queue.isEncodeStarted)
\r
72 queue.startEncode();
\r
75 private void btn_pause_Click(object sender, EventArgs e)
\r
77 queue.pauseEncode();
\r
78 setUIEncodeFinished();
\r
80 MessageBox.Show("No further items on the queue will start. The current encode process will continue until it is finished. \nClick 'Encode Video' when you wish to continue encoding the queue.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
83 // Window Display Management
\r
84 private void setUIEncodeStarted()
\r
86 if (this.InvokeRequired)
\r
88 this.BeginInvoke(new UpdateHandler(setUIEncodeStarted));
\r
91 btn_encode.Enabled = false;
\r
92 btn_pause.Visible = true;
\r
94 private void setUIEncodeFinished()
\r
96 if (this.InvokeRequired)
\r
98 this.BeginInvoke(new UpdateHandler(setUIEncodeFinished));
\r
101 btn_pause.Visible = false;
\r
102 btn_encode.Enabled = true;
\r
104 private void resetQueue()
\r
106 if (this.InvokeRequired)
\r
108 this.BeginInvoke(new UpdateHandler(resetQueue));
\r
111 btn_pause.Visible = false;
\r
112 btn_encode.Enabled = true;
\r
114 lbl_source.Text = "-";
\r
115 lbl_dest.Text = "-";
\r
116 lbl_vEnc.Text = "-";
\r
117 lbl_aEnc.Text = "-";
\r
118 lbl_title.Text = "-";
\r
119 lbl_chapt.Text = "-";
\r
121 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";
\r
123 private void redrawQueue()
\r
125 if (this.InvokeRequired)
\r
127 this.BeginInvoke(new UpdateHandler(redrawQueue));
\r
131 list_queue.Items.Clear();
\r
132 List<Queue.QueueItem> theQueue = queue.getQueue();
\r
133 foreach (Queue.QueueItem queue_item in theQueue)
\r
135 string q_item = queue_item.Query;
\r
136 Functions.QueryParser parsed = Functions.QueryParser.Parse(q_item);
\r
138 // Get the DVD Title
\r
140 if (parsed.DVDTitle == 0)
\r
143 title = parsed.DVDTitle.ToString();
\r
145 // Get the DVD Chapters
\r
146 string chapters = "";
\r
147 if (parsed.DVDChapterStart == 0)
\r
151 chapters = parsed.DVDChapterStart.ToString();
\r
152 if (parsed.DVDChapterFinish != 0)
\r
153 chapters = chapters + " - " + parsed.DVDChapterFinish;
\r
156 ListViewItem item = new ListViewItem();
\r
157 item.Text = title; // Title
\r
158 item.SubItems.Add(chapters); // Chapters
\r
159 item.SubItems.Add(queue_item.Source); // Source
\r
160 item.SubItems.Add(queue_item.Destination); // Destination
\r
161 item.SubItems.Add(parsed.VideoEncoder); // Video
\r
162 item.SubItems.Add(parsed.AudioEncoder1); // Audio
\r
164 list_queue.Items.Add(item);
\r
167 private void updateUIElements()
\r
169 if (this.InvokeRequired)
\r
171 this.BeginInvoke(new UpdateHandler(updateUIElements));
\r
176 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";
\r
178 private void setCurrentEncodeInformation()
\r
182 if (this.InvokeRequired)
\r
184 this.BeginInvoke(new UpdateHandler(setCurrentEncodeInformation));
\r
187 // found query is a global varible
\r
188 Functions.QueryParser parsed = Functions.QueryParser.Parse(queue.getLastQueryItem().Query);
\r
189 lbl_source.Text = queue.getLastQueryItem().Source;
\r
190 lbl_dest.Text = queue.getLastQueryItem().Destination;
\r
192 if (parsed.DVDTitle == 0)
\r
193 lbl_title.Text = "Auto";
\r
195 lbl_title.Text = parsed.DVDTitle.ToString();
\r
197 string chapters = "";
\r
198 if (parsed.DVDChapterStart == 0)
\r
200 lbl_chapt.Text = "Auto";
\r
204 chapters = parsed.DVDChapterStart.ToString();
\r
205 if (parsed.DVDChapterFinish != 0)
\r
206 chapters = chapters + " - " + parsed.DVDChapterFinish;
\r
207 lbl_chapt.Text = chapters;
\r
210 lbl_vEnc.Text = parsed.VideoEncoder;
\r
211 lbl_aEnc.Text = parsed.AudioEncoder1;
\r
219 // Queue Management
\r
220 private void btn_up_Click(object sender, EventArgs e)
\r
222 if (list_queue.SelectedIndices.Count != 0)
\r
224 int selected = list_queue.SelectedIndices[0];
\r
226 queue.moveUp(selected);
\r
227 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
228 updateUIElements();
\r
230 if (selected - 1 > 0)
\r
231 list_queue.Items[selected - 1].Selected = true;
\r
233 list_queue.Select();
\r
236 private void btn_down_Click(object sender, EventArgs e)
\r
238 if (list_queue.SelectedIndices.Count != 0)
\r
240 int selected = list_queue.SelectedIndices[0];
\r
242 queue.moveDown(list_queue.SelectedIndices[0]);
\r
243 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
244 updateUIElements();
\r
246 if (selected + 1 < list_queue.Items.Count)
\r
247 list_queue.Items[selected + 1].Selected = true;
\r
249 list_queue.Select();
\r
252 private void btn_delete_Click(object sender, EventArgs e)
\r
254 if (list_queue.SelectedIndices.Count != 0)
\r
256 queue.remove(list_queue.SelectedIndices[0]);
\r
257 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
258 updateUIElements();
\r
259 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";
\r
262 private void list_queue_deleteKey(object sender, KeyEventArgs e)
\r
264 if (e.KeyCode == Keys.Delete)
\r
266 if (list_queue.SelectedIndices.Count != 0)
\r
268 queue.remove(list_queue.SelectedIndices[0]);
\r
269 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
270 updateUIElements();
\r
275 // Queue Import/Export Features
\r
276 private void mnu_batch_Click(object sender, EventArgs e)
\r
278 SaveFile.FileName = "";
\r
279 SaveFile.Filter = "Batch|.bat";
\r
280 SaveFile.ShowDialog();
\r
281 if (SaveFile.FileName != String.Empty)
\r
282 queue.writeBatchScript(SaveFile.FileName);
\r
284 private void mnu_export_Click(object sender, EventArgs e)
\r
286 SaveFile.FileName = "";
\r
287 SaveFile.Filter = "HandBrake Queue|*.queue";
\r
288 SaveFile.ShowDialog();
\r
289 if (SaveFile.FileName != String.Empty)
\r
290 queue.write2disk(SaveFile.FileName);
\r
292 private void mnu_import_Click(object sender, EventArgs e)
\r
294 OpenFile.FileName = "";
\r
295 OpenFile.ShowDialog();
\r
296 if (OpenFile.FileName != String.Empty)
\r
297 queue.recoverQueue(OpenFile.FileName);
\r
298 updateUIElements();
\r
301 // Hide's the window when the user tries to "x" out of the window instead of closing it.
\r
302 protected override void OnClosing(CancelEventArgs e)
\r