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)); } } }