private int AddStackOperations(TreeNodeCollection nodes, IEnumerable<IOperation> operations) { int count = 0; foreach (IOperation op in operations) { if (op is IAtomicOperation) { IAtomicOperation atom = op as IAtomicOperation; TreeNode node = nodes.Add(atom.Operator.Name ?? atom.Operator.ItemName); node.Tag = atom; node.ToolTipText = string.Format("{0}{1}{1}{2}", Utils.TypeName(atom.Operator), Environment.NewLine, Utils.Wrap(atom.Operator.Description ?? atom.Operator.ItemDescription, 60)); if (atom.Operator.Breakpoint) { node.ForeColor = Color.Red; node.ImageIndex = 2; node.SelectedImageIndex = 2; } else { node.ImageIndex = 0; node.SelectedImageIndex = 0; } count++; } else if (op is OperationCollection) { OperationCollection ops = op as OperationCollection; TreeNode node = nodes.Add( string.Format("{0} {2}Operation{1}", ops.Count, ops.Count == 1 ? string.Empty : "s", ops.Parallel ? "Parallel " : string.Empty )); node.Tag = op; node.ToolTipText = Utils.TypeName(ops); node.ImageIndex = 1; node.SelectedImageIndex = 1; count += AddStackOperations(node.Nodes, ops); } } return count; }