OSDN Git Service

2fb6169a2ba507f766e6952b72697a22292850e6
[handbrake-jp/handbrake-jp-git.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.Collections;\r
10 using System.ComponentModel;\r
11 using System.Data;\r
12 using System.Drawing;\r
13 using System.Text;\r
14 using System.Windows.Forms;\r
15 using System.Threading;\r
16 using System.Diagnostics;\r
17 using System.Runtime.InteropServices;\r
18 using System.IO;\r
19 \r
20 namespace Handbrake\r
21 {\r
22     public partial class frmQueue : Form\r
23     {\r
24         private delegate void UpdateHandler();\r
25         Queue.QueueHandler queue;\r
26 \r
27         public frmQueue(Queue.QueueHandler q)\r
28         {\r
29             InitializeComponent();\r
30 \r
31             this.queue = q;\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
35         }\r
36         void queue_OnPaused(object sender, EventArgs e)\r
37         {\r
38             setUIEncodeFinished();\r
39             updateUIElements();\r
40         }\r
41         void queue_OnQueueFinished(object sender, EventArgs e)\r
42         {\r
43             setUIEncodeFinished();\r
44             resetQueue(); // Reset the Queue Window\r
45         }\r
46         void queue_OnEncodeStart(object sender, EventArgs e)\r
47         {\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
51         }\r
52 \r
53         /// <summary>\r
54         /// Initializes the Queue list with the Arraylist from the Queue class\r
55         /// </summary>\r
56         /// <param name="qw"></param>\r
57         public void setQueue()\r
58         {\r
59             updateUIElements();\r
60         }\r
61 \r
62         // Start and Stop Controls\r
63         private void btn_encode_Click(object sender, EventArgs e)\r
64         {\r
65             if (queue.isPaused == true)\r
66             {\r
67                 setUIEncodeStarted();\r
68                 MessageBox.Show("Encoding restarted", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
69             }\r
70 \r
71             if (!queue.isEncodeStarted)\r
72                 queue.startEncode();\r
73 \r
74         }\r
75         private void btn_pause_Click(object sender, EventArgs e)\r
76         {\r
77             queue.pauseEncode();\r
78             setUIEncodeFinished();\r
79             resetQueue();\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
81         }\r
82 \r
83         // Window Display Management\r
84         private void setUIEncodeStarted()\r
85         {\r
86             if (this.InvokeRequired)\r
87             {\r
88                 this.BeginInvoke(new UpdateHandler(setUIEncodeStarted));\r
89                 return;\r
90             }\r
91             btn_encode.Enabled = false;\r
92             btn_pause.Visible = true;\r
93         }\r
94         private void setUIEncodeFinished()\r
95         {\r
96             if (this.InvokeRequired)\r
97             {\r
98                 this.BeginInvoke(new UpdateHandler(setUIEncodeFinished));\r
99                 return;\r
100             }\r
101             btn_pause.Visible = false;\r
102             btn_encode.Enabled = true;\r
103         }\r
104         private void resetQueue()\r
105         {\r
106             if (this.InvokeRequired)\r
107             {\r
108                 this.BeginInvoke(new UpdateHandler(resetQueue));\r
109                 return;\r
110             }\r
111             btn_pause.Visible = false;\r
112             btn_encode.Enabled = true;\r
113 \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
120 \r
121             lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
122         }\r
123         private void redrawQueue()\r
124         {\r
125             if (this.InvokeRequired)\r
126             {\r
127                 this.BeginInvoke(new UpdateHandler(redrawQueue));\r
128                 return;\r
129             }\r
130 \r
131             list_queue.Items.Clear();\r
132             List<Queue.QueueItem> theQueue = queue.getQueue();\r
133             foreach (Queue.QueueItem queue_item in theQueue)\r
134             {\r
135                 string q_item = queue_item.Query;\r
136                 Functions.QueryParser parsed = Functions.QueryParser.Parse(q_item);\r
137 \r
138                 // Get the DVD Title\r
139                 string title = "";\r
140                 if (parsed.DVDTitle == 0)\r
141                     title = "Auto";\r
142                 else\r
143                     title = parsed.DVDTitle.ToString();\r
144 \r
145                 // Get the DVD Chapters\r
146                 string chapters = "";\r
147                 if (parsed.DVDChapterStart == 0)\r
148                     chapters = "Auto";\r
149                 else\r
150                 {\r
151                     chapters = parsed.DVDChapterStart.ToString();\r
152                     if (parsed.DVDChapterFinish != 0)\r
153                         chapters = chapters + " - " + parsed.DVDChapterFinish;\r
154                 }\r
155 \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
163 \r
164                 list_queue.Items.Add(item);\r
165             }\r
166         }\r
167         private void updateUIElements()\r
168         {\r
169             if (this.InvokeRequired)\r
170             {\r
171                 this.BeginInvoke(new UpdateHandler(updateUIElements));\r
172                 return;\r
173             }\r
174 \r
175             redrawQueue();\r
176             lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
177         }\r
178         private void setCurrentEncodeInformation()\r
179         {\r
180             try\r
181             {\r
182                 if (this.InvokeRequired)\r
183                 {\r
184                     this.BeginInvoke(new UpdateHandler(setCurrentEncodeInformation));\r
185                 }\r
186 \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
191 \r
192                 if (parsed.DVDTitle == 0)\r
193                     lbl_title.Text = "Auto";\r
194                 else\r
195                     lbl_title.Text = parsed.DVDTitle.ToString();\r
196 \r
197                 string chapters = "";\r
198                 if (parsed.DVDChapterStart == 0)\r
199                 {\r
200                     lbl_chapt.Text = "Auto";\r
201                 }\r
202                 else\r
203                 {\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
208                 }\r
209 \r
210                 lbl_vEnc.Text = parsed.VideoEncoder;\r
211                 lbl_aEnc.Text = parsed.AudioEncoder1;\r
212             }\r
213             catch (Exception)\r
214             {\r
215                 // Do Nothing\r
216             }\r
217         }\r
218 \r
219         // Queue Management\r
220         private void btn_up_Click(object sender, EventArgs e)\r
221         {\r
222             if (list_queue.SelectedIndices.Count != 0)\r
223             {\r
224                 int selected = list_queue.SelectedIndices[0];\r
225 \r
226                 queue.moveUp(selected);\r
227                 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
228                 updateUIElements();\r
229 \r
230                 if (selected - 1 > 0)\r
231                     list_queue.Items[selected - 1].Selected = true;\r
232 \r
233                 list_queue.Select();\r
234             }\r
235         }\r
236         private void btn_down_Click(object sender, EventArgs e)\r
237         {\r
238             if (list_queue.SelectedIndices.Count != 0)\r
239             {\r
240                 int selected = list_queue.SelectedIndices[0];\r
241 \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
245 \r
246                 if (selected + 1 < list_queue.Items.Count)\r
247                     list_queue.Items[selected + 1].Selected = true;\r
248 \r
249                 list_queue.Select();\r
250             }\r
251         }\r
252         private void btn_delete_Click(object sender, EventArgs e)\r
253         {\r
254             if (list_queue.SelectedIndices.Count != 0)\r
255             {\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
260             }\r
261         }\r
262         private void list_queue_deleteKey(object sender, KeyEventArgs e)\r
263         {\r
264             if (e.KeyCode == Keys.Delete)\r
265             {\r
266                 if (list_queue.SelectedIndices.Count != 0)\r
267                 {\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
271                 }\r
272             }\r
273         }\r
274 \r
275         // Queue Import/Export Features\r
276         private void mnu_batch_Click(object sender, EventArgs e)\r
277         {\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
283         }\r
284         private void mnu_export_Click(object sender, EventArgs e)\r
285         {\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
291         }\r
292         private void mnu_import_Click(object sender, EventArgs e)\r
293         {\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
299         }\r
300 \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
303         {\r
304             e.Cancel = true;\r
305             this.Hide();\r
306             base.OnClosing(e);\r
307         }\r
308     }\r
309 }