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.ComponentModel;
\r
10 using System.Windows.Forms;
\r
14 public partial class frmQueue : Form
\r
16 private delegate void UpdateHandler();
\r
17 Queue.QueueHandler queue;
\r
19 public frmQueue(Queue.QueueHandler q)
\r
21 InitializeComponent();
\r
24 queue.OnEncodeStart += new EventHandler(queue_OnEncodeStart);
\r
25 queue.OnQueueFinished += new EventHandler(queue_OnQueueFinished);
\r
26 queue.OnPaused += new EventHandler(queue_OnPaused);
\r
28 void queue_OnPaused(object sender, EventArgs e)
\r
30 setUIEncodeFinished();
\r
33 void queue_OnQueueFinished(object sender, EventArgs e)
\r
35 setUIEncodeFinished();
\r
36 resetQueue(); // Reset the Queue Window
\r
38 void queue_OnEncodeStart(object sender, EventArgs e)
\r
40 setUIEncodeStarted(); // make sure the UI is set correctly
\r
41 setCurrentEncodeInformation();
\r
42 updateUIElements(); // Redraw the Queue, a new encode has started.
\r
46 /// Initializes the Queue list with the Arraylist from the Queue class
\r
48 /// <param name="qw"></param>
\r
49 public void setQueue()
\r
54 // Start and Stop Controls
\r
55 private void btn_encode_Click(object sender, EventArgs e)
\r
57 if (queue.isPaused == true)
\r
59 setUIEncodeStarted();
\r
60 MessageBox.Show("Encoding restarted", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
\r
63 if (!queue.isEncodeStarted)
\r
64 queue.startEncode();
\r
67 private void btn_pause_Click(object sender, EventArgs e)
\r
69 queue.pauseEncode();
\r
70 setUIEncodeFinished();
\r
72 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
75 // Window Display Management
\r
76 private void setUIEncodeStarted()
\r
78 if (this.InvokeRequired)
\r
80 this.BeginInvoke(new UpdateHandler(setUIEncodeStarted));
\r
83 btn_encode.Enabled = false;
\r
84 btn_pause.Visible = true;
\r
86 private void setUIEncodeFinished()
\r
88 if (this.InvokeRequired)
\r
90 this.BeginInvoke(new UpdateHandler(setUIEncodeFinished));
\r
93 btn_pause.Visible = false;
\r
94 btn_encode.Enabled = true;
\r
96 private void resetQueue()
\r
98 if (this.InvokeRequired)
\r
100 this.BeginInvoke(new UpdateHandler(resetQueue));
\r
103 btn_pause.Visible = false;
\r
104 btn_encode.Enabled = true;
\r
106 lbl_source.Text = "-";
\r
107 lbl_dest.Text = "-";
\r
108 lbl_vEnc.Text = "-";
\r
109 lbl_aEnc.Text = "-";
\r
110 lbl_title.Text = "-";
\r
111 lbl_chapt.Text = "-";
\r
113 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";
\r
115 private void redrawQueue()
\r
117 if (this.InvokeRequired)
\r
119 this.BeginInvoke(new UpdateHandler(redrawQueue));
\r
123 list_queue.Items.Clear();
\r
124 List<Queue.QueueItem> theQueue = queue.getQueue();
\r
125 foreach (Queue.QueueItem queue_item in theQueue)
\r
127 string q_item = queue_item.Query;
\r
128 Functions.QueryParser parsed = Functions.QueryParser.Parse(q_item);
\r
130 // Get the DVD Title
\r
132 if (parsed.DVDTitle == 0)
\r
135 title = parsed.DVDTitle.ToString();
\r
137 // Get the DVD Chapters
\r
138 string chapters = "";
\r
139 if (parsed.DVDChapterStart == 0)
\r
143 chapters = parsed.DVDChapterStart.ToString();
\r
144 if (parsed.DVDChapterFinish != 0)
\r
145 chapters = chapters + " - " + parsed.DVDChapterFinish;
\r
148 ListViewItem item = new ListViewItem();
\r
149 item.Text = title; // Title
\r
150 item.SubItems.Add(chapters); // Chapters
\r
151 item.SubItems.Add(queue_item.Source); // Source
\r
152 item.SubItems.Add(queue_item.Destination); // Destination
\r
153 item.SubItems.Add(parsed.VideoEncoder); // Video
\r
154 item.SubItems.Add(parsed.AudioEncoder1); // Audio
\r
156 list_queue.Items.Add(item);
\r
159 private void updateUIElements()
\r
161 if (this.InvokeRequired)
\r
163 this.BeginInvoke(new UpdateHandler(updateUIElements));
\r
168 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";
\r
170 private void setCurrentEncodeInformation()
\r
174 if (this.InvokeRequired)
\r
176 this.BeginInvoke(new UpdateHandler(setCurrentEncodeInformation));
\r
179 // found query is a global varible
\r
180 Functions.QueryParser parsed = Functions.QueryParser.Parse(queue.getLastQueryItem().Query);
\r
181 lbl_source.Text = queue.getLastQueryItem().Source;
\r
182 lbl_dest.Text = queue.getLastQueryItem().Destination;
\r
184 if (parsed.DVDTitle == 0)
\r
185 lbl_title.Text = "Auto";
\r
187 lbl_title.Text = parsed.DVDTitle.ToString();
\r
189 string chapters = "";
\r
190 if (parsed.DVDChapterStart == 0)
\r
192 lbl_chapt.Text = "Auto";
\r
196 chapters = parsed.DVDChapterStart.ToString();
\r
197 if (parsed.DVDChapterFinish != 0)
\r
198 chapters = chapters + " - " + parsed.DVDChapterFinish;
\r
199 lbl_chapt.Text = chapters;
\r
202 lbl_vEnc.Text = parsed.VideoEncoder;
\r
203 lbl_aEnc.Text = parsed.AudioEncoder1;
\r
211 // Queue Management
\r
212 private void btn_up_Click(object sender, EventArgs e)
\r
214 if (list_queue.SelectedIndices.Count != 0)
\r
216 int selected = list_queue.SelectedIndices[0];
\r
218 queue.moveUp(selected);
\r
219 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
220 updateUIElements();
\r
222 if (selected - 1 > 0)
\r
223 list_queue.Items[selected - 1].Selected = true;
\r
225 list_queue.Select();
\r
228 private void btn_down_Click(object sender, EventArgs e)
\r
230 if (list_queue.SelectedIndices.Count != 0)
\r
232 int selected = list_queue.SelectedIndices[0];
\r
234 queue.moveDown(list_queue.SelectedIndices[0]);
\r
235 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
236 updateUIElements();
\r
238 if (selected + 1 < list_queue.Items.Count)
\r
239 list_queue.Items[selected + 1].Selected = true;
\r
241 list_queue.Select();
\r
244 private void btn_delete_Click(object sender, EventArgs e)
\r
246 if (list_queue.SelectedIndices.Count != 0)
\r
248 queue.remove(list_queue.SelectedIndices[0]);
\r
249 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
250 updateUIElements();
\r
251 lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";
\r
254 private void list_queue_deleteKey(object sender, KeyEventArgs e)
\r
256 if (e.KeyCode == Keys.Delete)
\r
258 if (list_queue.SelectedIndices.Count != 0)
\r
260 queue.remove(list_queue.SelectedIndices[0]);
\r
261 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file
\r
262 updateUIElements();
\r
267 // Queue Import/Export Features
\r
268 private void mnu_batch_Click(object sender, EventArgs e)
\r
270 SaveFile.FileName = "";
\r
271 SaveFile.Filter = "Batch|.bat";
\r
272 SaveFile.ShowDialog();
\r
273 if (SaveFile.FileName != String.Empty)
\r
274 queue.writeBatchScript(SaveFile.FileName);
\r
276 private void mnu_export_Click(object sender, EventArgs e)
\r
278 SaveFile.FileName = "";
\r
279 SaveFile.Filter = "HandBrake Queue|*.queue";
\r
280 SaveFile.ShowDialog();
\r
281 if (SaveFile.FileName != String.Empty)
\r
282 queue.write2disk(SaveFile.FileName);
\r
284 private void mnu_import_Click(object sender, EventArgs e)
\r
286 OpenFile.FileName = "";
\r
287 OpenFile.ShowDialog();
\r
288 if (OpenFile.FileName != String.Empty)
\r
289 queue.recoverQueue(OpenFile.FileName);
\r
290 updateUIElements();
\r
293 // Hide's the window when the user tries to "x" out of the window instead of closing it.
\r
294 protected override void OnClosing(CancelEventArgs e)
\r