Subversion Repositories AndroidProjects

Rev

Rev 1468 | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using BurutaruEditor.file;

namespace BurutaruEditor.interaction
{
    public class SelectMove : Interaction
    {
        public const int MOVE_ALL = -1;

        private bool mLeftDown = false;
        private int mLastX = 0;
        private int mLastY = 0;

        private LevelObject mSelectedObject = null;
        private int mSelectedObjectPart = -1;

        private bool mDocPartSelected = false;

        private LevelObject mHoverObject = null;
        private int mHoverObjectPart = -1;

        public SelectMove(MainForm owner)
            : base(owner)
        {

        }

        public override void MouseDown(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                mLeftDown = true;

                mSelectedObject = Owner.View.FindObjectAt(e.X, e.Y, out mSelectedObjectPart, true);

                if (mSelectedObject == null)
                {
                    // choose Document
                    Owner.Properties.SelectedObject = Owner.Doc;
                    Owner.View.SelectedObject = null;
                    mSelectedObjectPart = Owner.View.FindDocumentObjectPart(e.X, e.Y);
                    if (mSelectedObjectPart != -1)
                    {
                        mDocPartSelected = true;
                    }
                    Owner.Properties.ExpandAllGridItems();
                }
                else
                {
                    Owner.View.SelectedObject = mSelectedObject;
                    Owner.View.SelectedObjectPart = mSelectedObjectPart;
                    Owner.Properties.SelectedObject = mSelectedObject;
                    Owner.Properties.ExpandAllGridItems();
                }
            }

            mLastX = e.X;
            mLastY = e.Y;
        }

        public override void MouseMove(MouseEventArgs e)
        {
            if (mLeftDown && ((mSelectedObject != null) || (mDocPartSelected)))
            {
                float dx = e.X - mLastX;
                float dy = e.Y - mLastY;

                if (mSelectedObject != null)
                {
                    mSelectedObject.MoveBy(dx, dy, mSelectedObjectPart);
                    Owner.Properties.Refresh();
                }
                else
                {
                    // move Document part
                    Owner.View.MoveDocPartBy(dx, dy, mSelectedObjectPart);
                    Owner.Properties.Refresh();
                }
            }
            else
            {
                mHoverObject = Owner.View.FindObjectAt(e.X, e.Y, out mHoverObjectPart);

                if (mHoverObject == null)
                {
                    mHoverObjectPart = Owner.View.FindDocumentObjectPart(e.X, e.Y);
                    if (mHoverObjectPart != -1)
                        Owner.GlView.Cursor = Cursors.SizeAll;
                    else
                        Owner.GlView.Cursor = Cursors.Arrow;
                }
                else
                {
                    Owner.GlView.Cursor = Cursors.SizeAll;

                }
            }

            mLastX = e.X;
            mLastY = e.Y;
        }

        public override void MouseUp(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                mLeftDown = false;
                mSelectedObject = null;
                mSelectedObjectPart = -1;
                mDocPartSelected = false;
            }
        }

        public override void Render()
        {
            if (mHoverObject != null)
                mHoverObject.RenderSelected(mHoverObjectPart, true);
        }
    }
}