void mnu_separate(object sender, EventArgs e)
        {
            BinOperatorNode bin = Root.FocusedNode as BinOperatorNode;

            if (bin != null)
            {
                BinOperatorNode bin2 = bin[1] as BinOperatorNode;
                if (bin2 != null)
                {
                    //modify it from {0} b {b2} to
                    //{0} b {b2[0]} b2 {b2[1]}
                    //
                    //new b[1] = {b2[0]}
                    //new b2[0] = new b => {0} b {b2[0]}
                    //new b2[1] = {b2[1]}
                    //MathNode b1 = bin[1];
                    //
                    MathNode np = bin.Parent;
                    int      k  = -1;
                    for (int i = 0; i < np.ChildNodeCount; i++)
                    {
                        if (np[i] == bin)
                        {
                            k = i;
                            break;
                        }
                    }
                    if (k >= 0)
                    {
                        BinOperatorNode nb2 = (BinOperatorNode)Activator.CreateInstance(bin2.GetType(), bin.Parent);
                        bin[1] = bin2[0];
                        nb2[0] = bin;
                        nb2[1] = bin2[1];
                        //
                        np[k] = nb2;
                        this.Refresh();
                        Root.SetFocus(bin);
                    }
                }
            }
        }
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (_readOnly)
            {
                return;
            }
            hideSelectorList();
            int   x       = e.X;
            int   y       = e.Y;
            int   nh      = 1;
            float yOffset = 0;
            float xOffset = this.AutoScrollPosition.X;
            SizeF size    = mathExp.ExpSize;

            if (size.Height > 0)
            {
                while (y > (nh * (size.Height + 8)))
                {
                    yOffset += (size.Height + 8);
                    xOffset -= this.ClientSize.Width;
                    nh++;
                }
                y -= (int)yOffset;
                x -= (int)xOffset;
            }
            MathNode hit = mathExp.HitTest(new PointF(x, y));

            if (hit != null)
            {
                mathExp.SetFocus(hit);
            }
            else
            {
                mathExp.SetFocus(null);
            }
            this.Refresh();
            if (e.Button == MouseButtons.Right)
            {
                MathNode        selectedNode = Root.FocusedNode;
                ContextMenu     cm           = new ContextMenu();
                MenuItem        mi;
                BinOperatorNode bin = selectedNode as BinOperatorNode;
                if (bin != null)
                {
                    BinOperatorNode bin2 = bin[1] as BinOperatorNode;
                    if (bin2 != null)
                    {
                        //modify it from {0} b {b2} to
                        //{0} b {b2[0]} b2 {b2[1]}
                        //new b[1] = {b2[0]}
                        //new b2[0] = new b => {0} b {b2[0]}
                        //new b2[1] = {b2[1]}
                        mi = new MenuItemWithBitmap("Separate", mnu_separate, Resource1._separate.ToBitmap());
                        cm.MenuItems.Add(mi);
                    }
                }
                if (OnFinish != null)
                {
                    if (cm.MenuItems.Count > 0)
                    {
                        cm.MenuItems.Add("-");
                    }
                    mi = new MenuItemWithBitmap("Finish", OnFinish, Resource1._ok.ToBitmap());
                    cm.MenuItems.Add(mi);
                }
                if (OnCancel != null)
                {
                    mi = new MenuItemWithBitmap("Cancel", OnCancel, Resource1._cancel.ToBitmap());
                    cm.MenuItems.Add(mi);
                }
                if (OnCreateCompound != null)
                {
                }
                //
                if (cm.MenuItems.Count > 0)
                {
                    cm.Show(this, new Point(e.X, e.Y));
                }
            }
        }