private void MainForm_MouseDown(object sender, MouseEventArgs e)// { // Save action start point msXnLast = msXLast = e.X; msYnLast = msYLast = e.Y; Map.SnapXY(ref msXnLast, ref msYnLast); // Prevent senseless action if (rbObject.Checked && rbObject.Tag == null) { rbDefault.Checked = true; } else if (rbLink.Checked && rbLink.Tag == null) { rbDefault.Checked = true; } else if (rbBox.Checked && rbBox.Tag == null) { rbDefault.Checked = true; } #region Default tool if (rbDefault.Checked) { ContextMenuStrip = cmsElement; if (MoverB.Visible && MoverB.X <= msXLast && msXLast < MoverB.X + MoverB.W && MoverB.Y <= msYLast && msYLast < MoverB.Y + MoverB.H) { MoverB.Active = true; } else if (MoverA.Visible && MoverA.X <= msXLast && msXLast < MoverA.X + MoverA.W && MoverA.Y <= msYLast && msYLast < MoverA.Y + MoverA.H) { MoverA.Active = true; } else if (Selection.Visible && Selection.X <= msXLast && msXLast < Selection.X + Selection.W && Selection.Y <= msYLast && msYLast < Selection.Y + Selection.H) { Selection.Active = true; Cursor = Selection.Cursor; } else { if (Map.SelectAt(msXLast + Map.ScrollX, msYLast + Map.ScrollY) == null) { if (hScrollBar.LargeChange < hScrollBar.Maximum) { if (vScrollBar.LargeChange < vScrollBar.Maximum) { Cursor = Cursors.NoMove2D; } else { Cursor = Cursors.NoMoveHoriz; } } else if (vScrollBar.LargeChange < vScrollBar.Maximum) { Cursor = Cursors.NoMoveVert; } else { Cursor = Cursors.No; } ContextMenuStrip = cmsMap; } else { Selection.Active = true; } CheckFrames(true); } } #endregion #region Element tool else { MoverA.Visible = MoverB.Visible = false; ContextMenuStrip = cmsElement; // if (rbObject.Checked) { var Object = new xObject(Map); Object.Prototype = Map.AddPObject(rbObject.Tag as xPrototype); Object.PrototypeID = Object.Prototype.ID; Object.PrototypeRevision = Object.Prototype.Revision; Map.Objects.Add(Object); // Set data Object.X = msXLast + Map.ScrollX; Object.Y = msYLast + Map.ScrollY; Map.SnapXY(ref Object.X, ref Object.Y); // Map.Selected = Object; Selection.Active = true; } else if (rbLink.Checked) { var Link = new xLink(Map); Link.Prototype = Map.AddPLink(rbLink.Tag as xPrototype); Link.PrototypeID = Link.Prototype.ID; Link.PrototypeRevision = Link.Prototype.Revision; Map.Links.Add(Link); // Set data Link.XA = Link.XB = msXLast + Map.ScrollX; Link.YA = Link.YB = msYLast + Map.ScrollY; Map.SnapXY(ref Link.XA, ref Link.YA); Map.SnapXY(ref Link.XB, ref Link.YB); // Try to bind to object Map.Selected = Map.ObjectAt(msXLast + Map.ScrollX, msYLast + Map.ScrollY); if (Map.Selected != null) { Link.ObjectA = Map.Selected as xObject; Link.ObjectAID = Link.ObjectA.ID; Link.DotA = Link.ObjectA.GetNearestDot(msXLast + Map.ScrollX, msYLast + Map.ScrollY); Link.DotAID = Link.DotA.ID; Link.XA = Link.ObjectA.Left + Link.DotA.X; Link.YA = Link.ObjectA.Top + Link.DotA.Y; } // Map.Selected = Link; MoverB.Cursor = Cursors.SizeAll; MoverB.Active = true; } else { var Box = new xBox(Map); Box.Prototype = Map.AddPBox(rbBox.Tag as xPrototype); Box.PrototypeID = Box.Prototype.ID; Box.PrototypeRevision = Box.Prototype.Revision; Map.Boxes.Add(Box); // Set data Box.Left = msXLast + Map.ScrollX; Box.Top = msYLast + Map.ScrollY; Box.Width = 1; Box.Height = 1; Box.Text = (Box.Prototype as xPBox).Text; Map.SnapXY(ref Box.Left, ref Box.Top); // Map.Selected = Box; MoverB.Cursor = Cursors.SizeNWSE; MoverB.Active = true; } // Update Map.Selected.Check(); Map.Draw(Map.Selected.Left - 8, Map.Selected.Top - 8, Map.Selected.Width + 16, Map.Selected.Height + 16); CheckFrames(true); } #endregion Invalidate(); }