using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using NEROLib; namespace NeroFiddlesCOM.NET { /// /// Summary description for NVAPIForm. /// public class NVAPIForm : System.Windows.Forms.Form { private NeroDrive m_drive; private Nero m_nero; private ChooseBurnFlagsForm m_frmChooseBurnFlags; private ChooseSpeedForm m_frmChooseWriteSpeed; private NVAPIEstimateForm m_frmEstimateProgress; private NeroVisionAPI.Project m_project; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button c_Browse; private System.Windows.Forms.TextBox c_Filename; private System.Windows.Forms.TextBox c_Device; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button c_ChooseSpeed; private System.Windows.Forms.Button c_BurnFlags; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox c_Settings; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label5; private System.Windows.Forms.Button c_Estimate; private System.Windows.Forms.Button c_Burn; private System.Windows.Forms.TextBox c_EstimatedTime; private System.Windows.Forms.TextBox c_EstimatedSize; private System.Windows.Forms.Button c_Cancel; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public NVAPIForm(NeroDrive drive, Nero nero) { // // Required for Windows Form Designer support // InitializeComponent(); m_drive = drive; m_nero = nero; m_frmChooseBurnFlags = new ChooseBurnFlagsForm (); m_frmChooseWriteSpeed = new ChooseSpeedForm (m_drive, true); m_frmEstimateProgress = new NVAPIEstimateForm (); } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.c_Browse = new System.Windows.Forms.Button(); this.c_Filename = new System.Windows.Forms.TextBox(); this.c_Device = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.c_ChooseSpeed = new System.Windows.Forms.Button(); this.c_BurnFlags = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); this.c_Settings = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.c_Estimate = new System.Windows.Forms.Button(); this.c_Burn = new System.Windows.Forms.Button(); this.c_EstimatedTime = new System.Windows.Forms.TextBox(); this.c_EstimatedSize = new System.Windows.Forms.TextBox(); this.c_Cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(8, 48); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 16); this.label1.TabIndex = 2; this.label1.Text = "XML Project Filename:"; // // c_Browse // this.c_Browse.Location = new System.Drawing.Point(320, 64); this.c_Browse.Name = "c_Browse"; this.c_Browse.Size = new System.Drawing.Size(88, 23); this.c_Browse.TabIndex = 4; this.c_Browse.Text = "Browse"; this.c_Browse.Click += new System.EventHandler(this.c_Browse_Click); // // c_Filename // this.c_Filename.Location = new System.Drawing.Point(8, 64); this.c_Filename.Name = "c_Filename"; this.c_Filename.Size = new System.Drawing.Size(304, 20); this.c_Filename.TabIndex = 3; this.c_Filename.Text = ""; // // c_Device // this.c_Device.Location = new System.Drawing.Point(8, 24); this.c_Device.Name = "c_Device"; this.c_Device.ReadOnly = true; this.c_Device.Size = new System.Drawing.Size(192, 20); this.c_Device.TabIndex = 1; this.c_Device.Text = ""; // // label2 // this.label2.Location = new System.Drawing.Point(8, 8); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 16); this.label2.TabIndex = 0; this.label2.Text = "Device:"; // // c_ChooseSpeed // this.c_ChooseSpeed.Location = new System.Drawing.Point(320, 96); this.c_ChooseSpeed.Name = "c_ChooseSpeed"; this.c_ChooseSpeed.Size = new System.Drawing.Size(88, 23); this.c_ChooseSpeed.TabIndex = 7; this.c_ChooseSpeed.Text = "Choose Speed"; this.c_ChooseSpeed.Click += new System.EventHandler(this.c_ChooseSpeed_Click); // // c_BurnFlags // this.c_BurnFlags.Location = new System.Drawing.Point(320, 128); this.c_BurnFlags.Name = "c_BurnFlags"; this.c_BurnFlags.Size = new System.Drawing.Size(88, 23); this.c_BurnFlags.TabIndex = 8; this.c_BurnFlags.Text = "Burn Flags"; this.c_BurnFlags.Click += new System.EventHandler(this.c_BurnFlags_Click); // // label4 // this.label4.Location = new System.Drawing.Point(8, 88); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(120, 16); this.label4.TabIndex = 5; this.label4.Text = "Settings:"; // // c_Settings // this.c_Settings.Location = new System.Drawing.Point(8, 104); this.c_Settings.Multiline = true; this.c_Settings.Name = "c_Settings"; this.c_Settings.ReadOnly = true; this.c_Settings.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.c_Settings.Size = new System.Drawing.Size(304, 88); this.c_Settings.TabIndex = 6; this.c_Settings.Text = ""; // // label3 // this.label3.Location = new System.Drawing.Point(8, 200); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(192, 16); this.label3.TabIndex = 9; this.label3.Text = "Estimated time for video transcoding:"; // // label5 // this.label5.Location = new System.Drawing.Point(8, 248); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(120, 16); this.label5.TabIndex = 11; this.label5.Text = "Estimated disc size:"; // // c_Estimate // this.c_Estimate.Location = new System.Drawing.Point(320, 200); this.c_Estimate.Name = "c_Estimate"; this.c_Estimate.Size = new System.Drawing.Size(88, 23); this.c_Estimate.TabIndex = 13; this.c_Estimate.Text = "Estimate"; this.c_Estimate.Click += new System.EventHandler(this.c_Estimate_Click); // // c_Burn // this.c_Burn.Enabled = false; this.c_Burn.Location = new System.Drawing.Point(320, 232); this.c_Burn.Name = "c_Burn"; this.c_Burn.Size = new System.Drawing.Size(88, 23); this.c_Burn.TabIndex = 14; this.c_Burn.Text = "Burn"; this.c_Burn.Click += new System.EventHandler(this.c_Burn_Click); // // c_EstimatedTime // this.c_EstimatedTime.Location = new System.Drawing.Point(8, 216); this.c_EstimatedTime.Name = "c_EstimatedTime"; this.c_EstimatedTime.ReadOnly = true; this.c_EstimatedTime.Size = new System.Drawing.Size(160, 20); this.c_EstimatedTime.TabIndex = 10; this.c_EstimatedTime.Text = ""; // // c_EstimatedSize // this.c_EstimatedSize.Location = new System.Drawing.Point(8, 264); this.c_EstimatedSize.Name = "c_EstimatedSize"; this.c_EstimatedSize.ReadOnly = true; this.c_EstimatedSize.Size = new System.Drawing.Size(160, 20); this.c_EstimatedSize.TabIndex = 12; this.c_EstimatedSize.Text = ""; // // c_Cancel // this.c_Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.c_Cancel.Location = new System.Drawing.Point(320, 264); this.c_Cancel.Name = "c_Cancel"; this.c_Cancel.Size = new System.Drawing.Size(88, 23); this.c_Cancel.TabIndex = 15; this.c_Cancel.Text = "Cancel"; // // NVAPIForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.CancelButton = this.c_Cancel; this.ClientSize = new System.Drawing.Size(418, 296); this.Controls.Add(this.c_EstimatedTime); this.Controls.Add(this.c_Settings); this.Controls.Add(this.c_Device); this.Controls.Add(this.c_Filename); this.Controls.Add(this.c_EstimatedSize); this.Controls.Add(this.c_Browse); this.Controls.Add(this.label1); this.Controls.Add(this.label2); this.Controls.Add(this.c_ChooseSpeed); this.Controls.Add(this.c_BurnFlags); this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label5); this.Controls.Add(this.c_Estimate); this.Controls.Add(this.c_Burn); this.Controls.Add(this.c_Cancel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.Name = "NVAPIForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "NVAPIForm"; this.ResumeLayout(false); } #endregion protected override void OnLoad(EventArgs e) { base.OnLoad (e); c_Device.Text = m_drive.DeviceName; UpdateEstimateControls (); UpdateSettings (); } private void c_Browse_Click(object sender, System.EventArgs e) { OpenFileDialog dlg = new OpenFileDialog (); dlg.CheckFileExists = true; dlg.CheckPathExists = true; dlg.DefaultExt = ".xml"; dlg.FileName = c_Filename.Text; dlg.Filter = "XML Project files|*.xml|All files (*.*)|*.*"; if (DialogResult.OK == dlg.ShowDialog (this)) { c_Filename.Text = dlg.FileName; UpdateEstimateControls (); } } private void UpdateEstimateControls () { // Enable the Estimate button according to the content // of the filename editbox. // bool bEnabled = c_Filename.Text != ""; c_Estimate.Enabled = bEnabled; if (!bEnabled) { c_EstimatedTime.Text = "--- nothing yet ---"; c_EstimatedSize.Text = "--- nothing yet ---"; } } private void UpdateSettings () { // Update the settings readonly editbox with current // burn flags and write speed settings. // c_Settings.Text = "Burn flags: " + m_frmChooseBurnFlags.ToString () + "\r\n\r\n" + "Write speed: " + m_frmChooseWriteSpeed.ToString (); } private void c_BurnFlags_Click(object sender, System.EventArgs e) { if (DialogResult.OK == m_frmChooseBurnFlags.ShowDialog (this)) { UpdateSettings (); } } private void c_ChooseSpeed_Click(object sender, System.EventArgs e) { if (DialogResult.OK == m_frmChooseWriteSpeed.ShowDialog (this)) { UpdateSettings (); } } private void c_Estimate_Click(object sender, System.EventArgs e) { // The Estimate button is clicked. // bool bSuccess = false; // Create a new NeroVisionAPI project object. // m_project = new NeroVisionAPI.ProjectClass (); // Try load the XML project into the project object. // if (m_project.SetXMLFile (c_Filename.Text)) { // If the project is loaded successfully, launch the // estimation form which will display progress of the // estimation. // double seconds; NVAPIEstimateForm frmEstimate = new NVAPIEstimateForm (); if (frmEstimate.Estimate (this, m_project, out seconds)) { // If estimation went ok, display the estimated length. // c_EstimatedTime.Text = (seconds/60).ToString ("0") + " minutes and " + (seconds%60).ToString ("0") + " seconds"; long size; // Now, try estimating the disc size. // if (m_project.EstimateDiskSize (out size)) { c_EstimatedSize.Text = ((size + 512*1024)/(1024*1024)).ToString () + " MB"; bSuccess = true; } } } // Enable the burn button according to the estimation success. // c_Burn.Enabled = bSuccess; if (!bSuccess) { // If the estimation failed, show the error! // c_EstimatedTime.Text = "--- error estimating time ---"; c_EstimatedSize.Text = "--- error estimating size ---"; ShowNVAPIError (); } } private void ShowNVAPIError () { if (m_project != null) { // Get the error object from the project and // display its content. // NeroVisionAPI.IError err = m_project.LastError; MessageBox.Show (this, "Error: " + err.ErrText + ", code: " + err.ErrCode.ToString ()); } } private void c_Burn_Click(object sender, System.EventArgs e) { // When the Burn button is clicked, create an estimation form // which is used for showing transcoding progress as well. // NVAPIEstimateForm frmEstimate = new NVAPIEstimateForm (); NeroVisionAPI.INeroBurnContext pBurnContext; // Display the progress form. We will get INeroBurnContext as a result. // if (frmEstimate.CreateNeroBurnContext (this, m_project, out pBurnContext)) { // If transcoding went well, we should proceed with burning. // Create a burn progress form. // BurnProgressForm frmBurnProgress = new BurnProgressForm (m_drive, m_nero); // Start burning... // frmBurnProgress.BurnNeroBurnContext (pBurnContext, m_frmChooseBurnFlags.GetBurnFlags (), m_frmChooseWriteSpeed.GetSpeed (), this); } else { ShowNVAPIError (); } // Once burn was attempted, we should disable further attempts. // A successful estimation will re-enable it again. // c_Burn.Enabled = false; } } }