OSDN Git Service

bc45d31b89ac544b33d7403b783b913af830d147
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmQueue.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.ComponentModel;\r
4 using System.Data;\r
5 using System.Drawing;\r
6 using System.Text;\r
7 using System.Windows.Forms;\r
8 using System.Threading;\r
9 using System.Diagnostics;\r
10 using System.Runtime.InteropServices;\r
11 \r
12 namespace Handbrake\r
13 {\r
14     public partial class frmQueue : Form\r
15     {\r
16         private delegate void ProgressUpdateHandler();\r
17 \r
18         public frmQueue()\r
19         {\r
20             InitializeComponent();\r
21         }\r
22 \r
23         #region Queue Handling\r
24 \r
25         private void btn_q_encoder_Click(object sender, EventArgs e)\r
26         {\r
27             progressBar.Value = 0;\r
28             lbl_progressValue.Text = "0 %";\r
29             progressBar.Step = 100 / list_queue.Items.Count;\r
30             progressBar.Update();\r
31             ThreadPool.QueueUserWorkItem(startProc);\r
32         }\r
33 \r
34         [DllImport("user32.dll")]\r
35         public static extern void LockWorkStation();\r
36         [DllImport("user32.dll")]\r
37         public static extern int ExitWindowsEx(int uFlags, int dwReason);\r
38 \r
39         private void startProc(object state)\r
40         {\r
41             try\r
42             {\r
43                 while (list_queue.Items.Count != 0)\r
44                 {\r
45                     string query = list_queue.Items[0].ToString();\r
46                     updateUIElements();\r
47                         \r
48                     Functions.CLI process = new Functions.CLI();\r
49                     Process hbProc = process.runCli(this, query, false, false, false, false);\r
50 \r
51                     hbProc.WaitForExit();\r
52                     hbProc.Close();\r
53                     hbProc.Dispose();\r
54                 }\r
55 \r
56                 resetQueue();\r
57 \r
58                 // Do something whent he encode ends.\r
59                 switch (Properties.Settings.Default.CompletionOption)\r
60                 {\r
61                     case "Shutdown":\r
62                         System.Diagnostics.Process.Start("Shutdown", "-s -t 60");\r
63                         break;\r
64                     case "Log Off":\r
65                         ExitWindowsEx(0, 0);\r
66                         break;\r
67                     case "Suspend":\r
68                         Application.SetSuspendState(PowerState.Suspend, true, true);\r
69                         break;\r
70                     case "Hibernate":\r
71                         Application.SetSuspendState(PowerState.Hibernate, true, true);\r
72                         break;\r
73                     case "Lock System":\r
74                         LockWorkStation();\r
75                         break;\r
76                     case "Quit HandBrake":\r
77                         Application.Exit();\r
78                         break;\r
79                     default:\r
80                         break;\r
81                 }\r
82 \r
83                 MessageBox.Show("Encode Queue Completed!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);\r
84             }\r
85             catch (Exception exc)\r
86             {\r
87                 MessageBox.Show(exc.ToString());\r
88             }\r
89         }\r
90 \r
91         private void updateUIElements()\r
92         {\r
93             if (this.InvokeRequired)\r
94             {\r
95                 this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));\r
96                 return;\r
97             }\r
98             this.list_queue.Items.RemoveAt(0);\r
99 \r
100             progressBar.PerformStep();\r
101             lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);\r
102             progressBar.Update();\r
103         }\r
104 \r
105         private void resetQueue()\r
106         {\r
107             if (this.InvokeRequired)\r
108             {\r
109                 this.BeginInvoke(new ProgressUpdateHandler(resetQueue));\r
110                 return;\r
111             }\r
112             lbl_progressValue.Text = "0 %";\r
113             progressBar.Value = 0;\r
114             progressBar.Update();\r
115         }\r
116 \r
117         #endregion\r
118 \r
119         #region Queue Management\r
120 \r
121         private void btn_up_Click(object sender, EventArgs e)\r
122         {\r
123             int count = list_queue.Items.Count;\r
124             int itemToMove = list_queue.SelectedIndex;\r
125             int previousItemint = 0;\r
126             String previousItem = "";\r
127 \r
128             if (itemToMove > 0)\r
129             {\r
130                 previousItemint = itemToMove - 1;\r
131                 previousItem = list_queue.Items[previousItemint].ToString();\r
132                 list_queue.Items[previousItemint] = list_queue.Items[itemToMove];\r
133                 list_queue.Items[itemToMove] = previousItem;\r
134                 list_queue.SelectedIndex = list_queue.SelectedIndex - 1;\r
135             }\r
136         }\r
137 \r
138         private void btn_down_Click(object sender, EventArgs e)\r
139         {\r
140             int count = list_queue.Items.Count;\r
141             int itemToMove = list_queue.SelectedIndex;\r
142             int itemAfterInt = 0;\r
143             String itemAfter = "";\r
144 \r
145             if (itemToMove < (count - 1))\r
146             {\r
147                 itemAfterInt = itemToMove + 1;\r
148                 itemAfter = list_queue.Items[itemAfterInt].ToString();\r
149                 list_queue.Items[itemAfterInt] = list_queue.Items[itemToMove];\r
150                 list_queue.Items[itemToMove] = itemAfter;\r
151                 list_queue.SelectedIndex = list_queue.SelectedIndex + 1;\r
152             }\r
153         }\r
154 \r
155         private void btn_delete_Click(object sender, EventArgs e)\r
156         {\r
157             list_queue.Items.Remove(list_queue.SelectedItem);\r
158         }\r
159         #endregion\r
160 \r
161         #region Window Management\r
162 \r
163         private void btn_Close_Click(object sender, EventArgs e)\r
164         {\r
165             this.Hide();\r
166         }\r
167 \r
168         private void btn_minimise_Click(object sender, EventArgs e)\r
169         {\r
170             this.WindowState = FormWindowState.Minimized;\r
171         }\r
172 \r
173         #endregion\r
174 \r
175     }\r
176 }