private void Wrapper_FilenameChanged(object sender, EventArgs e) { //Prepare... IndexEntryWrapper wrapper = sender as IndexEntryWrapper; TreeNode node = tagTreeView.SelectedNode; //Check if (wrapper != null && node != null) { //Set filename... map.IndexEntries[wrapper.ID].Filename = wrapper.Filename; //Prepare TreeNodeCollection collection = tagTreeView.Nodes; TreeNode parent = null; //Loop while (node.Parent != null) { //Get Parent parent = node.Parent; collection = parent.Nodes; //Remove if (node.Nodes.Count == 0) { collection.Remove(node); } //Set node = parent; } //Remove from tree... if (node.Nodes.Count == 0) { tagTreeView.Nodes.Remove(node); } //Build node = entry_BuildTagTree(map.IndexEntries[wrapper.ID]); //Re-sort... tagTreeView.BeginUpdate(); tagTreeView.Sort(); tagTreeView.EndUpdate(); //Select tagTreeView.SelectedNode = node; node.EnsureVisible(); } }
private TreeNode entry_BuildTagTree(IndexEntry entry) { //Prepare TreeNodeCollection collection = null; IndexEntryWrapper wrapper = null; TreeNode node = null; //Get or create wrapper... if (entries.ContainsKey(entry.Id)) { wrapper = entries[entry.Id]; } else { wrapper = IndexEntryWrapper.FromEntry(entry, map); wrapper.FilenameChanged += Wrapper_FilenameChanged; entries.Add(entry.Id, wrapper); } //Get Path Parts string[] parts = entry.Filename.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries); string last = parts[parts.Length - 1]; //Check... if ((!string.IsNullOrEmpty(tagSearchBox.Text) && string.Join(".", last, entry.Root).ToLower().Contains(tagSearchBox.Text.ToLower())) || string.IsNullOrEmpty(tagSearchBox.Text)) { //Prepare collection = tagTreeView.Nodes; //Loop for (int i = 0; i < parts.Length - 1; i++) { //Create or get node if (collection.ContainsKey(parts[i])) { node = collection[parts[i]]; } else { node = collection.Add(parts[i], parts[i]); } //Setup... node.ImageIndex = 0; node.SelectedImageIndex = 0; collection = node.Nodes; } //Create Node string name = $"{parts[parts.Length - 1]}.{entry.Root}"; node = new TreeNode(name, 1, 1) { Name = name, Tag = entry.Id }; //Add collection.Add(node); //Return return(node); } else { return(null); } }
/// <summary> /// Initializes a new <see cref="MapFileWrapper"/> instance. /// </summary> /// <param name="mapName">The name of the map.</param> /// <param name="strings">The map's strings.</param> /// <param name="scenario">The map's scenario ID.</param> public MapFileWrapper(string mapName, MapFile.StringList strings, IndexEntryWrapper scenario) { this.name = mapName; this.strings = strings; this.scenario = scenario; }