diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..74b0fec --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ + Released under the respect the work of the original author license. + ------------------------------------------------------------------- + +The source code for RomVault has been released for the benefit of the emulation community. +This means you should ask yourself if you make a change/improvement/branch of this code, does your changes +also benefit the emulation community? If so then please give back to the community in a respectful way. + +What does giving back to the community in a respectful way mean: + Ideally it means contribute your changes back to the author of the source, so that your changes can be worked into the main build. + If you make a reasonably large change that you think others will benefit from put out your own branches for other people to try, + and then maybe this can also be worked into the main code. + + It means DO NOT make a small change/fix, re-brand the program and claim you are the greatest developer ever for releasing 'your' software. + This type of behaviour is disrespectful to the original author and the emulation community, and is against the nature of this license. + +If you want to use large parts of this code (such as the DAT reader or torrentZip library) in your own project go right ahead, +I hope you can do something cool with this code to add to or improve your new and existing projects. Please let the author know how you +are using it, it would be cool to hear about other things this is being used for. + +DO NOT sell this software or any derivative works from this software without permission from the author. +I have put 100's of hours of development into this code and only ever asked for donations to support this project. +So if you go and grab this code and start selling it or derivative works, that is disrespecting the nature of this license, +and so not permitted without permission. + diff --git a/ROMVault2/DatMaker.cs b/ROMVault2/DatMaker.cs index e86175c..06c1a14 100644 --- a/ROMVault2/DatMaker.cs +++ b/ROMVault2/DatMaker.cs @@ -27,7 +27,6 @@ namespace ROMVault2 _sw.Close(); Console.WriteLine("Dat creation complete"); - Console.ReadLine(); } private static void WriteDatFile(RvDir dir) @@ -76,8 +75,8 @@ namespace ROMVault2 RvDir game = dir.Child(i) as RvDir; if (game != null && game.FileType == FileType.Zip) { - WriteLine(d + ""); - WriteLine(d + " " + clean(Path.GetFileNameWithoutExtension(game.Name)) + ""); + WriteLine(d + ""); + WriteLine(d + " " + clean(game.Name) + ""); for (int j = 0; j < game.ChildCount; j++) diff --git a/ROMVault2/DatReaders/DatReader.cs b/ROMVault2/DatReaders/DatReader.cs index c4c2ae0..8f620b9 100644 --- a/ROMVault2/DatReaders/DatReader.cs +++ b/ROMVault2/DatReaders/DatReader.cs @@ -116,10 +116,6 @@ namespace ROMVault2.DatReaders { fs.Close(); fs.Dispose(); - string message = string.Format("Error Occured Reading Dat: {0}\r\nSource: {1}\r\nMessage: {2}\r\n", strFilename, e.Source, e.Message); - if (e.InnerException != null) - message += string.Format("\r\nINNER EXCEPTION:\r\nSource: {0}\r\nMessage: {1}\r\n", e.InnerException.Source, e.InnerException.Message); - ReportError.SendErrorMessageDat(message, strFilename); _bgw.ReportProgress(0, new bgwShowError(strFilename, string.Format("Error Occured Reading Dat:\r\n{0}\r\n", e.Message))); return false; } @@ -274,6 +270,10 @@ namespace ROMVault2.DatReaders // loop the ROMs in the parent sets for (int r1 = 0; r1 < romofGame.ChildCount; r1++) { + // don't search fixes for files marked as nodump + if (((RvFile)mGame.Child(r)).Status == "nodump" || ((RvFile)romofGame.Child(r1)).Status == "nodump") + continue; + // only find fixes if the Name and the Size of the ROMs are the same if (mGame.Child(r).Name != romofGame.Child(r1).Name || ((RvFile)mGame.Child(r)).Size != ((RvFile)romofGame.Child(r1)).Size) continue; @@ -289,11 +289,13 @@ namespace ROMVault2.DatReaders if (b1) { ((RvFile)mGame.Child(r)).CRC = ((RvFile)romofGame.Child(r1)).CRC; + ((RvFile)mGame.Child(r)).FileStatusSet(FileStatus.CRCFromDAT); ((RvFile)mGame.Child(r)).Status = "(CRCFound)"; } else { ((RvFile)romofGame.Child(r1)).CRC = ((RvFile)mGame.Child(r)).CRC; + ((RvFile)romofGame.Child(r1)).FileStatusSet(FileStatus.CRCFromDAT); ((RvFile)romofGame.Child(r1)).Status = "(CRCFound)"; } @@ -432,6 +434,8 @@ namespace ROMVault2.DatReaders byte[] chdMD51 = ((RvFile)romofGame.Child(r1)).MD5CHD; if (chdMD50 != null && chdMD51 != null && !ArrByte.bCompare(chdMD50, chdMD51)) continue; + // don't merge if only one of the ROM is nodump + if ((((RvFile)romofGame.Child(r1)).Status == "nodump") != (((RvFile)mGame.Child(r)).Status == "nodump")) continue; found = true; break; @@ -450,9 +454,9 @@ namespace ROMVault2.DatReaders return; string parentName = searchGame.Game.GetData(RvGame.GameData.RomOf); - if (String.IsNullOrEmpty(parentName) || parentName==searchGame.Name) + if (String.IsNullOrEmpty(parentName) || parentName == searchGame.Name) parentName = searchGame.Game.GetData(RvGame.GameData.CloneOf); - if (String.IsNullOrEmpty(parentName) || parentName==searchGame.Name) + if (String.IsNullOrEmpty(parentName) || parentName == searchGame.Name) return; int intIndex; diff --git a/ROMVault2/DatReaders/DatXMLReader.cs b/ROMVault2/DatReaders/DatXMLReader.cs index d421215..5371896 100644 --- a/ROMVault2/DatReaders/DatXMLReader.cs +++ b/ROMVault2/DatReaders/DatXMLReader.cs @@ -28,20 +28,16 @@ namespace ROMVault2.DatReaders XmlNodeList dirNodeList = doc.DocumentElement.SelectNodes("dir"); if (dirNodeList != null) { - for (int i = 0; i < dirNodeList.Count; i++) - { - LoadDirFromDat(ref tDat, dirNodeList[i], thisFileType); - } + foreach (XmlNode dirNode in dirNodeList) + LoadDirFromDat(ref tDat, dirNode, thisFileType); } XmlNodeList gameNodeList = doc.DocumentElement.SelectNodes("game"); if (gameNodeList != null) { - for (int i = 0; i < gameNodeList.Count; i++) - { - LoadGameFromDat(ref tDat, gameNodeList[i], thisFileType); - } + foreach (XmlNode gameNode in gameNodeList) + LoadGameFromDat(ref tDat, gameNode, thisFileType); } return true; @@ -60,22 +56,27 @@ namespace ROMVault2.DatReaders XmlNodeList dirNodeList = doc.DocumentElement.SelectNodes("dir"); if (dirNodeList != null) { - for (int i = 0; i < dirNodeList.Count; i++) - { - LoadDirFromDat(ref tDat, dirNodeList[i], thisFileType); - } + foreach (XmlNode dirNode in dirNodeList) + LoadDirFromDat(ref tDat, dirNode, thisFileType); } XmlNodeList gameNodeList = doc.DocumentElement.SelectNodes("game"); if (gameNodeList != null) { - for (int i = 0; i < gameNodeList.Count; i++) - { - LoadGameFromDat(ref tDat, gameNodeList[i], thisFileType); - } + foreach (XmlNode gameNode in gameNodeList) + LoadGameFromDat(ref tDat, gameNode, thisFileType); } + XmlNodeList machineNodeList = doc.DocumentElement.SelectNodes("machine"); + + if (machineNodeList != null) + { + foreach (XmlNode machineNode in machineNodeList) + LoadGameFromDat(ref tDat, machineNode, thisFileType); + } + + return true; } @@ -149,7 +150,7 @@ namespace ROMVault2.DatReaders } val = VarFix.String(packingNode.Attributes.GetNamedItem("dir")).ToLower(); // noautodir , nogame if (!String.IsNullOrEmpty(val)) - tDat.AddData(RvDat.DatData.DirSetup,val); + tDat.AddData(RvDat.DatData.DirSetup, val); } } diff --git a/ROMVault2/DatUpdate.cs b/ROMVault2/DatUpdate.cs index 183f6fb..bd4a4b8 100644 --- a/ROMVault2/DatUpdate.cs +++ b/ROMVault2/DatUpdate.cs @@ -31,7 +31,6 @@ namespace ROMVault2 public static void SendAndShowDat(string message, string filename) { - ReportError.SendErrorMessageDat(message, filename); if (_bgw != null) _bgw.ReportProgress(0, new bgwShowError(filename, message)); } diff --git a/ROMVault2/DirCellDraw.cs b/ROMVault2/DirCellDraw.cs deleted file mode 100644 index 66de677..0000000 --- a/ROMVault2/DirCellDraw.cs +++ /dev/null @@ -1,146 +0,0 @@ -/****************************************************** - * ROMVault2 is written by Gordon J. * - * Contact gordon@romvault.com * - * Copyright 2014 * - ******************************************************/ - -using System.Diagnostics; -using System.Drawing; -using System.Globalization; -using System.Windows.Forms; -using ROMVault2.RvDB; -using ROMVault2.SupportedFiles; - -namespace ROMVault2 -{ - - public class RomCellDraw : DataGridViewImageCell - { - private readonly Color _bgCol; - private readonly string _bitmapName; - - public RomCellDraw(string name,Color bgCol) - { - _bitmapName = name; - _bgCol = bgCol; - - } - - protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) - { - graphics.FillRectangle(new SolidBrush(_bgCol), cellBounds); - - Bitmap bm= rvImages.GetBitmap(_bitmapName); - - if (bm != null) - { - graphics.DrawImage(bm, cellBounds.Left, cellBounds.Top, bm.Width,bm.Height); - bm.Dispose(); - } - - - else - Debug.WriteLine("Missing Graphic for " + _bitmapName); - } - - } - - public class DirCellDraw : DataGridViewImageCell - { - private readonly Color _bgCol; - private readonly RvDir _cellDir; - - public DirCellDraw(RvDir cellDir, Color bgCol) - { - _cellDir = cellDir; - _bgCol = bgCol; - } - - protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) - { - - graphics.FillRectangle(new SolidBrush(_bgCol), cellBounds); - - string bitmapName; - - switch (_cellDir.FileType) - { - case FileType.Zip: - if (_cellDir.RepStatus == RepStatus.DirCorrect && _cellDir.ZipStatus==ZipStatus.TrrntZip) - bitmapName = "ZipTZ"; - else - bitmapName = "Zip" + _cellDir.RepStatus; - break; - default: - bitmapName = "Dir" + _cellDir.RepStatus; - break; - } - - Bitmap bm = rvImages.GetBitmap(bitmapName); - - if (bm != null) - { - graphics.DrawImage(bm, cellBounds.Left + 10, cellBounds.Top, 21, 17); - bm.Dispose(); - } - else - Debug.WriteLine("Missing Graphic for " + bitmapName); - } - } - - public class DirCellStatusDraw : DataGridViewImageCell - { - private readonly RvDir _dir; - public DirCellStatusDraw(RvDir dir) - { - _dir = dir; - } - - protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) - { - Font drawFont = new Font("Arial", 9); - SolidBrush drawBrushBlack = new SolidBrush(Color.Black); - SolidBrush drawBrushWhite = new SolidBrush(Color.White); - - graphics.FillRectangle(drawBrushWhite, cellBounds); - - int gOff; - int columnIndex = 0; - for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++) - { - if (l >= 13) columnIndex = l; - - if (_dir.DirStatus.Get(RepairStatus.DisplayOrder[l]) <= 0) continue; - - gOff = cellBounds.Left + FrmMain.GameGridColumnXPositions[columnIndex]; - Bitmap bm = rvImages.GetBitmap(@"G_" + RepairStatus.DisplayOrder[l]); - if (bm != null) - { - graphics.DrawImage(bm, gOff, cellBounds.Top, 21, 18); - bm.Dispose(); - } - else - Debug.WriteLine("Missing Graphics for " + "G_" + RepairStatus.DisplayOrder[l]); - - columnIndex++; - } - - columnIndex = 0; - for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++) - { - if (l >= 13) - columnIndex = l; - - if (_dir.DirStatus.Get(RepairStatus.DisplayOrder[l]) > 0) - { - gOff = cellBounds.Left + FrmMain.GameGridColumnXPositions[columnIndex]; - graphics.DrawString(_dir.DirStatus.Get(RepairStatus.DisplayOrder[l]).ToString(CultureInfo.InvariantCulture), drawFont, drawBrushBlack, new PointF(gOff + 20, cellBounds.Top + 3)); - columnIndex++; - } - } - drawBrushBlack.Dispose(); - drawBrushWhite.Dispose(); - drawFont.Dispose(); - } - } -} \ No newline at end of file diff --git a/ROMVault2/FileScanning.cs b/ROMVault2/FileScanning.cs index e8b3726..698c1c4 100644 --- a/ROMVault2/FileScanning.cs +++ b/ROMVault2/FileScanning.cs @@ -820,11 +820,12 @@ namespace ROMVault2 tFile.FileStatusSet(FileStatus.SHA1CHDVerified); return; case CHD.CHDManCheck.Corrupt: - _bgw.ReportProgress(0, new bgwShowError(error, filename)); + _bgw.ReportProgress(0, new bgwShowError(filename, error)); tFile.GotStatus = GotStatus.Corrupt; return; + case CHD.CHDManCheck.CHDReturnError: case CHD.CHDManCheck.CHDUnknownError: - _bgw.ReportProgress(0, new bgwShowError(error, filename)); + _bgw.ReportProgress(0, new bgwShowError(filename, error)); return; case CHD.CHDManCheck.ChdmanNotFound: return; diff --git a/ROMVault2/FixFiles.cs b/ROMVault2/FixFiles.cs index 676db6a..ed777b9 100644 --- a/ROMVault2/FixFiles.cs +++ b/ROMVault2/FixFiles.cs @@ -362,7 +362,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); ReportProgress(new bgwShowError(sourceFullName, "Error Setting File Attributes to Normal. Before Case correction Rename. Code " + error)); - ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Case correction Rename. Code" + error + " : " + sourceFullName); } File.Move(sourceFullName, fixFile.FullName); @@ -383,7 +382,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); ReportProgress(new bgwShowError(filename, "Error Setting File Attributes to Normal. Before Delete. Code " + error)); - ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Delete. Code " + error + " : " + filename); } File.Delete(filename); } @@ -436,7 +434,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); ReportProgress(new bgwShowError(fixFilePath, "Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error)); - ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error + " : " + fixFilePath); } File.Delete(fixFilePath); @@ -500,7 +497,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); _bgw.ReportProgress(0, new bgwShowError(fixFilePath, "Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error)); - ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error + " : " + fixFilePath); } File.Delete(fixFilePath); @@ -1407,7 +1403,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); ReportProgress(new bgwShowError(filename, "Error Setting File Attributes to Normal. Deleting Original Fix File. Code " + error)); - ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Deleting Original Fix File. Code " + error + " : " + filename); } try { @@ -1417,7 +1412,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); _error = "Error While trying to delete file " + filename + ". Code " + error; - ReportError.SendErrorMessage("Error While trying to delete file. Code " + error + " : " + filename); if (tempZipOut != null && tempZipOut.ZipOpen != ZipOpenType.Closed) tempZipOut.ZipFileClose(); @@ -1684,7 +1678,6 @@ namespace ROMVault2 { int error = Error.GetLastError(); ReportProgress(new bgwShowError(fixZipFullName, "Error Setting File Attributes to Normal. Before Moving To Corrupt. Code " + error)); - ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Moving To Corrupt. Code " + error + " : " + fixZipFullName); } diff --git a/ROMVault2/frmHelpAbout.Designer.cs b/ROMVault2/FrmHelpAbout.Designer.cs similarity index 94% rename from ROMVault2/frmHelpAbout.Designer.cs rename to ROMVault2/FrmHelpAbout.Designer.cs index 0d5280d..ea98129 100644 --- a/ROMVault2/frmHelpAbout.Designer.cs +++ b/ROMVault2/FrmHelpAbout.Designer.cs @@ -1,6 +1,6 @@ namespace ROMVault2 { - partial class frmHelpAbout + partial class FrmHelpAbout { /// /// Required designer variable. @@ -67,10 +67,10 @@ this.label2.Text = "support@romvault.com"; this.label2.Click += new System.EventHandler(this.label2_Click); // - // frmHelpAbout + // FrmHelpAbout // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackgroundImage = global::ROMVault2.rvImages.romvaultTZ; this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.ClientSize = new System.Drawing.Size(471, 172); @@ -79,10 +79,10 @@ this.Controls.Add(this.lblVersion); this.DoubleBuffered = true; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Name = "frmHelpAbout"; + this.Name = "FrmHelpAbout"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "frmHelpAbout"; + this.Text = "FrmHelpAbout"; this.ResumeLayout(false); this.PerformLayout(); @@ -94,4 +94,4 @@ private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; } -} \ No newline at end of file +} diff --git a/ROMVault2/frmHelpAbout.cs b/ROMVault2/FrmHelpAbout.cs similarity index 90% rename from ROMVault2/frmHelpAbout.cs rename to ROMVault2/FrmHelpAbout.cs index d03e933..1456503 100644 --- a/ROMVault2/frmHelpAbout.cs +++ b/ROMVault2/FrmHelpAbout.cs @@ -9,9 +9,9 @@ using System.Windows.Forms; namespace ROMVault2 { - public partial class frmHelpAbout : Form + public partial class FrmHelpAbout : Form { - public frmHelpAbout() + public FrmHelpAbout() { InitializeComponent(); diff --git a/ROMVault2/FrmRegistration.resx b/ROMVault2/FrmHelpAbout.resx similarity index 100% rename from ROMVault2/FrmRegistration.resx rename to ROMVault2/FrmHelpAbout.resx diff --git a/ROMVault2/frmKey.Designer.cs b/ROMVault2/FrmKey.Designer.cs similarity index 88% rename from ROMVault2/frmKey.Designer.cs rename to ROMVault2/FrmKey.Designer.cs index b2f0c2c..63f7c3e 100644 --- a/ROMVault2/frmKey.Designer.cs +++ b/ROMVault2/FrmKey.Designer.cs @@ -1,6 +1,6 @@ namespace ROMVault2 { - partial class frmKey + partial class FrmKey { /// /// Required designer variable. @@ -28,21 +28,21 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmKey)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmKey)); this.SuspendLayout(); // - // frmKey + // FrmKey // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackColor = System.Drawing.SystemColors.ControlDark; this.ClientSize = new System.Drawing.Size(600, 532); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "frmKey"; + this.Name = "FrmKey"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Color Key to ROM Status"; - this.Load += new System.EventHandler(this.frmKey_Load); + this.Load += new System.EventHandler(this.FrmKey_Load); this.ResumeLayout(false); } @@ -52,4 +52,4 @@ } -} \ No newline at end of file +} diff --git a/ROMVault2/frmKey.cs b/ROMVault2/FrmKey.cs similarity index 95% rename from ROMVault2/frmKey.cs rename to ROMVault2/FrmKey.cs index 55e5b06..9806604 100644 --- a/ROMVault2/frmKey.cs +++ b/ROMVault2/FrmKey.cs @@ -11,14 +11,14 @@ using System.Windows.Forms; namespace ROMVault2 { - public partial class frmKey : Form + public partial class FrmKey : Form { - public frmKey() + public FrmKey() { InitializeComponent(); } - private void frmKey_Load(object sender, EventArgs e) + private void FrmKey_Load(object sender, EventArgs e) { List displayList= new List { diff --git a/ROMVault2/frmKey.resx b/ROMVault2/FrmKey.resx similarity index 100% rename from ROMVault2/frmKey.resx rename to ROMVault2/FrmKey.resx diff --git a/ROMVault2/frmMain.Designer.cs b/ROMVault2/FrmMain.Designer.cs similarity index 95% rename from ROMVault2/frmMain.Designer.cs rename to ROMVault2/FrmMain.Designer.cs index 2bbf160..e38d02f 100644 --- a/ROMVault2/frmMain.Designer.cs +++ b/ROMVault2/FrmMain.Designer.cs @@ -106,8 +106,6 @@ this.fixReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutRomVaultToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.registratioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dataGridViewImageColumn1 = new System.Windows.Forms.DataGridViewImageColumn(); this.dataGridViewImageColumn2 = new System.Windows.Forms.DataGridViewImageColumn(); this.dataGridViewImageColumn3 = new System.Windows.Forms.DataGridViewImageColumn(); @@ -286,7 +284,7 @@ this.gbDatInfo.Controls.Add(this.label8); this.gbDatInfo.Location = new System.Drawing.Point(5, 0); this.gbDatInfo.Name = "gbDatInfo"; - this.gbDatInfo.Size = new System.Drawing.Size(440, 147); + this.gbDatInfo.Size = new System.Drawing.Size(468, 147); this.gbDatInfo.TabIndex = 3; this.gbDatInfo.TabStop = false; this.gbDatInfo.Text = "Dat Info :"; @@ -517,7 +515,7 @@ // // btnColorKey // - this.btnColorKey.Location = new System.Drawing.Point(568, 85); + this.btnColorKey.Location = new System.Drawing.Point(547, 85); this.btnColorKey.Name = "btnColorKey"; this.btnColorKey.Size = new System.Drawing.Size(89, 23); this.btnColorKey.TabIndex = 9; @@ -528,7 +526,7 @@ // chkBoxShowMerged // this.chkBoxShowMerged.AutoSize = true; - this.chkBoxShowMerged.Location = new System.Drawing.Point(568, 68); + this.chkBoxShowMerged.Location = new System.Drawing.Point(547, 68); this.chkBoxShowMerged.Name = "chkBoxShowMerged"; this.chkBoxShowMerged.Size = new System.Drawing.Size(125, 17); this.chkBoxShowMerged.TabIndex = 8; @@ -541,7 +539,7 @@ this.chkBoxShowFixed.AutoSize = true; this.chkBoxShowFixed.Checked = true; this.chkBoxShowFixed.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkBoxShowFixed.Location = new System.Drawing.Point(568, 52); + this.chkBoxShowFixed.Location = new System.Drawing.Point(547, 52); this.chkBoxShowFixed.Name = "chkBoxShowFixed"; this.chkBoxShowFixed.Size = new System.Drawing.Size(102, 17); this.chkBoxShowFixed.TabIndex = 7; @@ -554,7 +552,7 @@ this.chkBoxShowMissing.AutoSize = true; this.chkBoxShowMissing.Checked = true; this.chkBoxShowMissing.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkBoxShowMissing.Location = new System.Drawing.Point(568, 36); + this.chkBoxShowMissing.Location = new System.Drawing.Point(547, 36); this.chkBoxShowMissing.Name = "chkBoxShowMissing"; this.chkBoxShowMissing.Size = new System.Drawing.Size(124, 17); this.chkBoxShowMissing.TabIndex = 6; @@ -567,7 +565,7 @@ this.chkBoxShowCorrect.AutoSize = true; this.chkBoxShowCorrect.Checked = true; this.chkBoxShowCorrect.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkBoxShowCorrect.Location = new System.Drawing.Point(568, 20); + this.chkBoxShowCorrect.Location = new System.Drawing.Point(547, 20); this.chkBoxShowCorrect.Name = "chkBoxShowCorrect"; this.chkBoxShowCorrect.Size = new System.Drawing.Size(123, 17); this.chkBoxShowCorrect.TabIndex = 5; @@ -579,7 +577,7 @@ // this.gbSetInfo.Location = new System.Drawing.Point(5, 0); this.gbSetInfo.Name = "gbSetInfo"; - this.gbSetInfo.Size = new System.Drawing.Size(416, 147); + this.gbSetInfo.Size = new System.Drawing.Size(532, 147); this.gbSetInfo.TabIndex = 4; this.gbSetInfo.TabStop = false; this.gbSetInfo.Text = "Game Info :"; @@ -654,9 +652,11 @@ this.GameGrid.ShowRowErrors = false; this.GameGrid.Size = new System.Drawing.Size(697, 267); this.GameGrid.TabIndex = 4; + this.GameGrid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.GameGrid_CellFormatting); this.GameGrid.SelectionChanged += new System.EventHandler(this.GameGridSelectionChanged); this.GameGrid.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.GameGridMouseDoubleClick); this.GameGrid.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GameGrid_MouseUp); + this.GameGrid.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.GameGridColumnHeaderMouseClick); // // Type // @@ -665,7 +665,7 @@ this.Type.Name = "Type"; this.Type.ReadOnly = true; this.Type.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.Type.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Type.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; this.Type.Width = 40; // // CGame @@ -673,6 +673,7 @@ this.CGame.HeaderText = "Game (Directory / Zip)"; this.CGame.Name = "CGame"; this.CGame.ReadOnly = true; + this.CGame.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; this.CGame.Width = 220; // // CDescription @@ -680,6 +681,7 @@ this.CDescription.HeaderText = "Description"; this.CDescription.Name = "CDescription"; this.CDescription.ReadOnly = true; + this.CDescription.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic; this.CDescription.Width = 220; // // CCorrect @@ -688,6 +690,7 @@ this.CCorrect.Name = "CCorrect"; this.CCorrect.ReadOnly = true; this.CCorrect.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.CCorrect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; this.CCorrect.Width = 500; // // RomGrid @@ -746,6 +749,7 @@ this.RomGrid.ShowRowErrors = false; this.RomGrid.Size = new System.Drawing.Size(697, 315); this.RomGrid.TabIndex = 21; + this.RomGrid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.RomGrid_CellFormatting); this.RomGrid.SelectionChanged += new System.EventHandler(this.RomGridSelectionChanged); this.RomGrid.MouseUp += new System.Windows.Forms.MouseEventHandler(this.RomGridMouseUp); // @@ -756,7 +760,7 @@ this.CGot.Name = "CGot"; this.CGot.ReadOnly = true; this.CGot.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.CGot.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.CGot.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; this.CGot.Width = 65; // // CRom @@ -928,9 +932,7 @@ // helpToolStripMenuItem // this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.aboutRomVaultToolStripMenuItem, - this.checkForUpdateToolStripMenuItem, - this.registratioToolStripMenuItem}); + this.aboutRomVaultToolStripMenuItem}); this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); this.helpToolStripMenuItem.Text = "Help"; @@ -938,24 +940,10 @@ // aboutRomVaultToolStripMenuItem // this.aboutRomVaultToolStripMenuItem.Name = "aboutRomVaultToolStripMenuItem"; - this.aboutRomVaultToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.aboutRomVaultToolStripMenuItem.Size = new System.Drawing.Size(162, 22); this.aboutRomVaultToolStripMenuItem.Text = "About RomVault"; this.aboutRomVaultToolStripMenuItem.Click += new System.EventHandler(this.AboutRomVaultToolStripMenuItemClick); // - // checkForUpdateToolStripMenuItem - // - this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem"; - this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(168, 22); - this.checkForUpdateToolStripMenuItem.Text = "Check For Update"; - this.checkForUpdateToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdateToolStripMenuItem_Click); - // - // registratioToolStripMenuItem - // - this.registratioToolStripMenuItem.Name = "registratioToolStripMenuItem"; - this.registratioToolStripMenuItem.Size = new System.Drawing.Size(168, 22); - this.registratioToolStripMenuItem.Text = "Registration"; - this.registratioToolStripMenuItem.Click += new System.EventHandler(this.RegistratioToolStripMenuItemClick); - // // dataGridViewImageColumn1 // this.dataGridViewImageColumn1.FillWeight = 40F; @@ -986,8 +974,7 @@ // // FrmMain // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.ClientSize = new System.Drawing.Size(1264, 762); this.Controls.Add(this.splitContainer1); this.Controls.Add(this.menuStrip1); @@ -1075,7 +1062,6 @@ private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem aboutRomVaultToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem checkForUpdateToolStripMenuItem; private System.Windows.Forms.DataGridViewImageColumn Type; private System.Windows.Forms.DataGridViewTextBoxColumn CGame; private System.Windows.Forms.DataGridViewTextBoxColumn CDescription; @@ -1092,7 +1078,6 @@ private System.Windows.Forms.DataGridViewTextBoxColumn CStatus; private System.Windows.Forms.DataGridViewTextBoxColumn ZipIndex; private System.Windows.Forms.DataGridViewTextBoxColumn ZipHeader; - private System.Windows.Forms.ToolStripMenuItem registratioToolStripMenuItem; private System.Windows.Forms.Label lblDITRomsFixable; private System.Windows.Forms.Label lblDIRomsFixable; private System.Windows.Forms.ToolStripMenuItem reportsToolStripMenuItem; diff --git a/ROMVault2/frmMain.cs b/ROMVault2/FrmMain.cs similarity index 76% rename from ROMVault2/frmMain.cs rename to ROMVault2/FrmMain.cs index c55d983..28be2b3 100644 --- a/ROMVault2/frmMain.cs +++ b/ROMVault2/FrmMain.cs @@ -1,4 +1,4 @@ -/****************************************************** +/****************************************************** * ROMVault2 is written by Gordon J. * * Contact gordon@romvault.com * * Copyright 2010 * @@ -7,18 +7,16 @@ using System; using System.Diagnostics; using System.Drawing; using System.Globalization; -using System.ServiceModel; using System.Windows.Forms; using ROMVault2.Properties; -using ROMVault2.RVRef; using ROMVault2.RvDB; using ROMVault2.Utils; +using ROMVault2.SupportedFiles; namespace ROMVault2 { public partial class FrmMain : Form { - private static readonly Color CBlue = Color.FromArgb(214, 214, 255); private static readonly Color CGreyBlue = Color.FromArgb(214, 224, 255); private static readonly Color CRed = Color.FromArgb(255, 214, 214); @@ -37,10 +35,12 @@ namespace ROMVault2 private readonly Color[] _displayColor; private bool _updatingGameGrid; + + private int _gameGridSortColumnIndex; + private SortOrder _gameGridSortOrder = SortOrder.Descending; + private static int[] _gameGridColumnXPositions; - public static int[] GameGridColumnXPositions; - - private frmKey _fk; + private FrmKey _fk; private Single _scaleFactorX = 1; private Single _scaleFactorY = 1; @@ -101,7 +101,7 @@ namespace ROMVault2 _displayColor[(int)RepStatus.Deleted] = CWhite; - GameGridColumnXPositions = new int[(int)RepStatus.EndValue]; + _gameGridColumnXPositions = new int[(int)RepStatus.EndValue]; DirTree.Setup(ref DB.DirTree); @@ -410,33 +410,33 @@ namespace ROMVault2 if (cf != DirTree.GetSelected()) DatSetSelected(cf); - if (e.Button == MouseButtons.Right) + if (e.Button != MouseButtons.Right) + return; + + + RvDir tn = (RvDir)sender; + + ContextMenu mnuContext = new ContextMenu(); + + MenuItem mnuFile = new MenuItem { - RvDir tn = (RvDir)sender; + Index = 0, + Text = Resources.FrmMain_DirTreeRvSelected_Set_ROM_DIR, + Tag = tn.TreeFullName + }; + mnuFile.Click += MnuFileClick; + mnuContext.MenuItems.Add(mnuFile); - ContextMenu mnuContext = new ContextMenu(); - - MenuItem mnuFile = new MenuItem - { - Index = 0, - Text = Resources.FrmMain_DirTreeRvSelected_Set_ROM_DIR, - Tag = tn.TreeFullName - }; - mnuFile.Click += MnuFileClick; - mnuContext.MenuItems.Add(mnuFile); - - MenuItem mnuMakeDat = new MenuItem - { - Index = 1, - Text = @"Make Dat", - Tag = tn - }; - mnuMakeDat.Click += MnuMakeDatClick; - mnuContext.MenuItems.Add(mnuMakeDat); - - - mnuContext.Show(DirTree, e.Location); - } + MenuItem mnuMakeDat = new MenuItem + { + Index = 1, + Text = @"Make Dat", + Tag = tn + }; + mnuMakeDat.Click += MnuMakeDatClick; + mnuContext.MenuItems.Add(mnuMakeDat); + + mnuContext.Show(DirTree, e.Location); } #region "DAT display code" @@ -444,9 +444,23 @@ namespace ROMVault2 private void DatSetSelected(RvBase cf) { DirTree.Refresh(); + + if (Settings.IsMono) + { + if (GameGrid.RowCount > 0) + GameGrid.CurrentCell = GameGrid[0,0]; + if (RomGrid.RowCount > 0) + RomGrid.CurrentCell = RomGrid[0,0]; + } + GameGrid.Rows.Clear(); RomGrid.Rows.Clear(); + // clear sorting + GameGrid.Columns[_gameGridSortColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.None; + _gameGridSortColumnIndex = 0; + _gameGridSortOrder = SortOrder.Descending; + if (cf == null) return; @@ -479,6 +493,9 @@ namespace ROMVault2 private void splitContainer3_Panel1_Resize(object sender, EventArgs e) { + // fixes a rendering issue in mono + if (splitContainer3.Panel1.Width == 0) return; + gbDatInfo.Width = splitContainer3.Panel1.Width - (gbDatInfo.Left * 2); } @@ -576,13 +593,29 @@ namespace ROMVault2 lblDITRomsUnknown.Text = (tDir.DirStatus.CountUnknown() + tDir.DirStatus.CountInToSort()).ToString(CultureInfo.InvariantCulture); _updatingGameGrid = true; + + if (Settings.IsMono) + { + if (GameGrid.RowCount > 0) + GameGrid.CurrentCell = GameGrid[0,0]; + if (RomGrid.RowCount > 0) + RomGrid.CurrentCell = RomGrid[0,0]; + } + GameGrid.Rows.Clear(); RomGrid.Rows.Clear(); + // clear sorting + GameGrid.Columns[_gameGridSortColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.None; + _gameGridSortColumnIndex = 0; + _gameGridSortOrder = SortOrder.Descending; + + ReportStatus tDirStat; - GameGridColumnXPositions = new int[(int)RepStatus.EndValue]; + _gameGridColumnXPositions = new int[(int)RepStatus.EndValue]; + int rowCount = 0; for (int j = 0; j < tDir.ChildCount; j++) { @@ -607,6 +640,8 @@ namespace ROMVault2 if (!show) continue; + rowCount++; + int columnIndex = 0; for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++) { @@ -615,20 +650,22 @@ namespace ROMVault2 if (tDirStat.Get(RepairStatus.DisplayOrder[l]) <= 0) continue; int len = DigitLength(tDirStat.Get(RepairStatus.DisplayOrder[l])) * 7 + 26; - if (len > GameGridColumnXPositions[columnIndex]) - GameGridColumnXPositions[columnIndex] = len; + if (len > _gameGridColumnXPositions[columnIndex]) + _gameGridColumnXPositions[columnIndex] = len; columnIndex++; } } + GameGrid.RowCount = rowCount; int t = 0; for (int l = 0; l < (int)RepStatus.EndValue; l++) { - int colWidth = GameGridColumnXPositions[l]; - GameGridColumnXPositions[l] = t; + int colWidth = _gameGridColumnXPositions[l]; + _gameGridColumnXPositions[l] = t; t += colWidth; } + int row = 0; for (int j = 0; j < tDir.ChildCount; j++) { RvDir tChildDir = tDir.Child(j) as RvDir; @@ -651,42 +688,10 @@ namespace ROMVault2 show = show || !(gCorrect || gMissing || gUnknown || gInToSort || gFixes); if (!show) continue; - - Color bgCol = Color.FromArgb(255, 255, 255); - - - foreach (RepStatus t1 in RepairStatus.DisplayOrder) - { - if (tDirStat.Get(t1) <= 0) continue; - - bgCol = _displayColor[(int)t1]; - break; - } - - - GameGrid.Rows.Add(); - int iRow = GameGrid.Rows.Count - 1; - - GameGrid.Rows[iRow].Selected = false; - GameGrid.Rows[iRow].Tag = tChildDir; - - GameGrid.Rows[iRow].Cells[0].Style.BackColor = bgCol; - GameGrid.Rows[iRow].Cells[1].Style.BackColor = bgCol; - GameGrid.Rows[iRow].Cells[2].Style.BackColor = bgCol; - - if (String.IsNullOrEmpty(tChildDir.FileName)) - GameGrid.Rows[iRow].Cells[1].Value = tChildDir.Name; - else - GameGrid.Rows[iRow].Cells[1].Value = tChildDir.Name + " (Found: " + tChildDir.FileName + ")"; - - if (tChildDir.Game != null) - GameGrid.Rows[iRow].Cells[2].Value = tChildDir.Game.GetData(RvGame.GameData.Description); - - DirCellDraw tDirCellDraw = new DirCellDraw(tChildDir, bgCol); - GameGrid.Rows[iRow].Cells[0] = tDirCellDraw; - - DirCellStatusDraw tCellStatusDraw = new DirCellStatusDraw(tChildDir); - GameGrid.Rows[iRow].Cells[3] = tCellStatusDraw; + + GameGrid.Rows[row].Selected = false; + GameGrid.Rows[row].Tag = tChildDir; + row++; } _updatingGameGrid = false; @@ -730,13 +735,219 @@ namespace ROMVault2 } } + private void GameGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) + { + if (_updatingGameGrid) + return; + + Rectangle cellBounds = GameGrid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); + RvDir tRvDir = (RvDir)GameGrid.Rows[e.RowIndex].Tag; + ReportStatus tDirStat = tRvDir.DirStatus; + Color bgCol = Color.FromArgb(255, 255, 255); + + if (cellBounds.Width == 0 || cellBounds.Height == 0) + return; + + foreach (RepStatus t1 in RepairStatus.DisplayOrder) + { + if (tDirStat.Get(t1) <= 0) continue; + + bgCol = _displayColor[(int)t1]; + break; + } + + if (GameGrid.Columns[e.ColumnIndex].Name == "Type") + { + e.CellStyle.BackColor = bgCol; + e.CellStyle.SelectionBackColor = bgCol; + + Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height); + Graphics g = Graphics.FromImage(bmp); + + string bitmapName; + switch (tRvDir.FileType) + { + case FileType.Zip: + if (tRvDir.RepStatus == RepStatus.DirCorrect && tRvDir.ZipStatus == ZipStatus.TrrntZip) + bitmapName = "ZipTZ"; + else + bitmapName = "Zip" + tRvDir.RepStatus; + break; + default: + // hack because DirDirInToSort image doesnt exist. + if (tRvDir.RepStatus == RepStatus.DirInToSort) + bitmapName = "Dir" + RepStatus.DirUnknown; + else + bitmapName = "Dir" + tRvDir.RepStatus; + + break; + } + + Bitmap bm = rvImages.GetBitmap(bitmapName); + if (bm != null) + { + g.DrawImage(bm, (cellBounds.Width - cellBounds.Height) / 2, 0, 18, 18); + bm.Dispose(); + } + else + Debug.WriteLine("Missing Graphic for " + bitmapName); + + e.Value = bmp; + + } + else if (GameGrid.Columns[e.ColumnIndex].Name == "CGame") + { + e.CellStyle.BackColor = bgCol; + + if (String.IsNullOrEmpty(tRvDir.FileName)) + e.Value = tRvDir.Name; + else + e.Value = tRvDir.Name + " (Found: " + tRvDir.FileName + ")"; + } + else if (GameGrid.Columns[e.ColumnIndex].Name == "CDescription") + { + e.CellStyle.BackColor = bgCol; + + if (tRvDir.Game != null) + e.Value = tRvDir.Game.GetData(RvGame.GameData.Description); + } + else if (GameGrid.Columns[e.ColumnIndex].Name == "CCorrect") + { + e.CellStyle.SelectionBackColor = Color.White; + + Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height); + Graphics g = Graphics.FromImage(bmp); + g.Clear(Color.White); + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + Font drawFont = new Font("Arial", 9); + SolidBrush drawBrushBlack = new SolidBrush(Color.Black); + + int gOff; + int columnIndex = 0; + for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++) + { + if (l >= 13) columnIndex = l; + + if (tRvDir.DirStatus.Get(RepairStatus.DisplayOrder[l]) <= 0) continue; + + gOff = _gameGridColumnXPositions[columnIndex]; + Bitmap bm = rvImages.GetBitmap(@"G_" + RepairStatus.DisplayOrder[l]); + if (bm != null) + { + g.DrawImage(bm, gOff, 0, 21, 18); + bm.Dispose(); + } + else + Debug.WriteLine("Missing Graphics for " + "G_" + RepairStatus.DisplayOrder[l]); + + columnIndex++; + } + + columnIndex = 0; + for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++) + { + if (l >= 13) + columnIndex = l; + + if (tRvDir.DirStatus.Get(RepairStatus.DisplayOrder[l]) > 0) + { + gOff = _gameGridColumnXPositions[columnIndex]; + g.DrawString(tRvDir.DirStatus.Get(RepairStatus.DisplayOrder[l]).ToString(CultureInfo.InvariantCulture), drawFont, drawBrushBlack, new PointF(gOff + 20, 3)); + columnIndex++; + } + } + drawBrushBlack.Dispose(); + drawFont.Dispose(); + e.Value = bmp; + } + else + Console.WriteLine("WARN: GameGrid_CellFormatting() unknown column: {0}", GameGrid.Columns[e.ColumnIndex].Name); + } + + private void GameGridColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) + { + + // only allow sort on CGame/CDescription + if (e.ColumnIndex != 1 && e.ColumnIndex != 2) + return; + + DataGridViewColumn newColumn = GameGrid.Columns[e.ColumnIndex]; + DataGridViewColumn oldColumn = GameGrid.Columns[_gameGridSortColumnIndex]; + + if (newColumn == oldColumn) + { + _gameGridSortOrder = _gameGridSortOrder == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending; + } + else + { + oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None; + _gameGridSortOrder = SortOrder.Ascending; + } + + GameGrid.Sort(new GameGridRowComparer(_gameGridSortOrder, e.ColumnIndex)); + newColumn.HeaderCell.SortGlyphDirection = _gameGridSortOrder; + _gameGridSortColumnIndex = e.ColumnIndex; + } + + private class GameGridRowComparer : System.Collections.IComparer + { + private readonly int _sortMod = 1; + private readonly int _columnIndex; + + public GameGridRowComparer(SortOrder sortOrder, int index) + { + _columnIndex = index; + + if (sortOrder == SortOrder.Descending) + _sortMod = -1; + } + + public int Compare(object a, object b) + { + DataGridViewRow aRow = (DataGridViewRow)a; + DataGridViewRow bRow = (DataGridViewRow)b; + + RvDir aRvDir = (RvDir)aRow.Tag; + RvDir bRvDir = (RvDir)bRow.Tag; + + int result = 0; + switch (_columnIndex) + { + case 1: // CGame + result = String.CompareOrdinal(aRvDir.Name, bRvDir.Name); + break; + case 2: // CDescription + String aDes = ""; + String bDes = ""; + if (aRvDir.Game != null) + aDes = aRvDir.Game.GetData(RvGame.GameData.Description); + if (bRvDir.Game != null) + bDes = bRvDir.Game.GetData(RvGame.GameData.Description); + + result = String.CompareOrdinal(aDes, bDes); + + // if desciptions match, fall through to sorting by name + if (result == 0) + result = String.CompareOrdinal(aRvDir.Name, bRvDir.Name); + + break; + default: + Console.WriteLine("WARN: GameGridRowComparer::Compare() Invalid columnIndex: {0}", _columnIndex); + break; + } + return _sortMod * result; + } + } #endregion #region "Rom Grid Code" private void splitContainer4_Panel1_Resize(object sender, EventArgs e) { + // fixes a rendering issue in mono + if (splitContainer4.Panel1.Width == 0) return; + int chkLeft = splitContainer4.Panel1.Width - 150; if (chkLeft < 430) chkLeft = 430; @@ -752,7 +963,7 @@ namespace ROMVault2 private void gbSetInfo_Resize(object sender, EventArgs e) { - int leftPos = 84; + const int leftPos = 84; int rightPos = gbSetInfo.Width - 15; if (rightPos > 750) rightPos = 750; int width = rightPos - leftPos; @@ -782,14 +993,14 @@ namespace ROMVault2 lblSITDeveloper.Width = width; int width3 = (int)((double)width * 0.24); - int P2 = (int)((double)width * 0.38); + int p2 = (int)((double)width * 0.38); int width4 = (int) ((double) width*0.24); lblSITEdition.Width = width3; - lblSIVersion.Left = leftPos + P2 - 78; - lblSITVersion.Left = leftPos + P2; + lblSIVersion.Left = leftPos + p2 - 78; + lblSITVersion.Left = leftPos + p2; lblSITVersion.Width = width3; lblSIType.Left = leftPos + width - width3 - 78; @@ -799,8 +1010,8 @@ namespace ROMVault2 lblSITMedia.Width = width3; - lblSILanguage.Left = leftPos + P2 - 78; - lblSITLanguage.Left = leftPos + P2; + lblSILanguage.Left = leftPos + p2 - 78; + lblSITLanguage.Left = leftPos + p2; lblSITLanguage.Width = width3; lblSIPlayers.Left = leftPos + width - width3 - 78; @@ -809,8 +1020,8 @@ namespace ROMVault2 lblSITRatings.Width = width3; - lblSIGenre.Left = leftPos + P2 - 78; - lblSITGenre.Left = leftPos + P2; + lblSIGenre.Left = leftPos + p2 - 78; + lblSITGenre.Left = leftPos + p2; lblSITGenre.Width = width3; lblSIPeripheral.Left = leftPos + width - width3 - 78; @@ -1052,6 +1263,9 @@ namespace ROMVault2 } } + if (Settings.IsMono && RomGrid.RowCount > 0) + RomGrid.CurrentCell = RomGrid[0,0]; + RomGrid.Rows.Clear(); AddDir(tGame, ""); GC.Collect(); @@ -1085,11 +1299,7 @@ namespace ROMVault2 { RomGrid.Rows.Add(); int row = RomGrid.Rows.Count - 1; - - string imageName = "R_" + tRomTable.DatStatus + "_" + tRomTable.RepStatus; - - RomCellDraw tDirCellDraw = new RomCellDraw(imageName, _displayColor[(int)tRomTable.RepStatus]); - RomGrid.Rows[row].Cells[0] = tDirCellDraw; + RomGrid.Rows[row].Tag = tRomTable; for (int i = 0; i < RomGrid.Rows[row].Cells.Count; i++) RomGrid.Rows[row].Cells[i].Style.BackColor = _displayColor[(int)tRomTable.RepStatus]; @@ -1170,6 +1380,29 @@ namespace ROMVault2 } } } + + private void RomGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) + { + + if (_updatingGameGrid) + return; + + Rectangle cellBounds = RomGrid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); + RvFile tRvFile = (RvFile)RomGrid.Rows[e.RowIndex].Tag; + + if (cellBounds.Width == 0 || cellBounds.Height == 0) + return; + + if (RomGrid.Columns[e.ColumnIndex].Name == "CGot") + { + Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height); + Graphics g = Graphics.FromImage(bmp); + string bitmapName = "R_" + tRvFile.DatStatus + "_" + tRvFile.RepStatus; + g.DrawImage(rvImages.GetBitmap(bitmapName), 0, 0, 54, 18); + e.Value = bmp; + } + } + #endregion private void RomGridSelectionChanged(object sender, EventArgs e) @@ -1201,7 +1434,7 @@ namespace ROMVault2 { if (_fk == null || _fk.IsDisposed) - _fk = new frmKey(); + _fk = new FrmKey(); _fk.Show(); } @@ -1215,7 +1448,7 @@ namespace ROMVault2 private void BtnReportClick(object sender, EventArgs e) { Report.MakeFixFiles(); - //frmReport newreporter = new frmReport(); + //FrmReport newreporter = new FrmReport(); //newreporter.ShowDialog(); //newreporter.Dispose(); } @@ -1236,7 +1469,7 @@ namespace ROMVault2 private void AboutRomVaultToolStripMenuItemClick(object sender, EventArgs e) { - frmHelpAbout fha = new frmHelpAbout(); + FrmHelpAbout fha = new FrmHelpAbout(); fha.ShowDialog(this); fha.Dispose(); } @@ -1277,63 +1510,27 @@ namespace ROMVault2 private void GameGrid_MouseUp(object sender, MouseEventArgs e) { - if (e.Button == MouseButtons.Right) - { - int currentMouseOverRow = GameGrid.HitTest(e.X, e.Y).RowIndex; - if (currentMouseOverRow >= 0) - { - object r1 = GameGrid.Rows[currentMouseOverRow].Cells[1].Value; - string filename = r1 != null ? r1.ToString() : ""; - object r2 = GameGrid.Rows[currentMouseOverRow].Cells[2].Value; - string description = r2 != null ? r2.ToString() : ""; + if (e.Button != MouseButtons.Right) + return; - try - { - Clipboard.Clear(); - Clipboard.SetText("Name : " + filename + Environment.NewLine + "Desc : " + description + Environment.NewLine); - } - catch - { - } + int currentMouseOverRow = GameGrid.HitTest(e.X, e.Y).RowIndex; + if (currentMouseOverRow >= 0) + { + object r1 = GameGrid.Rows[currentMouseOverRow].Cells[1].Value; + string filename = r1 != null ? r1.ToString() : ""; + object r2 = GameGrid.Rows[currentMouseOverRow].Cells[2].Value; + string description = r2 != null ? r2.ToString() : ""; + + try + { + Clipboard.Clear(); + Clipboard.SetText("Name : " + filename + Environment.NewLine + "Desc : " + description + Environment.NewLine); + } + catch + { } } - } - - private void RegistratioToolStripMenuItemClick(object sender, EventArgs e) - { - FrmRegistration freg = new FrmRegistration(); - freg.ShowDialog(this); - freg.Dispose(); - } - - private void checkForUpdateToolStripMenuItem_Click(object sender, EventArgs e) - { - BasicHttpBinding b = new BasicHttpBinding(); - EndpointAddress ep = new EndpointAddress(@"http://services.romvault.com/Service1.svc"); - - Service1Client s = new Service1Client(b, ep); - - string v = s.GetLatestVersion1(Program.Version, Program.SubVersion); - - string thisV = Program.Version + "." + Program.SubVersion.ToString("0000"); - - int res = String.Compare(v, thisV, StringComparison.Ordinal); - - if (res > 0) - { - string url = s.GetUpdateLink1(Program.Version, Program.SubVersion); - MessageBox.Show(Resources.Program_Main_There_is_a_new_release_download_now_from + url); - Process.Start(url); - } - else - { - MessageBox.Show(@"You are running the latest version " + Program.Version + "." + Program.SubVersion); - } - - - } - - + } } diff --git a/ROMVault2/frmMain.resx b/ROMVault2/FrmMain.resx similarity index 100% rename from ROMVault2/frmMain.resx rename to ROMVault2/FrmMain.resx diff --git a/ROMVault2/FrmProgressWindow.Designer.cs b/ROMVault2/FrmProgressWindow.Designer.cs index 56868a2..5f55b11 100644 --- a/ROMVault2/FrmProgressWindow.Designer.cs +++ b/ROMVault2/FrmProgressWindow.Designer.cs @@ -74,7 +74,7 @@ // // cancelButton // - this.cancelButton.Location = new System.Drawing.Point(420, 99); + this.cancelButton.Location = new System.Drawing.Point(424, 99); this.cancelButton.Name = "cancelButton"; this.cancelButton.Size = new System.Drawing.Size(75, 23); this.cancelButton.TabIndex = 2; @@ -123,7 +123,7 @@ this.ErrorGrid.ShowCellToolTips = false; this.ErrorGrid.ShowEditingIcon = false; this.ErrorGrid.ShowRowErrors = false; - this.ErrorGrid.Size = new System.Drawing.Size(591, 186); + this.ErrorGrid.Size = new System.Drawing.Size(511, 186); this.ErrorGrid.TabIndex = 6; this.ErrorGrid.SelectionChanged += new System.EventHandler(this.ErrorGridSelectionChanged); // @@ -165,7 +165,7 @@ // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.ErrorGrid); - this.splitContainer1.Size = new System.Drawing.Size(591, 320); + this.splitContainer1.Size = new System.Drawing.Size(511, 320); this.splitContainer1.SplitterDistance = 130; this.splitContainer1.TabIndex = 8; // @@ -184,9 +184,8 @@ // // FrmProgressWindow // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(591, 320); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(511, 320); this.Controls.Add(this.splitContainer1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "FrmProgressWindow"; diff --git a/ROMVault2/FrmProgressWindow.cs b/ROMVault2/FrmProgressWindow.cs index 648712d..d725b25 100644 --- a/ROMVault2/FrmProgressWindow.cs +++ b/ROMVault2/FrmProgressWindow.cs @@ -26,7 +26,7 @@ namespace ROMVault2 _titleRoot = titleRoot; InitializeComponent(); - ClientSize = new Size(498, 131); + ClientSize = new Size(511, 131); _titleRoot = titleRoot; @@ -128,8 +128,8 @@ namespace ROMVault2 if (!_errorOpen) { _errorOpen = true; - ClientSize = new Size(498, 292); - MinimumSize = new Size(498, 292); + ClientSize = new Size(511, 292); + MinimumSize = new Size(511, 292); FormBorderStyle = FormBorderStyle.SizableToolWindow; } @@ -153,8 +153,8 @@ namespace ROMVault2 if (!_errorOpen) { _errorOpen = true; - ClientSize = new Size(498, 292); - MinimumSize = new Size(498, 292); + ClientSize = new Size(511, 292); + MinimumSize = new Size(511, 292); FormBorderStyle = FormBorderStyle.SizableToolWindow; } diff --git a/ROMVault2/FrmProgressWindowFix.designer.cs b/ROMVault2/FrmProgressWindowFix.Designer.cs similarity index 97% rename from ROMVault2/FrmProgressWindowFix.designer.cs rename to ROMVault2/FrmProgressWindowFix.Designer.cs index 59397e0..97c8e40 100644 --- a/ROMVault2/FrmProgressWindowFix.designer.cs +++ b/ROMVault2/FrmProgressWindowFix.Designer.cs @@ -244,7 +244,7 @@ // FrmProgressWindowFix // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackColor = System.Drawing.Color.White; this.ClientSize = new System.Drawing.Size(1027, 500); this.Controls.Add(this.splitContainer1); diff --git a/ROMVault2/FrmRegistration.Designer.cs b/ROMVault2/FrmRegistration.Designer.cs deleted file mode 100644 index bb0ccaf..0000000 --- a/ROMVault2/FrmRegistration.Designer.cs +++ /dev/null @@ -1,121 +0,0 @@ -namespace ROMVault2 -{ - partial class FrmRegistration - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (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.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.txtName = new System.Windows.Forms.TextBox(); - this.txtEmail = new System.Windows.Forms.TextBox(); - this.btnOK = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // label1 - // - this.label1.Location = new System.Drawing.Point(12, 9); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(420, 49); - this.label1.TabIndex = 0; - this.label1.Text = "To make RomVault 2 the best is can be, RomVault 2 will send error reports to the " + - "author. Please fill out this from so that the Author can contact you in the case" + - " of a crash."; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(12, 58); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(120, 13); - this.label2.TabIndex = 1; - this.label2.Text = "Your Name: (Username)"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(12, 100); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(103, 13); - this.label3.TabIndex = 2; - this.label3.Text = "Your Contact Email :"; - // - // txtName - // - this.txtName.Location = new System.Drawing.Point(15, 74); - this.txtName.Name = "txtName"; - this.txtName.Size = new System.Drawing.Size(417, 20); - this.txtName.TabIndex = 3; - // - // txtEmail - // - this.txtEmail.Location = new System.Drawing.Point(15, 116); - this.txtEmail.Name = "txtEmail"; - this.txtEmail.Size = new System.Drawing.Size(417, 20); - this.txtEmail.TabIndex = 4; - // - // btnOK - // - this.btnOK.Location = new System.Drawing.Point(303, 145); - this.btnOK.Name = "btnOK"; - this.btnOK.Size = new System.Drawing.Size(128, 23); - this.btnOK.TabIndex = 5; - this.btnOK.Text = "OK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // FrmRegistration - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(444, 178); - this.ControlBox = false; - this.Controls.Add(this.btnOK); - this.Controls.Add(this.txtEmail); - this.Controls.Add(this.txtName); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Name = "FrmRegistration"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Registration"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtName; - private System.Windows.Forms.TextBox txtEmail; - private System.Windows.Forms.Button btnOK; - } -} \ No newline at end of file diff --git a/ROMVault2/FrmRegistration.cs b/ROMVault2/FrmRegistration.cs deleted file mode 100644 index 22f08ad..0000000 --- a/ROMVault2/FrmRegistration.cs +++ /dev/null @@ -1,28 +0,0 @@ -/****************************************************** - * ROMVault2 is written by Gordon J. * - * Contact gordon@romvault.com * - * Copyright 2014 * - ******************************************************/ - -using System; -using System.Windows.Forms; - -namespace ROMVault2 -{ - public partial class FrmRegistration : Form - { - public FrmRegistration() - { - InitializeComponent(); - txtName.Text = Settings.Username; - txtEmail.Text = Settings.EMail; - } - - private void btnOK_Click(object sender, EventArgs e) - { - Settings.Username = txtName.Text; - Settings.EMail = txtEmail.Text; - Close(); - } - } -} diff --git a/ROMVault2/frmSetDir.Designer.cs b/ROMVault2/FrmSetDir.Designer.cs similarity index 98% rename from ROMVault2/frmSetDir.Designer.cs rename to ROMVault2/FrmSetDir.Designer.cs index 202169f..f697cbc 100644 --- a/ROMVault2/frmSetDir.Designer.cs +++ b/ROMVault2/FrmSetDir.Designer.cs @@ -198,7 +198,7 @@ // FrmSetDir // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.ClientSize = new System.Drawing.Size(694, 391); this.Controls.Add(this.btnResetAll); this.Controls.Add(this.btnClose); diff --git a/ROMVault2/frmSetDir.cs b/ROMVault2/FrmSetDir.cs similarity index 92% rename from ROMVault2/frmSetDir.cs rename to ROMVault2/FrmSetDir.cs index fa07d0f..b646f2a 100644 --- a/ROMVault2/frmSetDir.cs +++ b/ROMVault2/FrmSetDir.cs @@ -35,6 +35,9 @@ namespace ROMVault2 private void UpdateGrid() { + if (Settings.IsMono && DataGridGames.RowCount > 0) + DataGridGames.CurrentCell = DataGridGames[0,0]; + DataGridGames.Rows.Clear(); foreach (DirMap t in Settings.DirPathMap) { @@ -77,7 +80,7 @@ namespace ROMVault2 { ShowNewFolderButton = true, Description = Resources.FrmSetDir_BtnSetRomLocationClick_Please_select_a_folder_for_This_Rom_Set, - RootFolder = Environment.SpecialFolder.DesktopDirectory, + RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory), SelectedPath = DBHelper.GetRealPath(_datLocation) }; if (browse.ShowDialog() == DialogResult.OK) diff --git a/ROMVault2/frmSettings.Designer.cs b/ROMVault2/FrmSettings.Designer.cs similarity index 97% rename from ROMVault2/frmSettings.Designer.cs rename to ROMVault2/FrmSettings.Designer.cs index 742994e..49a71a1 100644 --- a/ROMVault2/frmSettings.Designer.cs +++ b/ROMVault2/FrmSettings.Designer.cs @@ -220,7 +220,7 @@ // FrmSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.ClientSize = new System.Drawing.Size(545, 346); this.Controls.Add(this.chkDoubleCheckDelete); this.Controls.Add(this.label5); diff --git a/ROMVault2/frmSettings.cs b/ROMVault2/FrmSettings.cs similarity index 93% rename from ROMVault2/frmSettings.cs rename to ROMVault2/FrmSettings.cs index dc98973..371e042 100644 --- a/ROMVault2/frmSettings.cs +++ b/ROMVault2/FrmSettings.cs @@ -88,7 +88,7 @@ namespace ROMVault2 { ShowNewFolderButton = true, Description = Resources.FrmSettings_BtnDatClick_Please_select_a_folder_for_DAT_Root, - RootFolder = Environment.SpecialFolder.DesktopDirectory, + RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory), SelectedPath = Settings.DatRoot }; diff --git a/ROMVault2/frmHelpAbout.resx b/ROMVault2/FrmSettings.resx similarity index 100% rename from ROMVault2/frmHelpAbout.resx rename to ROMVault2/FrmSettings.resx diff --git a/ROMVault2/frmShowError.Designer.cs b/ROMVault2/FrmShowError.Designer.cs similarity index 94% rename from ROMVault2/frmShowError.Designer.cs rename to ROMVault2/FrmShowError.Designer.cs index 71d830b..16b852c 100644 --- a/ROMVault2/frmShowError.Designer.cs +++ b/ROMVault2/FrmShowError.Designer.cs @@ -1,6 +1,6 @@ namespace ROMVault2 { - partial class frmShowError + partial class FrmShowError { /// /// Required designer variable. @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmShowError)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmShowError)); this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -62,17 +62,17 @@ this.label1.TabIndex = 2; this.label1.Text = "Sending Error Message to RomVault.Com"; // - // frmShowError + // FrmShowError // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.ClientSize = new System.Drawing.Size(589, 583); this.Controls.Add(this.label1); this.Controls.Add(this.button1); this.Controls.Add(this.textBox1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "frmShowError"; + this.Name = "FrmShowError"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "RomVault Error report"; this.ResumeLayout(false); @@ -86,4 +86,4 @@ private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; } -} \ No newline at end of file +} diff --git a/ROMVault2/frmShowError.cs b/ROMVault2/FrmShowError.cs similarity index 85% rename from ROMVault2/frmShowError.cs rename to ROMVault2/FrmShowError.cs index 6e12bec..b1202bc 100644 --- a/ROMVault2/frmShowError.cs +++ b/ROMVault2/FrmShowError.cs @@ -9,9 +9,9 @@ using System.Windows.Forms; namespace ROMVault2 { - public partial class frmShowError : Form + public partial class FrmShowError : Form { - public frmShowError() + public FrmShowError() { InitializeComponent(); } diff --git a/ROMVault2/frmShowError.resx b/ROMVault2/FrmShowError.resx similarity index 100% rename from ROMVault2/frmShowError.resx rename to ROMVault2/FrmShowError.resx diff --git a/ROMVault2/frmSplashScreen.Designer.cs b/ROMVault2/FrmSplashScreen.Designer.cs similarity index 85% rename from ROMVault2/frmSplashScreen.Designer.cs rename to ROMVault2/FrmSplashScreen.Designer.cs index 9003df2..b15f88f 100644 --- a/ROMVault2/frmSplashScreen.Designer.cs +++ b/ROMVault2/FrmSplashScreen.Designer.cs @@ -35,7 +35,6 @@ this.progressBar = new System.Windows.Forms.ProgressBar(); this.lblVersion = new System.Windows.Forms.Label(); this.bgWork = new System.ComponentModel.BackgroundWorker(); - this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // lblStatus @@ -74,24 +73,13 @@ // this.bgWork.WorkerReportsProgress = true; // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 185); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 6; - this.label1.Text = "label1"; - // // FrmSplashScreen // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.ClientSize = new System.Drawing.Size(465, 207); this.ControlBox = false; - this.Controls.Add(this.label1); this.Controls.Add(this.lblVersion); this.Controls.Add(this.progressBar); this.Controls.Add(this.lblStatus); @@ -100,10 +88,9 @@ this.Name = "FrmSplashScreen"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "frmSplashScreen"; + this.Text = "FrmSplashScreen"; this.Shown += new System.EventHandler(this.FrmSplashScreenShown); this.ResumeLayout(false); - this.PerformLayout(); } @@ -114,6 +101,5 @@ private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Label lblVersion; private System.ComponentModel.BackgroundWorker bgWork; - private System.Windows.Forms.Label label1; } -} \ No newline at end of file +} diff --git a/ROMVault2/frmSplashScreen.cs b/ROMVault2/FrmSplashScreen.cs similarity index 56% rename from ROMVault2/frmSplashScreen.cs rename to ROMVault2/FrmSplashScreen.cs index 39c0c1a..6b4cc78 100644 --- a/ROMVault2/frmSplashScreen.cs +++ b/ROMVault2/FrmSplashScreen.cs @@ -6,11 +6,9 @@ using System; using System.ComponentModel; -using System.ServiceModel; using System.Threading; using System.Windows.Forms; using ROMVault2.Properties; -using ROMVault2.RVRef; using ROMVault2.RvDB; namespace ROMVault2 @@ -26,8 +24,6 @@ namespace ROMVault2 Opacity = 0; timer1.Interval = 50; - label1.Text = @"Registered to : " + Settings.Username + @" Contact Email (" + Settings.EMail + @")"; - bgWork.DoWork += StartUpCode; bgWork.ProgressChanged += BgwProgressChanged; bgWork.RunWorkerCompleted += BgwRunWorkerCompleted; @@ -42,64 +38,11 @@ namespace ROMVault2 private void StartUpCode(object sender, DoWorkEventArgs e) { - - BasicHttpBinding b = new BasicHttpBinding { SendTimeout = new TimeSpan(0, 0, 20), ReceiveTimeout = new TimeSpan(0, 0, 20) }; - EndpointAddress ep = new EndpointAddress(@"http://services.romvault.com/Service1.svc"); - Service1Client s = new Service1Client(b, ep); - - if (string.IsNullOrEmpty(Settings.Username) || string.IsNullOrEmpty(Settings.EMail)) - { - FrmRegistration freg = new FrmRegistration(); - freg.ShowDialog(); - freg.Dispose(); - } - - bool isNetworkAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable(); - - string r = "OK"; - try - { - if (isNetworkAvailable) - r = s.SendUser1(Settings.Username, Settings.EMail, Program.Version, Program.SubVersion); - } - catch (Exception) - { - r = "OK"; - } - - if (r != "OK") - { - Program.ErrorMessage=Resources.Program_Main_You_are_not_Authorised_to_use_this_program; - return; - } - // normal check ends - - string thisV = Program.Version + "." + Program.SubVersion.ToString("0000"); - string v = thisV; - try - { - if (isNetworkAvailable) - v = s.GetLatestVersion1(Program.Version, Program.SubVersion); - } - catch (Exception) - { - v = thisV; - } - if (String.Compare(v, thisV, StringComparison.Ordinal) > 0) - { - Program.URL = s.GetUpdateLink1(Program.Version, Program.SubVersion); - Program.ErrorMessage=Resources.Program_Main_There_is_a_new_release_download_now_from + Program.URL; - return; - } - - s.Close(); - RepairStatus.InitStatusCheck(); Settings.SetDefaults(); DB.Read(sender,e); - } diff --git a/ROMVault2/FrmSplashScreen.resx b/ROMVault2/FrmSplashScreen.resx new file mode 100644 index 0000000..739f5ec --- /dev/null +++ b/ROMVault2/FrmSplashScreen.resx @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 104, 17 + + + + + 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 + + + \ No newline at end of file diff --git a/ROMVault2/IO/RVIO.cs b/ROMVault2/IO/RVIO.cs index 0d90862..6539b24 100644 --- a/ROMVault2/IO/RVIO.cs +++ b/ROMVault2/IO/RVIO.cs @@ -47,12 +47,7 @@ namespace ROMVault2.IO public string FullName; public long LastWriteTime; public long Length; - public int fileAttributes; - public bool isHidden - { - get { return (fileAttributes & Win32Native.FILE_ATTRIBUTE_HIDDEN) != 0; } - } public FileInfo() { } @@ -62,6 +57,17 @@ namespace ROMVault2.IO FullName = path; Name = Path.GetFileName(path); + if (Settings.IsUnix) + { + System.IO.FileInfo fi = new System.IO.FileInfo(path); + + if(!fi.Exists) return; + + Length = fi.Length; + LastWriteTime = fi.LastWriteTimeUtc.Ticks; + return; + } + string fileName = NameFix.AddLongPathPrefix(path); Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA(); @@ -71,7 +77,6 @@ namespace ROMVault2.IO Length = Convert.Length(wIn32FileAttributeData.fileSizeHigh, wIn32FileAttributeData.fileSizeLow); LastWriteTime = Convert.Time(wIn32FileAttributeData.ftLastWriteTimeHigh, wIn32FileAttributeData.ftLastWriteTimeLow); - fileAttributes = wIn32FileAttributeData.fileAttributes; } } @@ -81,13 +86,7 @@ namespace ROMVault2.IO public string Name; public string FullName; public long LastWriteTime; - public int fileAttributes; - - public bool isHidden - { - get { return (fileAttributes & Win32Native.FILE_ATTRIBUTE_HIDDEN) != 0; } - } - + public DirectoryInfo() { } public DirectoryInfo(string path) @@ -95,6 +94,16 @@ namespace ROMVault2.IO FullName = path; Name = Path.GetFileName(path); + if (Settings.IsUnix) + { + System.IO.DirectoryInfo fi = new System.IO.DirectoryInfo(path); + + if(!fi.Exists) return; + + LastWriteTime = fi.LastWriteTimeUtc.Ticks; + return; + } + string fileName = NameFix.AddLongPathPrefix(path); Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA(); @@ -102,7 +111,6 @@ namespace ROMVault2.IO if (!b || (wIn32FileAttributeData.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0) return; LastWriteTime = Convert.Time(wIn32FileAttributeData.ftLastWriteTimeHigh, wIn32FileAttributeData.ftLastWriteTimeLow); - fileAttributes = wIn32FileAttributeData.fileAttributes; } @@ -115,6 +123,25 @@ namespace ROMVault2.IO { List dirs = new List(); + if (Settings.IsUnix) + { + System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(FullName); + System.IO.DirectoryInfo[] arrDi = di.GetDirectories(SearchPattern); + foreach (System.IO.DirectoryInfo tDi in arrDi) + { + DirectoryInfo lDi = new DirectoryInfo + { + Name = tDi.Name, + FullName = Path.Combine(FullName, tDi.Name), + LastWriteTime = tDi.LastWriteTimeUtc.Ticks + }; + dirs.Add(lDi); + } + return dirs.ToArray(); + } + + + string dirName = NameFix.AddLongPathPrefix(FullName); Win32Native.WIN32_FIND_DATA findData = new Win32Native.WIN32_FIND_DATA(); @@ -135,8 +162,7 @@ namespace ROMVault2.IO { Name = currentFileName, FullName = Path.Combine(FullName, currentFileName), - LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow), - fileAttributes = findData.dwFileAttributes + LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow) }; dirs.Add(di); } @@ -157,6 +183,24 @@ namespace ROMVault2.IO { List files = new List(); + if (Settings.IsUnix) + { + System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(FullName); + System.IO.FileInfo[] arrDi = di.GetFiles(SearchPattern); + foreach (System.IO.FileInfo tDi in arrDi) + { + FileInfo lDi = new FileInfo + { + Name = tDi.Name, + FullName = Path.Combine(FullName, tDi.Name), + Length = tDi.Length, + LastWriteTime = tDi.LastWriteTimeUtc.Ticks + }; + files.Add(lDi); + } + return files.ToArray(); + } + string dirName = NameFix.AddLongPathPrefix(FullName); Win32Native.WIN32_FIND_DATA findData = new Win32Native.WIN32_FIND_DATA(); @@ -177,8 +221,7 @@ namespace ROMVault2.IO Name = currentFileName, FullName = Path.Combine(FullName, currentFileName), Length = Convert.Length(findData.nFileSizeHigh, findData.nFileSizeLow), - LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow), - fileAttributes = findData.dwFileAttributes + LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow) }; files.Add(fi); } @@ -196,6 +239,10 @@ namespace ROMVault2.IO { public static bool Exists(string path) { + if (Settings.IsUnix) + return System.IO.Directory.Exists(path); + + string fixPath = NameFix.AddLongPathPrefix(path); Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA(); @@ -205,6 +252,13 @@ namespace ROMVault2.IO } public static void Move(String sourceDirName, String destDirName) { + if (Settings.IsUnix) + { + System.IO.Directory.Move(sourceDirName, destDirName); + return; + } + + if (sourceDirName == null) throw new ArgumentNullException("sourceDirName"); if (sourceDirName.Length == 0) @@ -234,6 +288,12 @@ namespace ROMVault2.IO } public static void Delete(String path) { + if (Settings.IsUnix) + { + System.IO.Directory.Delete(path); + return; + } + String fullPath = NameFix.AddLongPathPrefix(path); Win32Native.RemoveDirectory(fullPath); @@ -241,6 +301,13 @@ namespace ROMVault2.IO public static void CreateDirectory(String path) { + if (Settings.IsUnix) + { + System.IO.Directory.CreateDirectory(path); + return; + } + + if (path == null) throw new ArgumentNullException("path"); if (path.Length == 0) @@ -256,6 +323,10 @@ namespace ROMVault2.IO { public static bool Exists(string path) { + if (Settings.IsUnix) + return System.IO.File.Exists(path); + + string fixPath = NameFix.AddLongPathPrefix(path); Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA(); @@ -269,6 +340,12 @@ namespace ROMVault2.IO } public static void Copy(String sourceFileName, String destFileName, bool overwrite) { + if (Settings.IsUnix) + { + System.IO.File.Copy(sourceFileName, destFileName, overwrite); + return; + } + if (sourceFileName == null || destFileName == null) throw new ArgumentNullException((sourceFileName == null ? "sourceFileName" : "destFileName"), "ArgumentNull_FileName"); if (sourceFileName.Length == 0 || destFileName.Length == 0) @@ -310,6 +387,12 @@ namespace ROMVault2.IO } public static void Move(String sourceFileName, String destFileName) { + if (Settings.IsUnix) + { + System.IO.File.Move(sourceFileName, destFileName); + return; + } + if (sourceFileName == null || destFileName == null) throw new ArgumentNullException((sourceFileName == null ? "sourceFileName" : "destFileName"), "ArgumentNull_FileName"); if (sourceFileName.Length == 0 || destFileName.Length == 0) @@ -329,6 +412,13 @@ namespace ROMVault2.IO } public static void Delete(String path) { + if (Settings.IsUnix) + { + System.IO.File.Delete(path); + return; + } + + string fixPath = NameFix.AddLongPathPrefix(path); if (!Win32Native.DeleteFile(fixPath)) @@ -341,6 +431,20 @@ namespace ROMVault2.IO public static bool SetAttributes(String path, FileAttributes fileAttributes) { + if (Settings.IsUnix) + { + try + { + System.IO.File.SetAttributes(path, (System.IO.FileAttributes) fileAttributes); + return true; + } + catch (Exception) + { + return false; + } + } + + String fullPath = NameFix.AddLongPathPrefix(path); return Win32Native.SetFileAttributes(fullPath, (int)fileAttributes); } @@ -362,6 +466,9 @@ namespace ROMVault2.IO } public static string Combine(string path1, string path2) { + if (Settings.IsUnix) + return System.IO.Path.Combine(path1, path2); + if (path1 == null || path2 == null) throw new ArgumentNullException((path1 == null) ? "path1" : "path2"); //CheckInvalidPathChars(path1); @@ -431,6 +538,10 @@ namespace ROMVault2.IO } public static String GetDirectoryName(String path) { + if (Settings.IsUnix) + return System.IO.Path.GetDirectoryName(path); + + if (path != null) { int root = GetRootLength(path); @@ -489,6 +600,19 @@ namespace ROMVault2.IO public static int OpenFileRead(string path, out System.IO.Stream stream) { + if (Settings.IsUnix) + { + try + { + stream=new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read); + return 0; + } + catch (Exception) + { + stream = null; + return Marshal.GetLastWin32Error(); + } + } string filename = NameFix.AddLongPathPrefix(path); SafeFileHandle hFile = Win32Native.CreateFile(filename, @@ -510,6 +634,21 @@ namespace ROMVault2.IO public static int OpenFileWrite(string path, out System.IO.Stream stream) { + if (Settings.IsUnix) + { + try + { + stream = new System.IO.FileStream(path, System.IO.FileMode.Create, System.IO.FileAccess.Write); + return 0; + } + catch (Exception) + { + stream = null; + return Marshal.GetLastWin32Error(); + } + } + + string filename = NameFix.AddLongPathPrefix(path); SafeFileHandle hFile = Win32Native.CreateFile(filename, GENERIC_WRITE, @@ -536,6 +675,9 @@ namespace ROMVault2.IO { public static string GetShortPath(string path) { + if (Settings.IsUnix) + return path; + int remove = 0; string retPath; if (path.StartsWith(@"\\")) diff --git a/ROMVault2/Program.cs b/ROMVault2/Program.cs index b7f9035..90505e3 100644 --- a/ROMVault2/Program.cs +++ b/ROMVault2/Program.cs @@ -14,8 +14,8 @@ namespace ROMVault2 { //public static UsernamePassword Up; public static readonly Encoding Enc = Encoding.GetEncoding(28591); - public const string Version = "2.1"; - public const int SubVersion = 25; + public const string Version = "2.2"; + public const int SubVersion = 3; public static string ErrorMessage; public static string URL; diff --git a/ROMVault2/ROMVault2.csproj b/ROMVault2/ROMVault2.csproj index 8e5df65..08f50fc 100644 --- a/ROMVault2/ROMVault2.csproj +++ b/ROMVault2/ROMVault2.csproj @@ -9,7 +9,7 @@ WinExe Properties ROMVault2 - ROMVault21 + ROMVault22 v3.5 @@ -35,8 +35,8 @@ true full false - .\ - TRACE;DEBUG;UNMANAGED, COMPRESS, LZMA_STREAM, DOTNET20 + ..\..\Stage\ + TRACE;DEBUG;UNMANAGED;COMPRESS;LZMA_STREAM;DOTNET20 prompt 4 false @@ -55,7 +55,7 @@ true ..\..\Stage\ - TRACE;DEBUG;UNMANAGED, COMPRESS, LZMA_STREAM, DOTNET20 + TRACE;DEBUG;UNMANAGED;COMPRESS;LZMA_STREAM;DOTNET20 full x86 ..\..\Stage2\ROMVault2.exe.CodeAnalysisLog.xml @@ -70,7 +70,7 @@ ..\..\Stage\ - TRACE;UNMANAGED, COMPRESS, LZMA_STREAM, DOTNET20 + TRACE;UNMANAGED;COMPRESS;LZMA_STREAM;DOTNET20 true pdbonly AnyCPU @@ -89,7 +89,6 @@ - @@ -107,7 +106,7 @@ Form - + FrmProgressWindowFix.cs @@ -128,17 +127,17 @@ - + Form - - frmHelpAbout.cs + + FrmHelpAbout.cs - + Form - - frmKey.cs + + FrmKey.cs Form @@ -146,36 +145,29 @@ FrmProgressWindow.cs - + Form - - FrmRegistration.cs + + FrmSetDir.cs - + Form - - frmSetDir.cs + + FrmSettings.cs - + Form - - frmSettings.cs + + FrmShowError.cs - - + Form - - frmShowError.cs - - - Form - - - frmSplashScreen.cs + + FrmSplashScreen.cs @@ -190,11 +182,6 @@ rvTree.cs - - True - True - Reference.svcmap - @@ -225,11 +212,11 @@ - - frmHelpAbout.cs + + FrmHelpAbout.cs - - frmKey.cs + + FrmKey.cs Designer @@ -241,18 +228,15 @@ FrmProgressWindowFix.cs - - FrmRegistration.cs - - - frmSettings.cs + + FrmSettings.cs Designer - - frmShowError.cs + + FrmShowError.cs - - frmSplashScreen.cs + + FrmSplashScreen.cs ResXFileCodeGenerator @@ -281,13 +265,6 @@ Settings.settings True - - Designer - - - - Designer - @@ -311,19 +288,6 @@ PreserveNewest - - - WCF Proxy Generator - Reference.cs - - - - - - - - - diff --git a/ROMVault2/Report.cs b/ROMVault2/Report.cs index 373f77c..d801e8d 100644 --- a/ROMVault2/Report.cs +++ b/ROMVault2/Report.cs @@ -40,7 +40,7 @@ namespace ROMVault2 { ShowNewFolderButton = true, Description = @"Please select a folder for Dats", - RootFolder = Environment.SpecialFolder.DesktopDirectory, + RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory), SelectedPath = @"apps" }; diff --git a/ROMVault2/ReportError.cs b/ROMVault2/ReportError.cs index 6abeefd..cbb93f1 100644 --- a/ROMVault2/ReportError.cs +++ b/ROMVault2/ReportError.cs @@ -10,7 +10,6 @@ using System.Globalization; using System.IO; using System.ServiceModel; using System.Windows.Forms; -using ROMVault2.RVRef; using ROMVault2.RvDB; using ROMVault2.Utils; @@ -32,9 +31,7 @@ namespace ROMVault2 } message += string.Format("\r\nSTACK TRACE:\r\n{0}", e.Exception.StackTrace); - SendErrorMessage(message); - - frmShowError fshow = new frmShowError(); + FrmShowError fshow = new FrmShowError(); fshow.settype(message); fshow.ShowDialog(); @@ -58,9 +55,7 @@ namespace ROMVault2 } message += string.Format("\r\nSTACK TRACE:\r\n{0}", e.StackTrace); - SendErrorMessage(message); - - frmShowError fshow = new frmShowError(); + FrmShowError fshow = new FrmShowError(); fshow.settype(message); fshow.ShowDialog(); @@ -80,9 +75,7 @@ namespace ROMVault2 message += string.Format("\r\nSTACK TRACE:\r\n{0}", Environment.StackTrace); - SendErrorMessage(message); - - frmShowError fshow = new frmShowError(); + FrmShowError fshow = new FrmShowError(); fshow.settype(message); fshow.ShowDialog(); @@ -103,7 +96,6 @@ namespace ROMVault2 public static void SendAndShow(string message, string caption = "RomVault", MessageBoxButtons buttons = MessageBoxButtons.OK, MessageBoxIcon icon = MessageBoxIcon.Exclamation) { - SendErrorMessage(message); Show(message, caption, buttons, icon); } @@ -115,49 +107,6 @@ namespace ROMVault2 MessageBox.Show(text, caption, buttons, icon); } - public static void SendErrorMessage(string message) - { - - bool isNetworkAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable(); - if (!isNetworkAvailable) return; - - string st = Environment.StackTrace; - - BasicHttpBinding b = new BasicHttpBinding { SendTimeout = new TimeSpan(0, 0, 5), ReceiveTimeout = new TimeSpan(0, 0, 5) }; - EndpointAddress e = new EndpointAddress(@"http://services.romvault.com/Service1.svc"); - - Service1Client s = new Service1Client(b, e); - - try - { - s.SendErrorMessage3(Settings.Username, Settings.EMail, Program.Version, Program.SubVersion, message + "\n" + st); - } - catch - { - } - s.Close(); - } - - public static void SendErrorMessageDat(string message, string filename) - { - bool isNetworkAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable(); - if (!isNetworkAvailable) return; - - BasicHttpBinding b = new BasicHttpBinding { SendTimeout = new TimeSpan(0, 0, 5), ReceiveTimeout = new TimeSpan(0, 0, 5) }; - EndpointAddress e = new EndpointAddress(@"http://services.romvault.com/Service1.svc"); - - Service1Client s = new Service1Client(b, e); - - try - { - s.SendDATErrorMessage3(Settings.Username, Settings.EMail, Program.Version, Program.SubVersion, message, filename); - } - catch - { - } - s.Close(); - } - private static string _logfilename; public static void ReportList(List files) @@ -225,4 +174,4 @@ namespace ROMVault2 sw.Close(); } } -} \ No newline at end of file +} diff --git a/ROMVault2/Service References/RVRef/Reference.cs b/ROMVault2/Service References/RVRef/Reference.cs deleted file mode 100644 index 23e665c..0000000 --- a/ROMVault2/Service References/RVRef/Reference.cs +++ /dev/null @@ -1,137 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.34003 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ROMVault2.RVRef { - - - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(ConfigurationName="RVRef.IService1")] - public interface IService1 { - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/CheckPassword", ReplyAction="http://tempuri.org/IService1/CheckPasswordResponse")] - string CheckPassword(string username, string password); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendUser", ReplyAction="http://tempuri.org/IService1/SendUserResponse")] - string SendUser(string username, string email, int version); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendUser1", ReplyAction="http://tempuri.org/IService1/SendUser1Response")] - string SendUser1(string username, string email, string version, int subversion); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetLatestVersion", ReplyAction="http://tempuri.org/IService1/GetLatestVersionResponse")] - int GetLatestVersion(int versionNow); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetLatestVersion1", ReplyAction="http://tempuri.org/IService1/GetLatestVersion1Response")] - string GetLatestVersion1(string version, int subversion); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetUpdateLink", ReplyAction="http://tempuri.org/IService1/GetUpdateLinkResponse")] - string GetUpdateLink(); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetUpdateLink1", ReplyAction="http://tempuri.org/IService1/GetUpdateLink1Response")] - string GetUpdateLink1(string version, int subversion); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage", ReplyAction="http://tempuri.org/IService1/SendErrorMessageResponse")] - void SendErrorMessage(string username, string error); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage1", ReplyAction="http://tempuri.org/IService1/SendErrorMessage1Response")] - void SendErrorMessage1(string username, string email, string error); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage2", ReplyAction="http://tempuri.org/IService1/SendErrorMessage2Response")] - void SendErrorMessage2(string username, string email, int version, string error); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage3", ReplyAction="http://tempuri.org/IService1/SendErrorMessage3Response")] - void SendErrorMessage3(string username, string email, string version, int subversion, string error); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendDATErrorMessage2", ReplyAction="http://tempuri.org/IService1/SendDATErrorMessage2Response")] - void SendDATErrorMessage2(string username, string email, int version, string error, string filename); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendDATErrorMessage3", ReplyAction="http://tempuri.org/IService1/SendDATErrorMessage3Response")] - void SendDATErrorMessage3(string username, string email, string version, int subversion, string error, string filename); - } - - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public interface IService1Channel : ROMVault2.RVRef.IService1, System.ServiceModel.IClientChannel { - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public partial class Service1Client : System.ServiceModel.ClientBase, ROMVault2.RVRef.IService1 { - - public Service1Client() { - } - - public Service1Client(string endpointConfigurationName) : - base(endpointConfigurationName) { - } - - public Service1Client(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) { - } - - public Service1Client(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) { - } - - public Service1Client(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : - base(binding, remoteAddress) { - } - - public string CheckPassword(string username, string password) { - return base.Channel.CheckPassword(username, password); - } - - public string SendUser(string username, string email, int version) { - return base.Channel.SendUser(username, email, version); - } - - public string SendUser1(string username, string email, string version, int subversion) { - return base.Channel.SendUser1(username, email, version, subversion); - } - - public int GetLatestVersion(int versionNow) { - return base.Channel.GetLatestVersion(versionNow); - } - - public string GetLatestVersion1(string version, int subversion) { - return base.Channel.GetLatestVersion1(version, subversion); - } - - public string GetUpdateLink() { - return base.Channel.GetUpdateLink(); - } - - public string GetUpdateLink1(string version, int subversion) { - return base.Channel.GetUpdateLink1(version, subversion); - } - - public void SendErrorMessage(string username, string error) { - base.Channel.SendErrorMessage(username, error); - } - - public void SendErrorMessage1(string username, string email, string error) { - base.Channel.SendErrorMessage1(username, email, error); - } - - public void SendErrorMessage2(string username, string email, int version, string error) { - base.Channel.SendErrorMessage2(username, email, version, error); - } - - public void SendErrorMessage3(string username, string email, string version, int subversion, string error) { - base.Channel.SendErrorMessage3(username, email, version, subversion, error); - } - - public void SendDATErrorMessage2(string username, string email, int version, string error, string filename) { - base.Channel.SendDATErrorMessage2(username, email, version, error, filename); - } - - public void SendDATErrorMessage3(string username, string email, string version, int subversion, string error, string filename) { - base.Channel.SendDATErrorMessage3(username, email, version, subversion, error, filename); - } - } -} diff --git a/ROMVault2/Service References/RVRef/Reference.svcmap b/ROMVault2/Service References/RVRef/Reference.svcmap deleted file mode 100644 index 5c2ebfa..0000000 --- a/ROMVault2/Service References/RVRef/Reference.svcmap +++ /dev/null @@ -1,33 +0,0 @@ - - - - false - true - - false - false - false - - - true - Auto - true - true - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ROMVault2/Service References/RVRef/Service1.xsd b/ROMVault2/Service References/RVRef/Service1.xsd deleted file mode 100644 index 32e1c19..0000000 --- a/ROMVault2/Service References/RVRef/Service1.xsd +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ROMVault2/Service References/RVRef/Service11.disco b/ROMVault2/Service References/RVRef/Service11.disco deleted file mode 100644 index d705778..0000000 --- a/ROMVault2/Service References/RVRef/Service11.disco +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ROMVault2/Service References/RVRef/Service11.wsdl b/ROMVault2/Service References/RVRef/Service11.wsdl deleted file mode 100644 index 9dd5eac..0000000 --- a/ROMVault2/Service References/RVRef/Service11.wsdl +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ROMVault2/Service References/RVRef/Service11.xsd b/ROMVault2/Service References/RVRef/Service11.xsd deleted file mode 100644 index e6bd8df..0000000 --- a/ROMVault2/Service References/RVRef/Service11.xsd +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ROMVault2/Service References/RVRef/configuration.svcinfo b/ROMVault2/Service References/RVRef/configuration.svcinfo deleted file mode 100644 index 36c7f28..0000000 --- a/ROMVault2/Service References/RVRef/configuration.svcinfo +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/ROMVault2/Service References/RVRef/configuration91.svcinfo b/ROMVault2/Service References/RVRef/configuration91.svcinfo deleted file mode 100644 index a1e7b23..0000000 --- a/ROMVault2/Service References/RVRef/configuration91.svcinfo +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - BasicHttpBinding_IService1 - - - - - - - - - - - - - - - - - - - - - StrongWildcard - - - - - - 65536 - - - - - - - - - System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - System.Text.UTF8Encoding - - - Buffered - - - - - - Text - - - System.ServiceModel.Configuration.BasicHttpSecurityElement - - - None - - - System.ServiceModel.Configuration.HttpTransportSecurityElement - - - None - - - None - - - System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement - - - Never - - - TransportSelected - - - (Collection) - - - - - - System.ServiceModel.Configuration.BasicHttpMessageSecurityElement - - - UserName - - - Default - - - - - - - - - http://services.romvault.com/Service1.svc - - - - - - basicHttpBinding - - - BasicHttpBinding_IService1 - - - RVRef.IService1 - - - System.ServiceModel.Configuration.AddressHeaderCollectionElement - - - <Header /> - - - System.ServiceModel.Configuration.IdentityElement - - - System.ServiceModel.Configuration.UserPrincipalNameElement - - - - - - System.ServiceModel.Configuration.ServicePrincipalNameElement - - - - - - System.ServiceModel.Configuration.DnsElement - - - - - - System.ServiceModel.Configuration.RsaElement - - - - - - System.ServiceModel.Configuration.CertificateElement - - - - - - System.ServiceModel.Configuration.CertificateReferenceElement - - - My - - - LocalMachine - - - FindBySubjectDistinguishedName - - - - - - False - - - BasicHttpBinding_IService1 - - - - - - - - - - - \ No newline at end of file diff --git a/ROMVault2/Settings.cs b/ROMVault2/Settings.cs index a5b726b..41fc10a 100644 --- a/ROMVault2/Settings.cs +++ b/ROMVault2/Settings.cs @@ -48,47 +48,20 @@ namespace ROMVault2 public static bool CacheSaveTimerEnabled = true; public static int CacheSaveTimePeriod = 10; - public static string EMail + public static bool IsUnix { get { - RegistryKey regKey1 = Registry.CurrentUser; - regKey1 = regKey1.CreateSubKey("Software\\RomVault2\\User"); - return regKey1.GetValue("Email", "").ToString(); - - } - - set - { - RegistryKey regKey = Registry.CurrentUser; - regKey = regKey.CreateSubKey("Software\\RomVault2\\User"); - regKey.SetValue("Email", value); + int p = (int)Environment.OSVersion.Platform; + return ((p == 4) || (p == 6) || (p == 128)); } } - public static string Username - { - get - { - RegistryKey regKey1 = Registry.CurrentUser; - regKey1 = regKey1.CreateSubKey("Software\\RomVault2\\User"); - return regKey1.GetValue("UserName", "").ToString(); - - } - set - { - RegistryKey regKey = Registry.CurrentUser; - regKey = regKey.CreateSubKey("Software\\RomVault2\\User"); - regKey.SetValue("UserName", value); - } - } - - - + public static bool IsMono { get { return (Type.GetType ("Mono.Runtime") != null); } } public static void SetDefaults() { - CacheFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RomVault2_"+DBVersion.Version+".Cache"); + CacheFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RomVault2_" + DBVersion.Version + ".Cache"); //DatRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DatRoot"); DatRoot = "DatRoot"; @@ -135,10 +108,10 @@ namespace ROMVault2 bw.Write(ver); //int bw.Write(DatRoot); //string - bw.Write((Int32)ScanLevel); + bw.Write((Int32)ScanLevel); bw.Write((Int32)FixLevel); bw.Write(DebugLogsEnabled); //bool - + bw.Write(IgnoreFiles.Count); //int foreach (string t in IgnoreFiles) { diff --git a/ROMVault2/SupportedFiles/CHD/CHD.cs b/ROMVault2/SupportedFiles/CHD/CHD.cs index 36131b7..3d5ba2b 100644 --- a/ROMVault2/SupportedFiles/CHD/CHD.cs +++ b/ROMVault2/SupportedFiles/CHD/CHD.cs @@ -245,10 +245,14 @@ namespace ROMVault2.SupportedFiles.CHD _result = ""; _resultType = CHDManCheck.Unset; - string chdPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "chdman.exe"); + string chdExe = "chdman.exe"; + if (Settings.IsUnix) + chdExe = "chdman"; + + string chdPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, chdExe); if (!File.Exists(chdPath)) { - result = "chdman not found"; + result = chdExe + " Not Found."; return CHDManCheck.ChdmanNotFound; } @@ -330,7 +334,7 @@ namespace ROMVault2.SupportedFiles.CHD switch (_outputLineCount) { case 0: - if (sOut.Length < 53 || sOut.Substring(0, 53) != "chdman - MAME Compressed Hunks of Data (CHD) manager ") + if (!System.Text.RegularExpressions.Regex.IsMatch(sOut, @"^chdman - MAME Compressed Hunks of Data \(CHD\) manager ([0-9\.]+) \(.*\)")) { _result = "Incorrect startup of CHDMan :" + sOut; _resultType = CHDManCheck.CHDReturnError; @@ -352,7 +356,6 @@ namespace ROMVault2.SupportedFiles.CHD break; default: _result = "Unexpected output from chdman :" + sOut; - ReportError.SendErrorMessage("CHDOutputHandler returned =" + sOut); _resultType = CHDManCheck.CHDUnknownError; break; } @@ -367,70 +370,60 @@ namespace ROMVault2.SupportedFiles.CHD // Collect the process command output. if (String.IsNullOrEmpty(outLine.Data)) return; - string sOut = outLine.Data; - ReportError.LogOut("CHDError: " + sOut); + // We can get fed multiple lines worth of data because of \r line feeds + string[] sLines = outLine.Data.Split(new string[] { "\r" }, StringSplitOptions.None); - _bgw.ReportProgress(0, new bgwText3(sOut)); + foreach (string sLine in sLines) { - if (_resultType != CHDManCheck.Unset) - { - if(_errorLines>0) + if (string.IsNullOrEmpty(sLine)) continue; + + ReportError.LogOut("CHDError: " + sLine); + _bgw.ReportProgress(0, new bgwText3(sLine)); + + if (_resultType != CHDManCheck.Unset) { - _errorLines -= 1; - _result += "\r\n" + sOut; + if (_errorLines>0) + { + _errorLines -= 1; + _result += "\r\n" + sLine; + } + } + else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^No verification to be done; CHD has (uncompressed|no checksum)")) + { + _result = sLine; + _resultType = CHDManCheck.Corrupt; + } + else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Error (opening|reading) CHD file.*")) + { + _result = sLine; + _resultType = CHDManCheck.Corrupt; + } + else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Error opening parent CHD file .*:")) + { + _result = sLine; + _resultType = CHDManCheck.Corrupt; + } + else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Error: (Raw|Overall) SHA1 in header")) + { + _result = sLine; + _resultType = CHDManCheck.Corrupt; + } + else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Out of memory")) + { + _result = sLine; + _resultType = CHDManCheck.Corrupt; + } + // Verifying messages are a non-error + else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"Verifying, \d+\.\d+\% complete\.\.\.")) + { + + } + else + { + _result = "Unknown message : " + sLine; + _resultType = CHDManCheck.CHDUnknownError; } - return; } - - if (sOut.Length > 44) - if (sOut.Substring(0, 23) == "Error reading CHD file " && sOut.Substring(sOut.Length - 21, 21) == ": decompression error") - { - _result = sOut; - _resultType = CHDManCheck.Corrupt; - return; - } - if (sOut.Length > 35) - if (sOut.Substring(0, 23) == "Error opening CHD file " && sOut.Substring(sOut.Length - 21, 21) == ": decompression error") - { - _result = sOut; - _resultType = CHDManCheck.Corrupt; - return; - } - if (sOut.Length > 35) - if (sOut.Substring(0, 23) == "Error opening CHD file " && sOut.Substring(sOut.Length - 12, 12) == ": read error") - { - _result = sOut; - _resultType = CHDManCheck.Corrupt; - return; - } - if (sOut.Length > 25) - if (sOut.Substring(0, 25) == "Error: Raw SHA1 in header") - { - _result = sOut; - _errorLines = 1; - _resultType = CHDManCheck.Corrupt; - return; - } - if (sOut.Length == 13) - if (sOut == "Out of memory") - { - _result = sOut; - _resultType = CHDManCheck.Corrupt; - return; - } - - // check for Verifying message - if (sOut.Length >= 24) - if (sOut.Substring(0, 11) == "Verifying, " && sOut.Substring(sOut.Length - 13, 13) == " complete... ") - { - //_resultType = CHDManCheck.Good; - return; - } - - - ReportError.SendErrorMessage("CHDErrorHandler returned =" + sOut); - _result = "Unknown message : " + sOut; - _resultType = CHDManCheck.CHDUnknownError; } diff --git a/ROMVault2/frmSettings.resx b/ROMVault2/frmSettings.resx deleted file mode 100644 index 5ea0895..0000000 --- a/ROMVault2/frmSettings.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/ROMVault2/frmSplashScreen.resx b/ROMVault2/frmSplashScreen.resx deleted file mode 100644 index 488f942..0000000 --- a/ROMVault2/frmSplashScreen.resx +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 104, 17 - - - - - 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 - - - \ No newline at end of file diff --git a/ROMVault2/rvTree.Designer.cs b/ROMVault2/rvTree.Designer.cs index 5dff86c..efcfd33 100644 --- a/ROMVault2/rvTree.Designer.cs +++ b/ROMVault2/rvTree.Designer.cs @@ -33,7 +33,7 @@ // rvTree // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.DoubleBuffered = true; this.Name = "RvTree"; diff --git a/ROMVault2/rvTree.cs b/ROMVault2/rvTree.cs index 28e0a57..72af6d3 100644 --- a/ROMVault2/rvTree.cs +++ b/ROMVault2/rvTree.cs @@ -60,7 +60,7 @@ namespace ROMVault2 pTree.Tree.TreeBranches = pTreeBranches; - pTree.Tree.RTree = new Rectangle(0, _yPos - 8, nodeDepth * 18, 16); + pTree.Tree.RTree = new Rectangle(0, _yPos - 8, 1 + nodeDepth * 18, 16); pTree.Tree.RExpand = new Rectangle(5 + nodeDepth * 18, _yPos + 4, 9, 9); pTree.Tree.RChecked = new Rectangle(20 + nodeDepth * 18, _yPos + 2, 13, 13); pTree.Tree.RIcon = new Rectangle(35 + nodeDepth * 18, _yPos, 16, 16);