OSDN Git Service

f969f9789bc57af8e0300a6d490bb5c832e10f3b
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmReadDVD.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.IO;\r
9 using System.Threading;\r
10 using System.Diagnostics;\r
11 \r
12 \r
13 namespace Handbrake\r
14 {\r
15     public partial class frmReadDVD : Form\r
16     {\r
17         private string inputFile;\r
18         private frmMain mainWindow;\r
19         private frmDvdInfo dvdInfo;\r
20         private Parsing.DVD thisDvd;\r
21         private Process hbProc;\r
22         private delegate void UpdateUIHandler();\r
23 \r
24         public frmReadDVD(string inputFile, frmMain parent, frmDvdInfo dvdInfoWindow)\r
25         {\r
26             InitializeComponent();\r
27             this.inputFile = inputFile;\r
28             this.mainWindow = parent;\r
29             this.dvdInfo = dvdInfoWindow;\r
30             Parsing.Parser.OnScanProgress += Parser_OnScanProgress;\r
31         }\r
32 \r
33         private void btn_ok_Click(object sender, EventArgs e)\r
34         {\r
35             btn_ok.Enabled = false;\r
36             lbl_pressOk.Visible = false;\r
37             lbl_progress.Text = "0%";\r
38             lbl_progress.Visible = true;\r
39             lbl_status.Visible = true;\r
40             // throw cli call and parsing on it's own thread\r
41             ThreadPool.QueueUserWorkItem(startProc);\r
42         }\r
43      \r
44         private void updateUIElements()\r
45         {\r
46             if (this.InvokeRequired)\r
47             {\r
48                 this.BeginInvoke(new UpdateUIHandler(updateUIElements));\r
49                 return;\r
50             }\r
51             // Now pass this streamreader to frmMain so that it can be used there.\r
52             mainWindow.setStreamReader(thisDvd);\r
53 \r
54             mainWindow.drp_dvdtitle.Items.Clear();\r
55             mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());\r
56 \r
57             this.Close();\r
58         }\r
59 \r
60         private void startProc(object state)\r
61         {\r
62             string query = "-i " + '"' + inputFile + '"' + " -t0";\r
63           \r
64             Functions.CLI process = new Functions.CLI();\r
65             hbProc = process.runCli(this, query, true, true, false, true);\r
66 \r
67             Parsing.Parser readData = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
68             hbProc.Close();\r
69 \r
70             // Setup the parser\r
71             thisDvd = Parsing.DVD.Parse(readData);\r
72 \r
73             updateUIElements();\r
74         }\r
75 \r
76         private void Parser_OnScanProgress(object Sender, int CurrentTitle, int TitleCount)\r
77         {\r
78             if (this.InvokeRequired)\r
79             {\r
80                 this.BeginInvoke(new Parsing.ScanProgressEventHandler(Parser_OnScanProgress), new object[] { Sender, CurrentTitle, TitleCount });\r
81                 return;\r
82             }\r
83             int progress = Convert.ToInt32(Convert.ToDouble(CurrentTitle) / Convert.ToDouble(TitleCount) * 100) + 1;\r
84             if (progress > 100)\r
85             {\r
86                 progress = 100;\r
87             }\r
88             this.lbl_progress.Text = progress.ToString() + "%";\r
89         }\r
90 \r
91     }\r
92 }