コード例 #1
0
        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));
                }
            }
        }