diff --git a/WrappersForEto.cs b/WrappersForEto.cs index b161a2b..327b5b4 100644 --- a/WrappersForEto.cs +++ b/WrappersForEto.cs @@ -160,4 +160,10 @@ namespace apprepodbmgr.Eto public string path { get; set; } public BlockMediaType disk { get; set; } } + + class TargetOsEntry + { + public string name { get; set; } + public string version { get; set; } + } } \ No newline at end of file diff --git a/dlgMetadata.xeto b/dlgMetadata.xeto index b188687..0704faa 100644 --- a/dlgMetadata.xeto +++ b/dlgMetadata.xeto @@ -80,6 +80,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -191,27 +216,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/dlgMetadata.xeto.cs b/dlgMetadata.xeto.cs index adbcb8d..4db2ce6 100644 --- a/dlgMetadata.xeto.cs +++ b/dlgMetadata.xeto.cs @@ -55,20 +55,19 @@ namespace apprepodbmgr.Eto ObservableCollection lstDisks; ObservableCollection lstFilesForMedia; - ObservableCollection lstKeywords; - ObservableCollection lstLanguages; - ObservableCollection lstLanguageTypes; - ObservableCollection lstSubcategories; - ObservableCollection lstSystems; + ObservableCollection lstKeywords; + ObservableCollection lstLanguages; + ObservableCollection lstLanguageTypes; + ObservableCollection lstOses; + ObservableCollection lstSubcategories; // TODO: Add the options to edit these fields MagazineType[] magazines; public CICMMetadataType Metadata; - public bool Modified; - PCIType[] pcis; - RequiredOperatingSystemType[] requiredOses; - bool stopped; + public bool Modified; + PCIType[] pcis; + bool stopped; Thread thdDisc; Thread thdDisk; @@ -80,7 +79,7 @@ namespace apprepodbmgr.Eto Modified = false; - cmbReleaseType = new EnumDropDown(); + cmbReleaseType = new EnumDropDown(); stkReleaseType.Items.Add(new StackLayoutItem {Control = cmbReleaseType, Expand = true}); lstKeywords = new ObservableCollection(); @@ -88,7 +87,7 @@ namespace apprepodbmgr.Eto lstCategories = new ObservableCollection(); lstSubcategories = new ObservableCollection(); lstLanguages = new ObservableCollection(); - lstSystems = new ObservableCollection(); + lstOses = new ObservableCollection(); lstArchitectures = new ObservableCollection(); lstDiscs = new ObservableCollection(); lstDisks = new ObservableCollection(); @@ -126,10 +125,15 @@ namespace apprepodbmgr.Eto DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, HeaderText = "Language" }); - treeSystems.Columns.Add(new GridColumn + treeOses.Columns.Add(new GridColumn { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "System" + DataCell = new TextBoxCell {Binding = Binding.Property(r => r.name)}, + HeaderText = "Name" + }); + treeOses.Columns.Add(new GridColumn + { + DataCell = new TextBoxCell {Binding = Binding.Property(r => r.version)}, + HeaderText = "Version" }); treeArchitectures.Columns.Add(new GridColumn { @@ -152,7 +156,7 @@ namespace apprepodbmgr.Eto treeCategories.DataStore = lstCategories; treeSubcategories.DataStore = lstSubcategories; treeLanguages.DataStore = lstLanguages; - treeSystems.DataStore = lstSystems; + treeOses.DataStore = lstOses; treeArchitectures.DataStore = lstArchitectures; treeDiscs.DataStore = lstDiscs; treeDisks.DataStore = lstDisks; @@ -162,7 +166,7 @@ namespace apprepodbmgr.Eto treeCategories.AllowMultipleSelection = false; treeSubcategories.AllowMultipleSelection = false; treeLanguages.AllowMultipleSelection = false; - treeSystems.AllowMultipleSelection = false; + treeOses.AllowMultipleSelection = false; treeArchitectures.AllowMultipleSelection = false; treeDiscs.AllowMultipleSelection = false; treeDisks.AllowMultipleSelection = false; @@ -229,28 +233,28 @@ namespace apprepodbmgr.Eto foreach(string developer in Metadata.Developer) { if(!string.IsNullOrWhiteSpace(txtDeveloper.Text)) txtDeveloper.Text += ","; - txtDeveloper.Text += developer; + txtDeveloper.Text += developer; } if(Metadata.Publisher != null) foreach(string publisher in Metadata.Publisher) { if(!string.IsNullOrWhiteSpace(txtPublisher.Text)) txtPublisher.Text += ","; - txtPublisher.Text += publisher; + txtPublisher.Text += publisher; } if(Metadata.Author != null) foreach(string author in Metadata.Author) { if(!string.IsNullOrWhiteSpace(txtPublisher.Text)) txtPublisher.Text += ","; - txtPublisher.Text += author; + txtPublisher.Text += author; } if(Metadata.Performer != null) foreach(string performer in Metadata.Performer) { if(!string.IsNullOrWhiteSpace(txtPublisher.Text)) txtPublisher.Text += ","; - txtPublisher.Text += performer; + txtPublisher.Text += performer; } txtName.Text = Metadata.Name; @@ -289,9 +293,10 @@ namespace apprepodbmgr.Eto lstLanguageTypes.Remove(language.ToString()); } - if(Metadata.Systems != null) - foreach(string system in Metadata.Systems) - lstSystems.Add(new StringEntry {str = system}); + if(Metadata.RequiredOperatingSystems != null) + foreach(RequiredOperatingSystemType reqos in Metadata.RequiredOperatingSystems) + foreach(string reqver in reqos.Version) + lstOses.Add(new TargetOsEntry {name = reqos.Name, version = reqver}); if(Metadata.Architectures != null) foreach(ArchitecturesTypeArchitecture architecture in Metadata.Architectures) @@ -304,7 +309,7 @@ namespace apprepodbmgr.Eto foreach(OpticalDiscType disc in Metadata.OpticalDisc) { lstDiscs.Add(new DiscEntry {path = disc.Image.Value, disc = disc}); - List files = new List {disc.Image.Value}; + List files = new List {disc.Image.Value}; if(disc.ADIP != null) files.Add(disc.ADIP.Image); if(disc.ATIP != null) files.Add(disc.ATIP.Image); if(disc.BCA != null) files.Add(disc.BCA.Image); @@ -313,11 +318,11 @@ namespace apprepodbmgr.Eto if(disc.DDS != null) files.Add(disc.DDS.Image); if(disc.DMI != null) files.Add(disc.DMI.Image); if(disc.LastRMD != null) files.Add(disc.LastRMD.Image); - if(disc.LeadIn != null) + if(disc.LeadIn != null) foreach(BorderType border in disc.LeadIn) files.Add(border.Image); if(disc.LeadInCdText != null) files.Add(disc.LeadInCdText.Image); - if(disc.LeadOut != null) + if(disc.LeadOut != null) foreach(BorderType border in disc.LeadOut) files.Add(border.Image); if(disc.MediaID != null) files.Add(disc.MediaID.Image); @@ -339,12 +344,12 @@ namespace apprepodbmgr.Eto foreach(BlockMediaType disk in Metadata.BlockMedia) { lstDisks.Add(new DiskEntry {path = disk.Image.Value, disk = disk}); - List files = new List {disk.Image.Value}; + List files = new List {disk.Image.Value}; if(disk.ATA?.Identify != null) files.Add(disk.ATA.Identify.Image); if(disk.MAM != null) files.Add(disk.MAM.Image); if(disk.PCI?.ExpansionROM != null) files.Add(disk.PCI.ExpansionROM.Image.Value); if(disk.PCMCIA?.CIS != null) files.Add(disk.PCMCIA.CIS.Image); - if(disk.SCSI != null) + if(disk.SCSI != null) { if(disk.SCSI.Inquiry != null) files.Add(disk.SCSI.Inquiry.Image); if(disk.SCSI.LogSense != null) files.Add(disk.SCSI.LogSense.Image); @@ -372,7 +377,6 @@ namespace apprepodbmgr.Eto magazines = Metadata.Magazine; books = Metadata.Book; - requiredOses = Metadata.RequiredOperatingSystems; usermanuals = Metadata.UserManual; adverts = Metadata.Advertisement; linearmedias = Metadata.LinearMedia; @@ -393,7 +397,7 @@ namespace apprepodbmgr.Eto protected void OnBtnAddKeywordClicked(object sender, EventArgs e) { lstKeywords.Add(new StringEntry {str = txtNewKeyword.Text}); - txtNewKeyword.Text = ""; + txtNewKeyword.Text = ""; } protected void OnBtnRemoveKeywordClicked(object sender, EventArgs e) @@ -431,13 +435,13 @@ namespace apprepodbmgr.Eto protected void OnBtnAddCategoryClicked(object sender, EventArgs e) { lstCategories.Add(new StringEntry {str = txtNewCategory.Text}); - txtNewCategory.Text = ""; + txtNewCategory.Text = ""; } protected void OnBtnAddSubcategoryClicked(object sender, EventArgs e) { lstSubcategories.Add(new StringEntry {str = txtNewSubcategory.Text}); - txtNewSubcategory.Text = ""; + txtNewSubcategory.Text = ""; } protected void OnBtnRemoveSubcategoryClicked(object sender, EventArgs e) @@ -483,20 +487,33 @@ namespace apprepodbmgr.Eto FillLanguagesCombo(); } - protected void OnBtnAddSystemClicked(object sender, EventArgs e) + protected void OnBtnAddNewOsClicked(object sender, EventArgs e) { - lstSystems.Add(new StringEntry {str = txtNewSystem.Text}); - txtNewSystem.Text = ""; + if(string.IsNullOrWhiteSpace(txtNewOsName.Text)) + { + MessageBox.Show("Operating system name cannot be empty.", MessageBoxType.Error); + return; + } + + if(string.IsNullOrWhiteSpace(txtNewOsVersion.Text)) + { + MessageBox.Show("Operating system version cannot be empty.", MessageBoxType.Error); + return; + } + + lstOses.Add(new TargetOsEntry {name = txtNewOsName.Text, version = txtNewOsVersion.Text}); + txtNewOsName.Text = ""; + txtNewOsVersion.Text = ""; } - protected void OnBtnClearSystemsClicked(object sender, EventArgs e) + protected void OnBtnClearOsesClicked(object sender, EventArgs e) { - lstSystems.Clear(); + lstOses.Clear(); } - protected void OnBtnRemoveSystemClicked(object sender, EventArgs e) + protected void OnBtnRemoveOsClicked(object sender, EventArgs e) { - if(treeSystems.SelectedItem != null) lstSystems.Remove((StringEntry)treeSystems.SelectedItem); + if(treeOses.SelectedItem != null) lstOses.Remove((TargetOsEntry)treeOses.SelectedItem); } protected void OnBtnAddArchitectureClicked(object sender, EventArgs e) @@ -529,7 +546,7 @@ namespace apprepodbmgr.Eto tabBarcodes.Visible = false; tabCategories.Visible = false; tabLanguages.Visible = false; - tabSystems.Visible = false; + tabTargetOs.Visible = false; tabArchitectures.Visible = false; tabDisks.Visible = false; prgAddDisc1.Visible = true; @@ -616,7 +633,7 @@ namespace apprepodbmgr.Eto tabBarcodes.Visible = true; tabCategories.Visible = true; tabLanguages.Visible = true; - tabSystems.Visible = true; + tabTargetOs.Visible = true; tabArchitectures.Visible = true; tabDisks.Visible = true; prgAddDisc1.Visible = false; @@ -648,7 +665,7 @@ namespace apprepodbmgr.Eto OpticalDiscType disc = Context.WorkingDisc; lstDiscs.Add(new DiscEntry {path = Context.SelectedFile, disc = disc}); - List files = new List {disc.Image.Value}; + List files = new List {disc.Image.Value}; if(disc.ADIP != null) files.Add(disc.ADIP.Image); if(disc.ATIP != null) files.Add(disc.ATIP.Image); if(disc.BCA != null) files.Add(disc.BCA.Image); @@ -678,7 +695,7 @@ namespace apprepodbmgr.Eto tabBarcodes.Visible = true; tabCategories.Visible = true; tabLanguages.Visible = true; - tabSystems.Visible = true; + tabTargetOs.Visible = true; tabArchitectures.Visible = true; tabDisks.Visible = true; prgAddDisc1.Visible = false; @@ -724,7 +741,7 @@ namespace apprepodbmgr.Eto tabBarcodes.Visible = false; tabCategories.Visible = false; tabLanguages.Visible = false; - tabSystems.Visible = false; + tabTargetOs.Visible = false; tabArchitectures.Visible = false; tabDiscs.Visible = false; prgAddDisk1.Visible = true; @@ -811,7 +828,7 @@ namespace apprepodbmgr.Eto tabBarcodes.Visible = true; tabCategories.Visible = true; tabLanguages.Visible = true; - tabSystems.Visible = true; + tabTargetOs.Visible = true; tabArchitectures.Visible = true; tabDiscs.Visible = true; prgAddDisk1.Visible = false; @@ -843,12 +860,12 @@ namespace apprepodbmgr.Eto BlockMediaType disk = Context.WorkingDisk; lstDisks.Add(new DiskEntry {path = disk.Image.Value, disk = disk}); - List files = new List {disk.Image.Value}; + List files = new List {disk.Image.Value}; if(disk.ATA?.Identify != null) files.Add(disk.ATA.Identify.Image); if(disk.MAM != null) files.Add(disk.MAM.Image); if(disk.PCI?.ExpansionROM != null) files.Add(disk.PCI.ExpansionROM.Image.Value); if(disk.PCMCIA?.CIS != null) files.Add(disk.PCMCIA.CIS.Image); - if(disk.SCSI != null) + if(disk.SCSI != null) { if(disk.SCSI.Inquiry != null) files.Add(disk.SCSI.Inquiry.Image); if(disk.SCSI.LogSense != null) files.Add(disk.SCSI.LogSense.Image); @@ -877,7 +894,7 @@ namespace apprepodbmgr.Eto tabBarcodes.Visible = true; tabCategories.Visible = true; tabLanguages.Visible = true; - tabSystems.Visible = true; + tabTargetOs.Visible = true; tabArchitectures.Visible = true; tabDiscs.Visible = true; prgAddDisk1.Visible = false; @@ -923,7 +940,7 @@ namespace apprepodbmgr.Eto protected void OnBtnOKClicked(object sender, EventArgs e) { - Metadata = new CICMMetadataType(); + Metadata = new CICMMetadataType(); List architectures = new List(); List barcodes = new List(); List disks = new List(); @@ -977,7 +994,31 @@ namespace apprepodbmgr.Eto foreach(StringEntry entry in lstSubcategories) subcategories.Add(entry.str); - foreach(StringEntry entry in lstSystems) systems.Add(entry.str); + if(lstOses.Count > 0) + { + Dictionary> osesDict = new Dictionary>(); + foreach(TargetOsEntry entry in lstOses.OrderBy(t => t.name).ThenBy(t => t.version)) + { + osesDict.TryGetValue(entry.name, out List versList); + + if(versList == null) versList = new List(); + + if(versList.Contains(entry.version)) continue; + + versList.Add(entry.version); + versList.Sort(); + osesDict.Remove(entry.name); + osesDict.Add(entry.name, versList); + } + + Metadata.RequiredOperatingSystems = osesDict + .OrderBy(t => t.Key) + .Select(entry => new RequiredOperatingSystemType + { + Name = entry.Key, + Version = entry.Value.ToArray() + }).ToArray(); + } if(architectures.Count > 0) Metadata.Architectures = architectures.ToArray(); if(barcodes.Count > 0) Metadata.Barcodes = barcodes.ToArray(); @@ -989,14 +1030,13 @@ namespace apprepodbmgr.Eto if(subcategories.Count > 0) Metadata.Subcategories = subcategories.ToArray(); if(systems.Count > 0) Metadata.Systems = systems.ToArray(); - Metadata.Magazine = magazines; - Metadata.Book = books; - Metadata.RequiredOperatingSystems = requiredOses; - Metadata.UserManual = usermanuals; - Metadata.Advertisement = adverts; - Metadata.LinearMedia = linearmedias; - Metadata.PCICard = pcis; - Metadata.AudioMedia = audiomedias; + Metadata.Magazine = magazines; + Metadata.Book = books; + Metadata.UserManual = usermanuals; + Metadata.Advertisement = adverts; + Metadata.LinearMedia = linearmedias; + Metadata.PCICard = pcis; + Metadata.AudioMedia = audiomedias; Modified = true; Close(); @@ -1069,9 +1109,10 @@ namespace apprepodbmgr.Eto TabPage tabLanguages; ComboBox cmbLanguages; GridView treeLanguages; - TabPage tabSystems; - TextBox txtNewSystem; - GridView treeSystems; + TabPage tabTargetOs; + TextBox txtNewOsName; + TextBox txtNewOsVersion; + GridView treeOses; TabPage tabArchitectures; ComboBox cmbArchitectures; GridView treeArchitectures;