private void insertNodeToolStripMenuItem_Click(object sender, EventArgs e) { if (currSelected == null || currSelected.Content is SymbolicExpressionTreeTerminalNode) { return; } var parent = currSelected.Content; using (var dialog = new InsertNodeDialog()) { dialog.SetAllowedSymbols(grammar.Symbols.Where(s => !(s is ProgramRootSymbol || s is StartSymbol || s is Defun || s is GroupSymbol))); // allow everything dialog.ShowDialog(this); if (dialog.DialogResult != DialogResult.OK) { return; } var symbol = dialog.SelectedSymbol; var node = symbol.CreateTreeNode(); if (node is ConstantTreeNode) { var constant = node as ConstantTreeNode; constant.Value = double.Parse(dialog.constantValueTextBox.Text); } else if (node is VariableTreeNode) { var variable = node as VariableTreeNode; variable.Weight = double.Parse(dialog.variableWeightTextBox.Text); variable.VariableName = dialog.SelectedVariableName; } else if (node.Symbol.MinimumArity <= parent.SubtreeCount && node.Symbol.MaximumArity >= parent.SubtreeCount) { for (int i = parent.SubtreeCount - 1; i >= 0; --i) { var child = parent.GetSubtree(i); parent.RemoveSubtree(i); node.AddSubtree(child); } } // the if condition will always be true for the final else clause above if (parent.Symbol.MaximumArity > parent.SubtreeCount) { ModifyTree(Tree, parent, null, node); } } currSelected = null; }
private void insertNodeToolStripMenuItem_Click(object sender, EventArgs e) { if (currSelected == null || currSelected.Content is SymbolicExpressionTreeTerminalNode) return; var parent = currSelected.Content; using (var dialog = new InsertNodeDialog()) { dialog.SetAllowedSymbols(grammar.Symbols.Where(s => !(s is ProgramRootSymbol || s is StartSymbol || s is Defun || s is GroupSymbol))); // allow everything dialog.ShowDialog(this); if (dialog.DialogResult != DialogResult.OK) return; var symbol = dialog.SelectedSymbol(); var node = symbol.CreateTreeNode(); if (node is ConstantTreeNode) { var constant = node as ConstantTreeNode; constant.Value = double.Parse(dialog.constantValueTextBox.Text); } else if (node is VariableTreeNode) { var variable = node as VariableTreeNode; variable.Weight = double.Parse(dialog.variableWeightTextBox.Text); variable.VariableName = dialog.variableNamesCombo.Text; } else if (node.Symbol.MinimumArity <= parent.SubtreeCount && node.Symbol.MaximumArity >= parent.SubtreeCount) { for (int i = parent.SubtreeCount - 1; i >= 0; --i) { var child = parent.GetSubtree(i); parent.RemoveSubtree(i); node.AddSubtree(child); } } // the if condition will always be true for the final else clause above if (parent.Symbol.MaximumArity > parent.SubtreeCount) { ModifyTree(Tree, parent, null, node); } } currSelected = null; }