diff --git a/DiscoHawk/DiscoHawk.cs b/DiscoHawk/DiscoHawk.cs index 94dbb8795b..11c2efaf78 100644 --- a/DiscoHawk/DiscoHawk.cs +++ b/DiscoHawk/DiscoHawk.cs @@ -41,7 +41,7 @@ namespace BizHawk if (gui) { - var dialog = new DiscoHawkDialog(); + var dialog = new MainDiscoForm(); dialog.ShowDialog(); return; } diff --git a/DiscoHawk/MainDiscoForm.Designer.cs b/DiscoHawk/MainDiscoForm.Designer.cs index 837052c16b..b7b14e3a57 100644 --- a/DiscoHawk/MainDiscoForm.Designer.cs +++ b/DiscoHawk/MainDiscoForm.Designer.cs @@ -48,6 +48,8 @@ // // lblMagicDragArea // + this.lblMagicDragArea.AllowDrop = true; + this.lblMagicDragArea.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.lblMagicDragArea.Controls.Add(this.label1); this.lblMagicDragArea.Location = new System.Drawing.Point(84, 12); this.lblMagicDragArea.Name = "lblMagicDragArea"; diff --git a/DiscoHawk/MainDiscoForm.cs b/DiscoHawk/MainDiscoForm.cs index 078afe0a78..8512983ef7 100644 --- a/DiscoHawk/MainDiscoForm.cs +++ b/DiscoHawk/MainDiscoForm.cs @@ -6,12 +6,21 @@ using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; +using System.IO; +using System.Threading; + using BizHawk.DiscSystem; namespace BizHawk { public partial class MainDiscoForm : Form { + //Release TODO: + //An input (queue) list + //An outputted list showing new file name + //Progress bar should show file being converted + //Add disc button, which puts it on the progress cue (converts it) + public MainDiscoForm() { InitializeComponent(); @@ -33,14 +42,87 @@ namespace BizHawk this.Close(); } + CueBinPrefs GetCuePrefs() + { + var prefs = new DiscSystem.CueBinPrefs(); + prefs.AnnotateCue = true; // TODO? checkCueProp_Annotations.Checked; + prefs.OneBlobPerTrack = false; //TODO? checkCueProp_OneBlobPerTrack.Checked; + prefs.ReallyDumpBin = false; + prefs.SingleSession = true; + return prefs; + } + private void lblMagicDragArea_DragDrop(object sender, DragEventArgs e) { + List files = validateDrop(e.Data); + if (files.Count == 0) return; + try + { + foreach (var file in files) + { + Disc disc = Disc.FromCuePath(file); + string baseName = Path.GetFileNameWithoutExtension(file); + baseName += "_hawked"; + var prefs = GetCuePrefs(); + prefs.ReallyDumpBin = true; + var cueBin = disc.DumpCueBin(baseName, GetCuePrefs()); + Dump(cueBin, Path.GetDirectoryName(file), prefs); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "oops! error"); + throw; + } + } + bool Dump(CueBin cueBin, string directoryTo, CueBinPrefs prefs) + { + ProgressReport pr = new ProgressReport(); + Thread workThread = new Thread(() => + { + cueBin.Dump(directoryTo, prefs, pr); + }); + + ProgressDialog pd = new ProgressDialog(pr); + pd.Show(this); + this.Enabled = false; + workThread.Start(); + for (; ; ) + { + Application.DoEvents(); + Thread.Sleep(10); + if (workThread.ThreadState != ThreadState.Running) + break; + pd.Update(); + } + this.Enabled = true; + pd.Dispose(); + return !pr.CancelSignal; } private void lblMagicDragArea_DragEnter(object sender, DragEventArgs e) { + List files = validateDrop(e.Data); + if (files.Count > 0) + e.Effect = DragDropEffects.Link; + else e.Effect = DragDropEffects.None; + } + List validateDrop(IDataObject ido) + { + List ret = new List(); + string[] files = (string[])ido.GetData(System.Windows.Forms.DataFormats.FileDrop); + if (files == null) return new List(); + foreach (string str in files) + { + if (Path.GetExtension(str).ToUpper() != ".CUE") + { + return new List(); + } + ret.Add(str); + } + return ret; } } }