private bool SavePackage(bool prompt) { if (CurrentPackage == null) { return(true); } SavePreview(); Application.UseWaitCursor = true; Application.DoEvents(); try { if (sChanged) { DialogResult result = DialogResult.Yes; if (prompt) { result = MessageBox.Show("Do you wish to save your changes?", "Save", MessageBoxButtons.YesNoCancel); } switch (result) { case DialogResult.Yes: IResourceIndexEntry keyEntry = CurrentPackage.Find(key => key.ResourceType == (uint)ResourceType._KEY); if (keyEntry != null) { Dictionary <ulong, bool> existing = new Dictionary <ulong, bool>(); IList <IResourceIndexEntry> list = CurrentPackage.FindAll(value => { return(true); }); foreach (IResourceIndexEntry entry in list) { if (existing.ContainsKey(entry.Instance)) { continue; } existing.Add(entry.Instance, true); } NameMapResource.NameMapResource keyResource = CreateKeyResource(CurrentPackage) as NameMapResource.NameMapResource; List <ulong> badKeys = new List <ulong>(); foreach (KeyValuePair <ulong, string> element in keyResource) { if (!existing.ContainsKey(element.Key)) { badKeys.Add(element.Key); } } foreach (ulong key in badKeys) { keyResource.Remove(key); } CurrentPackage.ReplaceResource(keyEntry, keyResource); } CurrentPackage.SavePackage(); OnListElements(CurrentPackage); break; case DialogResult.No: break; case DialogResult.Cancel: return(false); } } } finally { Application.UseWaitCursor = false; } return(true); }
public static void GenerateNameMap(IPackage package, List <TGIN> addedResourceKeys, List <TGIN> removedResourceKeys) { AResourceKey nameMapKey = new TGIBlock(0, null, 23462796u, 0u, 0uL); IResourceIndexEntry nameMapEntry = package.Find(nameMapKey.Equals); if (nameMapEntry == null) { nameMapEntry = package.AddResource(nameMapKey, null, false); } if (nameMapEntry != null) { NameMapResource.NameMapResource nameMapResource = (NameMapResource.NameMapResource)WrapperDealer.GetResource(0, package, nameMapEntry); if (nameMapResource == null || !typeof(IDictionary <ulong, string>).IsAssignableFrom(nameMapResource.GetType())) { package.DeleteResource(nameMapEntry); nameMapEntry = package.AddResource(nameMapKey, null, false); nameMapResource = (NameMapResource.NameMapResource)WrapperDealer.GetResource(0, package, nameMapEntry); } if (removedResourceKeys != null) { for (int removedResourceKeyIndex = 0; removedResourceKeyIndex < removedResourceKeys.Count; removedResourceKeyIndex++) { if (nameMapResource.Contains(removedResourceKeys[removedResourceKeyIndex].ResInstance)) { nameMapResource.Remove(removedResourceKeys[removedResourceKeyIndex].ResInstance); } } } if (addedResourceKeys != null) { for (int addedResourceKeyIndex = 0; addedResourceKeyIndex < addedResourceKeys.Count; addedResourceKeyIndex++) { if (addedResourceKeys[addedResourceKeyIndex].ResName == null) { continue; } if (nameMapResource.Contains(addedResourceKeys[addedResourceKeyIndex].ResInstance)) { nameMapResource[addedResourceKeys[addedResourceKeyIndex].ResInstance] = addedResourceKeys[addedResourceKeyIndex].ResName; } else { nameMapResource.Add(addedResourceKeys[addedResourceKeyIndex].ResInstance, addedResourceKeys[addedResourceKeyIndex].ResName); } } } List <KeyValuePair <ulong, string> > orderedNameMapResource = nameMapResource.ToList(); orderedNameMapResource.Sort((pair1, pair2) => pair1.Value.CompareTo(pair2.Value)); nameMapResource.Clear(); for (int orderedNameMapResourceIndex = 0; orderedNameMapResourceIndex < orderedNameMapResource.Count; orderedNameMapResourceIndex++) { nameMapResource.Add(orderedNameMapResource[orderedNameMapResourceIndex].Key, orderedNameMapResource[orderedNameMapResourceIndex].Value); } package.ReplaceResource(nameMapEntry, nameMapResource); } }