private void gridPanel_Click(object sender, MouseEventArgs e)
        {
            if (shiftPressed && ctrlPressed)
            {
                endX = (e.X + (int)paintOffsetX - initDrawOffsetX) / rectSize;
                endY = (e.Y + (int)paintOffsetY - initDrawOffsetY) / rectSize;
                endLabel.Text = "Level end position (" + endX + "," + endY + ")";

                InvalidateAndUpdate(gridPanel);
            }
            else if (shiftPressed)
            {
                playerX = (e.X + (int)paintOffsetX - initDrawOffsetX) / rectSize;
                playerY = (e.Y + (int)paintOffsetY - initDrawOffsetY) / rectSize;
                playerPosLabel.Text = "Player start position (" + playerX + "," + playerY + ")";

                InvalidateAndUpdate(gridPanel);
            }
            else
            {
                if (isPointWithinBounds(e.X,e.Y))
                {
                    int x = (e.X + (int)paintOffsetX - initDrawOffsetX) / rectSize;
                    int y = (e.Y + (int)paintOffsetY - initDrawOffsetY) / rectSize;
                    Point tempPoint = new Point(rectSize * x - (int)paintOffsetX + initDrawOffsetX, rectSize * y - (int)paintOffsetY + initDrawOffsetY);

                    ICommand com = new DrawTileCommand(this, x, y, tiles[x, y].Image, currentImage);
                    ExecuteAndQueueCommand(com);
                }
            }
        }
        private void DrawTileLine(int oldMouseX, int oldMouseY, int newX, int newY)
        {
            int x = newX;
                int y = newY;
                if (oldMouseX >= 0 && oldMouseY >= 0)
                {
                    int distanceX = x - oldMouseX;
                    int distanceY = y - oldMouseY;

                    int dx = -1;
                    int dy = -1;

                    if (distanceX < 0) dx = 1;
                    if (distanceY < 0) dy = 1;

                    distanceX = Math.Abs(distanceX);
                    distanceY = Math.Abs(distanceY);

                    int counter = 0;
                    List<DrawTileCommand> tilesToDraw = new List<DrawTileCommand>();
                    while (distanceX > 0 || distanceY > 0)
                    {

                        if (x + dx < tiles.GetLength(0) && x + dx >= 0 && y + dy < tiles.GetLength(1) && y + dy >= 0)
                        {

                            DrawTileCommand com = new DrawTileCommand(this, x, y, tiles[x, y].Image, currentImage);
                            tilesToDraw.Add(com);
                            //tiles[x, y].Image = currentImage;
                            counter++;
                            if (distanceX > 0) distanceX--;
                            if (distanceY > 0) distanceY--;
                            if (distanceX == 0) dx = 0;
                            if (distanceY == 0) dy = 0;
                            x += dx;
                            y += dy;
                        }

                        else
                        {
                            break;
                        }
                    }

                    ICommand dlc = new DrawLineCommand(this, tilesToDraw);
                    DrawLineList.Add(dlc as DrawLineCommand);
                    dlc.Execute();
                    redoCommandQueue.Clear();

            }
        }