private void LevelView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { m_fJustSelected = false; m_ptMouseDown = ViewToWorld(new Point(e.X - AutoScrollPosition.X, e.Y - AutoScrollPosition.Y)); // Select / clear items IMapItem mi = m_lvld.HitTest(m_ptMouseDown.X, m_ptMouseDown.Y, GetTileSize(), GetTemplateDoc(), m_lyrf); if (e.Button == MouseButtons.Left) { if (mi == null) { // Clear selection m_lvld.Selection = new ArrayList(); Globals.PropertyGrid.SelectedObject = null; m_ptDragSelectAnchor.X = m_ptMouseDown.X; m_ptDragSelectAnchor.Y = m_ptMouseDown.Y; m_rcDragSelect = new Rectangle(m_ptDragSelectAnchor, new Size(0, 0)); m_fDragSelect = true; } else { m_rcDragStart.X = m_ptMouseDown.X - 5; m_rcDragStart.Y = m_ptMouseDown.Y - 5; m_rcDragStart.Width = 10; m_rcDragStart.Height = 10; // Add to selection. Extend if control is down ArrayList alsmiSelected = m_lvld.Selection; if (!alsmiSelected.Contains(mi)) { if ((Control.ModifierKeys & Keys.Control) != Keys.Control) { alsmiSelected.Clear(); } alsmiSelected.Add(mi); Globals.PropertyGrid.SelectedObjects = (IMapItem[])alsmiSelected.ToArray(typeof(IMapItem)); m_fJustSelected = true; m_lvld.Selection = alsmiSelected; } if (mi.OnMouseDown(e, m_ptMouseDown, GetTileSize(), GetTemplateDoc())) { m_miCapturedMouse = mi; } } Redraw(); } else if (e.Button == MouseButtons.Right) { if (mi != null) { // If this is not already selected, then clear selection and add this if (!m_lvld.Selection.Contains(mi)) { ArrayList als = new ArrayList(); als.Add(mi); m_lvld.Selection = als; Globals.PropertyGrid.SelectedObject = mi; Redraw(); } if (mi.OnMouseDown(e, m_ptMouseDown, GetTileSize(), GetTemplateDoc())) { m_miCapturedMouse = mi; return; } m_miContextMenu = mi; m_contextMenu.Show(this, new Point(e.X, e.Y)); } } }