From ee496df39b10f15413df559a67394a6ea3332ded Mon Sep 17 00:00:00 2001 From: muid Date: Wed, 29 May 2024 12:56:44 +0200 Subject: [PATCH 1/5] - added separate list for games on cartridge (a treeview to show folder structure) - ROMs on Cartridge can now be moved to folders via drag & drop - games that only exist on the cartridge and not in the collection are now shown also -- added symbols indicating if ROM on cartridge is not present in collection -- these games can be imported to collection - added collection filter: show ROMs not present on cartridge - added search in collection and ROMS on cartridge - games on the cartridge can now be deleted - folders on the cartridge can now be renamed - when a console ROM is added and it's in a zip archive, the archive is extracted and checked if it contains console ROMs like .md, .pce and .nes etc. previously it was assumed, that zip files were only for the MAME emulator --- Enums/RomFeatureFilter.cs | 7 +- Forms/MainForm.Designer.cs | 3030 +++++++++++++++++++----------------- Forms/MainForm.cs | 748 +++++++-- Forms/MainForm.resx | 117 +- Models/GameInfo.cs | 10 +- Models/GameInfoTreeNode.cs | 17 + Services/GamesManager.cs | 404 +++-- 7 files changed, 2662 insertions(+), 1671 deletions(-) create mode 100644 Models/GameInfoTreeNode.cs diff --git a/Enums/RomFeatureFilter.cs b/Enums/RomFeatureFilter.cs index 5a507b5..d3cd5ba 100644 --- a/Enums/RomFeatureFilter.cs +++ b/Enums/RomFeatureFilter.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text; +using System.ComponentModel; namespace EverLoader.Enums { @@ -19,5 +16,7 @@ public enum RomFeatureFilter RomsWithoutBanner = 4, [Description("Show selected ROMs (for sync)")] SelectedForSync = 5, + [Description("Show ROMs not present on Cartridge")] + RomsNotPresentOnCartridge = 6, } } diff --git a/Forms/MainForm.Designer.cs b/Forms/MainForm.Designer.cs index 28b7271..3522246 100644 --- a/Forms/MainForm.Designer.cs +++ b/Forms/MainForm.Designer.cs @@ -31,1741 +31,1876 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.btnAddGames = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.panel15 = new System.Windows.Forms.Panel(); - this.lblGameCRC = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.label7 = new System.Windows.Forms.Label(); - this.lblGameId = new System.Windows.Forms.Label(); - this.panel8 = new System.Windows.Forms.Panel(); - this.cbMultiDisc = new System.Windows.Forms.CheckBox(); - this.tbTitle = new System.Windows.Forms.TextBox(); - this.lblTitle = new System.Windows.Forms.Label(); - this.panel9 = new System.Windows.Forms.Panel(); - this.cbPlatform = new GroupedComboBox(); - this.tbReleaseDate = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.lblPlatform = new System.Windows.Forms.Label(); - this.panel10 = new System.Windows.Forms.Panel(); - this.cbMaxPlayers = new System.Windows.Forms.ComboBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.cbGenre = new System.Windows.Forms.ComboBox(); - this.panel11 = new System.Windows.Forms.Panel(); - this.tbDescription = new System.Windows.Forms.TextBox(); - this.lblDescription = new System.Windows.Forms.Label(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); - this.panel7 = new EverLoader.Controls.AspectRatioPanel(); - this.label4 = new System.Windows.Forms.Label(); - this.pbBoxArtLarge = new System.Windows.Forms.PictureBox(); - this.btnClearLarge = new System.Windows.Forms.Button(); - this.panel12 = new EverLoader.Controls.AspectRatioPanel(); - this.label5 = new System.Windows.Forms.Label(); - this.pbBoxArtMedium = new System.Windows.Forms.PictureBox(); - this.btnClearMedium = new System.Windows.Forms.Button(); - this.panel13 = new EverLoader.Controls.AspectRatioPanel(); - this.label6 = new System.Windows.Forms.Label(); - this.pbBoxArtSmall = new System.Windows.Forms.PictureBox(); - this.btnClearSmall = new System.Windows.Forms.Button(); - this.panel14 = new EverLoader.Controls.AspectRatioPanel(); - this.llBannerDown = new System.Windows.Forms.LinkLabel(); - this.llBannerUp = new System.Windows.Forms.LinkLabel(); - this.btnClearBanner = new System.Windows.Forms.Button(); - this.llBannerNext = new System.Windows.Forms.LinkLabel(); - this.llBannerPrev = new System.Windows.Forms.LinkLabel(); - this.pbBanner = new System.Windows.Forms.PictureBox(); - this.label8 = new System.Windows.Forms.Label(); - this.pbConnected = new System.Windows.Forms.PictureBox(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.cbRomFilter = new GroupedComboBox(); - this.lvGames = new System.Windows.Forms.ListView(); - this.dummy = new System.Windows.Forms.ColumnHeader(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.selectSDDriveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.optimizeImagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.checkForUpdatesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.btnSelectSD = new System.Windows.Forms.Button(); - this.btnSyncToSD = new System.Windows.Forms.Button(); - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.panel3 = new System.Windows.Forms.Panel(); - this.label18 = new System.Windows.Forms.Label(); - this.tbMappingA = new System.Windows.Forms.TextBox(); - this.label20 = new System.Windows.Forms.Label(); - this.label22 = new System.Windows.Forms.Label(); - this.tbMappingB = new System.Windows.Forms.TextBox(); - this.label23 = new System.Windows.Forms.Label(); - this.tbMappingX = new System.Windows.Forms.TextBox(); - this.tbMappingY = new System.Windows.Forms.TextBox(); - this.panel4 = new System.Windows.Forms.Panel(); - this.tbMappingL1 = new System.Windows.Forms.TextBox(); - this.label25 = new System.Windows.Forms.Label(); - this.label26 = new System.Windows.Forms.Label(); - this.label27 = new System.Windows.Forms.Label(); - this.tbMappingL2 = new System.Windows.Forms.TextBox(); - this.label28 = new System.Windows.Forms.Label(); - this.tbMappingR1 = new System.Windows.Forms.TextBox(); - this.tbMappingR2 = new System.Windows.Forms.TextBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.tbMappingDPAD = new System.Windows.Forms.TextBox(); - this.tbMappingSELECT = new System.Windows.Forms.TextBox(); - this.label21 = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.label24 = new System.Windows.Forms.Label(); - this.tbMappingSTART = new System.Windows.Forms.TextBox(); - this.panel5 = new System.Windows.Forms.Panel(); - this.tbCartName = new System.Windows.Forms.TextBox(); - this.lblCartName = new System.Windows.Forms.Label(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.cbRetroArchCore = new System.Windows.Forms.ComboBox(); - this.rbInternalCore = new EverLoader.Controls.NonTabStopRadioButton(); - this.lblMissingBiosFiles = new System.Windows.Forms.LinkLabel(); - this.rbRetroArchCore = new EverLoader.Controls.NonTabStopRadioButton(); - this.gbScrapeByName = new System.Windows.Forms.GroupBox(); - this.lbScrapeResults = new System.Windows.Forms.ListBox(); - this.btnScrape = new System.Windows.Forms.Button(); - this.tbScrapeName = new System.Windows.Forms.TextBox(); - this.pbEverSD = new System.Windows.Forms.PictureBox(); - this.panel6 = new System.Windows.Forms.Panel(); - this.lblNumberOfGamesSelected = new System.Windows.Forms.Label(); - this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); - this.btnNewSDFolder = new System.Windows.Forms.Button(); - this.openGameImage = new System.Windows.Forms.OpenFileDialog(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.scrapeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.deleteSelectedGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - this.pageSetupDialog1 = new System.Windows.Forms.PageSetupDialog(); - this.groupBox1.SuspendLayout(); - this.tableLayoutPanel4.SuspendLayout(); - this.panel15.SuspendLayout(); - this.panel2.SuspendLayout(); - this.panel8.SuspendLayout(); - this.panel9.SuspendLayout(); - this.panel10.SuspendLayout(); - this.panel11.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.tableLayoutPanel5.SuspendLayout(); - this.tableLayoutPanel6.SuspendLayout(); - this.panel7.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBoxArtLarge)).BeginInit(); - this.panel12.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBoxArtMedium)).BeginInit(); - this.panel13.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBoxArtSmall)).BeginInit(); - this.panel14.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBanner)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pbConnected)).BeginInit(); - this.groupBox3.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.groupBox4.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.panel3.SuspendLayout(); - this.panel4.SuspendLayout(); - this.panel1.SuspendLayout(); - this.panel5.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.groupBox5.SuspendLayout(); - this.gbScrapeByName.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbEverSD)).BeginInit(); - this.panel6.SuspendLayout(); - this.tableLayoutPanel7.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // btnAddGames - // - this.btnAddGames.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnAddGames.Location = new System.Drawing.Point(7, 7); - this.btnAddGames.Margin = new System.Windows.Forms.Padding(7); - this.btnAddGames.Name = "btnAddGames"; - this.btnAddGames.Size = new System.Drawing.Size(124, 27); - this.btnAddGames.TabIndex = 1; - this.btnAddGames.TabStop = false; - this.btnAddGames.Text = "Add New ROM(s)"; - this.btnAddGames.UseVisualStyleBackColor = true; - this.btnAddGames.Click += new System.EventHandler(this.btnAddGames_Click); + groupBox1 = new System.Windows.Forms.GroupBox(); + tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + panel15 = new System.Windows.Forms.Panel(); + lblGameCRC = new System.Windows.Forms.Label(); + label9 = new System.Windows.Forms.Label(); + panel2 = new System.Windows.Forms.Panel(); + label7 = new System.Windows.Forms.Label(); + lblGameId = new System.Windows.Forms.Label(); + panel8 = new System.Windows.Forms.Panel(); + cbMultiDisc = new System.Windows.Forms.CheckBox(); + tbTitle = new System.Windows.Forms.TextBox(); + lblTitle = new System.Windows.Forms.Label(); + panel9 = new System.Windows.Forms.Panel(); + cbPlatform = new GroupedComboBox(); + tbReleaseDate = new System.Windows.Forms.TextBox(); + label2 = new System.Windows.Forms.Label(); + lblPlatform = new System.Windows.Forms.Label(); + panel10 = new System.Windows.Forms.Panel(); + cbMaxPlayers = new System.Windows.Forms.ComboBox(); + label1 = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); + cbGenre = new System.Windows.Forms.ComboBox(); + panel11 = new System.Windows.Forms.Panel(); + tbDescription = new System.Windows.Forms.TextBox(); + lblDescription = new System.Windows.Forms.Label(); + groupBox2 = new System.Windows.Forms.GroupBox(); + tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); + panel12 = new AspectRatioPanel(); + label5 = new System.Windows.Forms.Label(); + btnClearMedium = new System.Windows.Forms.Button(); + pbBoxArtMedium = new System.Windows.Forms.PictureBox(); + panel13 = new AspectRatioPanel(); + label6 = new System.Windows.Forms.Label(); + pbBoxArtSmall = new System.Windows.Forms.PictureBox(); + btnClearSmall = new System.Windows.Forms.Button(); + panel7 = new AspectRatioPanel(); + label4 = new System.Windows.Forms.Label(); + pbBoxArtLarge = new System.Windows.Forms.PictureBox(); + btnClearLarge = new System.Windows.Forms.Button(); + panel14 = new AspectRatioPanel(); + llBannerDown = new System.Windows.Forms.LinkLabel(); + llBannerUp = new System.Windows.Forms.LinkLabel(); + btnClearBanner = new System.Windows.Forms.Button(); + llBannerNext = new System.Windows.Forms.LinkLabel(); + llBannerPrev = new System.Windows.Forms.LinkLabel(); + pbBanner = new System.Windows.Forms.PictureBox(); + label8 = new System.Windows.Forms.Label(); + gbCollection = new System.Windows.Forms.GroupBox(); + tblLayoutCollection = new System.Windows.Forms.TableLayoutPanel(); + button5 = new System.Windows.Forms.Button(); + cbRomFilter = new GroupedComboBox(); + lvGames = new System.Windows.Forms.ListView(); + dummy = new System.Windows.Forms.ColumnHeader(); + btnSyncWithSDCard = new System.Windows.Forms.Button(); + lblNumberOfGamesSelected = new System.Windows.Forms.Label(); + tbSearchCollection = new System.Windows.Forms.TextBox(); + menuStrip1 = new System.Windows.Forms.MenuStrip(); + fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + selectSDDriveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + optimizeImagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + checkForUpdatesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + gbCartridge = new System.Windows.Forms.GroupBox(); + tblLayoutCartridge = new System.Windows.Forms.TableLayoutPanel(); + tbCartName2 = new System.Windows.Forms.TextBox(); + btnSelectedSD = new System.Windows.Forms.Button(); + lblCartName = new System.Windows.Forms.Label(); + lblNumberGamesSDCard = new System.Windows.Forms.Label(); + btnNewSDCardFolder = new System.Windows.Forms.Button(); + tvCartridge = new System.Windows.Forms.TreeView(); + imageList1 = new System.Windows.Forms.ImageList(components); + tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); + pictureBox3 = new System.Windows.Forms.PictureBox(); + pbConnected2 = new System.Windows.Forms.PictureBox(); + tbSearchCartridge = new System.Windows.Forms.TextBox(); + groupBox4 = new System.Windows.Forms.GroupBox(); + tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + panel3 = new System.Windows.Forms.Panel(); + label18 = new System.Windows.Forms.Label(); + tbMappingA = new System.Windows.Forms.TextBox(); + label20 = new System.Windows.Forms.Label(); + label22 = new System.Windows.Forms.Label(); + tbMappingB = new System.Windows.Forms.TextBox(); + label23 = new System.Windows.Forms.Label(); + tbMappingX = new System.Windows.Forms.TextBox(); + tbMappingY = new System.Windows.Forms.TextBox(); + panel4 = new System.Windows.Forms.Panel(); + tbMappingL1 = new System.Windows.Forms.TextBox(); + label25 = new System.Windows.Forms.Label(); + label26 = new System.Windows.Forms.Label(); + label27 = new System.Windows.Forms.Label(); + tbMappingL2 = new System.Windows.Forms.TextBox(); + label28 = new System.Windows.Forms.Label(); + tbMappingR1 = new System.Windows.Forms.TextBox(); + tbMappingR2 = new System.Windows.Forms.TextBox(); + panel1 = new System.Windows.Forms.Panel(); + tbMappingDPAD = new System.Windows.Forms.TextBox(); + tbMappingSELECT = new System.Windows.Forms.TextBox(); + label21 = new System.Windows.Forms.Label(); + label19 = new System.Windows.Forms.Label(); + label24 = new System.Windows.Forms.Label(); + tbMappingSTART = new System.Windows.Forms.TextBox(); + tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + groupBox5 = new System.Windows.Forms.GroupBox(); + cbRetroArchCore = new System.Windows.Forms.ComboBox(); + rbInternalCore = new NonTabStopRadioButton(); + lblMissingBiosFiles = new System.Windows.Forms.LinkLabel(); + rbRetroArchCore = new NonTabStopRadioButton(); + gbScrapeByName = new System.Windows.Forms.GroupBox(); + lbScrapeResults = new System.Windows.Forms.ListBox(); + btnScrape = new System.Windows.Forms.Button(); + tbScrapeName = new System.Windows.Forms.TextBox(); + openGameImage = new System.Windows.Forms.OpenFileDialog(); + contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(components); + scrapeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + deleteSelectedGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolTip1 = new System.Windows.Forms.ToolTip(components); + pageSetupDialog1 = new System.Windows.Forms.PageSetupDialog(); + tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); + button1 = new System.Windows.Forms.Button(); + button2 = new System.Windows.Forms.Button(); + contextMenuCartridge = new System.Windows.Forms.ContextMenuStrip(components); + importROMToCollectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + deleteROMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + deleteFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + contextMenuStripMSD = new System.Windows.Forms.ContextMenuStrip(components); + test1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + groupBox1.SuspendLayout(); + tableLayoutPanel4.SuspendLayout(); + panel15.SuspendLayout(); + panel2.SuspendLayout(); + panel8.SuspendLayout(); + panel9.SuspendLayout(); + panel10.SuspendLayout(); + panel11.SuspendLayout(); + groupBox2.SuspendLayout(); + tableLayoutPanel5.SuspendLayout(); + tableLayoutPanel6.SuspendLayout(); + panel12.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pbBoxArtMedium).BeginInit(); + panel13.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pbBoxArtSmall).BeginInit(); + panel7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pbBoxArtLarge).BeginInit(); + panel14.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pbBanner).BeginInit(); + gbCollection.SuspendLayout(); + tblLayoutCollection.SuspendLayout(); + menuStrip1.SuspendLayout(); + tableLayoutPanel1.SuspendLayout(); + gbCartridge.SuspendLayout(); + tblLayoutCartridge.SuspendLayout(); + tableLayoutPanel7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox3).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pbConnected2).BeginInit(); + groupBox4.SuspendLayout(); + tableLayoutPanel3.SuspendLayout(); + panel3.SuspendLayout(); + panel4.SuspendLayout(); + panel1.SuspendLayout(); + tableLayoutPanel2.SuspendLayout(); + groupBox5.SuspendLayout(); + gbScrapeByName.SuspendLayout(); + contextMenuStrip1.SuspendLayout(); + tableLayoutPanel8.SuspendLayout(); + contextMenuCartridge.SuspendLayout(); + contextMenuStripMSD.SuspendLayout(); + SuspendLayout(); // // groupBox1 // - this.groupBox1.Controls.Add(this.tableLayoutPanel4); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(348, 2); - this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox1.Size = new System.Drawing.Size(339, 318); - this.groupBox1.TabIndex = 2; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "ROM Info"; + groupBox1.Controls.Add(tableLayoutPanel4); + groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + groupBox1.Location = new System.Drawing.Point(518, 2); + groupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + groupBox1.Size = new System.Drawing.Size(381, 538); + groupBox1.TabIndex = 2; + groupBox1.TabStop = false; + groupBox1.Text = "ROM Info"; // // tableLayoutPanel4 // - this.tableLayoutPanel4.ColumnCount = 2; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel4.Controls.Add(this.panel15, 1, 0); - this.tableLayoutPanel4.Controls.Add(this.panel2, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.panel8, 0, 1); - this.tableLayoutPanel4.Controls.Add(this.panel9, 0, 2); - this.tableLayoutPanel4.Controls.Add(this.panel10, 1, 2); - this.tableLayoutPanel4.Controls.Add(this.panel11, 0, 3); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 18); - this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.RowCount = 4; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F)); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F)); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 88F)); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Size = new System.Drawing.Size(333, 298); - this.tableLayoutPanel4.TabIndex = 0; + tableLayoutPanel4.ColumnCount = 2; + tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F)); + tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); + tableLayoutPanel4.Controls.Add(panel15, 1, 0); + tableLayoutPanel4.Controls.Add(panel2, 0, 0); + tableLayoutPanel4.Controls.Add(panel8, 0, 1); + tableLayoutPanel4.Controls.Add(panel9, 0, 2); + tableLayoutPanel4.Controls.Add(panel10, 1, 2); + tableLayoutPanel4.Controls.Add(panel11, 0, 3); + tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel4.Location = new System.Drawing.Point(3, 18); + tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); + tableLayoutPanel4.Name = "tableLayoutPanel4"; + tableLayoutPanel4.RowCount = 4; + tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F)); + tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F)); + tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 88F)); + tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tableLayoutPanel4.Size = new System.Drawing.Size(375, 518); + tableLayoutPanel4.TabIndex = 0; // // panel15 // - this.panel15.Controls.Add(this.lblGameCRC); - this.panel15.Controls.Add(this.label9); - this.panel15.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel15.Location = new System.Drawing.Point(199, 0); - this.panel15.Margin = new System.Windows.Forms.Padding(0); - this.panel15.Name = "panel15"; - this.panel15.Size = new System.Drawing.Size(134, 24); - this.panel15.TabIndex = 6; + panel15.Controls.Add(lblGameCRC); + panel15.Controls.Add(label9); + panel15.Dock = System.Windows.Forms.DockStyle.Fill; + panel15.Location = new System.Drawing.Point(225, 0); + panel15.Margin = new System.Windows.Forms.Padding(0); + panel15.Name = "panel15"; + panel15.Size = new System.Drawing.Size(150, 24); + panel15.TabIndex = 6; // // lblGameCRC // - this.lblGameCRC.Location = new System.Drawing.Point(43, 2); - this.lblGameCRC.Name = "lblGameCRC"; - this.lblGameCRC.Size = new System.Drawing.Size(86, 18); - this.lblGameCRC.TabIndex = 5; + lblGameCRC.Location = new System.Drawing.Point(43, 2); + lblGameCRC.Name = "lblGameCRC"; + lblGameCRC.Size = new System.Drawing.Size(86, 18); + lblGameCRC.TabIndex = 5; // // label9 // - this.label9.AutoSize = true; - this.label9.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label9.Location = new System.Drawing.Point(6, 2); - this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(32, 15); - this.label9.TabIndex = 4; - this.label9.Text = "CRC:"; + label9.AutoSize = true; + label9.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label9.Location = new System.Drawing.Point(6, 2); + label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label9.Name = "label9"; + label9.Size = new System.Drawing.Size(32, 15); + label9.TabIndex = 4; + label9.Text = "CRC:"; // // panel2 // - this.panel2.Controls.Add(this.label7); - this.panel2.Controls.Add(this.lblGameId); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(199, 24); - this.panel2.TabIndex = 6; + panel2.Controls.Add(label7); + panel2.Controls.Add(lblGameId); + panel2.Dock = System.Windows.Forms.DockStyle.Fill; + panel2.Location = new System.Drawing.Point(0, 0); + panel2.Margin = new System.Windows.Forms.Padding(0); + panel2.Name = "panel2"; + panel2.Size = new System.Drawing.Size(225, 24); + panel2.TabIndex = 6; // // label7 // - this.label7.AutoSize = true; - this.label7.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label7.Location = new System.Drawing.Point(6, 2); - this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(23, 15); - this.label7.TabIndex = 2; - this.label7.Text = "ID:"; + label7.AutoSize = true; + label7.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label7.Location = new System.Drawing.Point(6, 2); + label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label7.Name = "label7"; + label7.Size = new System.Drawing.Size(23, 15); + label7.TabIndex = 2; + label7.Text = "ID:"; // // lblGameId // - this.lblGameId.Location = new System.Drawing.Point(37, 2); - this.lblGameId.Name = "lblGameId"; - this.lblGameId.Size = new System.Drawing.Size(159, 18); - this.lblGameId.TabIndex = 3; + lblGameId.Location = new System.Drawing.Point(37, 2); + lblGameId.Name = "lblGameId"; + lblGameId.Size = new System.Drawing.Size(159, 18); + lblGameId.TabIndex = 3; // // panel8 // - this.tableLayoutPanel4.SetColumnSpan(this.panel8, 2); - this.panel8.Controls.Add(this.cbMultiDisc); - this.panel8.Controls.Add(this.tbTitle); - this.panel8.Controls.Add(this.lblTitle); - this.panel8.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel8.Location = new System.Drawing.Point(0, 24); - this.panel8.Margin = new System.Windows.Forms.Padding(0); - this.panel8.Name = "panel8"; - this.panel8.Size = new System.Drawing.Size(333, 44); - this.panel8.TabIndex = 0; + tableLayoutPanel4.SetColumnSpan(panel8, 2); + panel8.Controls.Add(cbMultiDisc); + panel8.Controls.Add(tbTitle); + panel8.Controls.Add(lblTitle); + panel8.Dock = System.Windows.Forms.DockStyle.Fill; + panel8.Location = new System.Drawing.Point(0, 24); + panel8.Margin = new System.Windows.Forms.Padding(0); + panel8.Name = "panel8"; + panel8.Size = new System.Drawing.Size(375, 44); + panel8.TabIndex = 0; // // cbMultiDisc // - this.cbMultiDisc.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.cbMultiDisc.AutoSize = true; - this.cbMultiDisc.Checked = true; - this.cbMultiDisc.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbMultiDisc.Enabled = false; - this.cbMultiDisc.Location = new System.Drawing.Point(250, -1); - this.cbMultiDisc.Name = "cbMultiDisc"; - this.cbMultiDisc.Size = new System.Drawing.Size(80, 19); - this.cbMultiDisc.TabIndex = 2; - this.cbMultiDisc.Text = "multi-disc"; - this.cbMultiDisc.UseVisualStyleBackColor = true; - this.cbMultiDisc.Visible = false; + cbMultiDisc.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + cbMultiDisc.AutoSize = true; + cbMultiDisc.Checked = true; + cbMultiDisc.CheckState = System.Windows.Forms.CheckState.Checked; + cbMultiDisc.Enabled = false; + cbMultiDisc.Location = new System.Drawing.Point(290, -1); + cbMultiDisc.Name = "cbMultiDisc"; + cbMultiDisc.Size = new System.Drawing.Size(80, 19); + cbMultiDisc.TabIndex = 2; + cbMultiDisc.Text = "multi-disc"; + cbMultiDisc.UseVisualStyleBackColor = true; + cbMultiDisc.Visible = false; // // tbTitle // - this.tbTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbTitle.Enabled = false; - this.tbTitle.Location = new System.Drawing.Point(4, 18); - this.tbTitle.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbTitle.Name = "tbTitle"; - this.tbTitle.Size = new System.Drawing.Size(325, 23); - this.tbTitle.TabIndex = 1; - this.tbTitle.TabStop = false; + tbTitle.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbTitle.Enabled = false; + tbTitle.Location = new System.Drawing.Point(4, 18); + tbTitle.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbTitle.Name = "tbTitle"; + tbTitle.Size = new System.Drawing.Size(365, 23); + tbTitle.TabIndex = 1; + tbTitle.TabStop = false; // // lblTitle // - this.lblTitle.AutoSize = true; - this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.lblTitle.Location = new System.Drawing.Point(5, 0); - this.lblTitle.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblTitle.Name = "lblTitle"; - this.lblTitle.Size = new System.Drawing.Size(32, 15); - this.lblTitle.TabIndex = 0; - this.lblTitle.Text = "Title"; + lblTitle.AutoSize = true; + lblTitle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + lblTitle.Location = new System.Drawing.Point(5, 0); + lblTitle.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + lblTitle.Name = "lblTitle"; + lblTitle.Size = new System.Drawing.Size(32, 15); + lblTitle.TabIndex = 0; + lblTitle.Text = "Title"; // // panel9 // - this.panel9.Controls.Add(this.cbPlatform); - this.panel9.Controls.Add(this.tbReleaseDate); - this.panel9.Controls.Add(this.label2); - this.panel9.Controls.Add(this.lblPlatform); - this.panel9.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel9.Location = new System.Drawing.Point(0, 68); - this.panel9.Margin = new System.Windows.Forms.Padding(0); - this.panel9.Name = "panel9"; - this.panel9.Size = new System.Drawing.Size(199, 88); - this.panel9.TabIndex = 1; + panel9.Controls.Add(cbPlatform); + panel9.Controls.Add(tbReleaseDate); + panel9.Controls.Add(label2); + panel9.Controls.Add(lblPlatform); + panel9.Dock = System.Windows.Forms.DockStyle.Fill; + panel9.Location = new System.Drawing.Point(0, 68); + panel9.Margin = new System.Windows.Forms.Padding(0); + panel9.Name = "panel9"; + panel9.Size = new System.Drawing.Size(225, 88); + panel9.TabIndex = 1; // // cbPlatform // - this.cbPlatform.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbPlatform.DataSource = null; - this.cbPlatform.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbPlatform.Enabled = false; - this.cbPlatform.FormattingEnabled = true; - this.cbPlatform.Location = new System.Drawing.Point(4, 18); - this.cbPlatform.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.cbPlatform.Name = "cbPlatform"; - this.cbPlatform.Size = new System.Drawing.Size(192, 24); - this.cbPlatform.TabIndex = 10; - this.cbPlatform.TabStop = false; - this.cbPlatform.SelectionChangeCommitted += new System.EventHandler(this.ComboBox_SelectionChangeCommitted); + cbPlatform.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + cbPlatform.DataSource = null; + cbPlatform.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbPlatform.Enabled = false; + cbPlatform.FormattingEnabled = true; + cbPlatform.Location = new System.Drawing.Point(4, 18); + cbPlatform.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + cbPlatform.Name = "cbPlatform"; + cbPlatform.Size = new System.Drawing.Size(218, 24); + cbPlatform.TabIndex = 10; + cbPlatform.TabStop = false; // // tbReleaseDate // - this.tbReleaseDate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbReleaseDate.Enabled = false; - this.tbReleaseDate.Location = new System.Drawing.Point(4, 63); - this.tbReleaseDate.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbReleaseDate.Name = "tbReleaseDate"; - this.tbReleaseDate.Size = new System.Drawing.Size(193, 23); - this.tbReleaseDate.TabIndex = 9; - this.tbReleaseDate.TabStop = false; + tbReleaseDate.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbReleaseDate.Enabled = false; + tbReleaseDate.Location = new System.Drawing.Point(4, 63); + tbReleaseDate.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbReleaseDate.Name = "tbReleaseDate"; + tbReleaseDate.Size = new System.Drawing.Size(218, 23); + tbReleaseDate.TabIndex = 9; + tbReleaseDate.TabStop = false; // // label2 // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label2.Location = new System.Drawing.Point(4, 46); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(167, 15); - this.label2.TabIndex = 8; - this.label2.Text = "Release date (YYYY-MM-DD)"; + label2.AutoSize = true; + label2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label2.Location = new System.Drawing.Point(4, 46); + label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(167, 15); + label2.TabIndex = 8; + label2.Text = "Release date (YYYY-MM-DD)"; // // lblPlatform // - this.lblPlatform.AutoSize = true; - this.lblPlatform.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.lblPlatform.Location = new System.Drawing.Point(4, 1); - this.lblPlatform.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblPlatform.Name = "lblPlatform"; - this.lblPlatform.Size = new System.Drawing.Size(56, 15); - this.lblPlatform.TabIndex = 3; - this.lblPlatform.Text = "Platform"; + lblPlatform.AutoSize = true; + lblPlatform.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + lblPlatform.Location = new System.Drawing.Point(4, 1); + lblPlatform.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + lblPlatform.Name = "lblPlatform"; + lblPlatform.Size = new System.Drawing.Size(56, 15); + lblPlatform.TabIndex = 3; + lblPlatform.Text = "Platform"; // // panel10 // - this.panel10.Controls.Add(this.cbMaxPlayers); - this.panel10.Controls.Add(this.label1); - this.panel10.Controls.Add(this.label3); - this.panel10.Controls.Add(this.cbGenre); - this.panel10.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel10.Location = new System.Drawing.Point(199, 68); - this.panel10.Margin = new System.Windows.Forms.Padding(0); - this.panel10.Name = "panel10"; - this.panel10.Size = new System.Drawing.Size(134, 88); - this.panel10.TabIndex = 2; + panel10.Controls.Add(cbMaxPlayers); + panel10.Controls.Add(label1); + panel10.Controls.Add(label3); + panel10.Controls.Add(cbGenre); + panel10.Dock = System.Windows.Forms.DockStyle.Fill; + panel10.Location = new System.Drawing.Point(225, 68); + panel10.Margin = new System.Windows.Forms.Padding(0); + panel10.Name = "panel10"; + panel10.Size = new System.Drawing.Size(150, 88); + panel10.TabIndex = 2; // // cbMaxPlayers // - this.cbMaxPlayers.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbMaxPlayers.Enabled = false; - this.cbMaxPlayers.FormattingEnabled = true; - this.cbMaxPlayers.Items.AddRange(new object[] { - "1", - "2", - "3", - "4"}); - this.cbMaxPlayers.Location = new System.Drawing.Point(3, 63); - this.cbMaxPlayers.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.cbMaxPlayers.Name = "cbMaxPlayers"; - this.cbMaxPlayers.Size = new System.Drawing.Size(127, 23); - this.cbMaxPlayers.TabIndex = 11; - this.cbMaxPlayers.TabStop = false; + cbMaxPlayers.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + cbMaxPlayers.Enabled = false; + cbMaxPlayers.FormattingEnabled = true; + cbMaxPlayers.Items.AddRange(new object[] { "1", "2", "3", "4" }); + cbMaxPlayers.Location = new System.Drawing.Point(3, 63); + cbMaxPlayers.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + cbMaxPlayers.Name = "cbMaxPlayers"; + cbMaxPlayers.Size = new System.Drawing.Size(142, 23); + cbMaxPlayers.TabIndex = 11; + cbMaxPlayers.TabStop = false; // // label1 // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label1.Location = new System.Drawing.Point(3, 1); - this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(42, 15); - this.label1.TabIndex = 6; - this.label1.Text = "Genre"; + label1.AutoSize = true; + label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label1.Location = new System.Drawing.Point(3, 1); + label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(42, 15); + label1.TabIndex = 6; + label1.Text = "Genre"; // // label3 // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label3.Location = new System.Drawing.Point(3, 46); - this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(73, 15); - this.label3.TabIndex = 10; - this.label3.Text = "Max Players"; + label3.AutoSize = true; + label3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label3.Location = new System.Drawing.Point(3, 46); + label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(73, 15); + label3.TabIndex = 10; + label3.Text = "Max Players"; // // cbGenre // - this.cbGenre.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbGenre.Enabled = false; - this.cbGenre.FormattingEnabled = true; - this.cbGenre.Items.AddRange(new object[] { - "", - "Action", - "Action / Shooting", - "Adventure", - "Educational", - "Fighting", - "Puzzle", - "Racing", - "Racing / Sports", - "RPG", - "Shoot-\'em-Up", - "Simulation", - "Sports", - "Table"}); - this.cbGenre.Location = new System.Drawing.Point(3, 18); - this.cbGenre.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.cbGenre.Name = "cbGenre"; - this.cbGenre.Size = new System.Drawing.Size(127, 23); - this.cbGenre.TabIndex = 7; - this.cbGenre.TabStop = false; + cbGenre.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + cbGenre.Enabled = false; + cbGenre.FormattingEnabled = true; + cbGenre.Items.AddRange(new object[] { "", "Action", "Action / Shooting", "Adventure", "Educational", "Fighting", "Puzzle", "Racing", "Racing / Sports", "RPG", "Shoot-'em-Up", "Simulation", "Sports", "Table" }); + cbGenre.Location = new System.Drawing.Point(3, 18); + cbGenre.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + cbGenre.Name = "cbGenre"; + cbGenre.Size = new System.Drawing.Size(142, 23); + cbGenre.TabIndex = 7; + cbGenre.TabStop = false; // // panel11 // - this.tableLayoutPanel4.SetColumnSpan(this.panel11, 2); - this.panel11.Controls.Add(this.tbDescription); - this.panel11.Controls.Add(this.lblDescription); - this.panel11.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel11.Location = new System.Drawing.Point(0, 156); - this.panel11.Margin = new System.Windows.Forms.Padding(0); - this.panel11.Name = "panel11"; - this.panel11.Size = new System.Drawing.Size(333, 142); - this.panel11.TabIndex = 3; + tableLayoutPanel4.SetColumnSpan(panel11, 2); + panel11.Controls.Add(tbDescription); + panel11.Controls.Add(lblDescription); + panel11.Dock = System.Windows.Forms.DockStyle.Fill; + panel11.Location = new System.Drawing.Point(0, 156); + panel11.Margin = new System.Windows.Forms.Padding(0); + panel11.Name = "panel11"; + panel11.Size = new System.Drawing.Size(375, 362); + panel11.TabIndex = 3; // // tbDescription // - this.tbDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbDescription.Enabled = false; - this.tbDescription.Location = new System.Drawing.Point(3, 19); - this.tbDescription.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbDescription.Multiline = true; - this.tbDescription.Name = "tbDescription"; - this.tbDescription.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.tbDescription.Size = new System.Drawing.Size(325, 118); - this.tbDescription.TabIndex = 5; - this.tbDescription.TabStop = false; + tbDescription.Enabled = false; + tbDescription.Location = new System.Drawing.Point(3, 19); + tbDescription.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbDescription.Multiline = true; + tbDescription.Name = "tbDescription"; + tbDescription.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + tbDescription.Size = new System.Drawing.Size(365, 347); + tbDescription.TabIndex = 5; + tbDescription.TabStop = false; // // lblDescription // - this.lblDescription.AutoSize = true; - this.lblDescription.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.lblDescription.Location = new System.Drawing.Point(4, 2); - this.lblDescription.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblDescription.Name = "lblDescription"; - this.lblDescription.Size = new System.Drawing.Size(71, 15); - this.lblDescription.TabIndex = 4; - this.lblDescription.Text = "Description"; + lblDescription.AutoSize = true; + lblDescription.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + lblDescription.Location = new System.Drawing.Point(4, 2); + lblDescription.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + lblDescription.Name = "lblDescription"; + lblDescription.Size = new System.Drawing.Size(71, 15); + lblDescription.TabIndex = 4; + lblDescription.Text = "Description"; // // groupBox2 // - this.groupBox2.Controls.Add(this.tableLayoutPanel5); - this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox2.Location = new System.Drawing.Point(693, 2); - this.groupBox2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox2.Size = new System.Drawing.Size(340, 318); - this.groupBox2.TabIndex = 3; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Box Art"; + groupBox2.Controls.Add(tableLayoutPanel5); + groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; + groupBox2.Location = new System.Drawing.Point(905, 2); + groupBox2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + groupBox2.Name = "groupBox2"; + groupBox2.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + groupBox2.Size = new System.Drawing.Size(383, 538); + groupBox2.TabIndex = 3; + groupBox2.TabStop = false; + groupBox2.Text = "Box Art"; // // tableLayoutPanel5 // - this.tableLayoutPanel5.ColumnCount = 1; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanel6, 0, 0); - this.tableLayoutPanel5.Controls.Add(this.panel14, 0, 1); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 18); - this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 2; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 61.87291F)); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.12709F)); - this.tableLayoutPanel5.Size = new System.Drawing.Size(334, 298); - this.tableLayoutPanel5.TabIndex = 0; + tableLayoutPanel5.ColumnCount = 1; + tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tableLayoutPanel5.Controls.Add(tableLayoutPanel6, 0, 0); + tableLayoutPanel5.Controls.Add(panel14, 0, 1); + tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel5.Location = new System.Drawing.Point(3, 18); + tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); + tableLayoutPanel5.Name = "tableLayoutPanel5"; + tableLayoutPanel5.RowCount = 2; + tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 61.87291F)); + tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.12709F)); + tableLayoutPanel5.Size = new System.Drawing.Size(377, 518); + tableLayoutPanel5.TabIndex = 0; // // tableLayoutPanel6 // - this.tableLayoutPanel6.ColumnCount = 3; - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.54054F)); - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 34.53454F)); - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 24.92493F)); - this.tableLayoutPanel6.Controls.Add(this.panel7, 0, 0); - this.tableLayoutPanel6.Controls.Add(this.panel12, 1, 0); - this.tableLayoutPanel6.Controls.Add(this.panel13, 2, 0); - this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel6.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel6.Name = "tableLayoutPanel6"; - this.tableLayoutPanel6.RowCount = 1; - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel6.Size = new System.Drawing.Size(334, 184); - this.tableLayoutPanel6.TabIndex = 0; + tableLayoutPanel6.ColumnCount = 3; + tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.54054F)); + tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 34.53454F)); + tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 24.92493F)); + tableLayoutPanel6.Controls.Add(panel12, 1, 0); + tableLayoutPanel6.Controls.Add(panel13, 2, 0); + tableLayoutPanel6.Controls.Add(panel7, 0, 0); + tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel6.Location = new System.Drawing.Point(0, 0); + tableLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); + tableLayoutPanel6.Name = "tableLayoutPanel6"; + tableLayoutPanel6.RowCount = 1; + tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tableLayoutPanel6.Size = new System.Drawing.Size(377, 320); + tableLayoutPanel6.TabIndex = 0; // - // panel7 + // panel12 // - this.panel7.Controls.Add(this.label4); - this.panel7.Controls.Add(this.pbBoxArtLarge); - this.panel7.Controls.Add(this.btnClearLarge); - this.panel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel7.Location = new System.Drawing.Point(0, 0); - this.panel7.Margin = new System.Windows.Forms.Padding(0); - this.panel7.Name = "panel7"; - this.panel7.Size = new System.Drawing.Size(135, 184); - this.panel7.TabIndex = 0; + panel12.Controls.Add(label5); + panel12.Controls.Add(btnClearMedium); + panel12.Controls.Add(pbBoxArtMedium); + panel12.Dock = System.Windows.Forms.DockStyle.Fill; + panel12.Location = new System.Drawing.Point(152, 0); + panel12.Margin = new System.Windows.Forms.Padding(0); + panel12.Name = "panel12"; + panel12.Size = new System.Drawing.Size(130, 320); + panel12.TabIndex = 1; // - // label4 + // label5 // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label4.Location = new System.Drawing.Point(3, 2); - this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(38, 15); - this.label4.TabIndex = 12; - this.label4.Text = "Large"; + label5.AutoSize = true; + label5.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label5.Location = new System.Drawing.Point(2, 2); + label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label5.Name = "label5"; + label5.Size = new System.Drawing.Size(53, 15); + label5.TabIndex = 13; + label5.Text = "Medium"; // - // pbBoxArtLarge + // btnClearMedium // - this.pbBoxArtLarge.BackColor = System.Drawing.SystemColors.Control; - this.pbBoxArtLarge.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pbBoxArtLarge.Image = global::EverLoader.Properties.Resources.NoBoxArtLarge; - this.pbBoxArtLarge.InitialImage = null; - this.pbBoxArtLarge.Location = new System.Drawing.Point(1, 18); - this.pbBoxArtLarge.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); - this.pbBoxArtLarge.Name = "pbBoxArtLarge"; - this.pbBoxArtLarge.Size = new System.Drawing.Size(118, 164); - this.pbBoxArtLarge.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pbBoxArtLarge.TabIndex = 0; - this.pbBoxArtLarge.TabStop = false; - this.pbBoxArtLarge.SizeChanged += new System.EventHandler(this.pbGameImage_SizeChanged); - this.pbBoxArtLarge.Click += new System.EventHandler(this.pbGameImage_Click); - this.pbBoxArtLarge.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragDrop); - this.pbBoxArtLarge.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragEnter); + btnClearMedium.Enabled = false; + btnClearMedium.FlatAppearance.BorderSize = 0; + btnClearMedium.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + btnClearMedium.Image = Properties.Resources.Button_Close_icon_small; + btnClearMedium.Location = new System.Drawing.Point(74, 1); + btnClearMedium.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + btnClearMedium.Name = "btnClearMedium"; + btnClearMedium.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); + btnClearMedium.Size = new System.Drawing.Size(16, 16); + btnClearMedium.TabIndex = 21; + btnClearMedium.TabStop = false; + btnClearMedium.Tag = "Medium"; + btnClearMedium.UseVisualStyleBackColor = true; + btnClearMedium.MouseClick += btnImageClear_Click; // - // btnClearLarge + // pbBoxArtMedium // - this.btnClearLarge.Enabled = false; - this.btnClearLarge.FlatAppearance.BorderSize = 0; - this.btnClearLarge.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnClearLarge.Image = global::EverLoader.Properties.Resources.Button_Close_icon_small; - this.btnClearLarge.Location = new System.Drawing.Point(102, 1); - this.btnClearLarge.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnClearLarge.Name = "btnClearLarge"; - this.btnClearLarge.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); - this.btnClearLarge.Size = new System.Drawing.Size(16, 16); - this.btnClearLarge.TabIndex = 20; - this.btnClearLarge.TabStop = false; - this.btnClearLarge.Tag = "Large"; - this.btnClearLarge.UseVisualStyleBackColor = true; - this.btnClearLarge.MouseClick += new System.Windows.Forms.MouseEventHandler(this.btnImageClear_Click); + pbBoxArtMedium.BackColor = System.Drawing.SystemColors.Control; + pbBoxArtMedium.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbBoxArtMedium.Image = Properties.Resources.NoBoxArtMedium; + pbBoxArtMedium.InitialImage = null; + pbBoxArtMedium.Location = new System.Drawing.Point(2, 18); + pbBoxArtMedium.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + pbBoxArtMedium.Name = "pbBoxArtMedium"; + pbBoxArtMedium.Size = new System.Drawing.Size(127, 154); + pbBoxArtMedium.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + pbBoxArtMedium.TabIndex = 1; + pbBoxArtMedium.TabStop = false; + pbBoxArtMedium.SizeChanged += pbGameImage_SizeChanged; + pbBoxArtMedium.Click += pbGameImage_Click; + pbBoxArtMedium.DragDrop += pbGameImage_DragDrop; + pbBoxArtMedium.DragEnter += pbGameImage_DragEnter; // - // panel12 + // panel13 // - this.panel12.Controls.Add(this.label5); - this.panel12.Controls.Add(this.pbBoxArtMedium); - this.panel12.Controls.Add(this.btnClearMedium); - this.panel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel12.Location = new System.Drawing.Point(135, 0); - this.panel12.Margin = new System.Windows.Forms.Padding(0); - this.panel12.Name = "panel12"; - this.panel12.Size = new System.Drawing.Size(115, 184); - this.panel12.TabIndex = 1; + panel13.Controls.Add(label6); + panel13.Controls.Add(pbBoxArtSmall); + panel13.Controls.Add(btnClearSmall); + panel13.Dock = System.Windows.Forms.DockStyle.Fill; + panel13.Location = new System.Drawing.Point(282, 0); + panel13.Margin = new System.Windows.Forms.Padding(0); + panel13.Name = "panel13"; + panel13.Size = new System.Drawing.Size(95, 320); + panel13.TabIndex = 2; // - // label5 + // label6 // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label5.Location = new System.Drawing.Point(2, 2); - this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(53, 15); - this.label5.TabIndex = 13; - this.label5.Text = "Medium"; + label6.AutoSize = true; + label6.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label6.Location = new System.Drawing.Point(2, 2); + label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(37, 15); + label6.TabIndex = 14; + label6.Text = "Small"; // - // pbBoxArtMedium + // pbBoxArtSmall // - this.pbBoxArtMedium.BackColor = System.Drawing.SystemColors.Control; - this.pbBoxArtMedium.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pbBoxArtMedium.Image = global::EverLoader.Properties.Resources.NoBoxArtMedium; - this.pbBoxArtMedium.InitialImage = null; - this.pbBoxArtMedium.Location = new System.Drawing.Point(2, 18); - this.pbBoxArtMedium.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); - this.pbBoxArtMedium.Name = "pbBoxArtMedium"; - this.pbBoxArtMedium.Size = new System.Drawing.Size(88, 124); - this.pbBoxArtMedium.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pbBoxArtMedium.TabIndex = 1; - this.pbBoxArtMedium.TabStop = false; - this.pbBoxArtMedium.SizeChanged += new System.EventHandler(this.pbGameImage_SizeChanged); - this.pbBoxArtMedium.Click += new System.EventHandler(this.pbGameImage_Click); - this.pbBoxArtMedium.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragDrop); - this.pbBoxArtMedium.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragEnter); + pbBoxArtSmall.BackColor = System.Drawing.SystemColors.Control; + pbBoxArtSmall.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbBoxArtSmall.Image = Properties.Resources.NoBoxArtMedium; + pbBoxArtSmall.InitialImage = null; + pbBoxArtSmall.Location = new System.Drawing.Point(2, 17); + pbBoxArtSmall.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + pbBoxArtSmall.Name = "pbBoxArtSmall"; + pbBoxArtSmall.Size = new System.Drawing.Size(93, 96); + pbBoxArtSmall.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + pbBoxArtSmall.TabIndex = 15; + pbBoxArtSmall.TabStop = false; + pbBoxArtSmall.SizeChanged += pbGameImage_SizeChanged; + pbBoxArtSmall.Click += pbGameImage_Click; + pbBoxArtSmall.DragDrop += pbGameImage_DragDrop; + pbBoxArtSmall.DragEnter += pbGameImage_DragEnter; // - // btnClearMedium + // btnClearSmall // - this.btnClearMedium.Enabled = false; - this.btnClearMedium.FlatAppearance.BorderSize = 0; - this.btnClearMedium.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnClearMedium.Image = global::EverLoader.Properties.Resources.Button_Close_icon_small; - this.btnClearMedium.Location = new System.Drawing.Point(74, 1); - this.btnClearMedium.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnClearMedium.Name = "btnClearMedium"; - this.btnClearMedium.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); - this.btnClearMedium.Size = new System.Drawing.Size(16, 16); - this.btnClearMedium.TabIndex = 21; - this.btnClearMedium.TabStop = false; - this.btnClearMedium.Tag = "Medium"; - this.btnClearMedium.UseVisualStyleBackColor = true; - this.btnClearMedium.MouseClick += new System.Windows.Forms.MouseEventHandler(this.btnImageClear_Click); + btnClearSmall.Enabled = false; + btnClearSmall.FlatAppearance.BorderSize = 0; + btnClearSmall.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + btnClearSmall.Image = Properties.Resources.Button_Close_icon_small; + btnClearSmall.Location = new System.Drawing.Point(50, 0); + btnClearSmall.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + btnClearSmall.Name = "btnClearSmall"; + btnClearSmall.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); + btnClearSmall.Size = new System.Drawing.Size(16, 16); + btnClearSmall.TabIndex = 22; + btnClearSmall.TabStop = false; + btnClearSmall.Tag = "Small"; + btnClearSmall.UseVisualStyleBackColor = true; + btnClearSmall.MouseClick += btnImageClear_Click; // - // panel13 + // panel7 // - this.panel13.Controls.Add(this.label6); - this.panel13.Controls.Add(this.pbBoxArtSmall); - this.panel13.Controls.Add(this.btnClearSmall); - this.panel13.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel13.Location = new System.Drawing.Point(250, 0); - this.panel13.Margin = new System.Windows.Forms.Padding(0); - this.panel13.Name = "panel13"; - this.panel13.Size = new System.Drawing.Size(84, 184); - this.panel13.TabIndex = 2; + panel7.Controls.Add(label4); + panel7.Controls.Add(pbBoxArtLarge); + panel7.Controls.Add(btnClearLarge); + panel7.Dock = System.Windows.Forms.DockStyle.Fill; + panel7.Location = new System.Drawing.Point(0, 0); + panel7.Margin = new System.Windows.Forms.Padding(0); + panel7.Name = "panel7"; + panel7.Size = new System.Drawing.Size(152, 320); + panel7.TabIndex = 0; // - // label6 + // label4 // - this.label6.AutoSize = true; - this.label6.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label6.Location = new System.Drawing.Point(2, 2); - this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(37, 15); - this.label6.TabIndex = 14; - this.label6.Text = "Small"; + label4.AutoSize = true; + label4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label4.Location = new System.Drawing.Point(3, 2); + label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(38, 15); + label4.TabIndex = 12; + label4.Text = "Large"; // - // pbBoxArtSmall + // pbBoxArtLarge // - this.pbBoxArtSmall.BackColor = System.Drawing.SystemColors.Control; - this.pbBoxArtSmall.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pbBoxArtSmall.Image = global::EverLoader.Properties.Resources.NoBoxArtMedium; - this.pbBoxArtSmall.InitialImage = null; - this.pbBoxArtSmall.Location = new System.Drawing.Point(2, 17); - this.pbBoxArtSmall.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); - this.pbBoxArtSmall.Name = "pbBoxArtSmall"; - this.pbBoxArtSmall.Size = new System.Drawing.Size(64, 92); - this.pbBoxArtSmall.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pbBoxArtSmall.TabIndex = 15; - this.pbBoxArtSmall.TabStop = false; - this.pbBoxArtSmall.SizeChanged += new System.EventHandler(this.pbGameImage_SizeChanged); - this.pbBoxArtSmall.Click += new System.EventHandler(this.pbGameImage_Click); - this.pbBoxArtSmall.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragDrop); - this.pbBoxArtSmall.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragEnter); + pbBoxArtLarge.BackColor = System.Drawing.SystemColors.Control; + pbBoxArtLarge.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbBoxArtLarge.Image = Properties.Resources.NoBoxArtLarge; + pbBoxArtLarge.InitialImage = null; + pbBoxArtLarge.Location = new System.Drawing.Point(1, 18); + pbBoxArtLarge.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + pbBoxArtLarge.Name = "pbBoxArtLarge"; + pbBoxArtLarge.Size = new System.Drawing.Size(151, 186); + pbBoxArtLarge.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + pbBoxArtLarge.TabIndex = 0; + pbBoxArtLarge.TabStop = false; + pbBoxArtLarge.SizeChanged += pbGameImage_SizeChanged; + pbBoxArtLarge.Click += pbGameImage_Click; + pbBoxArtLarge.DragDrop += pbGameImage_DragDrop; + pbBoxArtLarge.DragEnter += pbGameImage_DragEnter; // - // btnClearSmall + // btnClearLarge // - this.btnClearSmall.Enabled = false; - this.btnClearSmall.FlatAppearance.BorderSize = 0; - this.btnClearSmall.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnClearSmall.Image = global::EverLoader.Properties.Resources.Button_Close_icon_small; - this.btnClearSmall.Location = new System.Drawing.Point(50, 0); - this.btnClearSmall.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.btnClearSmall.Name = "btnClearSmall"; - this.btnClearSmall.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); - this.btnClearSmall.Size = new System.Drawing.Size(16, 16); - this.btnClearSmall.TabIndex = 22; - this.btnClearSmall.TabStop = false; - this.btnClearSmall.Tag = "Small"; - this.btnClearSmall.UseVisualStyleBackColor = true; - this.btnClearSmall.MouseClick += new System.Windows.Forms.MouseEventHandler(this.btnImageClear_Click); + btnClearLarge.Enabled = false; + btnClearLarge.FlatAppearance.BorderSize = 0; + btnClearLarge.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + btnClearLarge.Image = Properties.Resources.Button_Close_icon_small; + btnClearLarge.Location = new System.Drawing.Point(102, 1); + btnClearLarge.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + btnClearLarge.Name = "btnClearLarge"; + btnClearLarge.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); + btnClearLarge.Size = new System.Drawing.Size(16, 16); + btnClearLarge.TabIndex = 20; + btnClearLarge.TabStop = false; + btnClearLarge.Tag = "Large"; + btnClearLarge.UseVisualStyleBackColor = true; + btnClearLarge.MouseClick += btnImageClear_Click; // // panel14 // - this.panel14.Controls.Add(this.llBannerDown); - this.panel14.Controls.Add(this.llBannerUp); - this.panel14.Controls.Add(this.btnClearBanner); - this.panel14.Controls.Add(this.llBannerNext); - this.panel14.Controls.Add(this.llBannerPrev); - this.panel14.Controls.Add(this.pbBanner); - this.panel14.Controls.Add(this.label8); - this.panel14.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel14.Location = new System.Drawing.Point(0, 184); - this.panel14.Margin = new System.Windows.Forms.Padding(0); - this.panel14.Name = "panel14"; - this.panel14.Size = new System.Drawing.Size(334, 114); - this.panel14.TabIndex = 1; + panel14.Controls.Add(llBannerDown); + panel14.Controls.Add(llBannerUp); + panel14.Controls.Add(btnClearBanner); + panel14.Controls.Add(llBannerNext); + panel14.Controls.Add(llBannerPrev); + panel14.Controls.Add(pbBanner); + panel14.Controls.Add(label8); + panel14.Dock = System.Windows.Forms.DockStyle.Fill; + panel14.Location = new System.Drawing.Point(0, 320); + panel14.Margin = new System.Windows.Forms.Padding(0); + panel14.Name = "panel14"; + panel14.Size = new System.Drawing.Size(377, 198); + panel14.TabIndex = 1; // // llBannerDown // - this.llBannerDown.ActiveLinkColor = System.Drawing.Color.Blue; - this.llBannerDown.AutoSize = true; - this.llBannerDown.Enabled = false; - this.llBannerDown.Font = new System.Drawing.Font("Wingdings", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.llBannerDown.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; - this.llBannerDown.LinkColor = System.Drawing.Color.Black; - this.llBannerDown.Location = new System.Drawing.Point(277, -2); - this.llBannerDown.Name = "llBannerDown"; - this.llBannerDown.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); - this.llBannerDown.Size = new System.Drawing.Size(23, 19); - this.llBannerDown.TabIndex = 27; - this.llBannerDown.TabStop = true; - this.llBannerDown.Text = "ê"; - this.llBannerDown.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llBannerUpDown_LinkClicked); + llBannerDown.ActiveLinkColor = System.Drawing.Color.Blue; + llBannerDown.AutoSize = true; + llBannerDown.Enabled = false; + llBannerDown.Font = new System.Drawing.Font("Wingdings", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + llBannerDown.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; + llBannerDown.LinkColor = System.Drawing.Color.Black; + llBannerDown.Location = new System.Drawing.Point(277, -2); + llBannerDown.Name = "llBannerDown"; + llBannerDown.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); + llBannerDown.Size = new System.Drawing.Size(23, 19); + llBannerDown.TabIndex = 27; + llBannerDown.TabStop = true; + llBannerDown.Text = "ê"; + llBannerDown.LinkClicked += llBannerUpDown_LinkClicked; // // llBannerUp // - this.llBannerUp.ActiveLinkColor = System.Drawing.Color.Blue; - this.llBannerUp.AutoSize = true; - this.llBannerUp.Enabled = false; - this.llBannerUp.Font = new System.Drawing.Font("Wingdings", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.llBannerUp.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; - this.llBannerUp.LinkColor = System.Drawing.Color.Black; - this.llBannerUp.Location = new System.Drawing.Point(259, -2); - this.llBannerUp.Name = "llBannerUp"; - this.llBannerUp.Size = new System.Drawing.Size(23, 17); - this.llBannerUp.TabIndex = 26; - this.llBannerUp.TabStop = true; - this.llBannerUp.Text = "é"; - this.llBannerUp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llBannerUpDown_LinkClicked); + llBannerUp.ActiveLinkColor = System.Drawing.Color.Blue; + llBannerUp.AutoSize = true; + llBannerUp.Enabled = false; + llBannerUp.Font = new System.Drawing.Font("Wingdings", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + llBannerUp.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; + llBannerUp.LinkColor = System.Drawing.Color.Black; + llBannerUp.Location = new System.Drawing.Point(259, -2); + llBannerUp.Name = "llBannerUp"; + llBannerUp.Size = new System.Drawing.Size(23, 17); + llBannerUp.TabIndex = 26; + llBannerUp.TabStop = true; + llBannerUp.Text = "é"; + llBannerUp.LinkClicked += llBannerUpDown_LinkClicked; // // btnClearBanner // - this.btnClearBanner.Enabled = false; - this.btnClearBanner.FlatAppearance.BorderSize = 0; - this.btnClearBanner.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnClearBanner.Image = global::EverLoader.Properties.Resources.Button_Close_icon_small; - this.btnClearBanner.Location = new System.Drawing.Point(317, 0); - this.btnClearBanner.Margin = new System.Windows.Forms.Padding(0); - this.btnClearBanner.Name = "btnClearBanner"; - this.btnClearBanner.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); - this.btnClearBanner.Size = new System.Drawing.Size(16, 16); - this.btnClearBanner.TabIndex = 19; - this.btnClearBanner.TabStop = false; - this.btnClearBanner.Tag = "Banner"; - this.btnClearBanner.UseVisualStyleBackColor = true; - this.btnClearBanner.Click += new System.EventHandler(this.btnImageClear_Click); + btnClearBanner.Enabled = false; + btnClearBanner.FlatAppearance.BorderSize = 0; + btnClearBanner.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + btnClearBanner.Image = Properties.Resources.Button_Close_icon_small; + btnClearBanner.Location = new System.Drawing.Point(317, 0); + btnClearBanner.Margin = new System.Windows.Forms.Padding(0); + btnClearBanner.Name = "btnClearBanner"; + btnClearBanner.Padding = new System.Windows.Forms.Padding(0, 0, 1, 1); + btnClearBanner.Size = new System.Drawing.Size(16, 16); + btnClearBanner.TabIndex = 19; + btnClearBanner.TabStop = false; + btnClearBanner.Tag = "Banner"; + btnClearBanner.UseVisualStyleBackColor = true; + btnClearBanner.Click += btnImageClear_Click; // // llBannerNext // - this.llBannerNext.ActiveLinkColor = System.Drawing.Color.Blue; - this.llBannerNext.AutoSize = true; - this.llBannerNext.Font = new System.Drawing.Font("Wingdings", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.llBannerNext.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; - this.llBannerNext.LinkColor = System.Drawing.Color.Black; - this.llBannerNext.Location = new System.Drawing.Point(300, 54); - this.llBannerNext.Name = "llBannerNext"; - this.llBannerNext.Size = new System.Drawing.Size(34, 26); - this.llBannerNext.TabIndex = 23; - this.llBannerNext.TabStop = true; - this.llBannerNext.Text = "ð"; - this.llBannerNext.Visible = false; - this.llBannerNext.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llBannerNextPrev_LinkClicked); + llBannerNext.ActiveLinkColor = System.Drawing.Color.Blue; + llBannerNext.AutoSize = true; + llBannerNext.Font = new System.Drawing.Font("Wingdings", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + llBannerNext.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; + llBannerNext.LinkColor = System.Drawing.Color.Black; + llBannerNext.Location = new System.Drawing.Point(300, 54); + llBannerNext.Name = "llBannerNext"; + llBannerNext.Size = new System.Drawing.Size(34, 26); + llBannerNext.TabIndex = 23; + llBannerNext.TabStop = true; + llBannerNext.Text = "ð"; + llBannerNext.Visible = false; + llBannerNext.LinkClicked += llBannerNextPrev_LinkClicked; // // llBannerPrev // - this.llBannerPrev.ActiveLinkColor = System.Drawing.Color.Blue; - this.llBannerPrev.AutoSize = true; - this.llBannerPrev.Font = new System.Drawing.Font("Wingdings", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.llBannerPrev.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; - this.llBannerPrev.LinkColor = System.Drawing.Color.Black; - this.llBannerPrev.Location = new System.Drawing.Point(3, 54); - this.llBannerPrev.Name = "llBannerPrev"; - this.llBannerPrev.Size = new System.Drawing.Size(34, 26); - this.llBannerPrev.TabIndex = 24; - this.llBannerPrev.TabStop = true; - this.llBannerPrev.Text = "ï"; - this.llBannerPrev.Visible = false; - this.llBannerPrev.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llBannerNextPrev_LinkClicked); + llBannerPrev.ActiveLinkColor = System.Drawing.Color.Blue; + llBannerPrev.AutoSize = true; + llBannerPrev.Font = new System.Drawing.Font("Wingdings", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + llBannerPrev.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline; + llBannerPrev.LinkColor = System.Drawing.Color.Black; + llBannerPrev.Location = new System.Drawing.Point(3, 54); + llBannerPrev.Name = "llBannerPrev"; + llBannerPrev.Size = new System.Drawing.Size(34, 26); + llBannerPrev.TabIndex = 24; + llBannerPrev.TabStop = true; + llBannerPrev.Text = "ï"; + llBannerPrev.Visible = false; + llBannerPrev.LinkClicked += llBannerNextPrev_LinkClicked; // // pbBanner // - this.pbBanner.BackColor = System.Drawing.SystemColors.Control; - this.pbBanner.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pbBanner.Image = global::EverLoader.Properties.Resources.NoBannerArt; - this.pbBanner.InitialImage = null; - this.pbBanner.Location = new System.Drawing.Point(3, 17); - this.pbBanner.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); - this.pbBanner.Name = "pbBanner"; - this.pbBanner.Size = new System.Drawing.Size(331, 92); - this.pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pbBanner.TabIndex = 16; - this.pbBanner.TabStop = false; - this.pbBanner.SizeChanged += new System.EventHandler(this.pbGameImage_SizeChanged); - this.pbBanner.Click += new System.EventHandler(this.pbGameImage_Click); - this.pbBanner.DragDrop += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragDrop); - this.pbBanner.DragEnter += new System.Windows.Forms.DragEventHandler(this.pbGameImage_DragEnter); + pbBanner.BackColor = System.Drawing.SystemColors.Control; + pbBanner.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + pbBanner.Image = Properties.Resources.NoBannerArt; + pbBanner.InitialImage = null; + pbBanner.Location = new System.Drawing.Point(3, 17); + pbBanner.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + pbBanner.Name = "pbBanner"; + pbBanner.Size = new System.Drawing.Size(320, 48); + pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + pbBanner.TabIndex = 16; + pbBanner.TabStop = false; + pbBanner.SizeChanged += pbGameImage_SizeChanged; + pbBanner.Click += pbGameImage_Click; + pbBanner.DragDrop += pbGameImage_DragDrop; + pbBanner.DragEnter += pbGameImage_DragEnter; // // label8 // - this.label8.AutoSize = true; - this.label8.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label8.Location = new System.Drawing.Point(3, 1); - this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(169, 15); - this.label8.TabIndex = 17; - this.label8.Text = "Screenshot Banner (optional)"; - // - // pbConnected - // - this.pbConnected.Image = global::EverLoader.Properties.Resources.red; - this.pbConnected.Location = new System.Drawing.Point(5, -1); - this.pbConnected.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); - this.pbConnected.Name = "pbConnected"; - this.pbConnected.Padding = new System.Windows.Forms.Padding(3); - this.pbConnected.Size = new System.Drawing.Size(22, 22); - this.pbConnected.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pbConnected.TabIndex = 4; - this.pbConnected.TabStop = false; - // - // groupBox3 - // - this.groupBox3.Controls.Add(this.cbRomFilter); - this.groupBox3.Controls.Add(this.lvGames); - this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox3.Location = new System.Drawing.Point(3, 2); - this.groupBox3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tableLayoutPanel1.SetRowSpan(this.groupBox3, 2); - this.groupBox3.Size = new System.Drawing.Size(339, 532); - this.groupBox3.TabIndex = 3; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "Current ROM Collection"; + label8.AutoSize = true; + label8.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label8.Location = new System.Drawing.Point(3, 1); + label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label8.Name = "label8"; + label8.Size = new System.Drawing.Size(169, 15); + label8.TabIndex = 17; + label8.Text = "Screenshot Banner (optional)"; + // + // gbCollection + // + gbCollection.Controls.Add(tblLayoutCollection); + gbCollection.Dock = System.Windows.Forms.DockStyle.Fill; + gbCollection.Location = new System.Drawing.Point(228, 2); + gbCollection.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + gbCollection.Name = "gbCollection"; + gbCollection.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + tableLayoutPanel1.SetRowSpan(gbCollection, 2); + gbCollection.Size = new System.Drawing.Size(284, 763); + gbCollection.TabIndex = 3; + gbCollection.TabStop = false; + gbCollection.Text = "ROM Collection"; + // + // tblLayoutCollection + // + tblLayoutCollection.ColumnCount = 1; + tblLayoutCollection.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tblLayoutCollection.Controls.Add(button5, 0, 0); + tblLayoutCollection.Controls.Add(cbRomFilter, 0, 1); + tblLayoutCollection.Controls.Add(lvGames, 0, 2); + tblLayoutCollection.Controls.Add(btnSyncWithSDCard, 0, 5); + tblLayoutCollection.Controls.Add(lblNumberOfGamesSelected, 0, 3); + tblLayoutCollection.Controls.Add(tbSearchCollection, 0, 4); + tblLayoutCollection.Dock = System.Windows.Forms.DockStyle.Fill; + tblLayoutCollection.Location = new System.Drawing.Point(3, 18); + tblLayoutCollection.Margin = new System.Windows.Forms.Padding(2); + tblLayoutCollection.Name = "tblLayoutCollection"; + tblLayoutCollection.RowCount = 7; + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + tblLayoutCollection.Size = new System.Drawing.Size(278, 743); + tblLayoutCollection.TabIndex = 3; + // + // button5 + // + button5.Dock = System.Windows.Forms.DockStyle.Fill; + button5.Location = new System.Drawing.Point(7, 7); + button5.Margin = new System.Windows.Forms.Padding(7); + button5.Name = "button5"; + button5.Size = new System.Drawing.Size(264, 36); + button5.TabIndex = 15; + button5.Text = "Add Game"; + button5.UseVisualStyleBackColor = true; + button5.Click += btnAddGame_Click; // // cbRomFilter // - this.cbRomFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbRomFilter.DataSource = null; - this.cbRomFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbRomFilter.Enabled = false; - this.cbRomFilter.FormattingEnabled = true; - this.cbRomFilter.Location = new System.Drawing.Point(5, 17); - this.cbRomFilter.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.cbRomFilter.Name = "cbRomFilter"; - this.cbRomFilter.Size = new System.Drawing.Size(329, 24); - this.cbRomFilter.TabIndex = 1; - this.cbRomFilter.TabStop = false; + cbRomFilter.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + cbRomFilter.DataSource = null; + cbRomFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbRomFilter.Enabled = false; + cbRomFilter.FormattingEnabled = true; + cbRomFilter.Location = new System.Drawing.Point(3, 52); + cbRomFilter.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + cbRomFilter.Name = "cbRomFilter"; + cbRomFilter.Size = new System.Drawing.Size(272, 24); + cbRomFilter.TabIndex = 1; + cbRomFilter.TabStop = false; // // lvGames // - this.lvGames.AllowDrop = true; - this.lvGames.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lvGames.CheckBoxes = true; - this.lvGames.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.dummy}); - this.lvGames.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.lvGames.HideSelection = false; - this.lvGames.Location = new System.Drawing.Point(5, 43); - this.lvGames.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.lvGames.Name = "lvGames"; - this.lvGames.Size = new System.Drawing.Size(329, 482); - this.lvGames.Sorting = System.Windows.Forms.SortOrder.Ascending; - this.lvGames.TabIndex = 0; - this.lvGames.TabStop = false; - this.lvGames.UseCompatibleStateImageBehavior = false; - this.lvGames.View = System.Windows.Forms.View.Details; - this.lvGames.SelectedIndexChanged += new System.EventHandler(this.lvGames_SelectedIndexChanged); - this.lvGames.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvGames_DragDrop); - this.lvGames.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvGames_DragEnter); - this.lvGames.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvGames_KeyDown); - this.lvGames.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvGames_MouseClick); + lvGames.AllowDrop = true; + lvGames.AutoArrange = false; + lvGames.CheckBoxes = true; + lvGames.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { dummy }); + lvGames.Dock = System.Windows.Forms.DockStyle.Fill; + lvGames.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + lvGames.Location = new System.Drawing.Point(3, 102); + lvGames.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + lvGames.Name = "lvGames"; + lvGames.Size = new System.Drawing.Size(272, 519); + lvGames.Sorting = System.Windows.Forms.SortOrder.Ascending; + lvGames.TabIndex = 0; + lvGames.TabStop = false; + lvGames.UseCompatibleStateImageBehavior = false; + lvGames.View = System.Windows.Forms.View.Details; + lvGames.SelectedIndexChanged += lvGames_SelectedIndexChanged; + lvGames.DragDrop += lvGames_DragDrop; + lvGames.DragEnter += lvGames_DragEnter; + lvGames.KeyDown += lvGames_KeyDown; + lvGames.MouseClick += lvGames_MouseClick; // // dummy // - this.dummy.Text = "dummy"; - this.dummy.Width = 50; + dummy.Text = "dummy"; + dummy.Width = 50; + // + // btnSyncWithSDCard + // + btnSyncWithSDCard.Dock = System.Windows.Forms.DockStyle.Fill; + btnSyncWithSDCard.Location = new System.Drawing.Point(3, 666); + btnSyncWithSDCard.Name = "btnSyncWithSDCard"; + btnSyncWithSDCard.Size = new System.Drawing.Size(272, 44); + btnSyncWithSDCard.TabIndex = 17; + btnSyncWithSDCard.Text = "Copy/Sync ROM(s) to Cartridge"; + btnSyncWithSDCard.UseVisualStyleBackColor = true; + btnSyncWithSDCard.Click += btnSyncToSD_Click; + // + // lblNumberOfGamesSelected + // + lblNumberOfGamesSelected.AutoSize = true; + lblNumberOfGamesSelected.Location = new System.Drawing.Point(3, 623); + lblNumberOfGamesSelected.Name = "lblNumberOfGamesSelected"; + lblNumberOfGamesSelected.Size = new System.Drawing.Size(12, 15); + lblNumberOfGamesSelected.TabIndex = 18; + lblNumberOfGamesSelected.Text = "-"; + // + // tbSearchCollection + // + tbSearchCollection.Dock = System.Windows.Forms.DockStyle.Fill; + tbSearchCollection.Location = new System.Drawing.Point(3, 646); + tbSearchCollection.Name = "tbSearchCollection"; + tbSearchCollection.PlaceholderText = "Search collection"; + tbSearchCollection.Size = new System.Drawing.Size(272, 23); + tbSearchCollection.TabIndex = 19; + tbSearchCollection.KeyDown += tbSearchCollection_KeyDown; // // menuStrip1 // - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.toolStripMenuItem1, - this.helpToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(1036, 24); - this.menuStrip1.TabIndex = 4; - this.menuStrip1.Text = "menuStrip1"; + menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); + menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, toolStripMenuItem1, helpToolStripMenuItem }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new System.Drawing.Size(1291, 24); + menuStrip1.TabIndex = 4; + menuStrip1.Text = "menuStrip1"; // // fileToolStripMenuItem // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.selectSDDriveToolStripMenuItem}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "File"; + fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { selectSDDriveToolStripMenuItem }); + fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + fileToolStripMenuItem.Text = "File"; // // selectSDDriveToolStripMenuItem // - this.selectSDDriveToolStripMenuItem.Name = "selectSDDriveToolStripMenuItem"; - this.selectSDDriveToolStripMenuItem.Size = new System.Drawing.Size(218, 22); - this.selectSDDriveToolStripMenuItem.Text = "Select MicroSD drive/folder"; - this.selectSDDriveToolStripMenuItem.DropDownOpening += new System.EventHandler(this.selectSDDriveToolStripMenuItem_DropDownOpening); + selectSDDriveToolStripMenuItem.Name = "selectSDDriveToolStripMenuItem"; + selectSDDriveToolStripMenuItem.Size = new System.Drawing.Size(218, 22); + selectSDDriveToolStripMenuItem.Text = "Select MicroSD drive/folder"; + selectSDDriveToolStripMenuItem.DropDownOpening += selectSDDriveToolStripMenuItem_DropDownOpening; // // toolStripMenuItem1 // - this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.optimizeImagesToolStripMenuItem}); - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(61, 20); - this.toolStripMenuItem1.Text = "Settings"; + toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { optimizeImagesToolStripMenuItem }); + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new System.Drawing.Size(61, 20); + toolStripMenuItem1.Text = "Settings"; // // optimizeImagesToolStripMenuItem // - this.optimizeImagesToolStripMenuItem.CheckOnClick = true; - this.optimizeImagesToolStripMenuItem.Name = "optimizeImagesToolStripMenuItem"; - this.optimizeImagesToolStripMenuItem.Size = new System.Drawing.Size(219, 22); - this.optimizeImagesToolStripMenuItem.Text = "Optimize/compress images"; + optimizeImagesToolStripMenuItem.CheckOnClick = true; + optimizeImagesToolStripMenuItem.Name = "optimizeImagesToolStripMenuItem"; + optimizeImagesToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + optimizeImagesToolStripMenuItem.Text = "Optimize/compress images"; // // helpToolStripMenuItem // - this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.checkForUpdatesToolStripMenuItem, - this.aboutToolStripMenuItem}); - this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.helpToolStripMenuItem.Text = "Help"; + helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { checkForUpdatesToolStripMenuItem, aboutToolStripMenuItem }); + helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + helpToolStripMenuItem.Text = "Help"; // // checkForUpdatesToolStripMenuItem // - this.checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; - this.checkForUpdatesToolStripMenuItem.Size = new System.Drawing.Size(171, 22); - this.checkForUpdatesToolStripMenuItem.Text = "Check for Updates"; - this.checkForUpdatesToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdatesToolStripMenuItem_Click); + checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; + checkForUpdatesToolStripMenuItem.Size = new System.Drawing.Size(171, 22); + checkForUpdatesToolStripMenuItem.Text = "Check for Updates"; + checkForUpdatesToolStripMenuItem.Click += checkForUpdatesToolStripMenuItem_Click; // // aboutToolStripMenuItem // - this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(171, 22); - this.aboutToolStripMenuItem.Text = "About..."; - this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + aboutToolStripMenuItem.Size = new System.Drawing.Size(171, 22); + aboutToolStripMenuItem.Text = "About..."; + aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; // // tableLayoutPanel1 // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.tableLayoutPanel1.Controls.Add(this.groupBox3, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.groupBox2, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.groupBox1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.btnSelectSD, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.btnSyncToSD, 2, 2); - this.tableLayoutPanel1.Controls.Add(this.groupBox4, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.panel5, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.pbEverSD, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.panel6, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel7, 0, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 41F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1036, 607); - this.tableLayoutPanel1.TabIndex = 5; - // - // btnSelectSD - // - this.btnSelectSD.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnSelectSD.Location = new System.Drawing.Point(352, 543); - this.btnSelectSD.Margin = new System.Windows.Forms.Padding(7); - this.btnSelectSD.Name = "btnSelectSD"; - this.btnSelectSD.Size = new System.Drawing.Size(331, 27); - this.btnSelectSD.TabIndex = 5; - this.btnSelectSD.TabStop = false; - this.btnSelectSD.Text = "Select MicroSD"; - this.btnSelectSD.UseVisualStyleBackColor = true; - this.btnSelectSD.Click += new System.EventHandler(this.btnSelectSD_Click); - // - // btnSyncToSD - // - this.btnSyncToSD.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnSyncToSD.Enabled = false; - this.btnSyncToSD.Location = new System.Drawing.Point(697, 543); - this.btnSyncToSD.Margin = new System.Windows.Forms.Padding(7); - this.btnSyncToSD.Name = "btnSyncToSD"; - this.btnSyncToSD.Size = new System.Drawing.Size(332, 27); - this.btnSyncToSD.TabIndex = 6; - this.btnSyncToSD.TabStop = false; - this.btnSyncToSD.Text = "Synchronize selected ROMs with MicroSD"; - this.btnSyncToSD.UseVisualStyleBackColor = true; - this.btnSyncToSD.Click += new System.EventHandler(this.btnSyncToSD_Click); + tableLayoutPanel1.ColumnCount = 4; + tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 17.5F)); + tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 22.5F)); + tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F)); + tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F)); + tableLayoutPanel1.Controls.Add(gbCartridge, 0, 0); + tableLayoutPanel1.Controls.Add(gbCollection, 1, 0); + tableLayoutPanel1.Controls.Add(groupBox2, 3, 0); + tableLayoutPanel1.Controls.Add(groupBox1, 2, 0); + tableLayoutPanel1.Controls.Add(groupBox4, 2, 1); + tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 3, 1); + tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel1.Location = new System.Drawing.Point(0, 24); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 2; + tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 70.7953F)); + tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 29.2046928F)); + tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tableLayoutPanel1.Size = new System.Drawing.Size(1291, 767); + tableLayoutPanel1.TabIndex = 5; + // + // gbCartridge + // + gbCartridge.Controls.Add(tblLayoutCartridge); + gbCartridge.Dock = System.Windows.Forms.DockStyle.Fill; + gbCartridge.Location = new System.Drawing.Point(2, 2); + gbCartridge.Margin = new System.Windows.Forms.Padding(2); + gbCartridge.Name = "gbCartridge"; + gbCartridge.Padding = new System.Windows.Forms.Padding(2); + tableLayoutPanel1.SetRowSpan(gbCartridge, 2); + gbCartridge.Size = new System.Drawing.Size(221, 763); + gbCartridge.TabIndex = 13; + gbCartridge.TabStop = false; + gbCartridge.Text = "ROMs on current Cartridge"; + // + // tblLayoutCartridge + // + tblLayoutCartridge.AllowDrop = true; + tblLayoutCartridge.ColumnCount = 1; + tblLayoutCartridge.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tblLayoutCartridge.Controls.Add(tbCartName2, 0, 2); + tblLayoutCartridge.Controls.Add(btnSelectedSD, 0, 0); + tblLayoutCartridge.Controls.Add(lblCartName, 0, 1); + tblLayoutCartridge.Controls.Add(lblNumberGamesSDCard, 0, 4); + tblLayoutCartridge.Controls.Add(btnNewSDCardFolder, 0, 6); + tblLayoutCartridge.Controls.Add(tvCartridge, 0, 3); + tblLayoutCartridge.Controls.Add(tableLayoutPanel7, 0, 7); + tblLayoutCartridge.Controls.Add(tbSearchCartridge, 0, 5); + tblLayoutCartridge.Dock = System.Windows.Forms.DockStyle.Fill; + tblLayoutCartridge.Location = new System.Drawing.Point(2, 18); + tblLayoutCartridge.Margin = new System.Windows.Forms.Padding(2); + tblLayoutCartridge.Name = "tblLayoutCartridge"; + tblLayoutCartridge.RowCount = 8; + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + tblLayoutCartridge.Size = new System.Drawing.Size(217, 743); + tblLayoutCartridge.TabIndex = 0; + // + // tbCartName2 + // + tbCartName2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbCartName2.Enabled = false; + tbCartName2.Location = new System.Drawing.Point(3, 72); + tbCartName2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbCartName2.Name = "tbCartName2"; + tbCartName2.Size = new System.Drawing.Size(211, 23); + tbCartName2.TabIndex = 5; + tbCartName2.TabStop = false; + tbCartName2.Text = "My Games"; + // + // btnSelectedSD + // + btnSelectedSD.Dock = System.Windows.Forms.DockStyle.Fill; + btnSelectedSD.Location = new System.Drawing.Point(7, 7); + btnSelectedSD.Margin = new System.Windows.Forms.Padding(7); + btnSelectedSD.Name = "btnSelectedSD"; + btnSelectedSD.Size = new System.Drawing.Size(203, 36); + btnSelectedSD.TabIndex = 6; + btnSelectedSD.TabStop = false; + btnSelectedSD.Text = "Select MicroSD"; + btnSelectedSD.UseVisualStyleBackColor = true; + btnSelectedSD.Click += btnSelectSD_Click; + // + // lblCartName + // + lblCartName.AutoSize = true; + lblCartName.Enabled = false; + lblCartName.Location = new System.Drawing.Point(2, 50); + lblCartName.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + lblCartName.Name = "lblCartName"; + lblCartName.Size = new System.Drawing.Size(94, 15); + lblCartName.TabIndex = 4; + lblCartName.Text = "Cartridge Name:"; + // + // lblNumberGamesSDCard + // + lblNumberGamesSDCard.AutoSize = true; + lblNumberGamesSDCard.Location = new System.Drawing.Point(3, 623); + lblNumberGamesSDCard.Name = "lblNumberGamesSDCard"; + lblNumberGamesSDCard.Size = new System.Drawing.Size(12, 15); + lblNumberGamesSDCard.TabIndex = 8; + lblNumberGamesSDCard.Text = "-"; + // + // btnNewSDCardFolder + // + btnNewSDCardFolder.Dock = System.Windows.Forms.DockStyle.Fill; + btnNewSDCardFolder.Enabled = false; + btnNewSDCardFolder.Location = new System.Drawing.Point(3, 666); + btnNewSDCardFolder.Name = "btnNewSDCardFolder"; + btnNewSDCardFolder.Size = new System.Drawing.Size(211, 44); + btnNewSDCardFolder.TabIndex = 19; + btnNewSDCardFolder.Text = "Create Folder on Cartridge"; + btnNewSDCardFolder.UseVisualStyleBackColor = true; + btnNewSDCardFolder.Click += btnNewSDCardFolder_Click; + // + // tvCartridge + // + tvCartridge.AllowDrop = true; + tvCartridge.Dock = System.Windows.Forms.DockStyle.Fill; + tvCartridge.ImageIndex = 0; + tvCartridge.ImageList = imageList1; + tvCartridge.Location = new System.Drawing.Point(3, 103); + tvCartridge.Name = "tvCartridge"; + tvCartridge.SelectedImageIndex = 0; + tvCartridge.Size = new System.Drawing.Size(211, 517); + tvCartridge.TabIndex = 20; + tvCartridge.ItemDrag += tvCartridge_OnItemDrag; + tvCartridge.DragDrop += tvCartridge_OnDragDrop; + tvCartridge.DragEnter += tvCartridge_OnDragEnter; + tvCartridge.DragOver += tvCartridge_DragOver; + tvCartridge.MouseClick += tvCartridge_MouseClick; + // + // imageList1 + // + imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + imageList1.ImageStream = (System.Windows.Forms.ImageListStreamer)resources.GetObject("imageList1.ImageStream"); + imageList1.TransparentColor = System.Drawing.Color.Transparent; + imageList1.Images.SetKeyName(0, "check.png"); + imageList1.Images.SetKeyName(1, "warning.png"); + imageList1.Images.SetKeyName(2, "folder.png"); + // + // tableLayoutPanel7 + // + tableLayoutPanel7.ColumnCount = 2; + tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F)); + tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70F)); + tableLayoutPanel7.Controls.Add(pictureBox3, 0, 0); + tableLayoutPanel7.Controls.Add(pbConnected2, 0, 0); + tableLayoutPanel7.Location = new System.Drawing.Point(3, 716); + tableLayoutPanel7.Name = "tableLayoutPanel7"; + tableLayoutPanel7.RowCount = 1; + tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tableLayoutPanel7.Size = new System.Drawing.Size(187, 24); + tableLayoutPanel7.TabIndex = 21; + // + // pictureBox3 + // + pictureBox3.Dock = System.Windows.Forms.DockStyle.Fill; + pictureBox3.Image = Properties.Resources.Logo___EverSD; + pictureBox3.Location = new System.Drawing.Point(56, 0); + pictureBox3.Margin = new System.Windows.Forms.Padding(0); + pictureBox3.Name = "pictureBox3"; + pictureBox3.Size = new System.Drawing.Size(131, 24); + pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + pictureBox3.TabIndex = 13; + pictureBox3.TabStop = false; + // + // pbConnected2 + // + pbConnected2.Image = Properties.Resources.red; + pbConnected2.Location = new System.Drawing.Point(2, 1); + pbConnected2.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + pbConnected2.Name = "pbConnected2"; + pbConnected2.Padding = new System.Windows.Forms.Padding(3); + pbConnected2.Size = new System.Drawing.Size(22, 22); + pbConnected2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + pbConnected2.TabIndex = 6; + pbConnected2.TabStop = false; + // + // tbSearchCartridge + // + tbSearchCartridge.Dock = System.Windows.Forms.DockStyle.Fill; + tbSearchCartridge.Location = new System.Drawing.Point(3, 646); + tbSearchCartridge.Name = "tbSearchCartridge"; + tbSearchCartridge.PlaceholderText = "Search Cartridge"; + tbSearchCartridge.Size = new System.Drawing.Size(211, 23); + tbSearchCartridge.TabIndex = 22; + tbSearchCartridge.KeyDown += tbSearchCartridge_KeyDown; // // groupBox4 // - this.groupBox4.Controls.Add(this.tableLayoutPanel3); - this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox4.Location = new System.Drawing.Point(348, 324); - this.groupBox4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox4.Size = new System.Drawing.Size(339, 210); - this.groupBox4.TabIndex = 7; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "Button Mapping"; + groupBox4.Controls.Add(tableLayoutPanel3); + groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; + groupBox4.Location = new System.Drawing.Point(518, 544); + groupBox4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + groupBox4.Name = "groupBox4"; + groupBox4.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + groupBox4.Size = new System.Drawing.Size(381, 221); + groupBox4.TabIndex = 7; + groupBox4.TabStop = false; + groupBox4.Text = "Button Mapping"; // // tableLayoutPanel3 // - this.tableLayoutPanel3.ColumnCount = 2; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel3.Controls.Add(this.panel3, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.panel4, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.panel1, 0, 1); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 18); - this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 2; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 108F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 68F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(333, 190); - this.tableLayoutPanel3.TabIndex = 9; + tableLayoutPanel3.ColumnCount = 2; + tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F)); + tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); + tableLayoutPanel3.Controls.Add(panel3, 0, 0); + tableLayoutPanel3.Controls.Add(panel4, 1, 0); + tableLayoutPanel3.Controls.Add(panel1, 0, 1); + tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel3.Location = new System.Drawing.Point(3, 18); + tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); + tableLayoutPanel3.Name = "tableLayoutPanel3"; + tableLayoutPanel3.RowCount = 2; + tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 108F)); + tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 68F)); + tableLayoutPanel3.Size = new System.Drawing.Size(375, 201); + tableLayoutPanel3.TabIndex = 9; // // panel3 // - this.panel3.Controls.Add(this.label18); - this.panel3.Controls.Add(this.tbMappingA); - this.panel3.Controls.Add(this.label20); - this.panel3.Controls.Add(this.label22); - this.panel3.Controls.Add(this.tbMappingB); - this.panel3.Controls.Add(this.label23); - this.panel3.Controls.Add(this.tbMappingX); - this.panel3.Controls.Add(this.tbMappingY); - this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel3.Location = new System.Drawing.Point(0, 0); - this.panel3.Margin = new System.Windows.Forms.Padding(0); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(199, 108); - this.panel3.TabIndex = 28; + panel3.Controls.Add(label18); + panel3.Controls.Add(tbMappingA); + panel3.Controls.Add(label20); + panel3.Controls.Add(label22); + panel3.Controls.Add(tbMappingB); + panel3.Controls.Add(label23); + panel3.Controls.Add(tbMappingX); + panel3.Controls.Add(tbMappingY); + panel3.Dock = System.Windows.Forms.DockStyle.Fill; + panel3.Location = new System.Drawing.Point(0, 0); + panel3.Margin = new System.Windows.Forms.Padding(0); + panel3.Name = "panel3"; + panel3.Size = new System.Drawing.Size(225, 108); + panel3.TabIndex = 28; // // label18 // - this.label18.AutoSize = true; - this.label18.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label18.Location = new System.Drawing.Point(37, 87); - this.label18.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(14, 15); - this.label18.TabIndex = 25; - this.label18.Text = "Y"; + label18.AutoSize = true; + label18.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label18.Location = new System.Drawing.Point(37, 87); + label18.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label18.Name = "label18"; + label18.Size = new System.Drawing.Size(14, 15); + label18.TabIndex = 25; + label18.Text = "Y"; // // tbMappingA // - this.tbMappingA.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingA.Enabled = false; - this.tbMappingA.Location = new System.Drawing.Point(58, 6); - this.tbMappingA.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingA.Name = "tbMappingA"; - this.tbMappingA.Size = new System.Drawing.Size(140, 23); - this.tbMappingA.TabIndex = 13; - this.tbMappingA.TabStop = false; + tbMappingA.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingA.Enabled = false; + tbMappingA.Location = new System.Drawing.Point(58, 6); + tbMappingA.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingA.Name = "tbMappingA"; + tbMappingA.Size = new System.Drawing.Size(167, 23); + tbMappingA.TabIndex = 13; + tbMappingA.TabStop = false; // // label20 // - this.label20.AutoSize = true; - this.label20.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label20.Location = new System.Drawing.Point(36, 9); - this.label20.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(15, 15); - this.label20.TabIndex = 12; - this.label20.Text = "A"; + label20.AutoSize = true; + label20.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label20.Location = new System.Drawing.Point(36, 9); + label20.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label20.Name = "label20"; + label20.Size = new System.Drawing.Size(15, 15); + label20.TabIndex = 12; + label20.Text = "A"; // // label22 // - this.label22.AutoSize = true; - this.label22.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label22.Location = new System.Drawing.Point(36, 35); - this.label22.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(15, 15); - this.label22.TabIndex = 14; - this.label22.Text = "B"; + label22.AutoSize = true; + label22.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label22.Location = new System.Drawing.Point(36, 35); + label22.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label22.Name = "label22"; + label22.Size = new System.Drawing.Size(15, 15); + label22.TabIndex = 14; + label22.Text = "B"; // // tbMappingB // - this.tbMappingB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingB.Enabled = false; - this.tbMappingB.Location = new System.Drawing.Point(58, 32); - this.tbMappingB.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingB.Name = "tbMappingB"; - this.tbMappingB.Size = new System.Drawing.Size(140, 23); - this.tbMappingB.TabIndex = 15; - this.tbMappingB.TabStop = false; + tbMappingB.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingB.Enabled = false; + tbMappingB.Location = new System.Drawing.Point(58, 32); + tbMappingB.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingB.Name = "tbMappingB"; + tbMappingB.Size = new System.Drawing.Size(167, 23); + tbMappingB.TabIndex = 15; + tbMappingB.TabStop = false; // // label23 // - this.label23.AutoSize = true; - this.label23.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label23.Location = new System.Drawing.Point(36, 60); - this.label23.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(15, 15); - this.label23.TabIndex = 16; - this.label23.Text = "X"; + label23.AutoSize = true; + label23.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label23.Location = new System.Drawing.Point(36, 60); + label23.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label23.Name = "label23"; + label23.Size = new System.Drawing.Size(15, 15); + label23.TabIndex = 16; + label23.Text = "X"; // // tbMappingX // - this.tbMappingX.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingX.Enabled = false; - this.tbMappingX.Location = new System.Drawing.Point(58, 58); - this.tbMappingX.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingX.Name = "tbMappingX"; - this.tbMappingX.Size = new System.Drawing.Size(140, 23); - this.tbMappingX.TabIndex = 17; - this.tbMappingX.TabStop = false; + tbMappingX.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingX.Enabled = false; + tbMappingX.Location = new System.Drawing.Point(58, 58); + tbMappingX.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingX.Name = "tbMappingX"; + tbMappingX.Size = new System.Drawing.Size(167, 23); + tbMappingX.TabIndex = 17; + tbMappingX.TabStop = false; // // tbMappingY // - this.tbMappingY.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingY.Enabled = false; - this.tbMappingY.Location = new System.Drawing.Point(58, 84); - this.tbMappingY.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingY.Name = "tbMappingY"; - this.tbMappingY.Size = new System.Drawing.Size(140, 23); - this.tbMappingY.TabIndex = 19; - this.tbMappingY.TabStop = false; + tbMappingY.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingY.Enabled = false; + tbMappingY.Location = new System.Drawing.Point(58, 84); + tbMappingY.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingY.Name = "tbMappingY"; + tbMappingY.Size = new System.Drawing.Size(167, 23); + tbMappingY.TabIndex = 19; + tbMappingY.TabStop = false; // // panel4 // - this.panel4.Controls.Add(this.tbMappingL1); - this.panel4.Controls.Add(this.label25); - this.panel4.Controls.Add(this.label26); - this.panel4.Controls.Add(this.label27); - this.panel4.Controls.Add(this.tbMappingL2); - this.panel4.Controls.Add(this.label28); - this.panel4.Controls.Add(this.tbMappingR1); - this.panel4.Controls.Add(this.tbMappingR2); - this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel4.Location = new System.Drawing.Point(199, 0); - this.panel4.Margin = new System.Windows.Forms.Padding(0); - this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(134, 108); - this.panel4.TabIndex = 29; + panel4.Controls.Add(tbMappingL1); + panel4.Controls.Add(label25); + panel4.Controls.Add(label26); + panel4.Controls.Add(label27); + panel4.Controls.Add(tbMappingL2); + panel4.Controls.Add(label28); + panel4.Controls.Add(tbMappingR1); + panel4.Controls.Add(tbMappingR2); + panel4.Dock = System.Windows.Forms.DockStyle.Fill; + panel4.Location = new System.Drawing.Point(225, 0); + panel4.Margin = new System.Windows.Forms.Padding(0); + panel4.Name = "panel4"; + panel4.Size = new System.Drawing.Size(150, 108); + panel4.TabIndex = 29; // // tbMappingL1 // - this.tbMappingL1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingL1.Enabled = false; - this.tbMappingL1.Location = new System.Drawing.Point(31, 6); - this.tbMappingL1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingL1.Name = "tbMappingL1"; - this.tbMappingL1.Size = new System.Drawing.Size(100, 23); - this.tbMappingL1.TabIndex = 27; - this.tbMappingL1.TabStop = false; + tbMappingL1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingL1.Enabled = false; + tbMappingL1.Location = new System.Drawing.Point(31, 6); + tbMappingL1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingL1.Name = "tbMappingL1"; + tbMappingL1.Size = new System.Drawing.Size(117, 23); + tbMappingL1.TabIndex = 27; + tbMappingL1.TabStop = false; // // label25 // - this.label25.AutoSize = true; - this.label25.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label25.Location = new System.Drawing.Point(6, 87); - this.label25.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(22, 15); - this.label25.TabIndex = 33; - this.label25.Text = "R2"; + label25.AutoSize = true; + label25.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label25.Location = new System.Drawing.Point(6, 87); + label25.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label25.Name = "label25"; + label25.Size = new System.Drawing.Size(22, 15); + label25.TabIndex = 33; + label25.Text = "R2"; // // label26 // - this.label26.AutoSize = true; - this.label26.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label26.Location = new System.Drawing.Point(6, 9); - this.label26.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(20, 15); - this.label26.TabIndex = 26; - this.label26.Text = "L1"; + label26.AutoSize = true; + label26.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label26.Location = new System.Drawing.Point(6, 9); + label26.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label26.Name = "label26"; + label26.Size = new System.Drawing.Size(20, 15); + label26.TabIndex = 26; + label26.Text = "L1"; // // label27 // - this.label27.AutoSize = true; - this.label27.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label27.Location = new System.Drawing.Point(6, 61); - this.label27.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label27.Name = "label27"; - this.label27.Size = new System.Drawing.Size(22, 15); - this.label27.TabIndex = 32; - this.label27.Text = "R1"; + label27.AutoSize = true; + label27.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label27.Location = new System.Drawing.Point(6, 61); + label27.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label27.Name = "label27"; + label27.Size = new System.Drawing.Size(22, 15); + label27.TabIndex = 32; + label27.Text = "R1"; // // tbMappingL2 // - this.tbMappingL2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingL2.Enabled = false; - this.tbMappingL2.Location = new System.Drawing.Point(31, 32); - this.tbMappingL2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingL2.Name = "tbMappingL2"; - this.tbMappingL2.Size = new System.Drawing.Size(100, 23); - this.tbMappingL2.TabIndex = 28; - this.tbMappingL2.TabStop = false; + tbMappingL2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingL2.Enabled = false; + tbMappingL2.Location = new System.Drawing.Point(31, 32); + tbMappingL2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingL2.Name = "tbMappingL2"; + tbMappingL2.Size = new System.Drawing.Size(117, 23); + tbMappingL2.TabIndex = 28; + tbMappingL2.TabStop = false; // // label28 // - this.label28.AutoSize = true; - this.label28.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label28.Location = new System.Drawing.Point(6, 35); - this.label28.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(20, 15); - this.label28.TabIndex = 31; - this.label28.Text = "L2"; + label28.AutoSize = true; + label28.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label28.Location = new System.Drawing.Point(6, 35); + label28.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label28.Name = "label28"; + label28.Size = new System.Drawing.Size(20, 15); + label28.TabIndex = 31; + label28.Text = "L2"; // // tbMappingR1 // - this.tbMappingR1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingR1.Enabled = false; - this.tbMappingR1.Location = new System.Drawing.Point(31, 58); - this.tbMappingR1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingR1.Name = "tbMappingR1"; - this.tbMappingR1.Size = new System.Drawing.Size(100, 23); - this.tbMappingR1.TabIndex = 29; - this.tbMappingR1.TabStop = false; + tbMappingR1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingR1.Enabled = false; + tbMappingR1.Location = new System.Drawing.Point(31, 58); + tbMappingR1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingR1.Name = "tbMappingR1"; + tbMappingR1.Size = new System.Drawing.Size(117, 23); + tbMappingR1.TabIndex = 29; + tbMappingR1.TabStop = false; // // tbMappingR2 // - this.tbMappingR2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingR2.Enabled = false; - this.tbMappingR2.Location = new System.Drawing.Point(31, 84); - this.tbMappingR2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingR2.Name = "tbMappingR2"; - this.tbMappingR2.Size = new System.Drawing.Size(100, 23); - this.tbMappingR2.TabIndex = 30; - this.tbMappingR2.TabStop = false; + tbMappingR2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingR2.Enabled = false; + tbMappingR2.Location = new System.Drawing.Point(31, 84); + tbMappingR2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingR2.Name = "tbMappingR2"; + tbMappingR2.Size = new System.Drawing.Size(117, 23); + tbMappingR2.TabIndex = 30; + tbMappingR2.TabStop = false; // // panel1 // - this.tableLayoutPanel3.SetColumnSpan(this.panel1, 2); - this.panel1.Controls.Add(this.tbMappingDPAD); - this.panel1.Controls.Add(this.tbMappingSELECT); - this.panel1.Controls.Add(this.label21); - this.panel1.Controls.Add(this.label19); - this.panel1.Controls.Add(this.label24); - this.panel1.Controls.Add(this.tbMappingSTART); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 108); - this.panel1.Margin = new System.Windows.Forms.Padding(0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(333, 82); - this.panel1.TabIndex = 30; + tableLayoutPanel3.SetColumnSpan(panel1, 2); + panel1.Controls.Add(tbMappingDPAD); + panel1.Controls.Add(tbMappingSELECT); + panel1.Controls.Add(label21); + panel1.Controls.Add(label19); + panel1.Controls.Add(label24); + panel1.Controls.Add(tbMappingSTART); + panel1.Dock = System.Windows.Forms.DockStyle.Fill; + panel1.Location = new System.Drawing.Point(0, 108); + panel1.Margin = new System.Windows.Forms.Padding(0); + panel1.Name = "panel1"; + panel1.Size = new System.Drawing.Size(375, 93); + panel1.TabIndex = 30; // // tbMappingDPAD // - this.tbMappingDPAD.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingDPAD.Enabled = false; - this.tbMappingDPAD.Location = new System.Drawing.Point(58, 2); - this.tbMappingDPAD.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingDPAD.Name = "tbMappingDPAD"; - this.tbMappingDPAD.Size = new System.Drawing.Size(272, 23); - this.tbMappingDPAD.TabIndex = 20; - this.tbMappingDPAD.TabStop = false; + tbMappingDPAD.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingDPAD.Enabled = false; + tbMappingDPAD.Location = new System.Drawing.Point(58, 2); + tbMappingDPAD.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingDPAD.Name = "tbMappingDPAD"; + tbMappingDPAD.Size = new System.Drawing.Size(315, 23); + tbMappingDPAD.TabIndex = 20; + tbMappingDPAD.TabStop = false; // // tbMappingSELECT // - this.tbMappingSELECT.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingSELECT.Enabled = false; - this.tbMappingSELECT.Location = new System.Drawing.Point(58, 28); - this.tbMappingSELECT.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingSELECT.Name = "tbMappingSELECT"; - this.tbMappingSELECT.Size = new System.Drawing.Size(272, 23); - this.tbMappingSELECT.TabIndex = 21; - this.tbMappingSELECT.TabStop = false; + tbMappingSELECT.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingSELECT.Enabled = false; + tbMappingSELECT.Location = new System.Drawing.Point(58, 28); + tbMappingSELECT.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingSELECT.Name = "tbMappingSELECT"; + tbMappingSELECT.Size = new System.Drawing.Size(315, 23); + tbMappingSELECT.TabIndex = 21; + tbMappingSELECT.TabStop = false; // // label21 // - this.label21.AutoSize = true; - this.label21.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label21.Location = new System.Drawing.Point(8, 57); - this.label21.Margin = new System.Windows.Forms.Padding(0); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(43, 15); - this.label21.TabIndex = 23; - this.label21.Text = "START"; + label21.AutoSize = true; + label21.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label21.Location = new System.Drawing.Point(8, 57); + label21.Margin = new System.Windows.Forms.Padding(0); + label21.Name = "label21"; + label21.Size = new System.Drawing.Size(43, 15); + label21.TabIndex = 23; + label21.Text = "START"; // // label19 // - this.label19.AutoSize = true; - this.label19.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label19.Location = new System.Drawing.Point(12, 5); - this.label19.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(39, 15); - this.label19.TabIndex = 24; - this.label19.Text = "DPAD"; + label19.AutoSize = true; + label19.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label19.Location = new System.Drawing.Point(12, 5); + label19.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label19.Name = "label19"; + label19.Size = new System.Drawing.Size(39, 15); + label19.TabIndex = 24; + label19.Text = "DPAD"; // // label24 // - this.label24.AutoSize = true; - this.label24.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label24.Location = new System.Drawing.Point(5, 31); - this.label24.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(46, 15); - this.label24.TabIndex = 18; - this.label24.Text = "SELECT"; + label24.AutoSize = true; + label24.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + label24.Location = new System.Drawing.Point(5, 31); + label24.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label24.Name = "label24"; + label24.Size = new System.Drawing.Size(46, 15); + label24.TabIndex = 18; + label24.Text = "SELECT"; // // tbMappingSTART // - this.tbMappingSTART.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbMappingSTART.Enabled = false; - this.tbMappingSTART.Location = new System.Drawing.Point(58, 54); - this.tbMappingSTART.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbMappingSTART.Name = "tbMappingSTART"; - this.tbMappingSTART.Size = new System.Drawing.Size(272, 23); - this.tbMappingSTART.TabIndex = 22; - this.tbMappingSTART.TabStop = false; - // - // panel5 - // - this.panel5.Controls.Add(this.tbCartName); - this.panel5.Controls.Add(this.lblCartName); - this.panel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel5.Location = new System.Drawing.Point(690, 577); - this.panel5.Margin = new System.Windows.Forms.Padding(0); - this.panel5.Name = "panel5"; - this.panel5.Size = new System.Drawing.Size(346, 30); - this.panel5.TabIndex = 9; - // - // tbCartName - // - this.tbCartName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbCartName.Enabled = false; - this.tbCartName.Location = new System.Drawing.Point(108, 1); - this.tbCartName.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tbCartName.Name = "tbCartName"; - this.tbCartName.Size = new System.Drawing.Size(231, 23); - this.tbCartName.TabIndex = 1; - this.tbCartName.TabStop = false; - this.tbCartName.Text = "My Games"; - // - // lblCartName - // - this.lblCartName.AutoSize = true; - this.lblCartName.Enabled = false; - this.lblCartName.Location = new System.Drawing.Point(9, 4); - this.lblCartName.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblCartName.Name = "lblCartName"; - this.lblCartName.Size = new System.Drawing.Size(94, 15); - this.lblCartName.TabIndex = 0; - this.lblCartName.Text = "Cartridge Name:"; + tbMappingSTART.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbMappingSTART.Enabled = false; + tbMappingSTART.Location = new System.Drawing.Point(58, 54); + tbMappingSTART.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + tbMappingSTART.Name = "tbMappingSTART"; + tbMappingSTART.Size = new System.Drawing.Size(315, 23); + tbMappingSTART.TabIndex = 22; + tbMappingSTART.TabStop = false; // // tableLayoutPanel2 // - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.groupBox5, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.gbScrapeByName, 0, 1); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(690, 322); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 2; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 73F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(346, 214); - this.tableLayoutPanel2.TabIndex = 10; + tableLayoutPanel2.ColumnCount = 1; + tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tableLayoutPanel2.Controls.Add(groupBox5, 0, 0); + tableLayoutPanel2.Controls.Add(gbScrapeByName, 0, 1); + tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel2.Location = new System.Drawing.Point(902, 542); + tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + tableLayoutPanel2.Name = "tableLayoutPanel2"; + tableLayoutPanel2.RowCount = 2; + tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 73F)); + tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + tableLayoutPanel2.Size = new System.Drawing.Size(389, 225); + tableLayoutPanel2.TabIndex = 10; // // groupBox5 // - this.groupBox5.Controls.Add(this.cbRetroArchCore); - this.groupBox5.Controls.Add(this.rbInternalCore); - this.groupBox5.Controls.Add(this.lblMissingBiosFiles); - this.groupBox5.Controls.Add(this.rbRetroArchCore); - this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox5.Location = new System.Drawing.Point(2, 3); - this.groupBox5.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.groupBox5.Name = "groupBox5"; - this.groupBox5.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.groupBox5.Size = new System.Drawing.Size(342, 67); - this.groupBox5.TabIndex = 0; - this.groupBox5.TabStop = false; - this.groupBox5.Text = "Emulator Settings"; + groupBox5.Controls.Add(cbRetroArchCore); + groupBox5.Controls.Add(rbInternalCore); + groupBox5.Controls.Add(lblMissingBiosFiles); + groupBox5.Controls.Add(rbRetroArchCore); + groupBox5.Dock = System.Windows.Forms.DockStyle.Fill; + groupBox5.Location = new System.Drawing.Point(2, 3); + groupBox5.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + groupBox5.Name = "groupBox5"; + groupBox5.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); + groupBox5.Size = new System.Drawing.Size(385, 67); + groupBox5.TabIndex = 0; + groupBox5.TabStop = false; + groupBox5.Text = "Emulator Settings"; // // cbRetroArchCore // - this.cbRetroArchCore.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbRetroArchCore.DisplayMember = "Text"; - this.cbRetroArchCore.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbRetroArchCore.Enabled = false; - this.cbRetroArchCore.FormattingEnabled = true; - this.cbRetroArchCore.Location = new System.Drawing.Point(165, 39); - this.cbRetroArchCore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.cbRetroArchCore.Name = "cbRetroArchCore"; - this.cbRetroArchCore.Size = new System.Drawing.Size(172, 23); - this.cbRetroArchCore.TabIndex = 30; - this.cbRetroArchCore.TabStop = false; - this.cbRetroArchCore.ValueMember = "Value"; - this.cbRetroArchCore.SelectionChangeCommitted += new System.EventHandler(this.ComboBox_SelectionChangeCommitted); + cbRetroArchCore.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + cbRetroArchCore.DisplayMember = "Text"; + cbRetroArchCore.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbRetroArchCore.Enabled = false; + cbRetroArchCore.FormattingEnabled = true; + cbRetroArchCore.Location = new System.Drawing.Point(165, 39); + cbRetroArchCore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + cbRetroArchCore.Name = "cbRetroArchCore"; + cbRetroArchCore.Size = new System.Drawing.Size(214, 23); + cbRetroArchCore.TabIndex = 30; + cbRetroArchCore.TabStop = false; + cbRetroArchCore.ValueMember = "Value"; // // rbInternalCore // - this.rbInternalCore.AutoSize = true; - this.rbInternalCore.Checked = true; - this.rbInternalCore.Enabled = false; - this.rbInternalCore.Location = new System.Drawing.Point(6, 17); - this.rbInternalCore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.rbInternalCore.Name = "rbInternalCore"; - this.rbInternalCore.Size = new System.Drawing.Size(65, 19); - this.rbInternalCore.TabIndex = 26; - this.rbInternalCore.Text = "Internal"; - this.rbInternalCore.UseVisualStyleBackColor = true; + rbInternalCore.AutoSize = true; + rbInternalCore.Checked = true; + rbInternalCore.Enabled = false; + rbInternalCore.Location = new System.Drawing.Point(6, 17); + rbInternalCore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + rbInternalCore.Name = "rbInternalCore"; + rbInternalCore.Size = new System.Drawing.Size(65, 19); + rbInternalCore.TabIndex = 26; + rbInternalCore.Text = "Internal"; + rbInternalCore.UseVisualStyleBackColor = true; // // lblMissingBiosFiles // - this.lblMissingBiosFiles.AutoSize = true; - this.lblMissingBiosFiles.LinkColor = System.Drawing.Color.Red; - this.lblMissingBiosFiles.Location = new System.Drawing.Point(163, 19); - this.lblMissingBiosFiles.Name = "lblMissingBiosFiles"; - this.lblMissingBiosFiles.Size = new System.Drawing.Size(141, 15); - this.lblMissingBiosFiles.TabIndex = 31; - this.lblMissingBiosFiles.TabStop = true; - this.lblMissingBiosFiles.Text = "Upload missing BIOS files"; - this.toolTip1.SetToolTip(this.lblMissingBiosFiles, "Bla"); - this.lblMissingBiosFiles.Visible = false; - this.lblMissingBiosFiles.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblMissingBiosFiles_LinkClicked); + lblMissingBiosFiles.AutoSize = true; + lblMissingBiosFiles.LinkColor = System.Drawing.Color.Red; + lblMissingBiosFiles.Location = new System.Drawing.Point(163, 19); + lblMissingBiosFiles.Name = "lblMissingBiosFiles"; + lblMissingBiosFiles.Size = new System.Drawing.Size(141, 15); + lblMissingBiosFiles.TabIndex = 31; + lblMissingBiosFiles.TabStop = true; + lblMissingBiosFiles.Text = "Upload missing BIOS files"; + toolTip1.SetToolTip(lblMissingBiosFiles, "Bla"); + lblMissingBiosFiles.Visible = false; + lblMissingBiosFiles.LinkClicked += lblMissingBiosFiles_LinkClicked; // // rbRetroArchCore // - this.rbRetroArchCore.AutoSize = true; - this.rbRetroArchCore.Enabled = false; - this.rbRetroArchCore.Location = new System.Drawing.Point(6, 40); - this.rbRetroArchCore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.rbRetroArchCore.Name = "rbRetroArchCore"; - this.rbRetroArchCore.Size = new System.Drawing.Size(151, 19); - this.rbRetroArchCore.TabIndex = 29; - this.rbRetroArchCore.Text = "External RetroArch Core"; - this.rbRetroArchCore.UseVisualStyleBackColor = true; - this.rbRetroArchCore.CheckedChanged += new System.EventHandler(this.rbRetroArchCore_CheckedChanged); + rbRetroArchCore.AutoSize = true; + rbRetroArchCore.Enabled = false; + rbRetroArchCore.Location = new System.Drawing.Point(6, 40); + rbRetroArchCore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + rbRetroArchCore.Name = "rbRetroArchCore"; + rbRetroArchCore.Size = new System.Drawing.Size(151, 19); + rbRetroArchCore.TabIndex = 29; + rbRetroArchCore.Text = "External RetroArch Core"; + rbRetroArchCore.UseVisualStyleBackColor = true; + rbRetroArchCore.CheckedChanged += rbRetroArchCore_CheckedChanged; // // gbScrapeByName // - this.gbScrapeByName.Controls.Add(this.lbScrapeResults); - this.gbScrapeByName.Controls.Add(this.btnScrape); - this.gbScrapeByName.Controls.Add(this.tbScrapeName); - this.gbScrapeByName.Dock = System.Windows.Forms.DockStyle.Fill; - this.gbScrapeByName.Location = new System.Drawing.Point(2, 76); - this.gbScrapeByName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.gbScrapeByName.Name = "gbScrapeByName"; - this.gbScrapeByName.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.gbScrapeByName.Size = new System.Drawing.Size(342, 135); - this.gbScrapeByName.TabIndex = 1; - this.gbScrapeByName.TabStop = false; - this.gbScrapeByName.Text = "Scrape by game title"; + gbScrapeByName.Controls.Add(lbScrapeResults); + gbScrapeByName.Controls.Add(btnScrape); + gbScrapeByName.Controls.Add(tbScrapeName); + gbScrapeByName.Dock = System.Windows.Forms.DockStyle.Fill; + gbScrapeByName.Location = new System.Drawing.Point(2, 76); + gbScrapeByName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + gbScrapeByName.Name = "gbScrapeByName"; + gbScrapeByName.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); + gbScrapeByName.Size = new System.Drawing.Size(385, 146); + gbScrapeByName.TabIndex = 1; + gbScrapeByName.TabStop = false; + gbScrapeByName.Text = "Scrape by game title"; // // lbScrapeResults // - this.lbScrapeResults.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lbScrapeResults.Enabled = false; - this.lbScrapeResults.FormattingEnabled = true; - this.lbScrapeResults.ItemHeight = 15; - this.lbScrapeResults.Location = new System.Drawing.Point(4, 50); - this.lbScrapeResults.Name = "lbScrapeResults"; - this.lbScrapeResults.Size = new System.Drawing.Size(333, 79); - this.lbScrapeResults.TabIndex = 2; - this.lbScrapeResults.TabStop = false; - this.lbScrapeResults.SelectedIndexChanged += new System.EventHandler(this.lbScrapeResults_SelectedIndexChanged); + lbScrapeResults.Dock = System.Windows.Forms.DockStyle.Bottom; + lbScrapeResults.Enabled = false; + lbScrapeResults.FormattingEnabled = true; + lbScrapeResults.ItemHeight = 15; + lbScrapeResults.Location = new System.Drawing.Point(2, 49); + lbScrapeResults.Name = "lbScrapeResults"; + lbScrapeResults.Size = new System.Drawing.Size(381, 94); + lbScrapeResults.TabIndex = 2; + lbScrapeResults.TabStop = false; + lbScrapeResults.SelectedIndexChanged += lbScrapeResults_SelectedIndexChanged; // // btnScrape // - this.btnScrape.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnScrape.Enabled = false; - this.btnScrape.Location = new System.Drawing.Point(262, 20); - this.btnScrape.Name = "btnScrape"; - this.btnScrape.Size = new System.Drawing.Size(75, 23); - this.btnScrape.TabIndex = 1; - this.btnScrape.TabStop = false; - this.btnScrape.Text = "Search"; - this.btnScrape.UseVisualStyleBackColor = true; - this.btnScrape.Click += new System.EventHandler(this.btnScrape_Click); + btnScrape.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + btnScrape.Enabled = false; + btnScrape.Location = new System.Drawing.Point(304, 20); + btnScrape.Name = "btnScrape"; + btnScrape.Size = new System.Drawing.Size(75, 23); + btnScrape.TabIndex = 1; + btnScrape.TabStop = false; + btnScrape.Text = "Search"; + btnScrape.UseVisualStyleBackColor = true; + btnScrape.Click += btnScrape_Click; // // tbScrapeName // - this.tbScrapeName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tbScrapeName.Enabled = false; - this.tbScrapeName.Location = new System.Drawing.Point(4, 20); - this.tbScrapeName.Name = "tbScrapeName"; - this.tbScrapeName.Size = new System.Drawing.Size(252, 23); - this.tbScrapeName.TabIndex = 0; - this.tbScrapeName.TabStop = false; - this.tbScrapeName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tbScrapeName_KeyPress); - // - // pbEverSD - // - this.pbEverSD.Dock = System.Windows.Forms.DockStyle.Fill; - this.pbEverSD.Image = global::EverLoader.Properties.Resources.Logo___EverSD; - this.pbEverSD.Location = new System.Drawing.Point(345, 577); - this.pbEverSD.Margin = new System.Windows.Forms.Padding(0, 0, 0, 8); - this.pbEverSD.Name = "pbEverSD"; - this.pbEverSD.Size = new System.Drawing.Size(345, 22); - this.pbEverSD.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pbEverSD.TabIndex = 11; - this.pbEverSD.TabStop = false; - // - // panel6 - // - this.panel6.Controls.Add(this.lblNumberOfGamesSelected); - this.panel6.Controls.Add(this.pbConnected); - this.panel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel6.Location = new System.Drawing.Point(0, 577); - this.panel6.Margin = new System.Windows.Forms.Padding(0); - this.panel6.Name = "panel6"; - this.panel6.Size = new System.Drawing.Size(345, 30); - this.panel6.TabIndex = 12; - // - // lblNumberOfGamesSelected - // - this.lblNumberOfGamesSelected.AutoSize = true; - this.lblNumberOfGamesSelected.Dock = System.Windows.Forms.DockStyle.Right; - this.lblNumberOfGamesSelected.Location = new System.Drawing.Point(337, 0); - this.lblNumberOfGamesSelected.Name = "lblNumberOfGamesSelected"; - this.lblNumberOfGamesSelected.Padding = new System.Windows.Forms.Padding(0, 5, 8, 0); - this.lblNumberOfGamesSelected.Size = new System.Drawing.Size(8, 20); - this.lblNumberOfGamesSelected.TabIndex = 5; - // - // tableLayoutPanel7 - // - this.tableLayoutPanel7.ColumnCount = 3; - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F)); - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 56F)); - this.tableLayoutPanel7.Controls.Add(this.btnNewSDFolder, 2, 0); - this.tableLayoutPanel7.Controls.Add(this.btnAddGames, 0, 0); - this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel7.Location = new System.Drawing.Point(0, 536); - this.tableLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel7.Name = "tableLayoutPanel7"; - this.tableLayoutPanel7.RowCount = 1; - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel7.Size = new System.Drawing.Size(345, 41); - this.tableLayoutPanel7.TabIndex = 13; - // - // btnNewSDFolder - // - this.btnNewSDFolder.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnNewSDFolder.Enabled = false; - this.btnNewSDFolder.Location = new System.Drawing.Point(158, 7); - this.btnNewSDFolder.Margin = new System.Windows.Forms.Padding(7); - this.btnNewSDFolder.Name = "btnNewSDFolder"; - this.btnNewSDFolder.Size = new System.Drawing.Size(180, 27); - this.btnNewSDFolder.TabIndex = 2; - this.btnNewSDFolder.TabStop = false; - this.btnNewSDFolder.Text = "Create New Folder on MicroSD"; - this.btnNewSDFolder.UseVisualStyleBackColor = true; - this.btnNewSDFolder.Click += new System.EventHandler(this.btnNewSDFolder_Click); + tbScrapeName.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tbScrapeName.Enabled = false; + tbScrapeName.Location = new System.Drawing.Point(4, 20); + tbScrapeName.Name = "tbScrapeName"; + tbScrapeName.Size = new System.Drawing.Size(294, 23); + tbScrapeName.TabIndex = 0; + tbScrapeName.TabStop = false; + tbScrapeName.KeyPress += tbScrapeName_KeyPress; // // openGameImage // - this.openGameImage.Filter = "Images (*.bmp;*.png;*.jpg;*.jpeg;*.gif)|*.bmp;*.png;*.jpg;*.jpeg;*.gif"; - this.openGameImage.Title = "Select Image"; + openGameImage.Filter = "Images (*.bmp;*.png;*.jpg;*.jpeg;*.gif)|*.bmp;*.png;*.jpg;*.jpeg;*.gif"; + openGameImage.Title = "Select Image"; // // contextMenuStrip1 // - this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(32, 32); - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.scrapeToolStripMenuItem, - this.toolStripSeparator1, - this.deleteSelectedGamesToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(229, 54); - this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); + contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(32, 32); + contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { scrapeToolStripMenuItem, toolStripSeparator1, deleteSelectedGamesToolStripMenuItem }); + contextMenuStrip1.Name = "contextMenuStrip1"; + contextMenuStrip1.Size = new System.Drawing.Size(229, 54); + contextMenuStrip1.Opening += contextMenuStrip1_Opening; // // scrapeToolStripMenuItem // - this.scrapeToolStripMenuItem.Name = "scrapeToolStripMenuItem"; - this.scrapeToolStripMenuItem.Size = new System.Drawing.Size(228, 22); - this.scrapeToolStripMenuItem.Text = "Auto-scrape selected ROM(s)"; - this.scrapeToolStripMenuItem.Click += new System.EventHandler(this.scrapeToolStripMenuItem_Click); + scrapeToolStripMenuItem.Name = "scrapeToolStripMenuItem"; + scrapeToolStripMenuItem.Size = new System.Drawing.Size(228, 22); + scrapeToolStripMenuItem.Text = "Auto-scrape selected ROM(s)"; + scrapeToolStripMenuItem.Click += scrapeToolStripMenuItem_Click; // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(225, 6); + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new System.Drawing.Size(225, 6); // // deleteSelectedGamesToolStripMenuItem // - this.deleteSelectedGamesToolStripMenuItem.Name = "deleteSelectedGamesToolStripMenuItem"; - this.deleteSelectedGamesToolStripMenuItem.Size = new System.Drawing.Size(228, 22); - this.deleteSelectedGamesToolStripMenuItem.Text = "Delete selected ROM(s)"; - this.deleteSelectedGamesToolStripMenuItem.Click += new System.EventHandler(this.deleteSelectedGamesToolStripMenuItem_Click); + deleteSelectedGamesToolStripMenuItem.Name = "deleteSelectedGamesToolStripMenuItem"; + deleteSelectedGamesToolStripMenuItem.Size = new System.Drawing.Size(228, 22); + deleteSelectedGamesToolStripMenuItem.Text = "Delete selected ROM(s)"; + deleteSelectedGamesToolStripMenuItem.Click += deleteSelectedGamesToolStripMenuItem_Click; // // toolTip1 // - this.toolTip1.IsBalloon = true; + toolTip1.IsBalloon = true; + // + // tableLayoutPanel8 + // + tableLayoutPanel8.ColumnCount = 3; + tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); + tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 4F)); + tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 56F)); + tableLayoutPanel8.Controls.Add(button1, 2, 0); + tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; + tableLayoutPanel8.Location = new System.Drawing.Point(0, 0); + tableLayoutPanel8.Margin = new System.Windows.Forms.Padding(0); + tableLayoutPanel8.Name = "tableLayoutPanel8"; + tableLayoutPanel8.RowCount = 1; + tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + tableLayoutPanel8.Size = new System.Drawing.Size(200, 100); + tableLayoutPanel8.TabIndex = 0; + // + // button1 + // + button1.Dock = System.Windows.Forms.DockStyle.Fill; + button1.Enabled = false; + button1.Location = new System.Drawing.Point(98, 12); + button1.Margin = new System.Windows.Forms.Padding(10, 12, 10, 12); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(92, 76); + button1.TabIndex = 2; + button1.TabStop = false; + button1.Text = "Create New Folder on MicroSD"; + button1.UseVisualStyleBackColor = true; + // + // button2 + // + button2.Dock = System.Windows.Forms.DockStyle.Fill; + button2.Location = new System.Drawing.Point(10, 12); + button2.Margin = new System.Windows.Forms.Padding(10, 12, 10, 12); + button2.Name = "button2"; + button2.Size = new System.Drawing.Size(60, 76); + button2.TabIndex = 1; + button2.TabStop = false; + button2.Text = "Add New ROM(s)"; + button2.UseVisualStyleBackColor = true; + // + // contextMenuCartridge + // + contextMenuCartridge.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { importROMToCollectionToolStripMenuItem, toolStripSeparator2, deleteROMToolStripMenuItem, deleteFolderToolStripMenuItem }); + contextMenuCartridge.Name = "contextMenuCartridge"; + contextMenuCartridge.Size = new System.Drawing.Size(212, 76); + contextMenuCartridge.Opening += contextMenuCartridge_Opening; + // + // importROMToCollectionToolStripMenuItem + // + importROMToCollectionToolStripMenuItem.Name = "importROMToCollectionToolStripMenuItem"; + importROMToCollectionToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + importROMToCollectionToolStripMenuItem.Text = "Import ROM to Collection"; + // + // toolStripSeparator2 + // + toolStripSeparator2.Name = "toolStripSeparator2"; + toolStripSeparator2.Size = new System.Drawing.Size(208, 6); + // + // deleteROMToolStripMenuItem + // + deleteROMToolStripMenuItem.Name = "deleteROMToolStripMenuItem"; + deleteROMToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + deleteROMToolStripMenuItem.Text = "Delete ROM"; + // + // deleteFolderToolStripMenuItem + // + deleteFolderToolStripMenuItem.Name = "deleteFolderToolStripMenuItem"; + deleteFolderToolStripMenuItem.Size = new System.Drawing.Size(211, 22); + deleteFolderToolStripMenuItem.Text = "Delete Folder"; + // + // contextMenuStripMSD + // + contextMenuStripMSD.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { test1ToolStripMenuItem }); + contextMenuStripMSD.Name = "contextMenuStripMSD"; + contextMenuStripMSD.Size = new System.Drawing.Size(100, 26); + contextMenuStripMSD.Opening += contextMenuStripMSD_Opening; + // + // test1ToolStripMenuItem + // + test1ToolStripMenuItem.Name = "test1ToolStripMenuItem"; + test1ToolStripMenuItem.Size = new System.Drawing.Size(99, 22); + test1ToolStripMenuItem.Text = "test1"; // // MainForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Control; - this.ClientSize = new System.Drawing.Size(1036, 631); - this.Controls.Add(this.tableLayoutPanel1); - this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); - this.Name = "MainForm"; - this.Text = "EverLoader"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.Load += new System.EventHandler(this.MainForm_Load); - this.Shown += new System.EventHandler(this.MainForm_Shown); - this.Resize += new System.EventHandler(this.MainForm_Resize); - this.groupBox1.ResumeLayout(false); - this.tableLayoutPanel4.ResumeLayout(false); - this.panel15.ResumeLayout(false); - this.panel15.PerformLayout(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - this.panel8.ResumeLayout(false); - this.panel8.PerformLayout(); - this.panel9.ResumeLayout(false); - this.panel9.PerformLayout(); - this.panel10.ResumeLayout(false); - this.panel10.PerformLayout(); - this.panel11.ResumeLayout(false); - this.panel11.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.tableLayoutPanel5.ResumeLayout(false); - this.tableLayoutPanel6.ResumeLayout(false); - this.panel7.ResumeLayout(false); - this.panel7.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBoxArtLarge)).EndInit(); - this.panel12.ResumeLayout(false); - this.panel12.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBoxArtMedium)).EndInit(); - this.panel13.ResumeLayout(false); - this.panel13.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBoxArtSmall)).EndInit(); - this.panel14.ResumeLayout(false); - this.panel14.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbBanner)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pbConnected)).EndInit(); - this.groupBox3.ResumeLayout(false); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.groupBox4.ResumeLayout(false); - this.tableLayoutPanel3.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.panel4.ResumeLayout(false); - this.panel4.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.panel5.ResumeLayout(false); - this.panel5.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.groupBox5.ResumeLayout(false); - this.groupBox5.PerformLayout(); - this.gbScrapeByName.ResumeLayout(false); - this.gbScrapeByName.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pbEverSD)).EndInit(); - this.panel6.ResumeLayout(false); - this.panel6.PerformLayout(); - this.tableLayoutPanel7.ResumeLayout(false); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + BackColor = System.Drawing.SystemColors.Control; + ClientSize = new System.Drawing.Size(1291, 791); + Controls.Add(tableLayoutPanel1); + Controls.Add(menuStrip1); + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = menuStrip1; + Margin = new System.Windows.Forms.Padding(2, 1, 2, 1); + Name = "MainForm"; + Text = "EverLoader"; + FormClosing += MainForm_FormClosing; + Load += MainForm_Load; + Shown += MainForm_Shown; + Resize += MainForm_Resize; + groupBox1.ResumeLayout(false); + tableLayoutPanel4.ResumeLayout(false); + panel15.ResumeLayout(false); + panel15.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); + panel8.ResumeLayout(false); + panel8.PerformLayout(); + panel9.ResumeLayout(false); + panel9.PerformLayout(); + panel10.ResumeLayout(false); + panel10.PerformLayout(); + panel11.ResumeLayout(false); + panel11.PerformLayout(); + groupBox2.ResumeLayout(false); + tableLayoutPanel5.ResumeLayout(false); + tableLayoutPanel6.ResumeLayout(false); + panel12.ResumeLayout(false); + panel12.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pbBoxArtMedium).EndInit(); + panel13.ResumeLayout(false); + panel13.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pbBoxArtSmall).EndInit(); + panel7.ResumeLayout(false); + panel7.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pbBoxArtLarge).EndInit(); + panel14.ResumeLayout(false); + panel14.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pbBanner).EndInit(); + gbCollection.ResumeLayout(false); + tblLayoutCollection.ResumeLayout(false); + tblLayoutCollection.PerformLayout(); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + tableLayoutPanel1.ResumeLayout(false); + gbCartridge.ResumeLayout(false); + tblLayoutCartridge.ResumeLayout(false); + tblLayoutCartridge.PerformLayout(); + tableLayoutPanel7.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureBox3).EndInit(); + ((System.ComponentModel.ISupportInitialize)pbConnected2).EndInit(); + groupBox4.ResumeLayout(false); + tableLayoutPanel3.ResumeLayout(false); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + panel4.ResumeLayout(false); + panel4.PerformLayout(); + panel1.ResumeLayout(false); + panel1.PerformLayout(); + tableLayoutPanel2.ResumeLayout(false); + groupBox5.ResumeLayout(false); + groupBox5.PerformLayout(); + gbScrapeByName.ResumeLayout(false); + gbScrapeByName.PerformLayout(); + contextMenuStrip1.ResumeLayout(false); + tableLayoutPanel8.ResumeLayout(false); + contextMenuCartridge.ResumeLayout(false); + contextMenuStripMSD.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); } #endregion - private System.Windows.Forms.Button btnAddGames; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.GroupBox gbCollection; private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; @@ -1776,7 +1911,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem optimizeImagesToolStripMenuItem; private System.Windows.Forms.Label lblTitle; private System.Windows.Forms.TextBox tbTitle; - private System.Windows.Forms.PictureBox pbConnected; private System.Windows.Forms.TextBox tbDescription; private System.Windows.Forms.Label lblDescription; private System.Windows.Forms.Label lblPlatform; @@ -1794,8 +1928,6 @@ private void InitializeComponent() private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label4; private System.Windows.Forms.PictureBox pbBoxArtMedium; - private System.Windows.Forms.Button btnSelectSD; - private System.Windows.Forms.Button btnSyncToSD; private System.Windows.Forms.GroupBox groupBox4; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; private System.Windows.Forms.Panel panel3; @@ -1839,9 +1971,6 @@ private void InitializeComponent() private System.Windows.Forms.PictureBox pbBanner; private System.Windows.Forms.OpenFileDialog openGameImage; private GroupedComboBox cbPlatform; - private System.Windows.Forms.Panel panel5; - private System.Windows.Forms.Label lblCartName; - private System.Windows.Forms.TextBox tbCartName; private System.Windows.Forms.Button btnClearBanner; private System.Windows.Forms.Button btnClearSmall; private System.Windows.Forms.Button btnClearMedium; @@ -1864,10 +1993,7 @@ private void InitializeComponent() private System.Windows.Forms.LinkLabel llBannerNext; private System.Windows.Forms.LinkLabel llBannerDown; private System.Windows.Forms.LinkLabel llBannerUp; - private System.Windows.Forms.PictureBox pbEverSD; private System.Windows.Forms.PageSetupDialog pageSetupDialog1; - private System.Windows.Forms.Label lblNumberOfGamesSelected; - private System.Windows.Forms.Panel panel6; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; private AspectRatioPanel panel7; @@ -1877,8 +2003,34 @@ private void InitializeComponent() private System.Windows.Forms.Panel panel2; private System.Windows.Forms.Panel panel15; private System.Windows.Forms.CheckBox cbMultiDisc; - private System.Windows.Forms.Button btnNewSDFolder; + private System.Windows.Forms.TableLayoutPanel tblLayoutCollection; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel8; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.GroupBox gbCartridge; + private System.Windows.Forms.TableLayoutPanel tblLayoutCartridge; + private System.Windows.Forms.Button btnSyncWithSDCard; + private System.Windows.Forms.TextBox tbCartName2; + private System.Windows.Forms.Label lblCartName; + private System.Windows.Forms.Button btnSelectedSD; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Label lblNumberOfGamesSelected; + private System.Windows.Forms.Button btnNewSDCardFolder; + private System.Windows.Forms.Label lblNumberGamesSDCard; + private System.Windows.Forms.TreeView tvCartridge; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel7; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.PictureBox pbConnected2; + private System.Windows.Forms.ContextMenuStrip contextMenuCartridge; + private System.Windows.Forms.ToolStripMenuItem importROMToCollectionToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem deleteROMToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteFolderToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStripMSD; + private System.Windows.Forms.ToolStripMenuItem test1ToolStripMenuItem; + private System.Windows.Forms.TextBox tbSearchCollection; + private System.Windows.Forms.TextBox tbSearchCartridge; + private System.Windows.Forms.ImageList imageList1; } } diff --git a/Forms/MainForm.cs b/Forms/MainForm.cs index 9472d74..18cbae9 100644 --- a/Forms/MainForm.cs +++ b/Forms/MainForm.cs @@ -8,17 +8,16 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Data; -using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; -using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Extensions.DependencyInjection; using System.Text.RegularExpressions; -using TheGamesDBApiWrapper.Data.ApiClasses; +using TreeView = System.Windows.Forms.TreeView; +using TextBox = System.Windows.Forms.TextBox; +using Button = System.Windows.Forms.Button; namespace EverLoader { @@ -73,6 +72,9 @@ public MainForm(GamesManager gamesManager, CheckUserSettings(); PopulatePlatformCombobox(); + + GetFolderList(); + BuildFolderTree(""); } private void CheckUserSettings() @@ -102,11 +104,12 @@ private void PopulatePlatformCombobox() var xPlatform = _appSettings.Platforms.FirstOrDefault(p => p.Name == x); var yPlatform = _appSettings.Platforms.FirstOrDefault(p => p.Name == y); if (xPlatform != null && yPlatform != null - && xPlatform.Group == yPlatform.Group - && xPlatform.GroupItemSortOrder * yPlatform.GroupItemSortOrder != 0) + && xPlatform.Group == yPlatform.Group + && xPlatform.GroupItemSortOrder * yPlatform.GroupItemSortOrder != 0) { return Comparer.Default.Compare(xPlatform.GroupItemSortOrder, yPlatform.GroupItemSortOrder); } + return Comparer.Default.Compare(x == "Other" ? "ZZZ" : x, y == "Other" ? "ZZZ" : y); }); cbPlatform.DataSource = items; @@ -115,7 +118,6 @@ private void PopulatePlatformCombobox() private void MainForm_Load(object sender, EventArgs e) { - } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) @@ -144,7 +146,7 @@ private void PopulateRomFilterCombobox() //add platforms used by current collection of games foreach (var platform in _gamesManager.GetExistingGamePlatforms()) { - dsRomFilter.Add(new + dsRomFilter.Add(new { Group = "Filter by Platform", Text = platform.GroupAndName, @@ -182,8 +184,8 @@ private async void MainForm_Shown(object sender, System.EventArgs e) if (_gamesManager.GamesDictionary.Count == 0) { toolTip1.Show("Welcome to EverLoader; the easiest way to sync your ROMs to the EverSD cart!\n\n" + - "It looks like your ROMs collection is still empty...\n\n" + - "Click the 'Add New ROM(s)' button below to import your ROMs.", lvGames); + "It looks like your ROMs collection is still empty...\n\n" + + "Click the 'Add New ROM(s)' button below to import your ROMs.", lvGames); } //run stuff in the background @@ -193,7 +195,10 @@ await Task.Run(async () => { await _romManager.Init(); } - catch (Exception) { /* ignore for now */ } + catch (Exception ex) + { + /* ignore for now */ + } }); } @@ -236,6 +241,7 @@ private void ClearDataBindings() { _game.GameInfoChanged -= Game_GameInfoChanged; } + //bind with empty game object to clear the form fields _game = null; //_platform = null; @@ -342,7 +348,7 @@ private void ComboBox_SelectionChangeCommitted(object sender, System.EventArgs e /// private void UpdateMissingBiosFilesLabel() { - var missingBiosFiles = _gamesManager.GetMissingBiosFiles(_game, includeOptionalBios:true); + var missingBiosFiles = _gamesManager.GetMissingBiosFiles(_game, includeOptionalBios: true); lblMissingBiosFiles.Visible = missingBiosFiles.Length > 0; var platform = _gamesManager.GetGamePlatform(_game); if (platform != null) @@ -363,7 +369,9 @@ private void UpdateMissingBiosFilesLabel() missingBiosList = string.Join("\n - ", missingBiosFiles.Select(b => b.FileName)); missingBiosText = "supports\nthese optional"; } - toolTip1.SetToolTip(lblMissingBiosFiles, $"The {platform.Name} emulator {missingBiosText} BIOS files:\n - {missingBiosList}"); + + toolTip1.SetToolTip(lblMissingBiosFiles, + $"The {platform.Name} emulator {missingBiosText} BIOS files:\n - {missingBiosList}"); } } @@ -392,33 +400,31 @@ private async void Game_GameInfoChanged(object sender, EventArgs e) //game name could have been changed lvGames.SelectedItems[0].Text = _gamesManager.GetRomListTitle(_game); } - } } private void btnSelectSD_Click(object sender, EventArgs e) { - fileToolStripMenuItem.ShowDropDown(); - selectSDDriveToolStripMenuItem.ShowDropDown(); + contextMenuStripMSD.Show(Cursor.Position); } private async Task SelectSDDrive(string driveName) { SDDrive = driveName; var validDrive = driveName != null; - pbConnected.Image = validDrive ? Properties.Resources.green : Properties.Resources.red; - btnSyncToSD.Enabled = validDrive; - btnNewSDFolder.Enabled = validDrive; + pbConnected2.Image = validDrive ? Properties.Resources.green : Properties.Resources.red; + btnSyncWithSDCard.Enabled = validDrive; + btnNewSDCardFolder.Enabled = validDrive; lblCartName.Enabled = validDrive; - tbCartName.Enabled = validDrive; + tbCartName2.Enabled = validDrive; if (validDrive) { - btnSelectSD.Text = $"MicroSD = {driveName}"; + btnSelectedSD.Text = $"MicroSD = {driveName}"; } else { - btnSelectSD.Text = "Select MicroSD"; + btnSelectedSD.Text = "Select MicroSD"; } if (!validDrive) return; @@ -430,22 +436,82 @@ private async Task SelectSDDrive(string driveName) if (await Task.Run(() => File.Exists(cartJsonPath))) { var cart = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(cartJsonPath)); - tbCartName.Text = cart.cartridgeName; + tbCartName2.Text = cart.cartridgeName; } /* pre-select games which are found on the SD card */ var cartGamesDir = new DirectoryInfo($"{driveName}game"); - HashSet cartGameIds = new HashSet((cartGamesDir.Exists ? cartGamesDir.GetFiles("*.json") : new FileInfo[0]) - .Select(j => Path.GetFileNameWithoutExtension(j.Name)) - .Where(g => _gamesManager.GamesDictionary.ContainsKey(g))); + var cartGameIds = cartGamesDir.GetFiles("*.json").Select(j => Path.GetFileNameWithoutExtension(j.Name)).ToArray(); + if (cartGameIds.Length > 0) + { + InitFolderList(SDDrive); + } + + GetFolderList(); + + foreach (var gameId in cartGameIds) + { + if (_gamesManager.Games.Select(j => j.Id).Contains(gameId)) + { + var romPath = $"{driveName}game\\{gameId}.json"; + var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(romPath)); + var romTitle = gameJson.romTitle; + + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = romTitle, Path = romPath }); + } + else + { + if (!gameId.Equals("retroarch")) + { + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = gameId, Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); + } + } + } + + if (Directory.Exists($"{driveName}folders")) + { + cartGamesDir = new DirectoryInfo($"{driveName}folders"); + + var gameFolders = cartGamesDir.GetDirectories(); + foreach (var gameFolder in gameFolders) + { + var gameFolderDir = new DirectoryInfo($"{gameFolder.FullName}\\game"); + cartGameIds = gameFolderDir.GetFiles("*.json").Select(j => Path.GetFileNameWithoutExtension(j.Name)).ToArray(); + foreach (var gameId in cartGameIds) + { + if (gameId == "_HOME") + { + continue; + } + + if (_gamesManager.Games.Select(j => j.Id).Contains(gameId)) + { + var romPath = $"{gameFolder}\\game\\{gameId}.json"; + var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(romPath)); + var romTitle = gameJson.romTitle; + + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = romTitle, Path = $"{gameFolder}\\game\\{gameId}.json" }); + } + else + { + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = gameId, Path = $"{gameFolder}\\game\\{gameId}.json", IsMissngInCollection = true }); + } + } + + } + } + + _gamesManager.GamesOnSDCard = _gamesManager.GamesOnSDCard.OrderBy(x => x.Title).ToList(); foreach (var game in _gamesManager.Games) { - game.IsSelected = cartGameIds.Contains(game.Id); + game.IsPresentOnCartridge = _gamesManager.GamesOnSDCard.Where(g => g.Id == game.Id).Count() > 0; } - cbRomFilter_SelectedIndexChanged(null, null); //update checked games in current UI view + UpdateTotalSelectedGamesLabel(); - /* end of pre-select code */ + UpdateTotalGamesOnSDCardLabel(); + + BuildFolderTree(""); } } @@ -479,6 +545,7 @@ private void lvGames_KeyDown(object sender, KeyEventArgs e) { DeleteSelectedGames(); } + //select all if (e.KeyCode == Keys.A && e.Control) { @@ -502,6 +569,7 @@ private void DeleteSelectedGames() { listViewItem.Remove(); } + lvGames.Groups[0].Header = $"{lvGames.Items.Count} ROM(s)"; lvGames.EndUpdate(); @@ -514,7 +582,12 @@ private void DeleteSelectedGames() private void UpdateTotalSelectedGamesLabel() { - lblNumberOfGamesSelected.Text = $"{_gamesManager.Games.Count(g => g.IsSelected)} ROM(s) selected for Sync"; + lblNumberOfGamesSelected.Text = $"{_gamesManager.Games.Count(g => g.IsSelected)} / {_gamesManager.Games.Count()} ROM(s) selected for Sync"; + } + + private void UpdateTotalGamesOnSDCardLabel() + { + lblNumberGamesSDCard.Text = $"{_gamesManager.GamesOnSDCard.Count()} ROM(s) and {_gamesManager.GamesOnSDCard.Count(i => i.IsFolder) - 1} Folders on Cartridge"; } private async void pbGameImage_Click(object sender, EventArgs e) @@ -536,14 +609,17 @@ private async Task ImportResizeImages(Control targetControl, string imageFilePat { gameImages.Add(_gamesManager.GetGameImageInfo(_game.Id, ImageType.Small)); } + if (controlName == nameof(pbBoxArtMedium) || (controlName == nameof(pbBoxArtLarge) && _game.ImageHD == null)) { gameImages.Add(_gamesManager.GetGameImageInfo(_game.Id, ImageType.Medium)); } + if (controlName == nameof(pbBoxArtLarge)) { gameImages.Add(_gamesManager.GetGameImageInfo(_game.Id, ImageType.Large)); } + if (controlName == nameof(pbBanner)) { gameImages.Add(_gamesManager.GetGameImageInfo(_game.Id, ImageType.Banner)); @@ -558,24 +634,6 @@ private async Task ImportResizeImages(Control targetControl, string imageFilePat await _gamesManager.SerializeGame(_game); } - private async void btnAddGames_Click(object sender, EventArgs e) - { - var supportedExtensions = String.Join(";", _appSettings.Platforms - .SelectMany(p => p.SupportedExtensions).Distinct().Select(e => $"*{e}")); - - OpenFileDialog dialog = new OpenFileDialog() - { - Multiselect = true, - Filter = $"Game ROMs ({supportedExtensions})|{supportedExtensions}", - Title = "Select Game ROM(s)" - }; - - if (dialog.ShowDialog() == DialogResult.OK) - { - await AddGames(dialog.FileNames); - } - } - private async Task AddGames(string[] fileNames) { toolTip1.Hide(lvGames); //hide the welcome text @@ -661,7 +719,7 @@ private async void btnSyncToSD_Click(object sender, EventArgs e) { try { - await _gamesManager.SyncToSd(SDDrive, tbCartName.Text, progressForm.Reporter); + await _gamesManager.SyncToSd(SDDrive, tbCartName2.Text, "", progressForm.Reporter); } catch (Exception ex) { @@ -671,6 +729,15 @@ private async void btnSyncToSD_Click(object sender, EventArgs e) } MessageBox.Show("The selected ROMs were synced to MicroSD.\nPut the MicroSD card back in your EverSD cartridge and enjoy!", "ROM Sync Done", MessageBoxButtons.OK, MessageBoxIcon.Information); + + foreach (var game in _gamesManager.Games) + { + game.IsSelected = false; + } + + cbRomFilter_SelectedIndexChanged(sender, e); + + await SelectSDDrive(SDDrive); } private async void driveToolStripMenuItem_Click(object sender, EventArgs e) @@ -679,57 +746,299 @@ private async void driveToolStripMenuItem_Click(object sender, EventArgs e) { menuItem.Checked = false; } + var clickedItem = (ToolStripMenuItem)sender; clickedItem.Checked = true; await SelectSDDrive(clickedItem.Name); } + private void InitFolderList(string driveName) + { + _gamesManager.GamesOnSDCard.Clear(); + var folderItem = new GameInfoTreeNode(); + + if (String.IsNullOrEmpty(driveName)) + { + folderItem.Title = "Select MicroSD"; + } + else + { + folderItem.Title = "Top Level / Root"; + } + + if (!String.IsNullOrEmpty(driveName)) + { + folderItem.Path = driveName; + } + else + { + folderItem.Path = ""; + } + + folderItem.IsFolder = true; + + _gamesManager.GamesOnSDCard.Add(folderItem); + } + + private void GetFolderList() + { + if (_gamesManager.GamesOnSDCard.Count == 0) + { + InitFolderList(SDDrive); + } + + var drive = SDDrive; + if (!String.IsNullOrEmpty(drive)) + { + //check for subfolders of the /folders directory + var folders = new DirectoryInfo($"{drive}folders"); + if (folders.Exists) + { + foreach (var dir in folders.GetDirectories()) + { + var folderSubItem = new GameInfoTreeNode(); + folderSubItem.Title = Path.GetFileName(dir.FullName); + folderSubItem.Path = dir.FullName + "\\"; + folderSubItem.IsFolder = true; + + _gamesManager.GamesOnSDCard.Add(folderSubItem); + } + } + } + } + + private void BuildFolderTree(string search) + { + tvCartridge.Nodes.Clear(); + var rootNode = new TreeNode(); + + foreach (var folder in _gamesManager.GamesOnSDCard) + { + if (folder.IsFolder) + { + if (!String.IsNullOrEmpty(folder.Path) && folder.Path == SDDrive) + { + rootNode = new TreeNode(folder.Title); + rootNode.Name = folder.Path; + rootNode.ImageIndex = 2; + tvCartridge.Nodes.Add(rootNode); + } + else + { + var folderNode = new TreeNode(folder.Title); + folderNode.Name = folder.Path; + folderNode.ImageIndex = 2; + tvCartridge.Nodes.Add(folderNode); + } + } + } + + foreach (var folder in _gamesManager.GamesOnSDCard) + { + var addItem = false; + + if (!String.IsNullOrEmpty(folder.Path) && folder.Path.StartsWith($"{SDDrive}game")) + { + if (!folder.Path.StartsWith($"{SDDrive}game\\_")) + { + if (!String.IsNullOrEmpty(search)) + { + if (folder.Title.ToUpper().Contains(search.ToUpper())) + { + addItem = true; + } + } + else + { + addItem = true; + } + + if (addItem) + { + var node = new TreeNode(folder.Title); + node.Name = folder.Path; + + if (folder.IsMissngInCollection) + { + node.ImageIndex = 1; + + } + + rootNode.Nodes.Add(node); + } + } + + } + else + { + if (!folder.IsFolder) + { + var node = new TreeNode(folder.Title); + node.Name = folder.Path; + var folderNode = findParentNodeOfGamePath(node); + if (folderNode != null) + { + if (!String.IsNullOrEmpty(search)) + { + if (folder.Title.ToUpper().Contains(search.ToUpper())) + { + addItem = true; + } + } + else + { + addItem = true; + } + + if (addItem) + { + if (folder.IsMissngInCollection) + { + node.ImageIndex = 1; + + } + + folderNode.Nodes.Add(node); + } + } + } + } + } + + tvCartridge.ExpandAll(); + } + + private TreeNode findParentNodeOfGamePath(TreeNode node) + { + if (node.Name.StartsWith($"{SDDrive}folders\\")) + { + var i = node.Name.IndexOf("\\game\\"); + if (i >= 0) + { + var key = node.Name.Substring(0, i + 1); + var nodeFound = tvCartridge.Nodes.Find(key, true); + if (nodeFound.Length > 0) + { + return nodeFound[0]; + } + } + else + { + return node; + } + } + else if (node.Name.StartsWith($"{SDDrive}game\\")) + { + var root = tvCartridge.Nodes.Find(SDDrive, true); + if (root.Length > 0) + { + return root[0]; + } + } + else if (node.Name == SDDrive) + { + return node; + } + + return null; + } private async void selectSDDriveToolStripMenuItem_DropDownOpening(object sender, EventArgs e) + { + selectSDDrive_Opening(true); + } + + private void contextMenuStripMSD_Opening(object sender, CancelEventArgs e) + { + selectSDDrive_Opening(false); + } + + private async void selectSDDrive_Opening(bool isMenu) { bool itemWasChecked = false; var drives = SDCardHelper.FindRemovableDrives(); - if (drives.Length == 0) + + if (isMenu) { - await SelectSDDrive(null); - if (selectSDDriveToolStripMenuItem.DropDownItems.Count == 0 - || selectSDDriveToolStripMenuItem.DropDownItems["notfound"] == null) + if (drives.Length == 0) + { + await SelectSDDrive(null); + + if (selectSDDriveToolStripMenuItem.DropDownItems.Count == 0 + || selectSDDriveToolStripMenuItem.DropDownItems["notfound"] == null) + { + selectSDDriveToolStripMenuItem.DropDownItems.Clear(); + var item = new ToolStripMenuItem("No removable drive(s) found...", null, null, "notfound"); + item.ForeColor = Color.Red; + selectSDDriveToolStripMenuItem.DropDownItems.Add(item); + } + } + else { selectSDDriveToolStripMenuItem.DropDownItems.Clear(); - var item = new ToolStripMenuItem("No removable drive(s) found...", null, null, "notfound"); - item.ForeColor = Color.Red; + + foreach (var drive in drives) + { + var item = new ToolStripMenuItem( + $"{drive.Name} {string.Empty.PadLeft(30)} [Total size: {drive.TotalSize.ToSize()}]", null, + driveToolStripMenuItem_Click, drive.Name); + + AddDrivePathItem(item); + } + + if (!itemWasChecked) + { + await SelectSDDrive(null); + } + } + + void AddDrivePathItem(ToolStripMenuItem item) + { + item.Checked = SDDrive != null && item.Name == SDDrive; + itemWasChecked |= item.Checked; selectSDDriveToolStripMenuItem.DropDownItems.Add(item); } } else { - selectSDDriveToolStripMenuItem.DropDownItems.Clear(); - - foreach (var drive in drives) + if (drives.Length == 0) { - var item = new ToolStripMenuItem($"{drive.Name} {string.Empty.PadLeft(30)} [Total size: {drive.TotalSize.ToSize()}]", null, driveToolStripMenuItem_Click, drive.Name); - AddDrivePathItem(item); + await SelectSDDrive(null); - //check for subfolders of the /folders directory - var folders = new DirectoryInfo($"{drive.Name}folders"); - if (folders.Exists) - foreach (var dir in folders.GetDirectories()) + if (contextMenuStripMSD.Items.Count == 0 + || contextMenuStripMSD.Items["notfound"] == null) { - var subitem = new ToolStripMenuItem($"{dir.FullName}\\", null, driveToolStripMenuItem_Click, dir.FullName + "\\"); - AddDrivePathItem(subitem); + contextMenuStripMSD.Items.Clear(); + var item = new ToolStripMenuItem("No removable drive(s) found...", null, null, "notfound"); + item.ForeColor = Color.Red; + contextMenuStripMSD.Items.Add(item); } } - if (!itemWasChecked) + else { - await SelectSDDrive(null); + contextMenuStripMSD.Items.Clear(); + + foreach (var drive in drives) + { + var item = new ToolStripMenuItem( + $"{drive.Name} {string.Empty.PadLeft(30)} [Total size: {drive.TotalSize.ToSize()}]", null, + driveToolStripMenuItem_Click, drive.Name); + + AddDrivePathItem(item); + } + + if (!itemWasChecked) + { + await SelectSDDrive(null); + } } - } - void AddDrivePathItem(ToolStripMenuItem item) - { - item.Checked = SDDrive != null && item.Name == SDDrive; - itemWasChecked |= item.Checked; - selectSDDriveToolStripMenuItem.DropDownItems.Add(item); + void AddDrivePathItem(ToolStripMenuItem item) + { + item.Checked = SDDrive != null && item.Name == SDDrive; + itemWasChecked |= item.Checked; + contextMenuStripMSD.Items.Add(item); + } } } @@ -745,6 +1054,7 @@ private async void btnImageClear_Click(object sender, EventArgs e) { pbBanner.Tag = 0; } + LoadBoxArt(); } } @@ -760,15 +1070,23 @@ private void cbRomFilter_SelectedIndexChanged(object sender, EventArgs e) switch (Enum.Parse(typeof(RomFeatureFilter), cbRomFilter.SelectedValue as string)) { case RomFeatureFilter.SelectedForSync: - gameInfos = _gamesManager.Games.Where(g => g.IsSelected); break; + gameInfos = _gamesManager.Games.Where(g => g.IsSelected); + break; case RomFeatureFilter.RecentlyAdded: - gameInfos = _gamesManager.Games.Where(g => g.IsRecentlyAdded); break; + gameInfos = _gamesManager.Games.Where(g => g.IsRecentlyAdded); + break; case RomFeatureFilter.RomsWithoutBanner: - gameInfos = _gamesManager.Games.Where(g => g.ImageBanner == null); break; + gameInfos = _gamesManager.Games.Where(g => g.ImageBanner == null); + break; case RomFeatureFilter.RomsWithoutBoxart: - gameInfos = _gamesManager.Games.Where(g => g.Image == null && g.Image1080 == null); break; + gameInfos = _gamesManager.Games.Where(g => g.Image == null && g.Image1080 == null); + break; case RomFeatureFilter.RomsWithoutDescription: - gameInfos = _gamesManager.Games.Where(g => g.romDescription == string.Empty); break; + gameInfos = _gamesManager.Games.Where(g => g.romDescription == string.Empty); + break; + case RomFeatureFilter.RomsNotPresentOnCartridge: + gameInfos = _gamesManager.Games.Where(g => g.IsPresentOnCartridge == false); + break; //default } } @@ -778,6 +1096,11 @@ private void cbRomFilter_SelectedIndexChanged(object sender, EventArgs e) gameInfos = _gamesManager.Games.Where(g => g.romPlatformId == platformId); } + if (!String.IsNullOrEmpty(tbSearchCollection.Text)) + { + gameInfos = gameInfos.Where(g => g.romTitle.ToUpper().Contains(tbSearchCollection.Text.ToUpper())); + } + lvGames.BeginUpdate(); lvGames.SelectedIndices.Clear(); lvGames.Items.Clear(); @@ -827,6 +1150,7 @@ private void ShowScrapingErrorMessageBox(Exception ex) } private bool IdleHandlerSet { get; set; } + private void lvGames_SelectedIndexChanged(object sender, EventArgs e) { // this will fire every time items are selected or deselected. @@ -860,16 +1184,17 @@ private void lblMissingBiosFiles_LinkClicked(object sender, LinkLabelLinkClicked if (missingBiosFile?.MD5.Length > 0 && !missingBiosFile.MD5.Contains(HashHelper.CalculateHashcodes(romFilePath).Md5)) { if (MessageBox.Show( - $"Uploaded BIOS file '{missingBiosFile.FileName}' doesn't have the expected MD5 hash { string.Join(" or ", missingBiosFile.MD5) }." + + $"Uploaded BIOS file '{missingBiosFile.FileName}' doesn't have the expected MD5 hash {string.Join(" or ", missingBiosFile.MD5)}." + "\nPlease try a different file.\n\n" + "Clicking 'OK' will copy the required MD5 hash(es) to your clipboard.", "BIOS file MD5 mismatch", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == DialogResult.OK) { Clipboard.SetText(string.Join(" ", missingBiosFile.MD5)); - } + } + continue; } - File.Copy(romFilePath, Path.Combine(platformRomsDir, Path.GetFileName(romFilePath)), overwrite:true); + File.Copy(romFilePath, Path.Combine(platformRomsDir, Path.GetFileName(romFilePath)), overwrite: true); } UpdateMissingBiosFilesLabel(); @@ -892,12 +1217,14 @@ private async void btnScrape_Click(object sender, EventArgs e) ShowScrapingErrorMessageBox(ex); //continue } + Cursor.Current = Cursors.Default; if (lbScrapeResults.Items.Count == 0) { lbScrapeResults.Items.Add("[no results - try again using less words]"); } } + private void tbScrapeName_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Return) @@ -913,10 +1240,11 @@ private async void lbScrapeResults_SelectedIndexChanged(object sender, EventArgs { if ((_game.romDescription != "" || _game.Image != null || _game.Image1080 != null) && (lbScrapeResults.Tag as string) != "WARNING_SHOWN" - && MessageBox.Show("This will overwrite the current ROM description and images with the scraped information.\nIs this OK?", - "Applying scraped game content", - MessageBoxButtons.YesNo, - MessageBoxIcon.Warning) == DialogResult.No) + && MessageBox.Show( + "This will overwrite the current ROM description and images with the scraped information.\nIs this OK?", + "Applying scraped game content", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning) == DialogResult.No) { return; } @@ -1042,7 +1370,7 @@ private void lvGames_DragEnter(object sender, DragEventArgs e) { var files = (string[])e.Data.GetData(DataFormats.FileDrop); var allowedExtensions = _appSettings.Platforms.SelectMany(p => p.SupportedExtensions); - if (files.Any(f => allowedExtensions.Contains(Path.GetExtension(f)?.ToLower()))) + if (files.Any(f => allowedExtensions.Contains(Path.GetExtension(f)?.ToLower()))) { e.Effect = DragDropEffects.Copy; return; @@ -1112,7 +1440,51 @@ private async void pbGameImage_DragDrop(object sender, DragEventArgs e) } } + private void tvCartridge_OnDragEnter(object sender, DragEventArgs e) + { + e.Effect = DragDropEffects.Copy; + } + + private void tvCartridge_OnItemDrag(object sender, ItemDragEventArgs e) + { + DoDragDrop(e.Item, DragDropEffects.Copy); + } + + private void tvCartridge_DragOver(object sender, DragEventArgs e) + { + // Retrieve the client coordinates of the mouse position. + Point targetPoint = tvCartridge.PointToClient(new Point(e.X, e.Y)); + + // Select the node at the mouse position. + tvCartridge.SelectedNode = tvCartridge.GetNodeAt(targetPoint); + } + + private async void tvCartridge_OnDragDrop(object sender, DragEventArgs e) + { + TreeNode srcNode; + + if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) + { + srcNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); + + Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y)); + + TreeNode dstNode = ((TreeView)sender).GetNodeAt(pt); + dstNode = findParentNodeOfGamePath(dstNode); + + if (dstNode != null) + { + var success = await MoveGameOnSDCard(srcNode.Name, dstNode.Name); + if (success) + { + await SelectSDDrive(SDDrive); + } + } + } + } + #region toolstrip menu + private void deleteSelectedGamesToolStripMenuItem_Click(object sender, EventArgs e) { DeleteSelectedGames(); @@ -1132,6 +1504,7 @@ private async void scrapeToolStripMenuItem_Click(object sender, EventArgs e) ShowScrapingErrorMessageBox(ex); //show error, but don't break the flow } + _game.GameInfoChanged += Game_GameInfoChanged; SetDataBindings(); } @@ -1159,6 +1532,7 @@ private async void setCoreMenuItem_Click(object sender, EventArgs e) await _gamesManager.SerializeGame(game); } } + SetDataBindings(); //update form UI } @@ -1179,6 +1553,7 @@ private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) contextMenuStrip1.Items.Add(new ToolStripSeparator()); contextMenuStrip1.Items.Add("Selected ROM(s) -> Use Internal Emulator", null, setCoreMenuItem_Click); } + if (firstGamePlatform.RetroArchCores.Length > 0) { contextMenuStrip1.Items.Add(new ToolStripSeparator()); @@ -1188,9 +1563,100 @@ private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) } } } + + private void contextMenuCartridge_Opening(object sender, CancelEventArgs e) + { + //clean previously dynamically added items + for (int i = contextMenuCartridge.Items.Count; i > 0; i--) contextMenuCartridge.Items.RemoveAt(i - 1); + if (_gamesManager.GamesOnSDCard.Count == 0) return; + + var currNode = tvCartridge.SelectedNode; + if (currNode.Name.EndsWith("\\")) + { + if (!currNode.Name.Equals(SDDrive)) + { + contextMenuCartridge.Items.Add("Rename Folder", null, contextMenuCartridge_RenameFolder_Click); + contextMenuStrip1.Items.Add(new ToolStripSeparator()); + contextMenuCartridge.Items.Add("Delete Folder", null, contextMenuCartridge_DeleteFolder_Click); + } + } + else if (currNode.Name.EndsWith(".json")) + { + contextMenuCartridge.Items.Add("Delete Game from Cartridge", null, contextMenuCartridge_DeleteGame_Click); + + var gameRoot = _gamesManager.GetGameRootFromJsonPath(SDDrive, currNode.Name); + var gameId = _gamesManager.GetGameIdFromJsonPath(gameRoot, currNode.Name); + var exists = _gamesManager.GetGameById(gameId); + if (exists == null) + { + contextMenuStrip1.Items.Add(new ToolStripSeparator()); + contextMenuCartridge.Items.Add("Import Game into ROM Collection", null, contextMenuCartridge_ImportGame_Click); + } + } + } + + private async void contextMenuCartridge_RenameFolder_Click(object sender, EventArgs e) + { + var currNode = tvCartridge.SelectedNode; + var newName = Prompt.ShowDialog("Please enter new Name:", $"Rename Folder \"{currNode.Text}\""); + if (!String.IsNullOrEmpty(newName)) + { + try + { + var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText($"{currNode.Name}\\cartridge.json")); + gameInfo.cartridgeName = newName; + File.WriteAllText($"{currNode.Name}\\cartridge.json", JsonConvert.SerializeObject(gameInfo, Formatting.Indented)); + + var orgPath = Path.GetDirectoryName(currNode.Name); + var pathBase = orgPath.Substring(0, orgPath.LastIndexOf("\\")); + var newPath = Path.Combine(pathBase, newName); + + Directory.Move(orgPath, newPath); + } + catch (Exception ex) + { + var err = ex; + } + + await SelectSDDrive(SDDrive); + } + } + + private async void contextMenuCartridge_DeleteFolder_Click(object sender, EventArgs e) + { + var currNode = tvCartridge.SelectedNode; + if (MessageBox.Show($"Are you sure you want to delete this Folder (\"{currNode.Text}\") from the Cartridge?", "Confirm Delete", + MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) + { + _gamesManager.DeleteGameFolderOnSD(new GameInfo { Id = currNode.Name }); // SDDrive + await SelectSDDrive(SDDrive); + } + } + + private async void contextMenuCartridge_DeleteGame_Click(object sender, EventArgs e) + { + //tvCartridge.SelectedNode = tvCartridge.GetNodeAt(e.X, e.Y); + var currNode = tvCartridge.SelectedNode; + if (MessageBox.Show($"Are you sure you want to delete this ROM (\"{currNode.Text}\") from the Cartridge?", "Confirm Delete", + MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) + { + _gamesManager.DeleteGameFilesOnSD(new GameInfo { Id = currNode.Name }, _gamesManager.GetGameRootFromJsonPath(SDDrive, currNode.Name)); // SDDrive + await SelectSDDrive(SDDrive); + } + } + + private async void contextMenuCartridge_ImportGame_Click(object sender, EventArgs e) + { + var currNode = tvCartridge.SelectedNode; + var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText(currNode.Name)); + var filePath = $"{_gamesManager.GetGameRootFromJsonPath(SDDrive, currNode.Name)}game\\{gameInfo.romFileName}"; + var newGames = new List(); + newGames.Add(filePath); + await AddGames(newGames.ToArray()); + } #endregion toolstrip menu - private async void btnNewSDFolder_Click(object sender, EventArgs e) + private async void btnNewSDCardFolder_Click(object sender, EventArgs e) { using (var form = new CreateNewFolder(SDDrive)) { @@ -1201,5 +1667,109 @@ private async void btnNewSDFolder_Click(object sender, EventArgs e) } } } + public async Task MoveGameOnSDCard(string currentCartJsonFilePath, string newSDCardLocationPath) + { + var ret = true; + + try + { + var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText(currentCartJsonFilePath)); + + var success = await _gamesManager.CopyGameToSDPath(newSDCardLocationPath, gameInfo); + if (success) + { + _gamesManager.DeleteGameFilesOnSD(gameInfo, _gamesManager.GetGameRootFromJsonPath(SDDrive, currentCartJsonFilePath)); + } + } + catch (Exception ex) + { + MessageBox.Show($"Could not sync to MicroSD. Error message: \"{ex.Message}\".", "Error", + MessageBoxButtons.OK, MessageBoxIcon.Error); + ret = false; + } + + return ret; + + } + + private async void btnAddGame_Click(object sender, EventArgs e) + { + var supportedExtensions = String.Join("; ", _appSettings.Platforms + .SelectMany(p => p.SupportedExtensions).Distinct().Select(e => $"*{e}")); + + OpenFileDialog dialog = new OpenFileDialog() + { + Multiselect = true, + Filter = $"Game ROMs ({supportedExtensions})|{supportedExtensions}", + Title = "Select Game ROM(s)" + }; + + if (dialog.ShowDialog() == DialogResult.OK) + { + await AddGames(dialog.FileNames); + } + } + + private async void tvCartridge_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + TreeNode dstNode = tvCartridge.GetNodeAt(e.X, e.Y); + tvCartridge.SelectedNode = dstNode; + + contextMenuCartridge.Show(Cursor.Position); + return; + } + } + + private void tbSearchCollection_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + cbRomFilter_SelectedIndexChanged(sender, e); + } + } + + private void tbSearchCartridge_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + BuildFolderTree(tbSearchCartridge.Text); + } + } } -} + + public static class Prompt + { + public static string ShowDialog(string text, string caption) + { + Form prompt = new Form() + { + Width = 500, + Height = 120, + FormBorderStyle = FormBorderStyle.FixedDialog, + Text = caption, + StartPosition = FormStartPosition.CenterScreen + }; + //Label textLabel = new Label() { Left = 50, Top = 20, Width = 400, Text = text }; + TextBox textBox = new TextBox() { Left = 50, Top = 20, Width = 400 }; + Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 50, DialogResult = DialogResult.OK }; + Button cancel = new Button() { Text = "Cancel", Left = 250, Width = 100, Top = 50, DialogResult = DialogResult.Cancel }; + confirmation.Click += (sender, e) => { prompt.Close(); }; + cancel.Click += (sender, e) => + { + prompt.Close(); + }; + prompt.Controls.Add(textBox); + prompt.Controls.Add(confirmation); + prompt.Controls.Add(cancel); + //prompt.Controls.Add(textLabel); + prompt.AcceptButton = confirmation; + prompt.CancelButton = cancel; + + return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : ""; + } + } + + +} \ No newline at end of file diff --git a/Forms/MainForm.resx b/Forms/MainForm.resx index 9aa3053..9db597e 100644 --- a/Forms/MainForm.resx +++ b/Forms/MainForm.resx @@ -1,4 +1,64 @@ - + + + @@ -57,6 +117,53 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1080, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs + LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhggAAAJNU0Z0AUkBTAIBAQMB + AAHAAQABwAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG + AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB + AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB + kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC + MwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZAgABZgHMAgABZgH/AgAB + mQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFmAgABzAGZAgACzAIAAcwB + /wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEzAQABmQEAATMBAAHMAQAB + MwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFmAgABMwFmATMBAAEzAmYB + AAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFmAQABMwKZAQABMwGZAcwB + AAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEAATMBzAH/AQABMwH/ATMB + AAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFmAQABZgEAAWYBAAGZAQAB + ZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFmATMBzAEAAWYBMwH/AQAC + ZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFmAQABZgKZAQABZgGZAcwB + AAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEAAWYB/wIAAWYB/wEzAQAB + ZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZAQABmQEAAZkBAAHMAQAB + mQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEzAQABmQEzAWYBAAGZAWYB + mQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/AQABmQHMAgABmQHMATMB + AAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEAAZkBzAFmAQABmQH/AZkB + AAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHMAQABzAEAAZkBMwIAAcwC + MwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFmATMBAAGZAmYBAAHMAWYB + mQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZAQABzAGZAcwBAAHMAZkB + /wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ATMBAAGZAf8BZgEAAcwB + /wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHMATMCAAH/AjMBAAH/ATMB + ZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJmAQAB/wFmAZkBAAH/AWYB + zAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHMAQAB/wGZAf8BAAH/AcwC + AAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEAAcwB/wFmAQAC/wGZAQAC + /wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEAASEBAAGlAQADXwEAA3cB + AAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7Af8BAAGkAqABAAOAAwAB + /wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+TAAH0CzgDAA5ZFQAB/wHtAeoB/woAAcMLOAMADlkU + AAH/Ae0BEgHtARMB/woABTgBEgQ4AZoDAA5ZEwAB/wHtARIC/wHsAUMB/wkAAf8JOAQADlkTAAHsARQB + /wIAAf8B6wFDAf8JAAQ4ARIDOAH0BAAOWRMAARIB/wUAAesBFQH/CQADOAESAzgFAA5ZGgAB/wHsARQB + /wgAAVkCOAESAjgB/wUADnobAAH/Ae0BEgH/CAACOAESAjgGAA56HAAB/wHtARIB/wcAAcMDOAcADnod + AAH/Ae0BEggAAjgBmgcABzEHmh4AAf8B7wgAAf8BOAgABzfYAAFCAU0BPgcAAT4DAAEoAwABQAMAARAD + AAEBAQABAQUAAYAXAAP/AQAG/wIABv8CAAL/AcABAwGAAQECAAHwAf8BwAEDAYABAQIAAeABfwHgAQMB + gAEBAgABwAE/AeABBwGAAQECAAHGAR8B8AEHAYABAQIAAc8BjwH4AQ8BgAEBAgAB/wGHAfgBDwGAAQEC + AAH/AcMB/AEfAYABAQIAAf8B4QH8AT8BgAEBAgAB/wHxAf4BPwGAAQECAAH/AfkB/gF/AYAB/wIABv8C + AAb/AgAG/wIACw== + + 833, 17 @@ -72,8 +179,14 @@ 930, 17 + + 1080, 5 + + + 1080, 5 + - 112 + 25 diff --git a/Models/GameInfo.cs b/Models/GameInfo.cs index cf8cbd1..f359284 100644 --- a/Models/GameInfo.cs +++ b/Models/GameInfo.cs @@ -1,10 +1,4 @@ -using EverLoader.JsonConverters; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; +using Newtonsoft.Json; namespace EverLoader.Models { @@ -79,5 +73,7 @@ public void FixRomLaunchType() public bool IsSelected { get; set; } //indicates if game is selected in UI [JsonIgnore] public bool IsRecentlyAdded { get; set; } //indicates if game was recently added in the app + [JsonIgnore] + public bool IsPresentOnCartridge { get; set; } //indicates if game exists on the inserted cartridge/microsd } } diff --git a/Models/GameInfoTreeNode.cs b/Models/GameInfoTreeNode.cs new file mode 100644 index 0000000..8f5a599 --- /dev/null +++ b/Models/GameInfoTreeNode.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EverLoader.Models +{ + public class GameInfoTreeNode + { + public string Id { get; set; } + public string Title { get; set; } + public string Path { get; set; } + public bool IsFolder { get; set; } + public bool IsMissngInCollection { get; set; } + } +} diff --git a/Services/GamesManager.cs b/Services/GamesManager.cs index c03a745..7fcf58f 100644 --- a/Services/GamesManager.cs +++ b/Services/GamesManager.cs @@ -11,12 +11,12 @@ using System.Threading.Tasks; using TheGamesDBApiWrapper.Models.Enums; using System.Globalization; -using System.Threading; using System.Windows.Forms; using TheGamesDBApiWrapper.Domain; using EverLoader.Properties; using EverLoader.Forms; using System.Text; +using System.IO.Compression; namespace EverLoader.Services { @@ -56,6 +56,8 @@ public GamesManager(ITheGamesDBAPI tgdbApi, public IEnumerable Games => _games.Values; public Dictionary GamesDictionary => _games; + public List GamesOnSDCard = new List(); + public IEnumerable GetGameBoxartImageInfo(string gameId) { return new[] @@ -178,11 +180,153 @@ public bool SdContainsKnownGames(string sdDrive) return sdGamesDir.EnumerateFiles("*.json") .Select(j => Path.GetFileNameWithoutExtension(j.Name)) .Any(i => _games.ContainsKey(i)); + } + + public GameInfoTreeNode GetGameJsonFromSDCardByGameId(string gameId) + { + var ret = GamesOnSDCard.Where(g => g.Id == gameId).ToList().FirstOrDefault(); + + return ret; } + public async Task CopyGameToSDPath(string sdDrive, GameInfo gameParam) + { + bool ret = true; + if (gameParam.Id is null) + { + gameParam.Id = GenerateGameId(gameParam.romTitle,true);// Path.GetFileName(gameParam.romFileName); + } + + var game = GetGameById(gameParam.Id); + var platform = _appSettings.Platforms.SingleOrDefault(p => p.Id == game.romPlatformId); + if (platform == null) return false; + + game.FixRomLaunchType(); //fix old romLaunchType values + + // RA cores should go to the SD root path, not to subfolders + var targetCorePath = game.RetroArchCore == null ? sdDrive : Path.GetPathRoot(sdDrive); + + // 4a. copy emulator core (only overwrite if newer) + bios files (only overwrite if newer) + //first select the right core (note: megadrive has an 'empty' BlastRetro core, as it uses BlastEm emulator) + var selectedCore = game.RetroArchCore == null + ? platform.InternalEmulator + : platform.RetroArchCores.OrderBy(c => c.CoreFileName == game.RetroArchCore ? 0 : 1).FirstOrDefault(); + + if (selectedCore != null) + { + foreach (var file in selectedCore.Files) + { + var destFilePath = $"{targetCorePath}{file.TargetPath}".Replace("[game.Id]", game.Id); + if (!File.Exists(destFilePath)) Directory.CreateDirectory(Path.GetDirectoryName(destFilePath)); //ensure target dir exists + if (file.SourceContent != null) + { + await File.WriteAllLinesAsync(destFilePath, file.SourceContent); + } + else + { + var sourceFile = new FileInfo(await _downloadManager.GetDownloadedFilePath(new Uri(file.SourceUrl), file.SourcePath)); + sourceFile.CopyToOverwriteIfNewer(destFilePath); + } + } + + //copy over BIOS files + foreach (var biosFile in platform.BiosFiles) + { + var sourceBiosFile = new FileInfo($"{Constants.APP_ROOT_FOLDER}bios\\{platform.Alias}\\{biosFile.FileName}"); + //bios files go into /sdcard/bios (for internal emulator) or /sdcard/retroarch/system (for RA cores) + var destBiosFilePath = $"{targetCorePath}{(game.RetroArchCore == null ? "bios" : "retroarch\\system")}\\{biosFile.FileName}"; + if (sourceBiosFile.Exists) + { + if (!File.Exists(destBiosFilePath)) Directory.CreateDirectory(Path.GetDirectoryName(destBiosFilePath)); //ensure target dir exists + sourceBiosFile.CopyToOverwriteIfNewer(destBiosFilePath); + } + } + } + + // 4b. copy all image files (only overwrite if newer) + var imagesDir = new DirectoryInfo($"{APP_GAMES_FOLDER}{game.Id}\\{SUBFOLDER_IMAGES}"); + if (imagesDir.Exists) imagesDir.GetFiles().ToList().ForEach(f => + { + f.CopyToOverwriteIfNewer($"{sdDrive}game\\{f.Name}"); + }); + + // 4c. copy over rom file (only overwrite if newer) + var targetRomDir = game.RetroArchCore != null + ? $"roms\\{game.Id}" /* for RetroArch, put all roms under /sdcard/roms */ + : (platform.Id == 1 ? "mame" : "game"); /* internal emulator: arcade roms to /sdcard/mame, otherwise use /sdcard/game */ + Directory.CreateDirectory($"{sdDrive}{targetRomDir}"); //ensure target directory exists on MicroSD card + var sourceRomDir = new DirectoryInfo($"{APP_GAMES_FOLDER}{game.Id}\\{SUBFOLDER_ROM}"); + if (sourceRomDir.Exists) sourceRomDir.GetFiles().ToList().ForEach(f => + { + var targetRomFileName = game.RetroArchCore != null + ? f.Name /* for RA, use original filename */ + : (Path.GetExtension(f.Name.ToLower()) == Path.GetExtension(game.romFileName) ? game.romFileName : f.Name); + var targetFile = $"{sdDrive}{targetRomDir}\\{targetRomFileName}"; + f.CopyToOverwriteIfNewer(targetFile); + }); + + // multidisc without a m3u? => create a m3u + string multiDiscFilePath = null; + if (game.IsMultiDisc && !game.romFileName.EndsWith(".m3u")) + { + multiDiscFilePath = $"{sdDrive}{targetRomDir}\\{RemoveInvalidChars(game.romTitle)}.m3u"; + var cueFileFound = sourceRomDir.GetFiles().Any(f => f.Extension?.ToLower() == ".cue"); + File.WriteAllLines(multiDiscFilePath, cueFileFound + ? sourceRomDir.GetFiles().Where(f => f.Extension?.ToLower() == ".cue").Select(f => f.Name) + : sourceRomDir.GetFiles().Select(f => f.Name)); + } - public async Task SyncToSd(string sdDrive, string cartName, IProgress<(string, int, int)> progress) + //custom handling for cores without autolaunch + var gameJson = JsonConvert.SerializeObject(game, Formatting.Indented); + var evercadeGameInfo = new EvercadeGameInfo(gameJson); + if (selectedCore?.AutoLaunch == false) + { + //clean up any old-style 0-byte pointer file if it exists + if (File.Exists($"{sdDrive}game\\{game.Id}")) File.Delete($"{sdDrive}game\\{game.Id}"); + + // for internal Arcade/MAME, we have special way of launching using .cue file + if (game.RetroArchCore == null && platform.Id == 1) + { + File.WriteAllText($"{sdDrive}game\\{game.Id}.cue", game.PreferedRomFileName()); + evercadeGameInfo.romFileName = $"{game.Id}.cue"; + } + else + { + //no auto launcher, so write out special script and 0-byte pointer file + var pointerFileName = $"{game.Id}-"; + evercadeGameInfo.romFileName = pointerFileName; + File.Create($"{sdDrive}game\\{pointerFileName}").Dispose(); //create 0-byte pointer file + + Directory.CreateDirectory($"{sdDrive}special"); //ensure special directory exists + + string shScript = game.RetroArchCore != null ? Resources.special_bash_ra : Resources.special_bash; + string romFileName = multiDiscFilePath != null ? Path.GetFileName(multiDiscFilePath) : game.PreferedRomFileName(); + string romFileRelativePath = game.RetroArchCore == null ? romFileName : $"{game.Id}/{romFileName}"; + shScript = shScript + .Replace("{CORE_FILENAME}", selectedCore.CoreFileName) + .Replace("{ROM_FILENAME}", romFileRelativePath) + .Replace("\r", ""); //remove possible windows CR + + await File.WriteAllTextAsync($"{sdDrive}special\\{pointerFileName}.sh", shScript, new UTF8Encoding(false)); + } + } + //now write out evercade game json + var evercadeGameJson = JsonConvert.SerializeObject(evercadeGameInfo, Formatting.Indented); + await File.WriteAllTextAsync($"{sdDrive}game\\{game.Id}.json", evercadeGameJson, new UTF8Encoding(false)); + + return ret; + } + + public async Task SyncToSd(string sdDrive, string cartName, string gameId, IProgress<(string, int, int)> progress) { var selectedGameIds = _games.Values.Where(g => g.IsSelected).Select(g => g.Id).ToArray(); + + if ( gameId.Length > 0) + { + selectedGameIds = new List + { + gameId + }.ToArray(); + } // 1. write cartridge.json var cartJson = JsonConvert.SerializeObject(new Cartridge() @@ -194,143 +338,28 @@ public async Task SyncToSd(string sdDrive, string cartName, IProgress<(string, i // 2. ensure the game directory exists on MicroSD Directory.CreateDirectory($"{sdDrive}game"); - // 3. Remove games on SD which are known but not selected - var sdGamesDir = new DirectoryInfo($"{sdDrive}game"); - foreach (var sdGameId in sdGamesDir.EnumerateFiles("*.json") - .Select(j => Path.GetFileNameWithoutExtension(j.Name))) - { - if (_games.TryGetValue(sdGameId, out GameInfo foundGame)) - { - if (foundGame.IsSelected) DeleteObsoleteRomFilesOnSD(foundGame, sdDrive); - else DeleteGameFilesOnSD(foundGame, sdDrive); - } - } - int syncedGameIndex = 0; // 4. Save assets for each selected game foreach (var game in _games.Values.Where(g => g.IsSelected)) { progress.Show(("Syncing Games", ++syncedGameIndex, selectedGameIds.Length)); - var platform = _appSettings.Platforms.SingleOrDefault(p => p.Id == game.romPlatformId); - if (platform == null) continue; - - game.FixRomLaunchType(); //fix old romLaunchType values - - // RA cores should go to the SD root path, not to subfolders - var targetCorePath = game.RetroArchCore == null ? sdDrive : Path.GetPathRoot(sdDrive); - - // 4a. copy emulator core (only overwrite if newer) + bios files (only overwrite if newer) - //first select the right core (note: megadrive has an 'empty' BlastRetro core, as it uses BlastEm emulator) - var selectedCore = game.RetroArchCore == null - ? platform.InternalEmulator - : platform.RetroArchCores.OrderBy(c => c.CoreFileName == game.RetroArchCore ? 0 : 1).FirstOrDefault(); - - if (selectedCore != null) - { - foreach (var file in selectedCore.Files) - { - var destFilePath = $"{targetCorePath}{file.TargetPath}".Replace("[game.Id]", game.Id); - if (!File.Exists(destFilePath)) Directory.CreateDirectory(Path.GetDirectoryName(destFilePath)); //ensure target dir exists - if (file.SourceContent != null) - { - await File.WriteAllLinesAsync(destFilePath, file.SourceContent); - } - else - { - var sourceFile = new FileInfo(await _downloadManager.GetDownloadedFilePath(new Uri(file.SourceUrl), file.SourcePath)); - sourceFile.CopyToOverwriteIfNewer(destFilePath); - } - } - - //copy over BIOS files - foreach (var biosFile in platform.BiosFiles) - { - var sourceBiosFile = new FileInfo($"{Constants.APP_ROOT_FOLDER}bios\\{platform.Alias}\\{biosFile.FileName}"); - //bios files go into /sdcard/bios (for internal emulator) or /sdcard/retroarch/system (for RA cores) - var destBiosFilePath = $"{targetCorePath}{(game.RetroArchCore == null ? "bios" : "retroarch\\system")}\\{biosFile.FileName}"; - if (sourceBiosFile.Exists) - { - if (!File.Exists(destBiosFilePath)) Directory.CreateDirectory(Path.GetDirectoryName(destBiosFilePath)); //ensure target dir exists - sourceBiosFile.CopyToOverwriteIfNewer(destBiosFilePath); - } - } - } - - // 4b. copy all image files (only overwrite if newer) - var imagesDir = new DirectoryInfo($"{APP_GAMES_FOLDER}{game.Id}\\{SUBFOLDER_IMAGES}"); - if (imagesDir.Exists) imagesDir.GetFiles().ToList().ForEach(f => - { - f.CopyToOverwriteIfNewer($"{sdDrive}game\\{f.Name}"); - }); + if (platform == null) return; - // 4c. copy over rom file (only overwrite if newer) - var targetRomDir = game.RetroArchCore != null - ? $"roms\\{game.Id}" /* for RetroArch, put all roms under /sdcard/roms */ - : (platform.Id == 1 ? "mame" : "game"); /* internal emulator: arcade roms to /sdcard/mame, otherwise use /sdcard/game */ - Directory.CreateDirectory($"{sdDrive}{targetRomDir}"); //ensure target directory exists on MicroSD card - var sourceRomDir = new DirectoryInfo($"{APP_GAMES_FOLDER}{game.Id}\\{SUBFOLDER_ROM}"); - if (sourceRomDir.Exists) sourceRomDir.GetFiles().ToList().ForEach(f => - { - var targetRomFileName = game.RetroArchCore != null - ? f.Name /* for RA, use original filename */ - : (Path.GetExtension(f.Name.ToLower()) == Path.GetExtension(game.romFileName) ? game.romFileName : f.Name); - var targetFile = $"{sdDrive}{targetRomDir}\\{targetRomFileName}"; - f.CopyToOverwriteIfNewer(targetFile); - }); - - // multidisc without a m3u? => create a m3u - string multiDiscFilePath = null; - if (game.IsMultiDisc && !game.romFileName.EndsWith(".m3u")) + var exists = GetGameJsonFromSDCardByGameId(game.Id); + var gameFolder = sdDrive; + if (exists != null) { - multiDiscFilePath = $"{sdDrive}{targetRomDir}\\{RemoveInvalidChars(game.romTitle)}.m3u"; - var cueFileFound = sourceRomDir.GetFiles().Any(f => f.Extension?.ToLower() == ".cue"); - File.WriteAllLines(multiDiscFilePath, cueFileFound - ? sourceRomDir.GetFiles().Where(f => f.Extension?.ToLower() == ".cue").Select(f => f.Name) - : sourceRomDir.GetFiles().Select(f => f.Name)); + gameFolder = GetGameRootFromJsonPath(sdDrive, exists.Path); } - //custom handling for cores without autolaunch - var gameJson = JsonConvert.SerializeObject(game, Formatting.Indented); - var evercadeGameInfo = new EvercadeGameInfo(gameJson); - if (selectedCore?.AutoLaunch == false) - { - //clean up any old-style 0-byte pointer file if it exists - if (File.Exists($"{sdDrive}game\\{game.Id}")) File.Delete($"{sdDrive}game\\{game.Id}"); + await CopyGameToSDPath(gameFolder, game); - // for internal Arcade/MAME, we have special way of launching using .cue file - if (game.RetroArchCore == null && platform.Id == 1) - { - File.WriteAllText($"{sdDrive}game\\{game.Id}.cue", game.PreferedRomFileName()); - evercadeGameInfo.romFileName = $"{game.Id}.cue"; - } - else - { - //no auto launcher, so write out special script and 0-byte pointer file - var pointerFileName = $"{game.Id}-"; - evercadeGameInfo.romFileName = pointerFileName; - File.Create($"{sdDrive}game\\{pointerFileName}").Dispose(); //create 0-byte pointer file - - Directory.CreateDirectory($"{sdDrive}special"); //ensure special directory exists - - string shScript = game.RetroArchCore != null ? Resources.special_bash_ra : Resources.special_bash; - string romFileName = multiDiscFilePath != null ? Path.GetFileName(multiDiscFilePath) : game.PreferedRomFileName(); - string romFileRelativePath = game.RetroArchCore == null ? romFileName : $"{game.Id}/{romFileName}"; - shScript = shScript - .Replace("{CORE_FILENAME}", selectedCore.CoreFileName) - .Replace("{ROM_FILENAME}", romFileRelativePath) - .Replace("\r", ""); //remove possible windows CR - - await File.WriteAllTextAsync($"{sdDrive}special\\{pointerFileName}.sh", shScript, new UTF8Encoding(false)); - } - } - //now write out evercade game json - var evercadeGameJson = JsonConvert.SerializeObject(evercadeGameInfo, Formatting.Indented); - await File.WriteAllTextAsync($"{sdDrive}game\\{game.Id}.json", evercadeGameJson, new UTF8Encoding(false)); + game.IsSelected = false; } } - private string GenerateGameId(string title) + private string GenerateGameId(string title, bool ignoreDupicates) { //remove text within parenthesis var cleanTitle = Regex.Replace(title, @"\([^)]*\)", ""); @@ -345,7 +374,7 @@ private string GenerateGameId(string title) cleanTitle = cleanTitle.Substring(0, Math.Min(cleanTitle.Length, MAX_GAME_ID_LENGTH)); int addedNumber = 2; //start with 2 - while (_games.ContainsKey(cleanTitle)) + while (!ignoreDupicates && _games.ContainsKey(cleanTitle)) { cleanTitle = cleanTitle.Substring(0, (cleanTitle+"_").IndexOf("_")); //replace last chars with a number @@ -428,10 +457,62 @@ bool IsValidM3u(string m3uFilePath) string multiDiscBaseTitleStart = null; string multiDiscBaseTitleEnd = null; - foreach (var romPath in validRomPaths) + foreach (var romPathEntry in validRomPaths) { + var romPath = romPathEntry; progress.Show(("Importing game(s)", ++importedGames, validRomPaths.Count)); + var romExtracted = false; + var romTmpFilePath = ""; + + if (Path.GetExtension(romPath).ToLower() == ".zip") + { + string tempFileName = Path.GetFileNameWithoutExtension(Path.GetTempFileName()); + string tempPath = Path.GetTempPath(); + + using (var file = new FileStream(romPath, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + try + { + using (var zip = new ZipArchive(file, ZipArchiveMode.Read,true)) + { + var extList = new List(); + + var possiblePlatforms = _appSettings.Platforms.Select(p => p.SupportedExtensions ).ToList(); + foreach (var possiblePlatform in possiblePlatforms) + { + foreach (var platform in possiblePlatform) + { + extList.Add(platform); + } + } + + //check if a console rom is present in archive and extract it before adding rom to collection + var exists2 = zip.Entries.Select(k => k.Name).Where( j => extList.Contains(Path.GetExtension(j))).ToList(); + if (exists2 .Count > 0) + { + var zipPath = Path.Combine(tempPath, tempFileName); + zip.ExtractToDirectory(zipPath); + romTmpFilePath = Path.Combine(zipPath, exists2.First()); + romExtracted = true; + } + } + } + catch (Exception ex) + { + /* suppress scraping errors during rom import */ + } + } + } + + if (romExtracted) + { + romPath = romTmpFilePath; + } + + + //await Task.Run(() => zip..ExtractToDirectory(tempPath, true)); + //1. don't add rom if CRC is already in collection (var romCRC32, var romMD5) = HashHelper.CalculateHashcodes(romPath); var crc32 = uint.Parse(romCRC32, NumberStyles.HexNumber); @@ -442,7 +523,7 @@ bool IsValidM3u(string m3uFilePath) var ext = Path.GetExtension(romPath).ToLower(); if (ext != ".zip") title = title.Replace("_", " "); //for non-MAME roms, get rid of underscores title = Regex.Replace(title, @"\s+", " "); //replace multiple whitespace chars by a single space - var newId = GenerateGameId(title); + var newId = GenerateGameId(title, false); var newRomFileName = $"{newId}{ext}"; var originalRomFileName = $"{Path.GetFileNameWithoutExtension(romPath)}{ext}"; @@ -541,6 +622,11 @@ bool IsValidM3u(string m3uFilePath) _gameCRCs.Add(crc32); newGames.Add(newGame); + + if (romExtracted) + { + Directory.Delete( Path.GetDirectoryName( romTmpFilePath), true); + } } if (!newGames.Any()) return newGames; @@ -553,6 +639,8 @@ bool IsValidM3u(string m3uFilePath) await EnsurePlatform(newGames, progress); + + return newGames; //note: MainForm will take care of adding the new game to the UI } @@ -610,9 +698,14 @@ public void DeleteObsoleteRomFilesOnSD(GameInfo game, string sdDrive) /// /// /// + public void DeleteGameFilesOnSD(GameInfo game, string sdDrive) { - var gameId = game.Id; + var gameId = GetGameIdFromJsonPath(sdDrive, game.Id); + if (gameId == null) + { + gameId = game.Id; + } //if there is a mame cue file, get info from it and delete the rom from /sdcard/mame dir if (File.Exists($"{sdDrive}game\\{gameId}.cue")) @@ -640,9 +733,16 @@ public void DeleteGameFilesOnSD(GameInfo game, string sdDrive) .Concat(sdGameDir.EnumerateFiles($"{gameId}1*.png")) //artwork gfx .Concat(sdGameDir.EnumerateFiles($"{gameId}2*.png")) //artwork gfx .Concat(sdGameDir.EnumerateFiles($"{gameId}_gamebanner.png")) //optional banner gfx - .ToList().ForEach(f => File.Delete(f.FullName)); + .ToList().ForEach(f => { + File.Delete(f.FullName); + }); } + public void DeleteGameFolderOnSD(GameInfo game) + { + var t = Path.GetDirectoryName(game.Id); + Directory.Delete(game.Id, true); + } public void DeleteGameByIds(IEnumerable ids) { foreach (string id in ids) @@ -1004,5 +1104,49 @@ public string GetRomListTitle(GameInfo game) if (game == null) return ""; return $"{game.romTitle} [{game.romPlatform}]"; } + + public string GetGameRootFromJsonPath(string sdDrive, string currentGameJsonFilePath) + { + var ret = ""; + + if (currentGameJsonFilePath.StartsWith($"{sdDrive}folders\\")) + { + var i = currentGameJsonFilePath.IndexOf("\\game\\"); + if (i >= 0) + { + ret = currentGameJsonFilePath.Substring(0, i + 1); + } + } + else + { + ret = sdDrive; + } + + return ret; + } + + public string GetGameIdFromJsonPath(string sdDrive, string currentGameJsonFilePath) + { + var ret = currentGameJsonFilePath; + var folderPrefix = $"{sdDrive}folders\\"; + var rootPrefix = sdDrive; + + var i = currentGameJsonFilePath.IndexOf("\\game\\"); + if (i >= 0) + { + if (currentGameJsonFilePath.StartsWith(folderPrefix)) + { + ret = currentGameJsonFilePath.Substring(i + 6); + } + else + { + ret = currentGameJsonFilePath.Substring(rootPrefix.Length + 5); + } + + ret = ret.Substring(0, ret.IndexOf(".json")); + } + + return ret; + } } } From 96b82eddcd740b62df3cb18d29e83f56f53f6713 Mon Sep 17 00:00:00 2001 From: muid Date: Fri, 31 May 2024 09:11:43 +0200 Subject: [PATCH 2/5] - if after selecting to import a game from the sdcard - the actual rom file is not found then ask the user if he wants to use the open file dialog to find it - for games on the sdcard which don't exist in the collection only the game id was shown - now the title is shown also (this helps with identifying PS1 games) - now game info is also shown when a game on the sdcard is selected - added possibility to leave the "select platform" dialog without choosing a platform (because the platform might not be in the list) - bug fix: only offer to import a game from the sdcard if the file extension belongs to a known platform - bug fix: after a folder was created - it was treated as game root --- Forms/MainForm.Designer.cs | 103 ++++++++++++------------- Forms/MainForm.cs | 87 +++++++++++++++++++--- Forms/MainForm.resx | 2 +- Forms/SelectPlatform.Designer.cs | 124 +++++++++++++++++-------------- Forms/SelectPlatform.cs | 6 ++ Forms/SelectPlatform.resx | 62 +++++++++++++++- Services/GamesManager.cs | 45 ++++++++++- 7 files changed, 306 insertions(+), 123 deletions(-) diff --git a/Forms/MainForm.Designer.cs b/Forms/MainForm.Designer.cs index 3522246..2374d9c 100644 --- a/Forms/MainForm.Designer.cs +++ b/Forms/MainForm.Designer.cs @@ -58,7 +58,7 @@ private void InitializeComponent() panel11 = new System.Windows.Forms.Panel(); tbDescription = new System.Windows.Forms.TextBox(); lblDescription = new System.Windows.Forms.Label(); - groupBox2 = new System.Windows.Forms.GroupBox(); + gbBoxArt = new System.Windows.Forms.GroupBox(); tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); panel12 = new AspectRatioPanel(); @@ -174,7 +174,7 @@ private void InitializeComponent() panel9.SuspendLayout(); panel10.SuspendLayout(); panel11.SuspendLayout(); - groupBox2.SuspendLayout(); + gbBoxArt.SuspendLayout(); tableLayoutPanel5.SuspendLayout(); tableLayoutPanel6.SuspendLayout(); panel12.SuspendLayout(); @@ -216,7 +216,7 @@ private void InitializeComponent() groupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); groupBox1.Name = "groupBox1"; groupBox1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - groupBox1.Size = new System.Drawing.Size(381, 538); + groupBox1.Size = new System.Drawing.Size(381, 405); groupBox1.TabIndex = 2; groupBox1.TabStop = false; groupBox1.Text = "ROM Info"; @@ -241,7 +241,7 @@ private void InitializeComponent() tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F)); tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 88F)); tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - tableLayoutPanel4.Size = new System.Drawing.Size(375, 518); + tableLayoutPanel4.Size = new System.Drawing.Size(375, 385); tableLayoutPanel4.TabIndex = 0; // // panel15 @@ -482,7 +482,7 @@ private void InitializeComponent() panel11.Location = new System.Drawing.Point(0, 156); panel11.Margin = new System.Windows.Forms.Padding(0); panel11.Name = "panel11"; - panel11.Size = new System.Drawing.Size(375, 362); + panel11.Size = new System.Drawing.Size(375, 229); panel11.TabIndex = 3; // // tbDescription @@ -508,18 +508,19 @@ private void InitializeComponent() lblDescription.TabIndex = 4; lblDescription.Text = "Description"; // - // groupBox2 + // gbBoxArt // - groupBox2.Controls.Add(tableLayoutPanel5); - groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; - groupBox2.Location = new System.Drawing.Point(905, 2); - groupBox2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - groupBox2.Name = "groupBox2"; - groupBox2.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - groupBox2.Size = new System.Drawing.Size(383, 538); - groupBox2.TabIndex = 3; - groupBox2.TabStop = false; - groupBox2.Text = "Box Art"; + gbBoxArt.Controls.Add(tableLayoutPanel5); + gbBoxArt.Dock = System.Windows.Forms.DockStyle.Fill; + gbBoxArt.Location = new System.Drawing.Point(905, 2); + gbBoxArt.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + gbBoxArt.Name = "gbBoxArt"; + gbBoxArt.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + gbBoxArt.Size = new System.Drawing.Size(383, 405); + gbBoxArt.TabIndex = 3; + gbBoxArt.TabStop = false; + gbBoxArt.Text = "Box Art"; + gbBoxArt.Visible = false; // // tableLayoutPanel5 // @@ -534,7 +535,7 @@ private void InitializeComponent() tableLayoutPanel5.RowCount = 2; tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 61.87291F)); tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.12709F)); - tableLayoutPanel5.Size = new System.Drawing.Size(377, 518); + tableLayoutPanel5.Size = new System.Drawing.Size(377, 385); tableLayoutPanel5.TabIndex = 0; // // tableLayoutPanel6 @@ -552,7 +553,7 @@ private void InitializeComponent() tableLayoutPanel6.Name = "tableLayoutPanel6"; tableLayoutPanel6.RowCount = 1; tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - tableLayoutPanel6.Size = new System.Drawing.Size(377, 320); + tableLayoutPanel6.Size = new System.Drawing.Size(377, 238); tableLayoutPanel6.TabIndex = 0; // // panel12 @@ -564,7 +565,7 @@ private void InitializeComponent() panel12.Location = new System.Drawing.Point(152, 0); panel12.Margin = new System.Windows.Forms.Padding(0); panel12.Name = "panel12"; - panel12.Size = new System.Drawing.Size(130, 320); + panel12.Size = new System.Drawing.Size(130, 238); panel12.TabIndex = 1; // // label5 @@ -622,7 +623,7 @@ private void InitializeComponent() panel13.Location = new System.Drawing.Point(282, 0); panel13.Margin = new System.Windows.Forms.Padding(0); panel13.Name = "panel13"; - panel13.Size = new System.Drawing.Size(95, 320); + panel13.Size = new System.Drawing.Size(95, 238); panel13.TabIndex = 2; // // label6 @@ -680,7 +681,7 @@ private void InitializeComponent() panel7.Location = new System.Drawing.Point(0, 0); panel7.Margin = new System.Windows.Forms.Padding(0); panel7.Name = "panel7"; - panel7.Size = new System.Drawing.Size(152, 320); + panel7.Size = new System.Drawing.Size(152, 238); panel7.TabIndex = 0; // // label4 @@ -739,10 +740,10 @@ private void InitializeComponent() panel14.Controls.Add(pbBanner); panel14.Controls.Add(label8); panel14.Dock = System.Windows.Forms.DockStyle.Fill; - panel14.Location = new System.Drawing.Point(0, 320); + panel14.Location = new System.Drawing.Point(0, 238); panel14.Margin = new System.Windows.Forms.Padding(0); panel14.Name = "panel14"; - panel14.Size = new System.Drawing.Size(377, 198); + panel14.Size = new System.Drawing.Size(377, 147); panel14.TabIndex = 1; // // llBannerDown @@ -865,7 +866,7 @@ private void InitializeComponent() gbCollection.Name = "gbCollection"; gbCollection.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); tableLayoutPanel1.SetRowSpan(gbCollection, 2); - gbCollection.Size = new System.Drawing.Size(284, 763); + gbCollection.Size = new System.Drawing.Size(284, 633); gbCollection.TabIndex = 3; gbCollection.TabStop = false; gbCollection.Text = "ROM Collection"; @@ -892,7 +893,7 @@ private void InitializeComponent() tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); tblLayoutCollection.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - tblLayoutCollection.Size = new System.Drawing.Size(278, 743); + tblLayoutCollection.Size = new System.Drawing.Size(278, 613); tblLayoutCollection.TabIndex = 3; // // button5 @@ -932,7 +933,7 @@ private void InitializeComponent() lvGames.Location = new System.Drawing.Point(3, 102); lvGames.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); lvGames.Name = "lvGames"; - lvGames.Size = new System.Drawing.Size(272, 519); + lvGames.Size = new System.Drawing.Size(272, 389); lvGames.Sorting = System.Windows.Forms.SortOrder.Ascending; lvGames.TabIndex = 0; lvGames.TabStop = false; @@ -952,7 +953,7 @@ private void InitializeComponent() // btnSyncWithSDCard // btnSyncWithSDCard.Dock = System.Windows.Forms.DockStyle.Fill; - btnSyncWithSDCard.Location = new System.Drawing.Point(3, 666); + btnSyncWithSDCard.Location = new System.Drawing.Point(3, 536); btnSyncWithSDCard.Name = "btnSyncWithSDCard"; btnSyncWithSDCard.Size = new System.Drawing.Size(272, 44); btnSyncWithSDCard.TabIndex = 17; @@ -963,7 +964,7 @@ private void InitializeComponent() // lblNumberOfGamesSelected // lblNumberOfGamesSelected.AutoSize = true; - lblNumberOfGamesSelected.Location = new System.Drawing.Point(3, 623); + lblNumberOfGamesSelected.Location = new System.Drawing.Point(3, 493); lblNumberOfGamesSelected.Name = "lblNumberOfGamesSelected"; lblNumberOfGamesSelected.Size = new System.Drawing.Size(12, 15); lblNumberOfGamesSelected.TabIndex = 18; @@ -972,7 +973,7 @@ private void InitializeComponent() // tbSearchCollection // tbSearchCollection.Dock = System.Windows.Forms.DockStyle.Fill; - tbSearchCollection.Location = new System.Drawing.Point(3, 646); + tbSearchCollection.Location = new System.Drawing.Point(3, 516); tbSearchCollection.Name = "tbSearchCollection"; tbSearchCollection.PlaceholderText = "Search collection"; tbSearchCollection.Size = new System.Drawing.Size(272, 23); @@ -1045,9 +1046,9 @@ private void InitializeComponent() tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 22.5F)); tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F)); tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F)); + tableLayoutPanel1.Controls.Add(gbBoxArt, 3, 0); tableLayoutPanel1.Controls.Add(gbCartridge, 0, 0); tableLayoutPanel1.Controls.Add(gbCollection, 1, 0); - tableLayoutPanel1.Controls.Add(groupBox2, 3, 0); tableLayoutPanel1.Controls.Add(groupBox1, 2, 0); tableLayoutPanel1.Controls.Add(groupBox4, 2, 1); tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 3, 1); @@ -1055,11 +1056,11 @@ private void InitializeComponent() tableLayoutPanel1.Location = new System.Drawing.Point(0, 24); tableLayoutPanel1.Name = "tableLayoutPanel1"; tableLayoutPanel1.RowCount = 2; - tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 70.7953F)); - tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 29.2046928F)); + tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 64.2764053F)); + tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 35.7236F)); tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - tableLayoutPanel1.Size = new System.Drawing.Size(1291, 767); + tableLayoutPanel1.Size = new System.Drawing.Size(1291, 637); tableLayoutPanel1.TabIndex = 5; // // gbCartridge @@ -1071,7 +1072,7 @@ private void InitializeComponent() gbCartridge.Name = "gbCartridge"; gbCartridge.Padding = new System.Windows.Forms.Padding(2); tableLayoutPanel1.SetRowSpan(gbCartridge, 2); - gbCartridge.Size = new System.Drawing.Size(221, 763); + gbCartridge.Size = new System.Drawing.Size(221, 633); gbCartridge.TabIndex = 13; gbCartridge.TabStop = false; gbCartridge.Text = "ROMs on current Cartridge"; @@ -1102,7 +1103,7 @@ private void InitializeComponent() tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); tblLayoutCartridge.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - tblLayoutCartridge.Size = new System.Drawing.Size(217, 743); + tblLayoutCartridge.Size = new System.Drawing.Size(217, 613); tblLayoutCartridge.TabIndex = 0; // // tbCartName2 @@ -1144,7 +1145,7 @@ private void InitializeComponent() // lblNumberGamesSDCard // lblNumberGamesSDCard.AutoSize = true; - lblNumberGamesSDCard.Location = new System.Drawing.Point(3, 623); + lblNumberGamesSDCard.Location = new System.Drawing.Point(3, 493); lblNumberGamesSDCard.Name = "lblNumberGamesSDCard"; lblNumberGamesSDCard.Size = new System.Drawing.Size(12, 15); lblNumberGamesSDCard.TabIndex = 8; @@ -1154,7 +1155,7 @@ private void InitializeComponent() // btnNewSDCardFolder.Dock = System.Windows.Forms.DockStyle.Fill; btnNewSDCardFolder.Enabled = false; - btnNewSDCardFolder.Location = new System.Drawing.Point(3, 666); + btnNewSDCardFolder.Location = new System.Drawing.Point(3, 536); btnNewSDCardFolder.Name = "btnNewSDCardFolder"; btnNewSDCardFolder.Size = new System.Drawing.Size(211, 44); btnNewSDCardFolder.TabIndex = 19; @@ -1171,7 +1172,7 @@ private void InitializeComponent() tvCartridge.Location = new System.Drawing.Point(3, 103); tvCartridge.Name = "tvCartridge"; tvCartridge.SelectedImageIndex = 0; - tvCartridge.Size = new System.Drawing.Size(211, 517); + tvCartridge.Size = new System.Drawing.Size(211, 387); tvCartridge.TabIndex = 20; tvCartridge.ItemDrag += tvCartridge_OnItemDrag; tvCartridge.DragDrop += tvCartridge_OnDragDrop; @@ -1195,7 +1196,7 @@ private void InitializeComponent() tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70F)); tableLayoutPanel7.Controls.Add(pictureBox3, 0, 0); tableLayoutPanel7.Controls.Add(pbConnected2, 0, 0); - tableLayoutPanel7.Location = new System.Drawing.Point(3, 716); + tableLayoutPanel7.Location = new System.Drawing.Point(3, 586); tableLayoutPanel7.Name = "tableLayoutPanel7"; tableLayoutPanel7.RowCount = 1; tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); @@ -1229,7 +1230,7 @@ private void InitializeComponent() // tbSearchCartridge // tbSearchCartridge.Dock = System.Windows.Forms.DockStyle.Fill; - tbSearchCartridge.Location = new System.Drawing.Point(3, 646); + tbSearchCartridge.Location = new System.Drawing.Point(3, 516); tbSearchCartridge.Name = "tbSearchCartridge"; tbSearchCartridge.PlaceholderText = "Search Cartridge"; tbSearchCartridge.Size = new System.Drawing.Size(211, 23); @@ -1240,11 +1241,11 @@ private void InitializeComponent() // groupBox4.Controls.Add(tableLayoutPanel3); groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; - groupBox4.Location = new System.Drawing.Point(518, 544); + groupBox4.Location = new System.Drawing.Point(518, 411); groupBox4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); groupBox4.Name = "groupBox4"; groupBox4.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - groupBox4.Size = new System.Drawing.Size(381, 221); + groupBox4.Size = new System.Drawing.Size(381, 224); groupBox4.TabIndex = 7; groupBox4.TabStop = false; groupBox4.Text = "Button Mapping"; @@ -1264,7 +1265,7 @@ private void InitializeComponent() tableLayoutPanel3.RowCount = 2; tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 108F)); tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 68F)); - tableLayoutPanel3.Size = new System.Drawing.Size(375, 201); + tableLayoutPanel3.Size = new System.Drawing.Size(375, 204); tableLayoutPanel3.TabIndex = 9; // // panel3 @@ -1490,7 +1491,7 @@ private void InitializeComponent() panel1.Location = new System.Drawing.Point(0, 108); panel1.Margin = new System.Windows.Forms.Padding(0); panel1.Name = "panel1"; - panel1.Size = new System.Drawing.Size(375, 93); + panel1.Size = new System.Drawing.Size(375, 96); panel1.TabIndex = 30; // // tbMappingDPAD @@ -1566,13 +1567,13 @@ private void InitializeComponent() tableLayoutPanel2.Controls.Add(groupBox5, 0, 0); tableLayoutPanel2.Controls.Add(gbScrapeByName, 0, 1); tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - tableLayoutPanel2.Location = new System.Drawing.Point(902, 542); + tableLayoutPanel2.Location = new System.Drawing.Point(902, 409); tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); tableLayoutPanel2.Name = "tableLayoutPanel2"; tableLayoutPanel2.RowCount = 2; tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 73F)); tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - tableLayoutPanel2.Size = new System.Drawing.Size(389, 225); + tableLayoutPanel2.Size = new System.Drawing.Size(389, 228); tableLayoutPanel2.TabIndex = 10; // // groupBox5 @@ -1656,7 +1657,7 @@ private void InitializeComponent() gbScrapeByName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); gbScrapeByName.Name = "gbScrapeByName"; gbScrapeByName.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); - gbScrapeByName.Size = new System.Drawing.Size(385, 146); + gbScrapeByName.Size = new System.Drawing.Size(385, 149); gbScrapeByName.TabIndex = 1; gbScrapeByName.TabStop = false; gbScrapeByName.Text = "Scrape by game title"; @@ -1667,7 +1668,7 @@ private void InitializeComponent() lbScrapeResults.Enabled = false; lbScrapeResults.FormattingEnabled = true; lbScrapeResults.ItemHeight = 15; - lbScrapeResults.Location = new System.Drawing.Point(2, 49); + lbScrapeResults.Location = new System.Drawing.Point(2, 52); lbScrapeResults.Name = "lbScrapeResults"; lbScrapeResults.Size = new System.Drawing.Size(381, 94); lbScrapeResults.TabIndex = 2; @@ -1823,7 +1824,7 @@ private void InitializeComponent() AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; BackColor = System.Drawing.SystemColors.Control; - ClientSize = new System.Drawing.Size(1291, 791); + ClientSize = new System.Drawing.Size(1291, 661); Controls.Add(tableLayoutPanel1); Controls.Add(menuStrip1); Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); @@ -1849,7 +1850,7 @@ private void InitializeComponent() panel10.PerformLayout(); panel11.ResumeLayout(false); panel11.PerformLayout(); - groupBox2.ResumeLayout(false); + gbBoxArt.ResumeLayout(false); tableLayoutPanel5.ResumeLayout(false); tableLayoutPanel6.ResumeLayout(false); panel12.ResumeLayout(false); @@ -1899,7 +1900,7 @@ private void InitializeComponent() #endregion private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox gbBoxArt; private System.Windows.Forms.GroupBox gbCollection; private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; diff --git a/Forms/MainForm.cs b/Forms/MainForm.cs index 18cbae9..6990320 100644 --- a/Forms/MainForm.cs +++ b/Forms/MainForm.cs @@ -442,16 +442,18 @@ private async Task SelectSDDrive(string driveName) /* pre-select games which are found on the SD card */ var cartGamesDir = new DirectoryInfo($"{driveName}game"); - var cartGameIds = cartGamesDir.GetFiles("*.json").Select(j => Path.GetFileNameWithoutExtension(j.Name)).ToArray(); - if (cartGameIds.Length > 0) + var gameJsonPaths = cartGamesDir.GetFiles("*.json"); + if (gameJsonPaths.Length > 0) { InitFolderList(SDDrive); } GetFolderList(); - foreach (var gameId in cartGameIds) + foreach (var gameJsonPath in gameJsonPaths) { + var gameId = Path.GetFileNameWithoutExtension(gameJsonPath.Name); + if (_gamesManager.Games.Select(j => j.Id).Contains(gameId)) { var romPath = $"{driveName}game\\{gameId}.json"; @@ -464,7 +466,8 @@ private async Task SelectSDDrive(string driveName) { if (!gameId.Equals("retroarch")) { - _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = gameId, Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); + var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(gameJsonPath.FullName)); + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameId} ({gameJson.romTitle})", Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); } } } @@ -477,9 +480,11 @@ private async Task SelectSDDrive(string driveName) foreach (var gameFolder in gameFolders) { var gameFolderDir = new DirectoryInfo($"{gameFolder.FullName}\\game"); - cartGameIds = gameFolderDir.GetFiles("*.json").Select(j => Path.GetFileNameWithoutExtension(j.Name)).ToArray(); - foreach (var gameId in cartGameIds) + gameJsonPaths = gameFolderDir.GetFiles("*.json"); + + foreach (var gameJsonPath in gameJsonPaths) { + var gameId = Path.GetFileNameWithoutExtension(gameJsonPath.Name); if (gameId == "_HOME") { continue; @@ -495,10 +500,10 @@ private async Task SelectSDDrive(string driveName) } else { - _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = gameId, Path = $"{gameFolder}\\game\\{gameId}.json", IsMissngInCollection = true }); + var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(gameJsonPath.FullName)); + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameId} ({gameJson.romTitle})", Path = $"{gameFolder}\\game\\{gameId}.json", IsMissngInCollection = true }); } } - } } @@ -1064,6 +1069,8 @@ private void cbRomFilter_SelectedIndexChanged(object sender, EventArgs e) { IEnumerable gameInfos = _gamesManager.Games; //default + gbBoxArt.Visible = false; + var romFeatureFilters = Enum.GetNames(typeof(RomFeatureFilter)); if (romFeatureFilters.Contains(cbRomFilter.SelectedValue as string)) { @@ -1134,6 +1141,8 @@ private void aboutToolStripMenuItem_Click(object sender, EventArgs e) private void lvGames_MouseClick(object sender, MouseEventArgs e) { + gbBoxArt.Visible = true; + if (e.Button == MouseButtons.Right) { var focusedItem = lvGames.FocusedItem; @@ -1277,6 +1286,8 @@ private async void lbScrapeResults_SelectedIndexChanged(object sender, EventArgs await _gamesManager.SerializeGame(_game); SetDataBindings(refreshOnly: true); + gbBoxArt.Visible = true; + _game.GameInfoChanged += Game_GameInfoChanged; } } @@ -1576,7 +1587,7 @@ private void contextMenuCartridge_Opening(object sender, CancelEventArgs e) if (!currNode.Name.Equals(SDDrive)) { contextMenuCartridge.Items.Add("Rename Folder", null, contextMenuCartridge_RenameFolder_Click); - contextMenuStrip1.Items.Add(new ToolStripSeparator()); + contextMenuCartridge.Items.Add(new ToolStripSeparator()); contextMenuCartridge.Items.Add("Delete Folder", null, contextMenuCartridge_DeleteFolder_Click); } } @@ -1589,8 +1600,26 @@ private void contextMenuCartridge_Opening(object sender, CancelEventArgs e) var exists = _gamesManager.GetGameById(gameId); if (exists == null) { - contextMenuStrip1.Items.Add(new ToolStripSeparator()); - contextMenuCartridge.Items.Add("Import Game into ROM Collection", null, contextMenuCartridge_ImportGame_Click); + var extensionIsSupported = false; + try + { + var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText($"{currNode.Name}")); + if (gameInfo != null) + { + extensionIsSupported = _appSettings.Platforms.SelectMany(p => p.SupportedExtensions).Distinct().Select(e => e).Contains(Path.GetExtension(gameInfo.romFileName)); + + } + } + catch (Exception ex) + { + + } + + if (extensionIsSupported) + { + contextMenuCartridge.Items.Add(new ToolStripSeparator()); + contextMenuCartridge.Items.Add("Import Game into ROM Collection", null, contextMenuCartridge_ImportGame_Click); + } } } } @@ -1663,7 +1692,7 @@ private async void btnNewSDCardFolder_Click(object sender, EventArgs e) form.ShowDialog(); if (form.JustCreatedFolderName != null && Directory.Exists(Path.Combine(Path.GetPathRoot(SDDrive), "folders", form.JustCreatedFolderName))) { - await SelectSDDrive(Path.Combine(Path.GetPathRoot(SDDrive), "folders", form.JustCreatedFolderName) + "\\"); + await SelectSDDrive(SDDrive); } } } @@ -1720,6 +1749,40 @@ private async void tvCartridge_MouseClick(object sender, MouseEventArgs e) contextMenuCartridge.Show(Cursor.Position); return; } + else if (e.Button == MouseButtons.Left) + { + TreeNode dstNode = tvCartridge.GetNodeAt(e.X, e.Y); + + var gameId = Path.GetFileNameWithoutExtension(dstNode.Name); + + var found = false; + foreach (var groupItem in lvGames.Groups) + { + var items = ((ListViewGroup)groupItem).Items; + + foreach (var item in items) + { + var currItem = (ListViewItem)item; + currItem.Selected = false; + if (currItem.Name.ToLower().Equals(gameId.ToLower())) + { + gbBoxArt.Visible = true; + + currItem.Selected = true; + currItem.EnsureVisible(); + + lvGames.Focus(); + + found = true; + } + } + } + + if (!found) + { + cbRomFilter_SelectedIndexChanged(null, null); + } + } } private void tbSearchCollection_KeyDown(object sender, KeyEventArgs e) diff --git a/Forms/MainForm.resx b/Forms/MainForm.resx index 9db597e..61d7b73 100644 --- a/Forms/MainForm.resx +++ b/Forms/MainForm.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhggAAAJNU0Z0AUkBTAIBAQMB - AAHAAQABwAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG + AAF4AQIBeAECARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC diff --git a/Forms/SelectPlatform.Designer.cs b/Forms/SelectPlatform.Designer.cs index 9a86a1c..5c30844 100644 --- a/Forms/SelectPlatform.Designer.cs +++ b/Forms/SelectPlatform.Designer.cs @@ -29,80 +29,91 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.label1 = new System.Windows.Forms.Label(); - this.cbPossiblePlatforms = new System.Windows.Forms.ComboBox(); - this.btnSelectPlatformOK = new System.Windows.Forms.Button(); - this.lblGame = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.SuspendLayout(); + label1 = new System.Windows.Forms.Label(); + cbPossiblePlatforms = new System.Windows.Forms.ComboBox(); + btnSelectPlatformOK = new System.Windows.Forms.Button(); + lblGame = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + btnSelectPlatformCancel = new System.Windows.Forms.Button(); + SuspendLayout(); // // label1 // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(13, 13); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(187, 15); - this.label1.TabIndex = 0; - this.label1.Text = "Could not autodetect platform for"; + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(13, 13); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(187, 15); + label1.TabIndex = 0; + label1.Text = "Could not autodetect platform for"; // // cbPossiblePlatforms // - this.cbPossiblePlatforms.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbPossiblePlatforms.FormattingEnabled = true; - this.cbPossiblePlatforms.Location = new System.Drawing.Point(206, 35); - this.cbPossiblePlatforms.Name = "cbPossiblePlatforms"; - this.cbPossiblePlatforms.Size = new System.Drawing.Size(218, 23); - this.cbPossiblePlatforms.TabIndex = 1; + cbPossiblePlatforms.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + cbPossiblePlatforms.FormattingEnabled = true; + cbPossiblePlatforms.Location = new System.Drawing.Point(206, 35); + cbPossiblePlatforms.Name = "cbPossiblePlatforms"; + cbPossiblePlatforms.Size = new System.Drawing.Size(218, 23); + cbPossiblePlatforms.TabIndex = 1; // // btnSelectPlatformOK // - this.btnSelectPlatformOK.Location = new System.Drawing.Point(430, 35); - this.btnSelectPlatformOK.Name = "btnSelectPlatformOK"; - this.btnSelectPlatformOK.Size = new System.Drawing.Size(75, 23); - this.btnSelectPlatformOK.TabIndex = 2; - this.btnSelectPlatformOK.Text = "OK"; - this.btnSelectPlatformOK.UseVisualStyleBackColor = true; - this.btnSelectPlatformOK.Click += new System.EventHandler(this.btnSelectPlatformOK_Click); + btnSelectPlatformOK.Location = new System.Drawing.Point(430, 35); + btnSelectPlatformOK.Name = "btnSelectPlatformOK"; + btnSelectPlatformOK.Size = new System.Drawing.Size(75, 23); + btnSelectPlatformOK.TabIndex = 2; + btnSelectPlatformOK.Text = "OK"; + btnSelectPlatformOK.UseVisualStyleBackColor = true; + btnSelectPlatformOK.Click += btnSelectPlatformOK_Click; // // lblGame // - this.lblGame.AutoSize = true; - this.lblGame.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.lblGame.Location = new System.Drawing.Point(206, 13); - this.lblGame.Name = "lblGame"; - this.lblGame.Size = new System.Drawing.Size(53, 15); - this.lblGame.TabIndex = 4; - this.lblGame.Text = "lblGame"; + lblGame.AutoSize = true; + lblGame.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + lblGame.Location = new System.Drawing.Point(206, 13); + lblGame.Name = "lblGame"; + lblGame.Size = new System.Drawing.Size(53, 15); + lblGame.TabIndex = 4; + lblGame.Text = "lblGame"; // // label2 // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(13, 38); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(125, 15); - this.label2.TabIndex = 5; - this.label2.Text = "Please select platform:"; + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(13, 38); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(125, 15); + label2.TabIndex = 5; + label2.Text = "Please select platform:"; + // + // btnSelectPlatformCancel + // + btnSelectPlatformCancel.Location = new System.Drawing.Point(430, 64); + btnSelectPlatformCancel.Name = "btnSelectPlatformCancel"; + btnSelectPlatformCancel.Size = new System.Drawing.Size(75, 23); + btnSelectPlatformCancel.TabIndex = 6; + btnSelectPlatformCancel.Text = "Cancel"; + btnSelectPlatformCancel.UseVisualStyleBackColor = true; + btnSelectPlatformCancel.Click += btnSelectPlatformCancel_Click; // // SelectPlatform // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(512, 66); - this.ControlBox = false; - this.Controls.Add(this.label2); - this.Controls.Add(this.lblGame); - this.Controls.Add(this.btnSelectPlatformOK); - this.Controls.Add(this.cbPossiblePlatforms); - this.Controls.Add(this.label1); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SelectPlatform"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Select Game Platform"; - this.TopMost = true; - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(512, 96); + ControlBox = false; + Controls.Add(btnSelectPlatformCancel); + Controls.Add(label2); + Controls.Add(lblGame); + Controls.Add(btnSelectPlatformOK); + Controls.Add(cbPossiblePlatforms); + Controls.Add(label1); + MaximizeBox = false; + MinimizeBox = false; + Name = "SelectPlatform"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "Select Game Platform"; + TopMost = true; + ResumeLayout(false); + PerformLayout(); } #endregion @@ -112,5 +123,6 @@ private void InitializeComponent() private System.Windows.Forms.Button btnSelectPlatformOK; private System.Windows.Forms.Label lblGame; private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnSelectPlatformCancel; } } \ No newline at end of file diff --git a/Forms/SelectPlatform.cs b/Forms/SelectPlatform.cs index 94f7079..69e3d2b 100644 --- a/Forms/SelectPlatform.cs +++ b/Forms/SelectPlatform.cs @@ -34,5 +34,11 @@ private void btnSelectPlatformOK_Click(object sender, EventArgs e) //UseAsDefault = cbUseAsDefault.Checked; this.Close(); } + + private void btnSelectPlatformCancel_Click(object sender, EventArgs e) + { + SelectedPlatform = null; + this.Close(); + } } } diff --git a/Forms/SelectPlatform.resx b/Forms/SelectPlatform.resx index f298a7b..af32865 100644 --- a/Forms/SelectPlatform.resx +++ b/Forms/SelectPlatform.resx @@ -1,4 +1,64 @@ - + + + diff --git a/Services/GamesManager.cs b/Services/GamesManager.cs index 7fcf58f..d396ebc 100644 --- a/Services/GamesManager.cs +++ b/Services/GamesManager.cs @@ -392,7 +392,7 @@ private IEnumerable GetFilesFromCue(string cueFilePath) var metaFiles = new List(); foreach (var line in File.ReadAllLines(cueFilePath)) { - if (!line.StartsWith("FILE \"") || line.Split('"').Length != 3) continue; + if (!line.Trim().StartsWith("FILE \"") || line.Split('"').Length != 3) continue; metaFiles.Add(Path.Combine(Path.GetDirectoryName(cueFilePath), line.Split('"')[1])); } return metaFiles; @@ -465,6 +465,40 @@ bool IsValidM3u(string m3uFilePath) var romExtracted = false; var romTmpFilePath = ""; + var f = new FileInfo(romPath); + + if (!f.Exists || f.Length == 0) + { + var msg = $"Trying to add this file to collection:\n\n{romPath}\n\nBut it doesn't exist!\n\n"; + msg += "Do you want to select the correct file?"; + + var answer = MessageBox.Show(msg, "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); + if (answer == DialogResult.Yes) + { + OpenFileDialog dialog = new OpenFileDialog() + { + Multiselect = false, + Filter = $"*.*|*.*", + Title = "Select ROM file", + InitialDirectory = Path.GetDirectoryName(romPath), + FileName = romPath + }; + + if (dialog.ShowDialog() == DialogResult.OK) + { + romPath = dialog.FileNames[0]; + } + else + { + continue; + } + } + else + { + continue; + } + } + if (Path.GetExtension(romPath).ToLower() == ".zip") { string tempFileName = Path.GetFileNameWithoutExtension(Path.GetTempFileName()); @@ -876,7 +910,14 @@ internal async Task EnsurePlatform(IEnumerable games, IProgress<(strin using (var form = new SelectPlatform(possiblePlatforms, game)) { form.ShowDialog(); - game.romPlatformId = form.SelectedPlatform.Id; + if (form.SelectedPlatform != null) + { + game.romPlatformId = form.SelectedPlatform.Id; + } else + { + game.romPlatform = ""; + } + if (form.UseAsDefault) { useAsDefaultExtensions.Add(ext, game.romPlatformId); From 23e449124ac08343abf864212893e73e78eb122b Mon Sep 17 00:00:00 2001 From: muid Date: Sun, 2 Jun 2024 17:46:24 +0200 Subject: [PATCH 3/5] - show error message when game can't be moved to folder --- Forms/MainForm.cs | 14 +++++++++----- Forms/MainForm.resx | 2 +- Services/GamesManager.cs | 7 ++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Forms/MainForm.cs b/Forms/MainForm.cs index 6990320..9759ccb 100644 --- a/Forms/MainForm.cs +++ b/Forms/MainForm.cs @@ -1453,12 +1453,12 @@ private async void pbGameImage_DragDrop(object sender, DragEventArgs e) private void tvCartridge_OnDragEnter(object sender, DragEventArgs e) { - e.Effect = DragDropEffects.Copy; + e.Effect = DragDropEffects.Move; } private void tvCartridge_OnItemDrag(object sender, ItemDragEventArgs e) { - DoDragDrop(e.Item, DragDropEffects.Copy); + DoDragDrop(e.Item, DragDropEffects.Move); } private void tvCartridge_DragOver(object sender, DragEventArgs e) @@ -1703,12 +1703,17 @@ public async Task MoveGameOnSDCard(string currentCartJsonFilePath, string try { var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText(currentCartJsonFilePath)); + gameInfo.Id = _gamesManager.GetGameIdFromJsonPath(SDDrive, currentCartJsonFilePath); var success = await _gamesManager.CopyGameToSDPath(newSDCardLocationPath, gameInfo); - if (success) + if (!success) { - _gamesManager.DeleteGameFilesOnSD(gameInfo, _gamesManager.GetGameRootFromJsonPath(SDDrive, currentCartJsonFilePath)); + MessageBox.Show($"Could not move game to folder - perhaps the game doesn't exist in the collection?", "Error", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; } + + _gamesManager.DeleteGameFilesOnSD(gameInfo, _gamesManager.GetGameRootFromJsonPath(SDDrive, currentCartJsonFilePath)); } catch (Exception ex) { @@ -1718,7 +1723,6 @@ public async Task MoveGameOnSDCard(string currentCartJsonFilePath, string } return ret; - } private async void btnAddGame_Click(object sender, EventArgs e) diff --git a/Forms/MainForm.resx b/Forms/MainForm.resx index 61d7b73..e0b6d7a 100644 --- a/Forms/MainForm.resx +++ b/Forms/MainForm.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhggAAAJNU0Z0AUkBTAIBAQMB - AAF4AQIBeAECARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG + AAGwAQIBsAECARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC diff --git a/Services/GamesManager.cs b/Services/GamesManager.cs index d396ebc..44611b1 100644 --- a/Services/GamesManager.cs +++ b/Services/GamesManager.cs @@ -188,7 +188,7 @@ public GameInfoTreeNode GetGameJsonFromSDCardByGameId(string gameId) return ret; } - public async Task CopyGameToSDPath(string sdDrive, GameInfo gameParam) + public async Task CopyGameToSDPath(string sdDrive, GameInfo gameParam) { bool ret = true; if (gameParam.Id is null) @@ -197,6 +197,11 @@ public async Task CopyGameToSDPath(string sdDrive, GameInfo gameParam) } var game = GetGameById(gameParam.Id); + if (game == null) + { + return false; + } + var platform = _appSettings.Platforms.SingleOrDefault(p => p.Id == game.romPlatformId); if (platform == null) return false; From ffe69e8ae10e754f43f84d68b13f8c465efbd281 Mon Sep 17 00:00:00 2001 From: muid Date: Sun, 16 Jun 2024 16:13:07 +0200 Subject: [PATCH 4/5] - Folder names in the treeview: changed from directory name to folder title - if the game.json file of a folder can't be found -- the folder gets a red icon -- the path of the missing game.json is displayed under the folder tree view - bugfix: when a folder is renamed previously the directory of the folder was renamed in the file system -- this caused problems when opening a folder on the evercade device -- now just the folder title and the title of the (virtual) cart is renamed in the json Files - bugfix: when a folder was deleted it's associated game.json and images were not deleted --- Forms/MainForm.Designer.cs | 1 + Forms/MainForm.cs | 114 ++++++++++++++++++++++++++++++++----- Forms/MainForm.resx | 25 ++++---- Models/GameInfoTreeNode.cs | 1 + Services/GamesManager.cs | 42 ++++++++++++-- 5 files changed, 151 insertions(+), 32 deletions(-) diff --git a/Forms/MainForm.Designer.cs b/Forms/MainForm.Designer.cs index 2374d9c..ebef65b 100644 --- a/Forms/MainForm.Designer.cs +++ b/Forms/MainForm.Designer.cs @@ -1188,6 +1188,7 @@ private void InitializeComponent() imageList1.Images.SetKeyName(0, "check.png"); imageList1.Images.SetKeyName(1, "warning.png"); imageList1.Images.SetKeyName(2, "folder.png"); + imageList1.Images.SetKeyName(3, "warning_red.png"); // // tableLayoutPanel7 // diff --git a/Forms/MainForm.cs b/Forms/MainForm.cs index 9759ccb..f03bfb4 100644 --- a/Forms/MainForm.cs +++ b/Forms/MainForm.cs @@ -30,6 +30,7 @@ public partial class MainForm : Form private readonly AppUpdateManager _appUpdateManager; private readonly AppSettings _appSettings; private readonly UserSettingsManager _userSettingsManager; + private ToolTip toolTipLabel = new ToolTip(); public string SDDrive { get; set; } public MainForm(GamesManager gamesManager, @@ -467,7 +468,10 @@ private async Task SelectSDDrive(string driveName) if (!gameId.Equals("retroarch")) { var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(gameJsonPath.FullName)); - _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameId} ({gameJson.romTitle})", Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); + if (gameJson != null) + { + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameId} ({gameJson.romTitle})", Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); + } } } } @@ -802,7 +806,19 @@ private void GetFolderList() foreach (var dir in folders.GetDirectories()) { var folderSubItem = new GameInfoTreeNode(); - folderSubItem.Title = Path.GetFileName(dir.FullName); + var gameJsonPath = _gamesManager.GetGameJsonFromFolderPath(dir.FullName); + + if (File.Exists(gameJsonPath)) + { + var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText(gameJsonPath)); + folderSubItem.Title = gameInfo.romTitle; + } + else + { + folderSubItem.IsMissngOnCartridge = true; + folderSubItem.Title = Path.GetFileName(dir.FullName); + } + folderSubItem.Path = dir.FullName + "\\"; folderSubItem.IsFolder = true; @@ -817,22 +833,33 @@ private void BuildFolderTree(string search) tvCartridge.Nodes.Clear(); var rootNode = new TreeNode(); + if (!string.IsNullOrWhiteSpace(SDDrive)) + { + var rootGameInfo = _gamesManager.GetGameJsonFromSDCardByPath(SDDrive); + rootNode.Text = rootGameInfo.Title; + rootNode.Name = rootGameInfo.Path; + rootNode.ImageIndex = 2; + tvCartridge.Nodes.Add(rootNode); + } + foreach (var folder in _gamesManager.GamesOnSDCard) { if (folder.IsFolder) { if (!String.IsNullOrEmpty(folder.Path) && folder.Path == SDDrive) { - rootNode = new TreeNode(folder.Title); - rootNode.Name = folder.Path; - rootNode.ImageIndex = 2; - tvCartridge.Nodes.Add(rootNode); + // rootNode already exists } else { var folderNode = new TreeNode(folder.Title); folderNode.Name = folder.Path; folderNode.ImageIndex = 2; + if (folder.IsMissngOnCartridge) + { + folderNode.ImageIndex = 3; + } + tvCartridge.Nodes.Add(folderNode); } } @@ -911,6 +938,7 @@ private void BuildFolderTree(string search) } tvCartridge.ExpandAll(); + rootNode.EnsureVisible(); } private TreeNode findParentNodeOfGamePath(TreeNode node) @@ -1632,15 +1660,17 @@ private async void contextMenuCartridge_RenameFolder_Click(object sender, EventA { try { - var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText($"{currNode.Name}\\cartridge.json")); - gameInfo.cartridgeName = newName; - File.WriteAllText($"{currNode.Name}\\cartridge.json", JsonConvert.SerializeObject(gameInfo, Formatting.Indented)); + var folderPath = currNode.Name; - var orgPath = Path.GetDirectoryName(currNode.Name); - var pathBase = orgPath.Substring(0, orgPath.LastIndexOf("\\")); - var newPath = Path.Combine(pathBase, newName); + var gameJsonPath = _gamesManager.GetGameJsonFromFolderPath(folderPath); + var gameInfo = JsonConvert.DeserializeObject(File.ReadAllText(gameJsonPath)); + gameInfo.romTitle = newName; + File.WriteAllText(gameJsonPath, JsonConvert.SerializeObject(gameInfo, Formatting.Indented)); - Directory.Move(orgPath, newPath); + var gameCartridgeJson = $"{currNode.Name}\\cartridge.json"; + var cartInfo = JsonConvert.DeserializeObject(File.ReadAllText(gameCartridgeJson)); + cartInfo.cartridgeName = newName; + File.WriteAllText(gameCartridgeJson, JsonConvert.SerializeObject(cartInfo, Formatting.Indented)); } catch (Exception ex) { @@ -1657,7 +1687,7 @@ private async void contextMenuCartridge_DeleteFolder_Click(object sender, EventA if (MessageBox.Show($"Are you sure you want to delete this Folder (\"{currNode.Text}\") from the Cartridge?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { - _gamesManager.DeleteGameFolderOnSD(new GameInfo { Id = currNode.Name }); // SDDrive + _gamesManager.DeleteGameFolderOnSD(new GameInfo { Id = currNode.Name }, SDDrive); await SelectSDDrive(SDDrive); } } @@ -1756,9 +1786,63 @@ private async void tvCartridge_MouseClick(object sender, MouseEventArgs e) else if (e.Button == MouseButtons.Left) { TreeNode dstNode = tvCartridge.GetNodeAt(e.X, e.Y); - + tvCartridge.SelectedNode = dstNode; + var isFolder = false; + var isRoot = false; var gameId = Path.GetFileNameWithoutExtension(dstNode.Name); + if (String.IsNullOrEmpty(gameId)) + { + if (dstNode.Name.Equals(SDDrive)) + { + isRoot = true; + } + else + { + gameId = "_" + _gamesManager.GetFolderIdFromPath(dstNode.Name); + } + + isFolder = true; + } + + var gameInfo = _gamesManager.GetGameJsonFromSDCardByGameId(gameId); + if (!isRoot && (gameInfo == null || gameInfo.IsMissngOnCartridge)) + { + var msg = $"Missing: {Path.Combine(Path.GetPathRoot(dstNode.Name), "game", gameId + ".json")}"; + lblNumberGamesSDCard.Text = $"{msg.Substring(0, 30)}..."; + toolTipLabel.SetToolTip(lblNumberGamesSDCard, msg); + + if (tvCartridge.SelectedNode != null) + { + tvCartridge.SelectedNode.ImageIndex = 3; + tvCartridge.SelectedNode.SelectedImageIndex = 3; + } + } + else if (!isFolder && gameInfo != null && gameInfo.IsMissngInCollection) + { + var msg = $"Missing in Collection"; + lblNumberGamesSDCard.Text = msg; + toolTipLabel.SetToolTip(lblNumberGamesSDCard, msg); + if (tvCartridge.SelectedNode != null) + { + tvCartridge.SelectedNode.ImageIndex = 1; + tvCartridge.SelectedNode.SelectedImageIndex = 1; + } + } + else + { + UpdateTotalGamesOnSDCardLabel(); + toolTipLabel.SetToolTip(lblNumberGamesSDCard, ""); + if (isFolder) + { + if (tvCartridge.SelectedNode != null) + { + tvCartridge.SelectedNode.ImageIndex = 2; + tvCartridge.SelectedNode.SelectedImageIndex = 2; + } + } + } + var found = false; foreach (var groupItem in lvGames.Groups) { diff --git a/Forms/MainForm.resx b/Forms/MainForm.resx index e0b6d7a..406bb80 100644 --- a/Forms/MainForm.resx +++ b/Forms/MainForm.resx @@ -124,9 +124,9 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhggAAAJNU0Z0AUkBTAIBAQMB - AAGwAQIBsAECARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG - AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA6AgAAAJNU0Z0AUkBTAIBAQQB + AAF4AQQBeAEEARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEgAwABAQEAAQgG + AAEIGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC MwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZAgABZgHMAgABZgH/AgAB @@ -153,15 +153,16 @@ AAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEAAcwB/wFmAQAC/wGZAQAC /wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEAASEBAAGlAQADXwEAA3cB AAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7Af8BAAGkAqABAAOAAwAB - /wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+TAAH0CzgDAA5ZFQAB/wHtAeoB/woAAcMLOAMADlkU - AAH/Ae0BEgHtARMB/woABTgBEgQ4AZoDAA5ZEwAB/wHtARIC/wHsAUMB/wkAAf8JOAQADlkTAAHsARQB - /wIAAf8B6wFDAf8JAAQ4ARIDOAH0BAAOWRMAARIB/wUAAesBFQH/CQADOAESAzgFAA5ZGgAB/wHsARQB - /wgAAVkCOAESAjgB/wUADnobAAH/Ae0BEgH/CAACOAESAjgGAA56HAAB/wHtARIB/wcAAcMDOAcADnod - AAH/Ae0BEggAAjgBmgcABzEHmh4AAf8B7wgAAf8BOAgABzfYAAFCAU0BPgcAAT4DAAEoAwABQAMAARAD - AAEBAQABAQUAAYAXAAP/AQAG/wIABv8CAAL/AcABAwGAAQECAAHwAf8BwAEDAYABAQIAAeABfwHgAQMB - gAEBAgABwAE/AeABBwGAAQECAAHGAR8B8AEHAYABAQIAAc8BjwH4AQ8BgAEBAgAB/wGHAfgBDwGAAQEC - AAH/AcMB/AEfAYABAQIAAf8B4QH8AT8BgAEBAgAB/wHxAf4BPwGAAQECAAH/AfkB/gF/AYAB/wIABv8C - AAb/AgAG/wIACw== + /wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA///AP8A/wD/AJcAAfQLOAMADlkDAAH0C0cGAAH/Ae0B + 6gH/CgABwws4AwAOWQMAAcMLRwUAAf8B7QESAe0BEwH/CgAFOAESBDgBmgMADlkEAAVHAfsERwGaBAAB + /wHtARIC/wHsAUMB/wkAAf8JOAQADlkEAAH/CUcFAAHsARQB/wIAAf8B6wFDAf8JAAQ4ARIDOAH0BAAO + WQUABEcB+wNHAfQFAAESAf8FAAHrARUB/wkAAzgBEgM4BQAOWQYAA0cB+wNHDQAB/wHsARQB/wgAAVkC + OAESAjgB/wUADnoGAAFZAkcB+wJHAf8OAAH/Ae0BEgH/CAACOAESAjgGAA56BwACRwESAUcBOBAAAf8B + 7QESAf8HAAHDAzgHAA56BwABwwNHEgAB/wHtARIIAAI4AZoHAAcxB5oIAAJHAZoTAAH/Ae8IAAH/ATgI + AAc3DwAB/wFHxwABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAEv8BwAEDAYAB + AQHAAQMB8AH/AcABAwGAAQEBwAEDAeABfwHgAQMBgAEBAeABAwHAAT8B4AEHAYABAQHgAQcBxgEfAfAB + BwGAAQEB8AEHAc8BjwH4AQ8BgAEBAfgBDwH/AYcB+AEPAYABAQH4AQ8B/wHDAfwBHwGAAQEB/AEfAf8B + 4QH8AT8BgAEBAfwBPwH/AfEB/gE/AYABAQH+AT8B/wH5Af4BfwGAAf8B/gF/GP8L diff --git a/Models/GameInfoTreeNode.cs b/Models/GameInfoTreeNode.cs index 8f5a599..21e27ec 100644 --- a/Models/GameInfoTreeNode.cs +++ b/Models/GameInfoTreeNode.cs @@ -13,5 +13,6 @@ public class GameInfoTreeNode public string Path { get; set; } public bool IsFolder { get; set; } public bool IsMissngInCollection { get; set; } + public bool IsMissngOnCartridge { get; set; } } } diff --git a/Services/GamesManager.cs b/Services/GamesManager.cs index 44611b1..c659348 100644 --- a/Services/GamesManager.cs +++ b/Services/GamesManager.cs @@ -184,7 +184,14 @@ public bool SdContainsKnownGames(string sdDrive) public GameInfoTreeNode GetGameJsonFromSDCardByGameId(string gameId) { - var ret = GamesOnSDCard.Where(g => g.Id == gameId).ToList().FirstOrDefault(); + var ret = GamesOnSDCard.Where(g => g.Id != null && g.Id.ToLower() == gameId.ToLower()).ToList().FirstOrDefault(); + + return ret; + } + + public GameInfoTreeNode GetGameJsonFromSDCardByPath(string path) + { + var ret = GamesOnSDCard.Where(g => g.Path != null && g.Path.ToLower() == path.ToLower()).ToList().FirstOrDefault(); return ret; } @@ -776,12 +783,17 @@ public void DeleteGameFilesOnSD(GameInfo game, string sdDrive) File.Delete(f.FullName); }); } - public void DeleteGameFolderOnSD(GameInfo game) + public void DeleteGameFolderOnSD(GameInfo game, string SDDrive) { - var t = Path.GetDirectoryName(game.Id); - Directory.Delete(game.Id, true); - + var folderPath = game.Id; + var gameJsonPath = GetGameJsonFromFolderPath(folderPath); + + //a folder also has "game files" which need to be deleted + DeleteGameFilesOnSD(new GameInfo { Id = gameJsonPath }, GetGameRootFromJsonPath(SDDrive, gameJsonPath)); + + Directory.Delete(folderPath, true); } + public void DeleteGameByIds(IEnumerable ids) { foreach (string id in ids) @@ -1194,5 +1206,25 @@ public string GetGameIdFromJsonPath(string sdDrive, string currentGameJsonFilePa return ret; } + + public string GetFolderIdFromPath(string path) + { + if (path[path.Length - 1] == '\\') + { + path = path.Substring(0, path.Length - 1); + } + var indexFolder = path.LastIndexOf("\\"); + var folderName = path.Substring(indexFolder + 1, path.Length - (indexFolder + 1)); + return folderName; + } + + public string GetGameJsonFromFolderPath(string dir) + { + var folderName = GetFolderIdFromPath(dir); + var gameJsonFileName = folderName + ".json"; + + string gameJsonFilePath = Path.Combine(Path.GetPathRoot(dir), "game", $"_{gameJsonFileName}"); + return gameJsonFilePath; + } } } From 82c41f251bc2fdeea21239b080f36870ae0b49af Mon Sep 17 00:00:00 2001 From: muid Date: Sun, 16 Jun 2024 16:43:36 +0200 Subject: [PATCH 5/5] bugfix --- Forms/MainForm.cs | 6 +++--- Forms/MainForm.resx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Forms/MainForm.cs b/Forms/MainForm.cs index f03bfb4..784a4a2 100644 --- a/Forms/MainForm.cs +++ b/Forms/MainForm.cs @@ -470,7 +470,7 @@ private async Task SelectSDDrive(string driveName) var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(gameJsonPath.FullName)); if (gameJson != null) { - _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameId} ({gameJson.romTitle})", Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameJson.romFileName} ({gameJson.romTitle})", Path = $"{driveName}game\\{gameId}.json", IsMissngInCollection = true }); } } } @@ -505,7 +505,7 @@ private async Task SelectSDDrive(string driveName) else { var gameJson = JsonConvert.DeserializeObject(await File.ReadAllTextAsync(gameJsonPath.FullName)); - _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameId} ({gameJson.romTitle})", Path = $"{gameFolder}\\game\\{gameId}.json", IsMissngInCollection = true }); + _gamesManager.GamesOnSDCard.Add(new GameInfoTreeNode { Id = gameId, Title = $"{gameJson.romFileName} ({gameJson.romTitle})", Path = $"{gameFolder}\\game\\{gameId}.json", IsMissngInCollection = true }); } } } @@ -1809,7 +1809,7 @@ private async void tvCartridge_MouseClick(object sender, MouseEventArgs e) if (!isRoot && (gameInfo == null || gameInfo.IsMissngOnCartridge)) { var msg = $"Missing: {Path.Combine(Path.GetPathRoot(dstNode.Name), "game", gameId + ".json")}"; - lblNumberGamesSDCard.Text = $"{msg.Substring(0, 30)}..."; + lblNumberGamesSDCard.Text = $"{msg.Substring(0, 30 > msg.Length ? msg.Length : 30)}..."; toolTipLabel.SetToolTip(lblNumberGamesSDCard, msg); if (tvCartridge.SelectedNode != null) diff --git a/Forms/MainForm.resx b/Forms/MainForm.resx index 406bb80..04761f5 100644 --- a/Forms/MainForm.resx +++ b/Forms/MainForm.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA6AgAAAJNU0Z0AUkBTAIBAQQB - AAF4AQQBeAEEARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEgAwABAQEAAQgG + AAGIAQQBiAEEARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEgAwABAQEAAQgG AAEIGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC