private void wrapIntoAllSubfiltersToolStripMenuItem_Click(object sender, EventArgs e) { if (FilterTree.Nodes.Count == 0) { return; } TreeNode selected_node = FilterTree.SelectedNode; if (selected_node == null) { return; } AndFilter fl = new AndFilter(); TreeNode and_node = new TreeNode() { Text = fl.ToString(), Tag = fl }; // check if the node is the root if (selected_node.Parent == null) { FilterTree.Nodes.Clear(); FilterTree.Nodes.Add(and_node); SearchFilter = fl; } else { TreeNode pt = selected_node.Parent; pt.Nodes.Insert(pt.Nodes.IndexOf(selected_node), and_node); pt.Nodes.Remove(selected_node); if (pt.Tag is OrFilter) { ((OrFilter)pt.Tag).Filters.Add(fl); ((OrFilter)pt.Tag).Filters.Remove((BaseFilter)selected_node.Tag); } else if (pt.Tag is AndFilter) { ((AndFilter)pt.Tag).Filters.Add(fl); ((AndFilter)pt.Tag).Filters.Remove((BaseFilter)selected_node.Tag); } } fl.Filters.Add((BaseFilter)selected_node.Tag); and_node.Nodes.Add(selected_node); FilterTree.SelectedNode = selected_node; ShowFilterProperties((BaseFilter)selected_node.Tag); }