/// <summary> /// add node to tree view control /// </summary> /// <param name="type">indicate operation type</param> /// <param name="info">tree node text</param> private void AddNode(OperationType type, string info) { //add tree node according to operation type if (type == OperationType.StartTransactionGroup) { if (m_transGroupNode == null) { m_transGroupNode = new TreeNode(m_transactionGroup.GetName()); int index = m_rootNode.Nodes.Add(m_transGroupNode); m_rootNode.Nodes[index].Tag = m_transactionGroup; m_rootNode.Expand(); UpdateTreeNode(m_transGroupNode, type); } else { TreeNode newTransGroupNode = new TreeNode(m_transactionGroup.GetName()); int index = m_transGroupNode.Nodes.Add(newTransGroupNode); m_transGroupNode.Nodes[index].Tag = m_transactionGroup; m_transGroupNode.Expand(); m_transGroupNode = newTransGroupNode; m_transGroupNode.Expand(); UpdateTreeNode(m_transGroupNode, type); } m_transNode = null; m_transaction = null; } else if (type == OperationType.RollbackTransactionGroup) { UpdateTreeNode(m_transGroupNode, type); if (m_transGroupNode.Parent.Equals(m_rootNode)) { m_rootNode.Expand(); m_transactionGroup = null; m_transGroupNode = null; } else { m_transGroupNode = m_transGroupNode.Parent; m_transGroupNode.Expand(); m_transactionGroup = m_transGroupNode.Tag as TransactionGroup; } m_transNode = null; m_transaction = null; } else if (type == OperationType.CommitTransactionGroup) { UpdateTreeNode(m_transGroupNode, type); if (m_transGroupNode.Parent.Equals(m_rootNode)) { m_rootNode.Expand(); m_transactionGroup = null; m_transGroupNode = null; } else { m_transGroupNode.Expand(); m_transGroupNode = m_transGroupNode.Parent; m_transactionGroup = m_transGroupNode.Tag as TransactionGroup; } m_transNode = null; m_transaction = null; } else if (type == OperationType.StartTransaction) { m_transNode = new TreeNode(m_transaction.GetName()); m_transNode.ForeColor = m_startedColor; TreeNode node = m_transGroupNode == null ? m_rootNode : m_transGroupNode; node.Nodes.Add(m_transNode); node.Expand(); UpdateTreeNode(m_transNode, type); } else if (type == OperationType.CommitTransaction) { UpdateTreeNode(m_transNode, type); TreeNode node = m_transGroupNode == null ? m_rootNode : m_transGroupNode; node.Expand(); m_transNode = null; } else if (type == OperationType.RollbackTransaction) { UpdateTreeNode(m_transNode, type); TreeNode node = m_transGroupNode == null ? m_rootNode : m_transGroupNode; node.Expand(); m_transNode = null; } else { string childNodeText = null; if (String.IsNullOrEmpty(info)) { childNodeText = "Operation"; } else { childNodeText = info; } TreeNode childNode = new TreeNode(childNodeText); if (type == OperationType.ObjectDeletion) { childNode.ForeColor = m_deletedColor; } else { childNode.ForeColor = m_normalColor; } m_transNode.Nodes.Add(childNode); m_transNode.Expand(); } }