Beispiel #1
0
        private void symbolicExpressionTreeChart_DragDrop(object sender, DragEventArgs e)
        {
            Point coordinates = symbolicExpressionTreeChart.PointToClient(new Point(e.X, e.Y));
            var   node        = symbolicExpressionTreeChart.FindVisualSymbolicExpressionTreeNodeAt(coordinates.X, coordinates.Y);
            var   root        = symbolicExpressionTreeChart.Tree.Root;

            var data    = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
            var symbol  = data as ISymbol;
            var symbols = data as IEnumerable <ISymbol>;

            if (node.Content == root)
            {
                if (symbol != null)
                {
                    Grammar.AddAllowedChildSymbol(root.Symbol, symbol);
                }
                else if (symbols != null)
                {
                    foreach (var s in symbols)
                    {
                        Grammar.AddAllowedChildSymbol(root.Symbol, s);
                    }
                }
            }
            else
            {
                int argumentIndex = root.IndexOfSubtree(node.Content);
                if (symbol != null)
                {
                    Grammar.AddAllowedChildSymbol(root.Symbol, symbol, argumentIndex);
                }
                else if (symbols != null)
                {
                    foreach (var s in symbols)
                    {
                        Grammar.AddAllowedChildSymbol(root.Symbol, s, argumentIndex);
                    }
                }
            }
            BuildAllowedChildSymbolsTree();
        }