private void ProcessNode(TreeNode node, Shape shape) { node.Text = shape.Name; node.Checked = shape.Flag; shape.AddFlagObserver(new TreeNodeFlagObserver(node)); node.Tag = new ShapeFlagObserver(shape); if (shape.GetType() == typeof(Group)) { var group = (Group)shape; var storage = group.GroupStorage; for (var i = 1; i <= storage.GetMaxIndex(); i++) { var childNode = new TreeNode("Group"); ProcessNode(childNode, storage.GetItem(i)); node.Nodes.Add(childNode); } } }