OSDN Git Service

gitattirubes test 2
[handbrake-jp/handbrake-jp.git] / win / C# / frmQueue.cs
1 /*  frmQueue.cs $\r
2         \r
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
6 \r
7 using System;\r
8 using System.Collections.Generic;\r
9 using System.ComponentModel;\r
10 using System.Windows.Forms;\r
11 using Handbrake.EncodeQueue;\r
12 using System.Collections.ObjectModel;\r
13 \r
14 namespace Handbrake\r
15 {\r
16     public partial class frmQueue : Form\r
17     {\r
18         private delegate void UpdateHandler();\r
19         private EncodeAndQueueHandler queue;\r
20 \r
21         public frmQueue(EncodeAndQueueHandler q)\r
22         {\r
23             InitializeComponent();\r
24 \r
25             this.queue = q;\r
26             queue.NewJobStarted += new EventHandler(queueOnEncodeStart);\r
27             queue.QueueCompleted += new EventHandler(queueOnQueueFinished);\r
28             queue.QueuePauseRequested += new EventHandler(queueOnPaused);\r
29         }\r
30         void queueOnPaused(object sender, EventArgs e)\r
31         {\r
32             setUIEncodeFinished();\r
33             updateUIElements();\r
34         }\r
35         void queueOnQueueFinished(object sender, EventArgs e)\r
36         {\r
37             setUIEncodeFinished();\r
38             resetQueue(); // Reset the Queue Window\r
39         }\r
40         void queueOnEncodeStart(object sender, EventArgs e)\r
41         {\r
42             setUIEncodeStarted(); // make sure the UI is set correctly\r
43             setCurrentEncodeInformation();\r
44             updateUIElements(); // Redraw the Queue, a new encode has started.\r
45         }\r
46 \r
47         /// <summary>\r
48         /// Initializes the Queue list with the Arraylist from the Queue class\r
49         /// </summary>\r
50         public void setQueue()\r
51         {\r
52 /* HEAD:\r
53             queue = qw;\r
54             redrawQueue();\r
55             lbl_encodesPending.Text = list_queue.Items.Count + "\8cÂ\82Ì\83W\83\87\83u\82ª\91Ò\8b@\92\86";\r
56 */\r
57             updateUIElements();\r
58         }\r
59 \r
60         /// <summary>\r
61         /// Initializes the Queue list, then shows and activates the window\r
62         /// </summary>\r
63         public new void Show()\r
64         {\r
65            Show(true);\r
66         }\r
67 \r
68         /// <summary>\r
69         /// Initializes the Queue list only if doSetQueue is true, then shows and activates the window\r
70         /// </summary>\r
71         /// <param name="doSetQueue">Indicates whether to call setQueue() before showing the window</param>\r
72         public void Show(bool doSetQueue)\r
73         {\r
74 /* HEAD:\r
75             list_queue.Items.Clear();\r
76             ArrayList theQueue = queue.getQueue();\r
77             foreach (ArrayList queue_item in theQueue)\r
78             {\r
79                 string q_item = queue_item[1].ToString();\r
80                 Functions.QueryParser parsed = Functions.QueryParser.Parse(q_item);\r
81 \r
82                 // Get the DVD Title\r
83                 string title = "";\r
84                 if (parsed.DVDTitle == 0)\r
85                     title = "Automatic";\r
86                 else\r
87                     title = parsed.DVDTitle.ToString();\r
88 \r
89                 // Get the DVD Chapters\r
90                 string chapters = "";\r
91                 if (parsed.DVDChapterStart == 0)\r
92                     chapters = "Auto";\r
93                 else\r
94                 {\r
95                     chapters = parsed.DVDChapterStart.ToString();\r
96                     if (parsed.DVDChapterFinish != 0)\r
97                         chapters = chapters + " - " + parsed.DVDChapterFinish;\r
98                 }\r
99 \r
100                 ListViewItem item = new ListViewItem();\r
101                 item.Text = title; // Title\r
102                 item.SubItems.Add(chapters); // Chapters\r
103                 item.SubItems.Add(parsed.Source); // Source\r
104                 item.SubItems.Add(parsed.Destination); // Destination\r
105                 item.SubItems.Add(parsed.VideoEncoder); // Video\r
106                 item.SubItems.Add(parsed.AudioEncoder1); // Audio\r
107 */\r
108             if (doSetQueue) setQueue();\r
109             base.Show();\r
110 \r
111             //Activate();\r
112         }\r
113 \r
114         // Start and Stop Controls\r
115         private void btn_encode_Click(object sender, EventArgs e)\r
116         {\r
117             if (queue.PauseRequested)\r
118             {\r
119                 setUIEncodeStarted();\r
120                 MessageBox.Show("\95Ï\8a·\8dì\8bÆ\82ª\8dÄ\8aJ\82³\82ê\82Ü\82µ\82½", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
121             }\r
122 \r
123             if (!queue.isEncoding)\r
124                 queue.StartEncodeQueue();\r
125 \r
126         }\r
127         private void btn_pause_Click(object sender, EventArgs e)\r
128         {\r
129             queue.RequestPause();\r
130             setUIEncodeFinished();\r
131             resetQueue();\r
132             MessageBox.Show("\83L\83\85\81[\93à\82É\82 \82é\83A\83C\83e\83\80\82Ì\95Ï\8a·\82Í\92â\8e~\82³\82ê\82Ü\82·\81B\8c»\8dÝ\95Ï\8a·\8dì\8bÆ\92\86\82Ì\83t\83@\83C\83\8b\82É\82Â\82¢\82Ä\82Í\8f\88\97\9d\82ª\91±\8ds\82³\82ê\82Ü\82·\81B\n\83L\83\85\81[\93à\82Ì\83A\83C\83e\83\80\82Ì\95Ï\8a·\82ð\8dÄ\8aJ\82µ\82½\82¢\8fê\8d\87\82Í\81u\95Ï\8a·\8aJ\8en\81v\82ð\83N\83\8a\83b\83N\82µ\82Ä\82­\82¾\82³\82¢\81B", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
133         }\r
134 \r
135         // Window Display Management\r
136         private void setUIEncodeStarted()\r
137         {\r
138             if (InvokeRequired)\r
139             {\r
140                 BeginInvoke(new UpdateHandler(setUIEncodeStarted));\r
141                 return;\r
142             }\r
143             btn_encode.Enabled = false;\r
144             btn_pause.Visible = true;\r
145         }\r
146         private void setUIEncodeFinished()\r
147         {\r
148             if (InvokeRequired)\r
149             {\r
150                 BeginInvoke(new UpdateHandler(setUIEncodeFinished));\r
151                 return;\r
152             }\r
153             btn_pause.Visible = false;\r
154             btn_encode.Enabled = true;\r
155         }\r
156         private void resetQueue()\r
157         {\r
158             if (InvokeRequired)\r
159             {\r
160                 BeginInvoke(new UpdateHandler(resetQueue));\r
161                 return;\r
162             }\r
163             btn_pause.Visible = false;\r
164             btn_encode.Enabled = true;\r
165 \r
166             lbl_source.Text = "-";\r
167             lbl_dest.Text = "-";\r
168             lbl_vEnc.Text = "-";\r
169             lbl_aEnc.Text = "-";\r
170             lbl_title.Text = "-";\r
171             lbl_chapt.Text = "-";\r
172 \r
173             lbl_encodesPending.Text = list_queue.Items.Count + " \8cÂ\82Ì\95Ï\8a·\8dì\8bÆ\82ª\91Ò\8b@\92\86";\r
174         }\r
175         private void redrawQueue()\r
176         {\r
177             if (InvokeRequired)\r
178             {\r
179                 BeginInvoke(new UpdateHandler(redrawQueue));\r
180                 return;\r
181             }\r
182 \r
183             list_queue.Items.Clear();\r
184             ReadOnlyCollection<Job> theQueue = queue.CurrentQueue;\r
185             foreach (Job queue_item in theQueue)\r
186             {\r
187                 string q_item = queue_item.Query;\r
188                 Functions.QueryParser parsed = Functions.QueryParser.Parse(q_item);\r
189 \r
190                 // Get the DVD Title\r
191                 string title = parsed.DVDTitle == 0 ? "\8e©\93®" : parsed.DVDTitle.ToString();\r
192 \r
193 /* HEAD\r
194                 if (cancel == true)\r
195                 {\r
196                     lbl_progressValue.Text = "\83G\83\93\83R\81[\83h\82ª\83L\83\83\83\93\83Z\83\8b\82³\82ê\82Ü\82µ\82½";\r
197                 }\r
198                 else\r
199                 {\r
200                     lbl_progressValue.Text = "\83G\83\93\83R\81[\83h\8dì\8bÆ\82ð\8a®\97¹\82µ\82Ü\82µ\82½";\r
201 */\r
202                 // Get the DVD Chapters\r
203                 string chapters;\r
204                 if (parsed.DVDChapterStart == 0)\r
205                     chapters = "\8e©\93®";\r
206                 else\r
207                 {\r
208                     chapters = parsed.DVDChapterStart.ToString();\r
209                     if (parsed.DVDChapterFinish != 0)\r
210                         chapters = chapters + " - " + parsed.DVDChapterFinish;\r
211                 }\r
212 \r
213                 ListViewItem item = new ListViewItem();\r
214                 item.Text = title; // Title\r
215                 item.SubItems.Add(chapters); // Chapters\r
216                 item.SubItems.Add(queue_item.Source); // Source\r
217                 item.SubItems.Add(queue_item.Destination); // Destination\r
218                 item.SubItems.Add(parsed.VideoEncoder); // Video\r
219 \r
220                 // Display The Audio Track Information\r
221                 string audio = string.Empty;\r
222                 foreach (Functions.AudioTrack track in parsed.AudioInformation)\r
223                 {\r
224                     if (audio != "")\r
225                         audio += ", " + track.Encoder;\r
226                     else\r
227                         audio = track.Encoder;\r
228                 }\r
229                 item.SubItems.Add(audio); // Audio\r
230 \r
231 /* HEAD\r
232                 lbl_encodesPending.Text = list_queue.Items.Count + "\8cÂ\82Ì\83W\83\87\83u\82ª\91Ò\8b@\92\86";\r
233             }\r
234             catch (Exception exc)\r
235             {\r
236                 MessageBox.Show(exc.ToString());\r
237             }\r
238         }\r
239 \r
240         // Stop's the queue from continuing. \r
241         private void btn_stop_Click(object sender, EventArgs e)\r
242         {\r
243             cancel = true;\r
244             btn_stop.Visible = false;\r
245             btn_encode.Enabled = true;\r
246             MessageBox.Show("\83L\83\85\81[\82Ì\8eÀ\8ds\82ª\92â\8e~\82³\82ê\82Ü\82µ\82½\81B. \8c»\8dÝ\83G\83\93\83R\81[\83h\92\86\82Ì\8f\88\97\9d\82Í\8a®\97¹\82·\82é\82Ü\82Å\8cp\91±\82³\82ê\82Ü\82·\81B\n\83L\83\85\81[\82Ì\8dì\8bÆ\82ð\8dÄ\8aJ\82µ\82½\82¢\8fê\8d\87\82Í\81u\83G\83\93\83R\81[\83h\81v\82ð\83N\83\8a\83b\83N\82µ\82Ä\82­\82¾\82³\82¢\81B", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
247         }\r
248 \r
249         // Updates the progress bar and progress label for a new status.\r
250         private void updateUIElements()\r
251         {\r
252             try\r
253             {\r
254                 if (this.InvokeRequired)\r
255                 {\r
256                     this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
257                     return;\r
258                 }\r
259 \r
260                 redrawQueue();\r
261 \r
262                 progressBar.PerformStep();\r
263                 lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);\r
264                 lbl_encodesPending.Text = list_queue.Items.Count + "\8cÂ\82Ì\83W\83\87\83u\82ª\91Ò\8b@\92\86";\r
265             }\r
266             catch (Exception exc)\r
267 */\r
268                 list_queue.Items.Add(item);\r
269             }\r
270         }\r
271         private void updateUIElements()\r
272         {\r
273             if (InvokeRequired)\r
274             {\r
275                 BeginInvoke(new UpdateHandler(updateUIElements));\r
276                 return;\r
277             }\r
278 \r
279             redrawQueue();\r
280             lbl_encodesPending.Text = list_queue.Items.Count + " \8cÂ\82Ì\95Ï\8a·\8dì\8bÆ\82ª\91Ò\8b@\92\86";\r
281         }\r
282         private void setCurrentEncodeInformation()\r
283         {\r
284             try\r
285             {\r
286                 if (InvokeRequired)\r
287                 {\r
288                     BeginInvoke(new UpdateHandler(setCurrentEncodeInformation));\r
289                 }\r
290 \r
291                 // found query is a global varible\r
292                 Functions.QueryParser parsed = Functions.QueryParser.Parse(queue.LastEncode.Query);\r
293                 lbl_source.Text = queue.LastEncode.Source;\r
294                 lbl_dest.Text = queue.LastEncode.Destination;\r
295 \r
296                 lbl_title.Text = parsed.DVDTitle == 0 ? "\8e©\93®" : parsed.DVDTitle.ToString();\r
297 \r
298 /* HEAD\r
299                 if (parsed.DVDTitle == 0)\r
300                     lbl_title.Text = "Automatic";\r
301                 else\r
302                     lbl_title.Text = parsed.DVDTitle.ToString();\r
303 \r
304                 string chapters = "";\r
305                 if (parsed.DVDChapterStart == 0)\r
306                 {\r
307 */\r
308                 if (Equals(parsed.DVDChapterStart, 0))\r
309                     lbl_chapt.Text = "Auto";\r
310                 else\r
311                 {\r
312                     string chapters = parsed.DVDChapterStart.ToString();\r
313                     if (parsed.DVDChapterFinish != 0)\r
314                         chapters = chapters + " - " + parsed.DVDChapterFinish;\r
315                     lbl_chapt.Text = chapters;\r
316                 }\r
317 \r
318                 lbl_vEnc.Text = parsed.VideoEncoder;\r
319 \r
320                 // Display The Audio Track Information\r
321                 string audio = string.Empty;\r
322                 foreach (Functions.AudioTrack track in parsed.AudioInformation)\r
323                 {\r
324                     if (audio != "")\r
325                         audio += ", " + track.Encoder;\r
326                     else\r
327                         audio = track.Encoder;\r
328                 }\r
329                 lbl_aEnc.Text = audio;\r
330             }\r
331             catch (Exception)\r
332             {\r
333                 // Do Nothing\r
334             }\r
335         }\r
336         private void deleteSelectedItems()\r
337         {\r
338             // If there are selected items\r
339             if (list_queue.SelectedIndices.Count > 0)\r
340             {\r
341                 // Save the selected indices to select them after the move\r
342                 List<int> selectedIndices = new List<int>(list_queue.SelectedIndices.Count);\r
343                 foreach (int selectedIndex in list_queue.SelectedIndices)\r
344                     selectedIndices.Add(selectedIndex);\r
345 \r
346                 int firstSelectedIndex = selectedIndices[0];\r
347 \r
348                 // Reverse the list to delete the items from last to first (preserves indices)\r
349                 selectedIndices.Reverse();\r
350 \r
351                 // Remove each selected item\r
352                 foreach (int selectedIndex in selectedIndices)\r
353                     queue.RemoveJob(selectedIndex);\r
354 \r
355                 updateUIElements();\r
356 \r
357                 // Select the item where the first deleted item was previously\r
358                 if (firstSelectedIndex < list_queue.Items.Count)\r
359                     list_queue.Items[firstSelectedIndex].Selected = true;\r
360             }\r
361 \r
362             list_queue.Select(); // Activate the control to show the selected items\r
363         }\r
364 \r
365         // Queue Management\r
366         private void mnu_up_Click(object sender, EventArgs e)\r
367         {\r
368             moveUp();\r
369         }\r
370         private void mnu_Down_Click(object sender, EventArgs e)\r
371         {\r
372             moveDown();\r
373         }\r
374         private void mnu_delete_Click(object sender, EventArgs e)\r
375         {\r
376             deleteSelectedItems();\r
377         }\r
378         private void btn_up_Click(object sender, EventArgs e)\r
379         {\r
380             moveUp();\r
381         }\r
382         private void btn_down_Click(object sender, EventArgs e)\r
383         {\r
384             moveDown();\r
385         }\r
386         private void btn_delete_Click(object sender, EventArgs e)\r
387         {\r
388             deleteSelectedItems();\r
389         }\r
390         private void list_queue_deleteKey(object sender, KeyEventArgs e)\r
391         {\r
392             if (e.KeyCode == Keys.Delete)\r
393                 deleteSelectedItems();\r
394         }\r
395         private void moveUp()\r
396         {\r
397             // If there are selected items and the first item is not selected\r
398             if (list_queue.SelectedIndices.Count > 0 && !list_queue.SelectedIndices.Contains(0))\r
399             {\r
400                 // Copy the selected indices to preserve them during the movement\r
401                 List<int> selectedIndices = new List<int>(list_queue.SelectedIndices.Count);\r
402                 foreach (int selectedIndex in list_queue.SelectedIndices)\r
403                     selectedIndices.Add(selectedIndex);\r
404 \r
405                 // Move up each selected item\r
406                 foreach (int selectedIndex in selectedIndices)\r
407                     queue.MoveUp(selectedIndex);\r
408 \r
409                 updateUIElements();\r
410 \r
411                 // Keep the selected item(s) selected, now moved up one index\r
412                 foreach (int selectedIndex in selectedIndices)\r
413                     if (selectedIndex - 1 > -1) // Defensive programming: ensure index is good\r
414                         list_queue.Items[selectedIndex - 1].Selected = true;\r
415             }\r
416 \r
417             list_queue.Select(); // Activate the control to show the selected items\r
418         }\r
419         private void moveDown()\r
420         {\r
421             // If there are selected items and the last item is not selected\r
422             if (list_queue.SelectedIndices.Count > 0 &&\r
423                 !list_queue.SelectedIndices.Contains(list_queue.Items[list_queue.Items.Count - 1].Index))\r
424             {\r
425 /* HEAD\r
426                 queue.remove(list_queue.SelectedIndices[0]);\r
427                 queue.write2disk("hb_queue_recovery.dat"); // Update the queue recovery file\r
428                 redrawQueue();\r
429                 lbl_encodesPending.Text = list_queue.Items.Count + "\8cÂ\82Ì\83W\83\87\83u\82ª\91Ò\8b@\92\86";\r
430 */\r
431                 // Copy the selected indices to preserve them during the movement\r
432                 List<int> selectedIndices = new List<int>(list_queue.SelectedIndices.Count);\r
433                 foreach (int selectedIndex in list_queue.SelectedIndices)\r
434                     selectedIndices.Add(selectedIndex);\r
435 \r
436                 // Reverse the indices to move the items down from last to first (preserves indices)\r
437                 selectedIndices.Reverse();\r
438 \r
439                 // Move down each selected item\r
440                 foreach (int selectedIndex in selectedIndices)\r
441                     queue.MoveDown(selectedIndex);\r
442 \r
443                 updateUIElements();\r
444 \r
445                 // Keep the selected item(s) selected, now moved down one index\r
446                 foreach (int selectedIndex in selectedIndices)\r
447                     if (selectedIndex + 1 < list_queue.Items.Count) // Defensive programming: ensure index is good\r
448                         list_queue.Items[selectedIndex + 1].Selected = true;\r
449             }\r
450 \r
451             list_queue.Select(); // Activate the control to show the selected items\r
452         }\r
453 \r
454         // Queue Import/Export Features\r
455         private void mnu_batch_Click(object sender, EventArgs e)\r
456         {\r
457             SaveFile.FileName = "";\r
458             SaveFile.Filter = "Batch|.bat";\r
459             SaveFile.ShowDialog();\r
460             if (SaveFile.FileName != String.Empty)\r
461                 queue.WriteBatchScriptToFile(SaveFile.FileName);\r
462         }\r
463         private void mnu_export_Click(object sender, EventArgs e)\r
464         {\r
465             SaveFile.FileName = "";\r
466             SaveFile.Filter = "HandBrake Queue|*.queue";\r
467             SaveFile.ShowDialog();\r
468             if (SaveFile.FileName != String.Empty)\r
469                 queue.WriteQueueStateToFile(SaveFile.FileName);\r
470         }\r
471         private void mnu_import_Click(object sender, EventArgs e)\r
472         {\r
473             OpenFile.FileName = "";\r
474             OpenFile.ShowDialog();\r
475             if (OpenFile.FileName != String.Empty)\r
476                 queue.LoadQueueFromFile(OpenFile.FileName);\r
477             updateUIElements();\r
478         }\r
479         private void mnu_readd_Click(object sender, EventArgs e)\r
480         {\r
481             if (!queue.LastEncode.IsEmpty)\r
482             {\r
483                 queue.AddJob(queue.LastEncode.Query, queue.LastEncode.Source, queue.LastEncode.Destination, queue.LastEncode.CustomQuery);\r
484                 updateUIElements();\r
485             }\r
486         }\r
487 \r
488         // Hide's the window when the user tries to "x" out of the window instead of closing it.\r
489         protected override void OnClosing(CancelEventArgs e)\r
490         {\r
491             e.Cancel = true;\r
492             this.Hide();\r
493             base.OnClosing(e);\r
494         }\r
495 \r
496     }\r
497 }\r