public SIRTreeNode(MarkType newMark, string text, MarkPanel mp) : base(text) { Mark = newMark; Panel = mp; RefreshNodeDisplay(); // wire up events if (Panel != null && !(Mark is CriterionType)) { Panel.TextChangeHandler += new EventHandler(OnChange); } }
// <summary> // Recurse down the tree of tasks and subtasks. Criteria are handled // separately despite being descendants of MarkType because they never have // subtasks of their own. // </summary> private void CreateSubtree(SIRTreeNode parent, dynamic mark) { MarkPanel mp = new MarkPanel(mark); SIRTreeNode newNode = new SIRTreeNode(mark, mark.Name, mp); parent.Nodes.Add(newNode); if (mark.Criteria != null) { foreach (CriterionType criterion in mark.Criteria) { newNode.Nodes.Add(new SIRTreeNode(criterion, criterion.Name, mp)); } } if (mark.Subtasks != null) { foreach (dynamic subtask in mark.Subtasks) { CreateSubtree(newNode, subtask); } } }
private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) { if (treeView.SelectedNode == null) { return; } if (!(treeView.SelectedNode is SIRTreeNode node)) { return; } ; MarkPanel mp = node.Panel; if (mp == null) { return; } cardPanel.Controls.Clear(); cardPanel.Controls.Add(mp); }