private void RenameCategory(TreeNode selectedNode) { using (EditCategoryForm form = new EditCategoryForm(Resources.RenameFilterCategoryTitle, selectedNode.Text)) { if (form.ShowDialog(this) == DialogResult.OK) { string newCategory = form.CategoryText; if (!newCategory.Equals(selectedNode.Text, StringComparison.Ordinal)) { foreach (TreeNode item in selectedNode.Nodes) { SaveNewFilterCategory((PluginData)item.Tag, newCategory); } int existingCategoryIndex = filterTreeView.Nodes.IndexOfKey(newCategory); if (existingCategoryIndex != -1) { filterTreeView.BeginUpdate(); TreeNode existing = filterTreeView.Nodes[existingCategoryIndex]; filterTreeView.Nodes.Remove(selectedNode); // Store the node count in a local variable to prevent an infinite loop // when the name of the existing node matches the selected node. int nodeCount = selectedNode.Nodes.Count; for (int i = 0; i < nodeCount; i++) { existing.Nodes.Add(selectedNode.Nodes[i]); } filterTreeView.EndUpdate(); } else { filterTreeView.BeginUpdate(); filterTreeView.Nodes.Remove(selectedNode); TreeNode node = new TreeNode(newCategory) { ContextMenuStrip = filterCategoryContextMenu, Name = newCategory }; for (int i = 0; i < selectedNode.Nodes.Count; i++) { node.Nodes.Add(selectedNode.Nodes[i]); } filterTreeView.Nodes.Add(node); filterTreeView.EndUpdate(); } } } } }
private void ChangeItemCategory(TreeNode selectedNode) { PluginData data = (PluginData)selectedNode.Tag; using (EditCategoryForm form = new EditCategoryForm(Resources.ChangeItemCategoryTitle, data.Category, selectedNode.Text)) { if (form.ShowDialog(this) == DialogResult.OK) { string newCategory = form.CategoryText; if (!newCategory.Equals(data.Category, StringComparison.Ordinal)) { SaveNewFilterCategory(data, newCategory); filterTreeView.BeginUpdate(); TreeNode parent = selectedNode.Parent; parent.Nodes.Remove(selectedNode); if (parent.Nodes.Count == 0) { filterTreeView.Nodes.Remove(parent); } if (filterTreeView.Nodes.ContainsKey(newCategory)) { filterTreeView.Nodes[newCategory].Nodes.Add(selectedNode); } else { TreeNode node = new TreeNode(newCategory, new TreeNode[] { selectedNode }) { ContextMenuStrip = filterCategoryContextMenu, Name = newCategory, }; filterTreeView.Nodes.Add(node); } filterTreeView.EndUpdate(); } } } }