using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using NEROLib; namespace NeroFiddlesCOM.NET { /// /// Summary description for BurnDiscCopyForm. /// public class BurnDiscCopyForm : System.Windows.Forms.Form { private Nero m_nero; private NeroDrive m_sourceDrive; private NeroDrives m_recorders; private ChooseBurnFlagsForm m_frmChooseBurnFlags; private ChooseMediaForm m_frmChooseMedia; private ChooseSpeedForm m_frmChooseWriteSpeed; private ChooseSpeedForm m_frmChooseReadSpeed; // This is our custom class that represents a single // combobox item. We want to store a NeroDrive in it. // private class CBItem { public NeroDrive m_drive; public CBItem (NeroDrive drive) { m_drive = drive; } public override string ToString() { return ((m_drive.DriveLetter == "")? "?": m_drive.DriveLetter.ToUpper ()) + ": " + m_drive.DeviceName; } } private System.Windows.Forms.Button c_Copy; private System.Windows.Forms.Button c_Cancel; private System.Windows.Forms.Label label1; private System.Windows.Forms.ComboBox c_Recorders; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button c_BrowseImage; private System.Windows.Forms.CheckBox c_IgnoreDataErrors; private System.Windows.Forms.CheckBox c_IgnoreAudioErrors; private System.Windows.Forms.CheckBox c_ReadISRC; private System.Windows.Forms.Button c_ReadSpeed; private System.Windows.Forms.Button c_WriteSpeed; private System.Windows.Forms.Button c_BurnFlags; private System.Windows.Forms.Button c_MediaType; private System.Windows.Forms.CheckBox c_OnTheFly; private System.Windows.Forms.CheckBox c_DeleteImage; private System.Windows.Forms.TextBox c_ImageFilepath; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox c_Settings; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox c_SourceDrive; private System.Windows.Forms.CheckBox c_RAWReadMode; private System.Windows.Forms.TextBox c_NumberOfRetries; private System.Windows.Forms.Label label5; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public BurnDiscCopyForm(Nero nero, NeroDrive drive) { // // Required for Windows Form Designer support // InitializeComponent(); m_nero = nero; m_sourceDrive = drive; m_frmChooseBurnFlags = new ChooseBurnFlagsForm (); m_frmChooseMedia = new ChooseMediaForm (m_nero); m_frmChooseReadSpeed = new ChooseSpeedForm (m_sourceDrive, false); m_frmChooseWriteSpeed = new ChooseSpeedForm (null, true); } /// /// 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.c_Copy = new System.Windows.Forms.Button(); this.c_Cancel = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.c_Recorders = new System.Windows.Forms.ComboBox(); this.c_OnTheFly = new System.Windows.Forms.CheckBox(); this.c_DeleteImage = new System.Windows.Forms.CheckBox(); this.label2 = new System.Windows.Forms.Label(); this.c_ImageFilepath = new System.Windows.Forms.TextBox(); this.c_BrowseImage = new System.Windows.Forms.Button(); this.c_IgnoreDataErrors = new System.Windows.Forms.CheckBox(); this.c_IgnoreAudioErrors = new System.Windows.Forms.CheckBox(); this.c_ReadISRC = new System.Windows.Forms.CheckBox(); this.c_RAWReadMode = new System.Windows.Forms.CheckBox(); this.c_ReadSpeed = new System.Windows.Forms.Button(); this.c_WriteSpeed = new System.Windows.Forms.Button(); this.c_BurnFlags = new System.Windows.Forms.Button(); this.c_MediaType = new System.Windows.Forms.Button(); this.label3 = new System.Windows.Forms.Label(); this.c_Settings = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); this.c_SourceDrive = new System.Windows.Forms.TextBox(); this.c_NumberOfRetries = new System.Windows.Forms.TextBox(); this.label5 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // c_Copy // this.c_Copy.Location = new System.Drawing.Point(408, 16); this.c_Copy.Name = "c_Copy"; this.c_Copy.TabIndex = 21; this.c_Copy.Text = "Copy"; this.c_Copy.Click += new System.EventHandler(this.c_Copy_Click); // // c_Cancel // this.c_Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.c_Cancel.Location = new System.Drawing.Point(408, 48); this.c_Cancel.Name = "c_Cancel"; this.c_Cancel.TabIndex = 22; this.c_Cancel.Text = "Cancel"; // // label1 // this.label1.Location = new System.Drawing.Point(8, 56); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(136, 16); this.label1.TabIndex = 4; this.label1.Text = "Choose destination drive:"; // // c_Recorders // this.c_Recorders.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.c_Recorders.Location = new System.Drawing.Point(8, 72); this.c_Recorders.Name = "c_Recorders"; this.c_Recorders.Size = new System.Drawing.Size(184, 21); this.c_Recorders.TabIndex = 5; this.c_Recorders.SelectedIndexChanged += new System.EventHandler(this.c_Recorders_SelectedIndexChanged); // // c_OnTheFly // this.c_OnTheFly.Checked = true; this.c_OnTheFly.CheckState = System.Windows.Forms.CheckState.Checked; this.c_OnTheFly.Location = new System.Drawing.Point(8, 104); this.c_OnTheFly.Name = "c_OnTheFly"; this.c_OnTheFly.Size = new System.Drawing.Size(80, 16); this.c_OnTheFly.TabIndex = 10; this.c_OnTheFly.Text = "On the fly"; this.c_OnTheFly.CheckedChanged += new System.EventHandler(this.c_OnTheFly_CheckedChanged); // // c_DeleteImage // this.c_DeleteImage.Checked = true; this.c_DeleteImage.CheckState = System.Windows.Forms.CheckState.Checked; this.c_DeleteImage.Location = new System.Drawing.Point(96, 104); this.c_DeleteImage.Name = "c_DeleteImage"; this.c_DeleteImage.Size = new System.Drawing.Size(96, 16); this.c_DeleteImage.TabIndex = 11; this.c_DeleteImage.Text = "Delete image"; // // label2 // this.label2.Location = new System.Drawing.Point(8, 128); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(100, 16); this.label2.TabIndex = 13; this.label2.Text = "Image file path:"; // // c_ImageFilepath // this.c_ImageFilepath.Location = new System.Drawing.Point(8, 144); this.c_ImageFilepath.Name = "c_ImageFilepath"; this.c_ImageFilepath.Size = new System.Drawing.Size(184, 20); this.c_ImageFilepath.TabIndex = 12; this.c_ImageFilepath.Text = ""; // // c_BrowseImage // this.c_BrowseImage.Location = new System.Drawing.Point(200, 144); this.c_BrowseImage.Name = "c_BrowseImage"; this.c_BrowseImage.TabIndex = 14; this.c_BrowseImage.Text = "Browse"; this.c_BrowseImage.Click += new System.EventHandler(this.c_BrowseImage_Click); // // c_IgnoreDataErrors // this.c_IgnoreDataErrors.Location = new System.Drawing.Point(208, 48); this.c_IgnoreDataErrors.Name = "c_IgnoreDataErrors"; this.c_IgnoreDataErrors.Size = new System.Drawing.Size(144, 16); this.c_IgnoreDataErrors.TabIndex = 6; this.c_IgnoreDataErrors.Text = "Ignore data read errors"; // // c_IgnoreAudioErrors // this.c_IgnoreAudioErrors.Checked = true; this.c_IgnoreAudioErrors.CheckState = System.Windows.Forms.CheckState.Checked; this.c_IgnoreAudioErrors.Location = new System.Drawing.Point(208, 72); this.c_IgnoreAudioErrors.Name = "c_IgnoreAudioErrors"; this.c_IgnoreAudioErrors.Size = new System.Drawing.Size(144, 16); this.c_IgnoreAudioErrors.TabIndex = 7; this.c_IgnoreAudioErrors.Text = "Ignore audio read errors"; // // c_ReadISRC // this.c_ReadISRC.Location = new System.Drawing.Point(208, 96); this.c_ReadISRC.Name = "c_ReadISRC"; this.c_ReadISRC.Size = new System.Drawing.Size(192, 16); this.c_ReadISRC.TabIndex = 8; this.c_ReadISRC.Text = "Read ISRC and media catalog #"; // // c_RAWReadMode // this.c_RAWReadMode.Location = new System.Drawing.Point(208, 120); this.c_RAWReadMode.Name = "c_RAWReadMode"; this.c_RAWReadMode.Size = new System.Drawing.Size(144, 16); this.c_RAWReadMode.TabIndex = 9; this.c_RAWReadMode.Text = "RAW read mode"; // // c_ReadSpeed // this.c_ReadSpeed.Location = new System.Drawing.Point(408, 96); this.c_ReadSpeed.Name = "c_ReadSpeed"; this.c_ReadSpeed.TabIndex = 17; this.c_ReadSpeed.Text = "Read speed"; this.c_ReadSpeed.Click += new System.EventHandler(this.c_ReadSpeed_Click); // // c_WriteSpeed // this.c_WriteSpeed.Location = new System.Drawing.Point(408, 128); this.c_WriteSpeed.Name = "c_WriteSpeed"; this.c_WriteSpeed.TabIndex = 18; this.c_WriteSpeed.Text = "Write speed"; this.c_WriteSpeed.Click += new System.EventHandler(this.c_WriteSpeed_Click); // // c_BurnFlags // this.c_BurnFlags.Location = new System.Drawing.Point(408, 160); this.c_BurnFlags.Name = "c_BurnFlags"; this.c_BurnFlags.TabIndex = 19; this.c_BurnFlags.Text = "Burn flags"; this.c_BurnFlags.Click += new System.EventHandler(this.c_BurnFlags_Click); // // c_MediaType // this.c_MediaType.Location = new System.Drawing.Point(408, 192); this.c_MediaType.Name = "c_MediaType"; this.c_MediaType.TabIndex = 20; this.c_MediaType.Text = "Media type"; this.c_MediaType.Click += new System.EventHandler(this.c_MediaType_Click); // // label3 // this.label3.Location = new System.Drawing.Point(8, 168); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(100, 16); this.label3.TabIndex = 15; this.label3.Text = "Settings:"; // // c_Settings // this.c_Settings.Location = new System.Drawing.Point(8, 184); 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(384, 112); this.c_Settings.TabIndex = 16; this.c_Settings.Text = ""; // // label4 // this.label4.Location = new System.Drawing.Point(8, 8); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(136, 16); this.label4.TabIndex = 0; this.label4.Text = "Source drive:"; // // c_SourceDrive // this.c_SourceDrive.Location = new System.Drawing.Point(8, 24); this.c_SourceDrive.Name = "c_SourceDrive"; this.c_SourceDrive.ReadOnly = true; this.c_SourceDrive.Size = new System.Drawing.Size(184, 20); this.c_SourceDrive.TabIndex = 1; this.c_SourceDrive.Text = ""; // // c_NumberOfRetries // this.c_NumberOfRetries.Location = new System.Drawing.Point(208, 24); this.c_NumberOfRetries.Name = "c_NumberOfRetries"; this.c_NumberOfRetries.Size = new System.Drawing.Size(48, 20); this.c_NumberOfRetries.TabIndex = 3; this.c_NumberOfRetries.Text = "1"; this.c_NumberOfRetries.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // label5 // this.label5.Location = new System.Drawing.Point(208, 8); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(64, 16); this.label5.TabIndex = 2; this.label5.Text = "# of retries:"; // // BurnDiscCopyForm // this.AcceptButton = this.c_Copy; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.CancelButton = this.c_Cancel; this.ClientSize = new System.Drawing.Size(490, 304); this.Controls.Add(this.c_SourceDrive); this.Controls.Add(this.label3); this.Controls.Add(this.c_IgnoreDataErrors); this.Controls.Add(this.c_BrowseImage); this.Controls.Add(this.c_ImageFilepath); this.Controls.Add(this.label2); this.Controls.Add(this.c_OnTheFly); this.Controls.Add(this.c_Recorders); this.Controls.Add(this.label1); this.Controls.Add(this.c_Copy); this.Controls.Add(this.c_Cancel); this.Controls.Add(this.c_DeleteImage); this.Controls.Add(this.c_IgnoreAudioErrors); this.Controls.Add(this.c_ReadISRC); this.Controls.Add(this.c_RAWReadMode); this.Controls.Add(this.c_ReadSpeed); this.Controls.Add(this.c_WriteSpeed); this.Controls.Add(this.c_BurnFlags); this.Controls.Add(this.c_MediaType); this.Controls.Add(this.c_Settings); this.Controls.Add(this.label4); this.Controls.Add(this.c_NumberOfRetries); this.Controls.Add(this.label5); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "BurnDiscCopyForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "BurnDiscCopy"; this.ResumeLayout(false); } #endregion protected override void OnLoad(EventArgs e) { base.OnLoad (e); c_SourceDrive.Text = m_sourceDrive.DeviceName; // Get the available drives. // m_recorders = m_nero.GetDrives(NERO_MEDIA_TYPE.NERO_MEDIA_CD | NERO_MEDIA_TYPE.NERO_MEDIA_DVD_ANY); // Loop through all drives looking for devices that can write // and which are allowed to write to. // int iIndex = 0; foreach (NeroDrive drive in m_recorders) { if (0 != (drive.Capabilities & NERO_CAPABILITIES.NERO_CAP_ALLOWED) && drive.DevType == NERO_SCSI_DEVTYPE.NERO_SCSI_DEVTYPE_WORM) { c_Recorders.Items.Add (new CBItem (drive)); // If there is no prior selection, let the currently // iterated drive be the current combobox selection // if it is not the same drive as the source drive. // if (c_Recorders.SelectedIndex == -1) { if (drive.HostAdapterNo != m_sourceDrive.HostAdapterNo && drive.DeviceID != m_sourceDrive.DeviceID) { c_Recorders.SelectedIndex = iIndex; } } iIndex ++; } } // If nothing was selected until now, try selecting whatever // is the first option. // if (c_Recorders.SelectedIndex == -1) { c_Recorders.SelectedIndex = 0; } // Update some GUI elements. // Update_OnTheFly (); UpdateSettings (); } // This is a helper function to get the currently selected // NeroDrive or null for none. // private NeroDrive GetCurrentlySelectedDrive () { return c_Recorders.SelectedIndex != -1? ((CBItem) c_Recorders.SelectedItem).m_drive : null; } // Update image filepath selection according to the state // of the "on the fly" checkbox. If on the fly, no image // is either required or accepted. Otherwise, one must be // supplied. // private void Update_OnTheFly () { bool bEnabled = !c_OnTheFly.Checked; c_DeleteImage.Enabled = bEnabled; c_ImageFilepath.Enabled = bEnabled; c_BrowseImage.Enabled = bEnabled; } // This function updates the textbox showing the current state // of various settings. // private void UpdateSettings () { string str; str = "Burn flags: " + m_frmChooseBurnFlags.ToString () + "\r\n\r\n"; str += "Media type: " + m_frmChooseMedia.ToString () + "\r\n\r\n"; str += "Write speed: " + m_frmChooseWriteSpeed.ToString () + "\r\n\r\n"; str += "Read speed: " + m_frmChooseReadSpeed.ToString (); c_Settings.Text = str; } private void c_OnTheFly_CheckedChanged(object sender, System.EventArgs e) { Update_OnTheFly (); } private void c_BurnFlags_Click(object sender, System.EventArgs e) { if (DialogResult.OK == m_frmChooseBurnFlags.ShowDialog ()) { UpdateSettings (); } } private void c_MediaType_Click(object sender, System.EventArgs e) { if (DialogResult.OK == m_frmChooseMedia.ShowDialog ()) { UpdateSettings (); } } private void c_BrowseImage_Click(object sender, System.EventArgs e) { SaveFileDialog dlg = new SaveFileDialog (); dlg.DefaultExt = ".nrg"; dlg.Filter = "NRG files (*.nrg)|*.nrg|All files (*.*)|*.*"; if (DialogResult.OK == dlg.ShowDialog (this)) { c_ImageFilepath.Text = dlg.FileName; } } private void c_WriteSpeed_Click(object sender, System.EventArgs e) { if (DialogResult.OK == m_frmChooseWriteSpeed.ShowDialog (this)) { UpdateSettings (); } } private void c_Recorders_SelectedIndexChanged(object sender, System.EventArgs e) { NeroDrive currDrive = GetCurrentlySelectedDrive (); // When the currently selected recorder is changed, we must // set the new drive to the choose speed form. // m_frmChooseWriteSpeed.m_drive = currDrive; UpdateSettings (); if (currDrive != null && currDrive.HostAdapterNo == m_sourceDrive.HostAdapterNo && currDrive.DeviceID == m_sourceDrive.DeviceID) { // We cannot allow on the fly copy when the source and destination // drives are the same. // c_OnTheFly.Checked = false; } } private void c_ReadSpeed_Click(object sender, System.EventArgs e) { if (DialogResult.OK == m_frmChooseReadSpeed.ShowDialog (this)) { UpdateSettings (); } } private void c_Copy_Click(object sender, System.EventArgs e) { NeroDrive destDrive = GetCurrentlySelectedDrive (); if (destDrive != null) { BurnProgressForm frm = new BurnProgressForm (destDrive, m_nero); frm.BurnDiscCopy (m_sourceDrive, c_OnTheFly.Checked, c_ImageFilepath.Text, c_DeleteImage.Checked, m_frmChooseReadSpeed.GetSpeed (), Convert.ToInt32 (c_NumberOfRetries.Text), c_IgnoreDataErrors.Checked, c_IgnoreAudioErrors.Checked, c_ReadISRC.Checked, c_RAWReadMode.Checked, m_frmChooseBurnFlags.GetBurnFlags (), m_frmChooseWriteSpeed.GetSpeed (), m_frmChooseMedia.GetMediaType (), this); } } } }