private void PatchForm_Load(object sender, EventArgs e) { tvPatch.Nodes.Clear(); List<String> files = new List<String>(Directory.GetFiles("mge3", "*.mcp", SearchOption.AllDirectories)); files.Add(patchSettings); // last of all foreach (String file in files) { INIFile mcpFile = new INIFile(file, new INIFile.INIVariableDef[] { INIFile.iniDefEmpty }, Encoding.Default); String[] sections = mcpFile.getSections(); foreach (String Section in sections) { Patch patch = new Patch(mcpFile, Section); String[] parents = patch.Parent.Split(new String[] { Patch.SepInternal.ToString() }, StringSplitOptions.RemoveEmptyEntries); TreeNodeCollection nodes = tvPatch.Nodes; TreeNode[] exist; for (int i = 0; i < parents.Length; i++) { exist = nodes.Find(parents[i].ToLower(), false); if (exist.Length > 0) nodes = exist[0].Nodes; else { TreeNode node = nodes.Add(parents[i].ToLower(), parents[i]); node.Checked = true; nodes = node.Nodes; } } exist = nodes.Find(Section.ToLower(), false); if (exist.Length > 0) { Patch existing = (Patch)exist[0].Tag; bool update = existing == null; if (!update) { if (patch.Version <= existing.Version) continue; if (patch.Original == null && patch.Patched == null && patch.Attach == null) { exist[0].Checked = existing.Checked = patch.Checked; existing.Removed = patch.Removed || existing.Removed; existing.Expanded = patch.Expanded; continue; } update = true; } if (update) { exist[0].Checked = patch.Checked; exist[0].Tag = patch; continue; } } else { TreeNode node = nodes.Add(Section.ToLower(), Section); node.Tag = patch; node.Checked = patch.Checked; node.ToolTipText = ""; foreach(String language in Languages) if (node.ToolTipText == "") foreach(Unit description in patch.Description) if (language == description.Name) { node.ToolTipText = description.Hex.Replace("\t", "\n"); break; } } } } RemoveEmptyNodes(tvPatch.Nodes); UpdateColour(tvPatch.Nodes, true); ExpandNodes(tvPatch.Nodes); tvPatch.Sort(); loaded = true; }
private void bOpen_Click(object sender, EventArgs e) { RestoreButton(); if (!SaveChanges(true)) return; if (openPatch.ShowDialog() != DialogResult.OK) return; INIFile mcpFile = new INIFile(openPatch.FileName, new INIFile.INIVariableDef[] { INIFile.iniDefEmpty }, Encoding.Default); String[] sections = mcpFile.getSections(); if (sections.Length > 0) { selections.Sections.Clear(); lbSections.Items.Clear(); } foreach (String section in sections) { selections.Sections.Add(section, new Patch(mcpFile, section)); lbSections.Items.Add(section); } propertyGrid.SelectedObject = null; currentState = 0; HistoryUpdate(); savePatch.FileName = openPatch.FileName; DisableEditor(); }