OSDN Git Service

1a9f30c7b2c8f10b6c27751343f4579100830b43
[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.ComponentModel;\r
10 using System.Windows.Forms;\r
11 \r
12 namespace Handbrake\r
13 {\r
14     public partial class frmQueue : Form\r
15     {\r
16         private delegate void UpdateHandler();\r
17         Queue.QueueHandler queue;\r
18 \r
19         public frmQueue(Queue.QueueHandler q)\r
20         {\r
21             InitializeComponent();\r
22 \r
23             this.queue = q;\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
27         }\r
28         void queue_OnPaused(object sender, EventArgs e)\r
29         {\r
30             setUIEncodeFinished();\r
31             updateUIElements();\r
32         }\r
33         void queue_OnQueueFinished(object sender, EventArgs e)\r
34         {\r
35             setUIEncodeFinished();\r
36             resetQueue(); // Reset the Queue Window\r
37         }\r
38         void queue_OnEncodeStart(object sender, EventArgs e)\r
39         {\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
43         }\r
44 \r
45         /// <summary>\r
46         /// Initializes the Queue list with the Arraylist from the Queue class\r
47         /// </summary>\r
48         /// <param name="qw"></param>\r
49         public void setQueue()\r
50         {\r
51             updateUIElements();\r
52         }\r
53 \r
54         // Start and Stop Controls\r
55         private void btn_encode_Click(object sender, EventArgs e)\r
56         {\r
57             if (queue.isPaused == true)\r
58             {\r
59                 setUIEncodeStarted();\r
60                 MessageBox.Show("Encoding restarted", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);\r
61             }\r
62 \r
63             if (!queue.isEncodeStarted)\r
64                 queue.startEncode();\r
65 \r
66         }\r
67         private void btn_pause_Click(object sender, EventArgs e)\r
68         {\r
69             queue.pauseEncode();\r
70             setUIEncodeFinished();\r
71             resetQueue();\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
73         }\r
74 \r
75         // Window Display Management\r
76         private void setUIEncodeStarted()\r
77         {\r
78             if (this.InvokeRequired)\r
79             {\r
80                 this.BeginInvoke(new UpdateHandler(setUIEncodeStarted));\r
81                 return;\r
82             }\r
83             btn_encode.Enabled = false;\r
84             btn_pause.Visible = true;\r
85         }\r
86         private void setUIEncodeFinished()\r
87         {\r
88             if (this.InvokeRequired)\r
89             {\r
90                 this.BeginInvoke(new UpdateHandler(setUIEncodeFinished));\r
91                 return;\r
92             }\r
93             btn_pause.Visible = false;\r
94             btn_encode.Enabled = true;\r
95         }\r
96         private void resetQueue()\r
97         {\r
98             if (this.InvokeRequired)\r
99             {\r
100                 this.BeginInvoke(new UpdateHandler(resetQueue));\r
101                 return;\r
102             }\r
103             btn_pause.Visible = false;\r
104             btn_encode.Enabled = true;\r
105 \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
112 \r
113             lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
114         }\r
115         private void redrawQueue()\r
116         {\r
117             if (this.InvokeRequired)\r
118             {\r
119                 this.BeginInvoke(new UpdateHandler(redrawQueue));\r
120                 return;\r
121             }\r
122 \r
123             list_queue.Items.Clear();\r
124             List<Queue.QueueItem> theQueue = queue.getQueue();\r
125             foreach (Queue.QueueItem queue_item in theQueue)\r
126             {\r
127                 string q_item = queue_item.Query;\r
128                 Functions.QueryParser parsed = Functions.QueryParser.Parse(q_item);\r
129 \r
130                 // Get the DVD Title\r
131                 string title = "";\r
132                 if (parsed.DVDTitle == 0)\r
133                     title = "Auto";\r
134                 else\r
135                     title = parsed.DVDTitle.ToString();\r
136 \r
137                 // Get the DVD Chapters\r
138                 string chapters = "";\r
139                 if (parsed.DVDChapterStart == 0)\r
140                     chapters = "Auto";\r
141                 else\r
142                 {\r
143                     chapters = parsed.DVDChapterStart.ToString();\r
144                     if (parsed.DVDChapterFinish != 0)\r
145                         chapters = chapters + " - " + parsed.DVDChapterFinish;\r
146                 }\r
147 \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
155 \r
156                 list_queue.Items.Add(item);\r
157             }\r
158         }\r
159         private void updateUIElements()\r
160         {\r
161             if (this.InvokeRequired)\r
162             {\r
163                 this.BeginInvoke(new UpdateHandler(updateUIElements));\r
164                 return;\r
165             }\r
166 \r
167             redrawQueue();\r
168             lbl_encodesPending.Text = list_queue.Items.Count + " encode(s) pending";\r
169         }\r
170         private void setCurrentEncodeInformation()\r
171         {\r
172             try\r
173             {\r
174                 if (this.InvokeRequired)\r
175                 {\r
176                     this.BeginInvoke(new UpdateHandler(setCurrentEncodeInformation));\r
177                 }\r
178 \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
183 \r
184                 if (parsed.DVDTitle == 0)\r
185                     lbl_title.Text = "Auto";\r
186                 else\r
187                     lbl_title.Text = parsed.DVDTitle.ToString();\r
188 \r
189                 string chapters = "";\r
190                 if (parsed.DVDChapterStart == 0)\r
191                 {\r
192                     lbl_chapt.Text = "Auto";\r
193                 }\r
194                 else\r
195                 {\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
200                 }\r
201 \r
202                 lbl_vEnc.Text = parsed.VideoEncoder;\r
203                 lbl_aEnc.Text = parsed.AudioEncoder1;\r
204             }\r
205             catch (Exception)\r
206             {\r
207                 // Do Nothing\r
208             }\r
209         }\r
210 \r
211         // Queue Management\r
212         private void btn_up_Click(object sender, EventArgs e)\r
213         {\r
214             if (list_queue.SelectedIndices.Count != 0)\r
215             {\r
216                 int selected = list_queue.SelectedIndices[0];\r
217 \r
218                 queue.moveUp(selected);\r
219                 queue.write2disk("hb_queue_recovery.xml"); // Update the queue recovery file\r
220                 updateUIElements();\r
221 \r
222                 if (selected - 1 > 0)\r
223                     list_queue.Items[selected - 1].Selected = true;\r
224 \r
225                 list_queue.Select();\r
226             }\r
227         }\r
228         private void btn_down_Click(object sender, EventArgs e)\r
229         {\r
230             if (list_queue.SelectedIndices.Count != 0)\r
231             {\r
232                 int selected = list_queue.SelectedIndices[0];\r
233 \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
237 \r
238                 if (selected + 1 < list_queue.Items.Count)\r
239                     list_queue.Items[selected + 1].Selected = true;\r
240 \r
241                 list_queue.Select();\r
242             }\r
243         }\r
244         private void btn_delete_Click(object sender, EventArgs e)\r
245         {\r
246             if (list_queue.SelectedIndices.Count != 0)\r
247             {\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
252             }\r
253         }\r
254         private void list_queue_deleteKey(object sender, KeyEventArgs e)\r
255         {\r
256             if (e.KeyCode == Keys.Delete)\r
257             {\r
258                 if (list_queue.SelectedIndices.Count != 0)\r
259                 {\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
263                 }\r
264             }\r
265         }\r
266 \r
267         // Queue Import/Export Features\r
268         private void mnu_batch_Click(object sender, EventArgs e)\r
269         {\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
275         }\r
276         private void mnu_export_Click(object sender, EventArgs e)\r
277         {\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
283         }\r
284         private void mnu_import_Click(object sender, EventArgs e)\r
285         {\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
291         }\r
292 \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
295         {\r
296             e.Cancel = true;\r
297             this.Hide();\r
298             base.OnClosing(e);\r
299         }\r
300     }\r
301 }