public void MouseUpEvent(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                // If the left mouse button is released and the drawPreviewObject timer is active,
                // stop it and premanently draw the last preview CanvasObject onto the canvas.
                // Only preview object with valid parameters are being permanently drawn.
                if (IntervalManager.Singleton.GetTimerStatus("drawPreviewObject"))
                {
                    IntervalManager.Singleton.ManageTimer("drawPreviewObject", false);
                    CanvasObject previewObject = cm.PreviewObject.First().Key;
                    int[]        parameters    = previewObject.GetObjectParameters();

                    if (CheckForInvisibleObject(parameters))
                    {
                        DrawObject(previewObject.GetType().Name, parameters, true);
                        UpdateButtonStatus("undo");
                    }
                }
                // If the left mouse button is released and the moveSelectedObject timer is active,
                // stop it and store the new coordinates of the selected object.
                else if (IntervalManager.Singleton.GetTimerStatus("moveSelectedObject"))
                {
                    IntervalManager.Singleton.ManageTimer("moveSelectedObject", false);
                    cm.ChangeSelectedObject(cm.SelectedObject);
                }
            }
        }
        public void MouseDownEvent(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                // If the left mouse button is pressed while the copySelectedObject timer is active,
                // stop the timer and draw a permanent version of the current preview object onto the canvas.
                if (IntervalManager.Singleton.GetTimerStatus("copySelectedObject"))
                {
                    IntervalManager.Singleton.ManageTimer("copySelectedObject", false);

                    CanvasObject objectToDraw = cm.PreviewObject.First().Key;
                    DrawObject(objectToDraw.GetType().Name, objectToDraw.GetObjectParameters(), true);
                }
                // If the left mouse button is pressed while the moveAllObjects timer is active, stop the timer.
                else if (IntervalManager.Singleton.GetTimerStatus("moveAllObjects"))
                {
                    IntervalManager.Singleton.ManageTimer("moveAllObjects", false);
                }
                // If the left mouse button is pressed and there is no CanvasObject selected, start the drawPreviewObject timer.
                else if (cm.SelectedObject == null)
                {
                    startLocation = GetCursorPosition();
                    IntervalManager.Singleton.ManageTimer("drawPreviewObject", true);
                }
                // If the left mouse button is pressed and there is a CanvasObject selected, start the moveSelectedObject timer.
                else if (cm.SelectedObject != null)
                {
                    IntervalManager.Singleton.ManageTimer("moveSelectedObject", true);
                }
            }
        }
        /// <summary>
        /// Makes a copy of the selected CanvasObject, and creates a preview of the new object at the cursor location.
        /// </summary>
        public void CopySelectedObject(object sender, EventArgs e)
        {
            CanvasObject selectedObject = cm.GetCanvasObject(cm.SelectedObject);

            int[] data = selectedObject.GetObjectParameters();

            Point location = GetCursorPosition();

            data[0] = location.X;
            data[1] = location.Y;

            DrawObject(selectedObject.GetType().Name, data, false);
        }
        /// <summary>
        /// Removes an entry from the allCanvasObjects collection.
        /// </summary>
        /// <param name="value">The PictureBox which is the value of a stored dictionary entry.</param>
        public void RemoveObject(PictureBox value)
        {
            CanvasObject dictKey = null;

            foreach (var entry in allCanvasObjects)
            {
                if (entry.Value == value)
                {
                    dictKey = entry.Key;
                }
            }

            if (dictKey != null)
            {
                allCanvasObjects.Remove(dictKey);
            }
        }
 /// <summary>
 /// Registers the creation of a new CanvasObject, by storing it in the allCanvasObjects and allCanvasGraphics collections.
 /// </summary>
 /// <param name="newObject"></param>
 /// <param name="newGraphic"></param>
 public void AddObject(CanvasObject newObject, PictureBox newGraphic)
 {
     allCanvasObjects.Add(newObject, newGraphic);
 }