OSDN Git Service

translation Controls and EncodeQueue
[handbrake-jp/handbrake-jp.git] / win / C# / frmPreview.cs
1 using System;\r
2 using System.Windows.Forms;\r
3 using System.Threading;\r
4 using System.Diagnostics;\r
5 using System.Runtime.InteropServices;\r
6 using System.IO;\r
7 using Handbrake.EncodeQueue;\r
8 using Handbrake.Functions;\r
9 using QTOControlLib;\r
10 using QTOLibrary;\r
11 \r
12 namespace Handbrake\r
13 {\r
14     public partial class frmPreview : Form\r
15     {\r
16 \r
17         QueryGenerator hb_common_func = new QueryGenerator();\r
18         EncodeAndQueueHandler process = new EncodeAndQueueHandler();\r
19         private delegate void UpdateUIHandler();\r
20         String currently_playing = "";\r
21         readonly frmMain mainWindow;\r
22         private Thread player;\r
23         private Boolean noQT;\r
24 \r
25         public frmPreview(frmMain mw)\r
26         {\r
27             try\r
28             {\r
29                 InitializeComponent();\r
30             }\r
31             catch (Exception exc)\r
32             {\r
33                 MessageBox.Show(mw, "QuickTimeでのプレビューにはQuickTime 7が必要です。QuickTime 7をインストールしてください。\n\n Debug Info:\n" + exc, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
34                 btn_playQT.Enabled = false;\r
35                 noQT = true;\r
36             }\r
37             this.mainWindow = mw;\r
38             cb_preview.SelectedIndex = 0;\r
39             cb_duration.SelectedIndex = 1;\r
40         }\r
41 \r
42         #region Encode Sample\r
43         private void btn_playVLC_Click(object sender, EventArgs e)\r
44         {\r
45             lbl_status.Visible = true;\r
46             try\r
47             {\r
48                 QTControl.URL = "";\r
49                 if (File.Exists(currently_playing))\r
50                     File.Delete(currently_playing);\r
51             }\r
52             catch (Exception)\r
53             {\r
54                 MessageBox.Show(this, "存在するプレビュー用ファイルを削除できません。アプリケーションを再起動すると解決するかもしれません。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
55             }\r
56 \r
57             btn_playQT.Enabled = false;\r
58             btn_playVLC.Enabled = false;\r
59             lbl_status.Text = "サンプル表示用ファイル(VLC用)を作成中...";\r
60             int duration;\r
61             int.TryParse(cb_duration.Text, out duration);\r
62             String query = hb_common_func.GenerateCLIQuery(mainWindow, duration, cb_preview.Text);\r
63             ThreadPool.QueueUserWorkItem(procMonitor, query);\r
64         }\r
65         private void btn_playQT_Click(object sender, EventArgs e)\r
66         {\r
67             if (mainWindow.text_destination.Text.Contains(".mkv"))\r
68             {\r
69                 MessageBox.Show(this,\r
70                                 "QuickTimeはMKVファイルをサポートしていません。VLCを利用してください。",\r
71                                 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
72             }\r
73             else\r
74             {\r
75                 lbl_status.Visible = true;\r
76                 try\r
77                 {\r
78                     QTControl.URL = "";\r
79                     if (File.Exists(currently_playing))\r
80                         File.Delete(currently_playing);\r
81                 }\r
82                 catch (Exception)\r
83                 {\r
84                     MessageBox.Show(this, "以前作成したプレビュー用ファイルを削除できません。アプリケーションを再起動すると解決するかもしれません。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
85                 }\r
86 \r
87                 btn_playQT.Enabled = false;\r
88                 btn_playVLC.Enabled = false;\r
89                 lbl_status.Text = "サンプル表示用ファイル(QuickTime用)を作成中...";\r
90                 int duration;\r
91                 int.TryParse(cb_duration.Text, out duration);\r
92                 String query = hb_common_func.GenerateCLIQuery(mainWindow, duration, cb_preview.Text);\r
93 \r
94                 ThreadPool.QueueUserWorkItem(procMonitor, query);\r
95             }\r
96         }\r
97         private void procMonitor(object state)\r
98         {\r
99             // Make sure we are not already encoding and if we are then display an error.\r
100             if (process.hbProcess != null)\r
101                 MessageBox.Show(this, "すでに動画の変換作業は完了しています!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
102             else\r
103             {\r
104                 process.RunCli((string)state);\r
105                 if (process.hbProcess != null)\r
106                 {\r
107                     process.hbProcess.WaitForExit();\r
108                     process.hbProcess = null;\r
109                 }\r
110                 encodeCompleted();\r
111             }\r
112         }\r
113         private void encodeCompleted()\r
114         {\r
115             try\r
116             {\r
117                 if (InvokeRequired)\r
118                 {\r
119                     BeginInvoke(new UpdateUIHandler(encodeCompleted));\r
120                     return;\r
121                 }\r
122                 if (!noQT)\r
123                     btn_playQT.Enabled = true;\r
124                 btn_playVLC.Enabled = true;\r
125 \r
126                 // Decide which player to use.\r
127                 String playerSelection = lbl_status.Text.Contains("QT") ? "QT" : "VLC";\r
128 \r
129                 lbl_status.Text = "ロード中...";\r
130 \r
131                 // Get the sample filename\r
132                 if (mainWindow.text_destination.Text != "")\r
133                     currently_playing = mainWindow.text_destination.Text.Replace(".mp4", "_sample.mp4").Replace(".m4v", "_sample.m4v").Replace(".mkv", "_sample.mkv"); ;\r
134 \r
135                 // Play back in QT or VLC\r
136                 if (playerSelection == "QT")\r
137                     play();\r
138                 else\r
139                     playVLC();\r
140 \r
141                 lbl_status.Text = "";\r
142             }\r
143             catch (Exception exc)\r
144             {\r
145                 MessageBox.Show(this, "frmPreview.cs encodeCompleted " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
146             }\r
147         }\r
148         #endregion\r
149 \r
150         #region Playback\r
151 \r
152         /// <summary>\r
153         /// Play the video back in the QuickTime control\r
154         /// </summary>\r
155         private void play()\r
156         {\r
157             player = new Thread(OpenMovie) { IsBackground = true };\r
158             player.Start();\r
159             lbl_status.Visible = false;\r
160         }\r
161 \r
162         /// <summary>\r
163         /// Play the video back in an external VLC player\r
164         /// </summary>\r
165         private void playVLC()\r
166         {\r
167             // Launch VLC and play video.\r
168             if (currently_playing != "")\r
169             {\r
170                 if (File.Exists(currently_playing))\r
171                 {\r
172                     if (File.Exists(Properties.Settings.Default.VLC_Path))\r
173                     {\r
174                         String args = "\"" + currently_playing + "\"";\r
175                         ProcessStartInfo vlc = new ProcessStartInfo(Properties.Settings.Default.VLC_Path, args);\r
176                         Process.Start(vlc);\r
177                         lbl_status.Text = "VLCを起動します。";\r
178                     }\r
179                     else\r
180                         MessageBox.Show(this, "VLCを見つけられませんでした。VLCがインストールされているか、またオプションで正しいパスを指定しているかどうかを確認してください。\nこの設定は、「ツール」メニューの「オプション」を選択→「画像」タブで変更できます。", "VLC", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
181                 }\r
182                 else\r
183                     MessageBox.Show(this, "プレビュー用のファイルを見つけられませんでした。プレビュー用ファイルが削除されたか、作成に失敗した可能性があります。詳しくは履歴ログを確認してください。", "VLC", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
184             }\r
185             lbl_status.Visible = false;\r
186         }\r
187 \r
188         /// <summary>\r
189         /// QT control - Open the file\r
190         /// </summary>\r
191         [STAThread]\r
192         private void OpenMovie()\r
193         {\r
194             try\r
195             {\r
196                 if (InvokeRequired)\r
197                 {\r
198                     BeginInvoke(new UpdateUIHandler(OpenMovie));\r
199                     return;\r
200                 }\r
201                 QTControl.URL = currently_playing;\r
202                 QTControl.SetSizing(QTSizingModeEnum.qtControlFitsMovie, true);\r
203                 QTControl.URL = currently_playing;\r
204                 QTControl.Show();\r
205 \r
206                 this.ClientSize = QTControl.Size;\r
207                 this.Height += 25;\r
208             }\r
209             catch (COMException ex)\r
210             {\r
211                 QTUtils qtu = new QTUtils();\r
212                 MessageBox.Show(this, "動画ファイルを開けませんでした。\n\nError Code: " + ex.ErrorCode.ToString("X") + "\nQT Error code : " + qtu.QTErrorFromErrorCode(ex.ErrorCode), "QT", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
213             }\r
214             catch (Exception ex)\r
215             {\r
216                 MessageBox.Show(this, "動画ファイルを開けませんでした。\n\n" + ex, "QT", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
217             }\r
218         }\r
219         #endregion\r
220     }\r
221 }\r