/// <summary> /// Sets the explanation for this explain box /// </summary> /// <param name="explanation"></param> public void setExplanation(DataDictionary.Interpreter.ExplanationPart explanation) { explainTreeView.Nodes.Clear(); ExplainTreeNode node = new ExplainTreeNode(explanation); innerSetExplanation(explanation, node, 0); explainTreeView.Nodes.Add(node); }
/// <summary> /// Handles the selection of an element of the treeview /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void explainTreeView_AfterSelect(object sender, TreeViewEventArgs e) { ExplainTreeNode node = explainTreeView.SelectedNode as ExplainTreeNode; if (node != null) { node.SelectModel(); } }
/// <summary> /// Handles a double click event on a tree node /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void explainTreeView_DoubleClick(object sender, EventArgs e) { MouseEventArgs mouseEventArgs = e as MouseEventArgs; if (mouseEventArgs != null) { ExplainTreeNode node = explainTreeView.GetNodeAt(mouseEventArgs.Location) as ExplainTreeNode; SelectModelElement(node, mouseEventArgs); } }
/// <summary> /// Sets the explanation for this explain box /// </summary> /// <param name="explanation"></param> public void SetExplanation(ExplanationPart explanation) { Explanation = explanation; explainTreeView.Nodes.Clear(); if (explanation != null) { ExplainTreeNode node = new ExplainTreeNode(explanation); node.UpdateText(); InnerSetExplanation(explanation, node, 0); explainTreeView.Nodes.Add(node); } }
/// <summary> /// Handles the selection of an element of the treeview /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void explainTreeView_AfterSelect(object sender, TreeViewEventArgs e) { ExplainTreeNode node = explainTreeView.SelectedNode as ExplainTreeNode; if (node != null && node.Explanation != null && node.Explanation.Element != null) { if (ModifierKeys == Keys.Control) { EfsSystem.Instance.Context.SelectElement(node.Explanation.Element, this, Context.SelectionCriteria.DoubleClick); } explainRichTextBox.Instance = Explanation; explainRichTextBox.Text = Explanation.Message; } }
/// <summary> /// Sets the node, and its subnode according to the content of the explanation /// </summary> /// <param name="part"></param> /// <param name="node"></param> /// <param param name="level">the level in which the explanation is inserted</param> private void innerSetExplanation(DataDictionary.Interpreter.ExplanationPart part, ExplainTreeNode node, int level) { foreach (DataDictionary.Interpreter.ExplanationPart subPart in part.SubExplanations) { ExplainTreeNode subNode = new ExplainTreeNode(subPart); innerSetExplanation(subPart, subNode, level + 1); node.Nodes.Add(subNode); } if (level <= 2) { node.Expand(); } else { node.Collapse(); } }
private void explainTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) { ExplainTreeNode node = e.Node as ExplainTreeNode; if (node != null) { foreach (ExplainTreeNode subNode in node.Nodes) { subNode.Nodes.Clear(); InnerSetExplanation(subNode.Explanation, subNode, 1); } foreach (ExplainTreeNode subNode in node.Nodes) { subNode.UpdateText(); } } }
/// <summary> /// Sets the node, and its subnode according to the content of the explanation /// </summary> /// <param name="part"></param> /// <param name="node"></param> /// <param name="level">the level in which the explanation is inserted</param> private void InnerSetExplanation(ExplanationPart part, ExplainTreeNode node, int level) { if (part != null) { foreach (ExplanationPart subPart in part.SubExplanations) { int nextLevel = level; if (level >= 0) { nextLevel += 1; } if (level < 2) { ExplainTreeNode subNode = new ExplainTreeNode(subPart); InnerSetExplanation(subPart, subNode, nextLevel); node.Nodes.Add(subNode); } } } }
/// <summary> /// Selects the model element which corresponds to the explain tree node /// If the current node does not refer to a model element, selects the one from its parent node /// </summary> /// <param name="node"></param> /// <param name="mouseEventArgs"></param> private void SelectModelElement(ExplainTreeNode node, MouseEventArgs mouseEventArgs) { while (node != null) { ModelElement model = node.Explanation.LeftPart as ModelElement; if (model == null) { model = node.Explanation.Element; } if (model != null) { Context.SelectionCriteria criteria = GuiUtils.SelectionCriteriaBasedOnMouseEvent(mouseEventArgs); EfsSystem.Instance.Context.SelectElement(model, this, criteria); node = null; } else { node = node.Parent as ExplainTreeNode; } } }
/// <summary> /// Selects the model element which corresponds to the explain tree node /// If the current node does not refer to a model element, selects the one from its parent node /// </summary> /// <param name="node"></param> /// <param name="mouseEventArgs"></param> private void SelectModelElement(ExplainTreeNode node, MouseEventArgs mouseEventArgs) { while (node != null) { if (node.Explanation.Element != null) { Context.SelectionCriteria criteria = GuiUtils.SelectionCriteriaBasedOnMouseEvent(mouseEventArgs); EFSSystem.INSTANCE.Context.SelectElement(node.Explanation.Element, this, criteria); node = null; } else { node = node.Parent as ExplainTreeNode; } } }
/// <summary> /// Selects the model element which corresponds to the explain tree node /// If the current node does not refer to a model element, selects the one from its parent node /// </summary> /// <param name="node"></param> /// <param name="mouseEventArgs"></param> private void SelectModelElement(ExplainTreeNode node, MouseEventArgs mouseEventArgs) { while (node != null) { ModelElement model = node.Explanation.LeftPart as ModelElement; if ( model == null ) { model = node.Explanation.Element; } if (model != null) { Context.SelectionCriteria criteria = GuiUtils.SelectionCriteriaBasedOnMouseEvent(mouseEventArgs); EfsSystem.Instance.Context.SelectElement(model, this, criteria); node = null; } else { node = node.Parent as ExplainTreeNode; } } }