OSDN Git Service

WinGui:
[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             scanProgress.Value = 0;\r
38             scanProgress.Visible = true;\r
39             // throw cli call and parsing on it's own thread\r
40             ThreadPool.QueueUserWorkItem(startProc);\r
41         }\r
42      \r
43         private void updateUIElements()\r
44         {\r
45             if (this.InvokeRequired)\r
46             {\r
47                 this.BeginInvoke(new UpdateUIHandler(updateUIElements));\r
48                 return;\r
49             }\r
50             // Now pass this streamreader to frmMain so that it can be used there.\r
51             mainWindow.setStreamReader(thisDvd);\r
52 \r
53             mainWindow.drp_dvdtitle.Items.Clear();\r
54             mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());\r
55 \r
56             this.Close();\r
57         }\r
58 \r
59         private void startProc(object state)\r
60         {\r
61             string query = "-i " + '"' + inputFile + '"' + " -t0";\r
62           \r
63             Functions.CLI process = new Functions.CLI();\r
64             hbProc = process.runCli(this, query, true, true, false, true);\r
65 \r
66             Parsing.Parser readData = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
67             //hbProc.WaitForExit();\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             this.scanProgress.Value = Convert.ToInt32(Convert.ToDouble(CurrentTitle) / Convert.ToDouble(TitleCount) * 100) + 1;\r
84         }\r
85 \r
86     }\r
87 }