Пример #1
0
		private void VixenPreviewControl_MouseDown(object sender, MouseEventArgs e)
		{
			if (_editMode)
			{
				bool controlPressed = (Control.ModifierKeys == Keys.Control);
				PreviewPoint translatedPoint = new PreviewPoint(e.X + hScroll.Value, e.Y + vScroll.Value);
				if (e.Button == System.Windows.Forms.MouseButtons.Left)
				{
					if (_currentTool == Tools.Select)
					{
						if (controlPressed)
						{
							DisplayItem item = DisplayItemAtPoint(translatedPoint);
							if (item != null && SelectedDisplayItems.Contains(item))
							{
								SelectedDisplayItems.Remove(item);
							}
							else
							{
								SelectItemUnderPoint(translatedPoint, controlPressed);
							}
							return;
						}

						// Is there a single dislay item selected?
						if (_selectedDisplayItem != null && !controlPressed)
						{
							// Lets see if we've got a drag point.
							PreviewPoint selectedPoint = _selectedDisplayItem.Shape.PointInSelectPoint(translatedPoint);
							if (selectedPoint != null)
							{
								modifyType = "Resize";
								beginResize_Move(false); //Starts the Undo Process
								dragStart = translatedPoint.ToPoint();
								_selectedDisplayItem.Shape.SetSelectPoint(selectedPoint);
								Capture = true;
								_mouseCaptured = true;
							}
								// If we're not resizing, see if we're moving a single shape
							else if (_selectedDisplayItem.Shape.PointInShape(translatedPoint))
							{
								modifyType = "Move";
								beginResize_Move(false); //Starts the Undo Process

								StartMove(translatedPoint.X, translatedPoint.Y);
							}
								// If we get here, we're outside the shape, deselect
							else
							{
								DeSelectSelectedDisplayItem();
							}
						}
							// Are there multiple items selected?
							// If so, we're moving, can't resize them...
						else if (SelectedDisplayItems.Count > 1 && !controlPressed)
						{
							//if (MouseOverSelectedDisplayItems(e.X, e.Y)) {
							//    StartMove(e.X, e.Y);
							//}
							//else {
							//    SelectedDisplayItems.Clear();
							//}
							if (MouseOverSelectedDisplayItems(translatedPoint.X, translatedPoint.Y))
							{
								modifyType = "Move";
								beginResize_Move(true); //Starts the Undo Process
								StartMove(translatedPoint.X, translatedPoint.Y);
							}
							else
							{
								SelectedDisplayItems.Clear();
							}
						}

						SelectItemUnderPoint(translatedPoint, controlPressed);

						// If we get this far, and we've got nothing selected, we're drawing a rubber band!
						if (_selectedDisplayItem == null && SelectedDisplayItems.Count == 0)
						{
							// Capture the mouse in case we want to draw a rubber band
							dragStart = translatedPoint.ToPoint();
							Capture = true;
							_mouseCaptured = true;
							SelectedDisplayItems.Clear();
							_bandRect.Width = 0;
							_bandRect.Height = 0;
							_banding = true;
						}
					}

					else if (_selectedDisplayItem != null && _selectedDisplayItem.Shape.PointInShape(translatedPoint) &&
					         !_selectedDisplayItem.Shape.Creating)
					{
						StartMove(translatedPoint.X, translatedPoint.Y);
					}

						// If we're not Selecting items, we're drawing them
					else if (_currentTool == Tools.PolyLine && _mouseCaptured)
					{
						return;
					}
					else if (_currentTool == Tools.MultiString && _mouseCaptured)
					{
						return;
					}
					else
					{
						DeSelectSelectedDisplayItem();

						DisplayItem newDisplayItem = null;
						if (_currentTool == Tools.String)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewLine(translatedPoint, translatedPoint, 50,
								elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Arch)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewArch(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Rectangle)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewRectangle(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Single)
						{
							newDisplayItem = new DisplayItem
							{
								Shape = new PreviewSingle(translatedPoint, elementsForm.SelectedNode, ZoomLevel)
							};
						}
						else if (_currentTool == Tools.Ellipse)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewEllipse(translatedPoint, 50, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Triangle)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewTriangle(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Net)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewNet(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Cane)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewCane(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Star)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewStar(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.StarBurst)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewStarBurst(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Flood)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewFlood(translatedPoint, elementsForm.SelectedNode);
						}
						else if (_currentTool == Tools.MegaTree)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewMegaTree(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.PixelGrid)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewPixelGrid(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.Icicle)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewIcicle(translatedPoint, translatedPoint,
								elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.PolyLine)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewPolyLine(translatedPoint, translatedPoint,
								elementsForm.SelectedNode, ZoomLevel);
						}
						else if (_currentTool == Tools.MultiString)
						{
							newDisplayItem = new DisplayItem();
							newDisplayItem.Shape = new PreviewMultiString(translatedPoint, translatedPoint,
								elementsForm.SelectedNode, ZoomLevel);
						}
						// Now add the newely created display item to the screen.
						if (newDisplayItem != null)
						{
							AddDisplayItem(newDisplayItem);
							newDisplayItem.ZoomLevel = ZoomLevel;
							_selectedDisplayItem = newDisplayItem;
							_selectedDisplayItem.Shape.PixelSize = 3;
							_selectedDisplayItem.Shape.Select(true);
							_selectedDisplayItem.Shape.SelectDefaultSelectPoint();
							dragStart = translatedPoint.ToPoint();
							Capture = true;
							_mouseCaptured = true;

							modifyType = "AddNew";
						}
					}
				}
				else if (e.Button == System.Windows.Forms.MouseButtons.Right)
				{
					contextMenuStrip1.Items.Clear();
					SelectItemUnderPoint(translatedPoint, false);

					if (_selectedDisplayItem != null)
					{
						PreviewPoint selectedPoint = _selectedDisplayItem.Shape.PointInSelectPoint(translatedPoint);
						if (_selectedDisplayItem.Shape.PointInShape(translatedPoint))
						{
							if (_selectedDisplayItem.Shape.GetType().ToString().Contains("PreviewCustom"))
							{
								contextMenuStrip1.Items.Add(new ToolStripMenuItem
								{
									Text = "Separate Template Items",
									Tag = "Separate",
									Image = Common.Resources.Properties.Resources.Split
								});
							}
						}
					}
					else if (SelectedDisplayItems.Count > 1)
					{
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Create Group...",
							Tag = "CreateGroup",
							Image = Common.Resources.Properties.Resources.group
						});
						contextMenuStrip1.Items.Add(new ToolStripSeparator());
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Create Template...",
							Tag = "CreateTemplate",
							Image = Common.Resources.Properties.Resources.document_font
						});
					}
					if (_selectedDisplayItem != null)
					{
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Cut",
							Tag = "Cut",
							Image = Common.Resources.Properties.Resources.cut
						});
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Copy",
							Tag = "Copy",
							Image = Common.Resources.Properties.Resources.page_copy
						});
					}
					if (ClipboardPopulated)
					{
						if (_selectedDisplayItem == null & SelectedDisplayItems.Count > 1)
						{
							contextMenuStrip1.Items.Add(new ToolStripSeparator());
						}
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Paste",
							Tag = "Paste",
							Image = Common.Resources.Properties.Resources.paste_plain
						});
					}
					if (_selectedDisplayItem != null)
					{
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Delete",
							Tag = "Delete",
							Image = Common.Resources.Properties.Resources.delete
						});
					}
					if (UndoManager.NumUndoable > 0)
					{
						contextMenuStrip1.Items.Add(new ToolStripSeparator());
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Undo",
							Tag = "Undo",
							Image = Common.Resources.Properties.Resources.arrow_undo
						});
					}
					if (UndoManager.NumRedoable > 0)
					{
						if (UndoManager.NumUndoable < 1)
							contextMenuStrip1.Items.Add(new ToolStripSeparator());
						contextMenuStrip1.Items.Add(new ToolStripMenuItem
						{
							Text = "Redo",
							Tag = "Redo",
							Image = Common.Resources.Properties.Resources.arrow_redo
						});
					}
					if (_selectedDisplayItem != null)
					{
						contextMenuStrip1.Items.Add(new ToolStripSeparator());

						if (Data.SaveLocations & _selectedDisplayItem != null)
						{
							// Z location menu
							contextMenuStrip1.Items.Add(new ToolStripMenuItem {Text = "Set Z Location to"});
							// Z sub menu items
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "0 Front", Tag = "0"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "1", Tag = "1"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "2", Tag = "2"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "3", Tag = "3"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "4 Middle", Tag = "4"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "5", Tag = "5"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "6", Tag = "6"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "7", Tag = "7"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "8", Tag = "8"});
							(contextMenuStrip1.Items[contextMenuStrip1.Items.Count - 1] as ToolStripMenuItem).DropDownItems.Add(
								new ToolStripMenuItem {Text = "9 Back", Tag = "9"});
						}
					}
					if (contextMenuStrip1.Items.Count > 0)
					{
						contextMenuStrip1.Show(this, e.Location);
					}
				}
				else if (e.Button == System.Windows.Forms.MouseButtons.Middle)
				{
					// Pan
					zoomTo = MousePointToZoomPoint(e.Location);

				}
			}
		}
Пример #2
0
		private void VixenPreviewControl_MouseMove(object sender, MouseEventArgs e)
		{
			if (_editMode)
			{
				PreviewPoint translatedPoint = new PreviewPoint(e.X + hScroll.Value, e.Y + vScroll.Value);
				Point zoomPoint = PointToZoomPoint(translatedPoint.ToPoint());
				if (e.Button == System.Windows.Forms.MouseButtons.Middle)
				{
					// Woo hoo... we're panning with the middle mouse button
					// Set the new background position based on the mouse position
					SetBackgroundPosition(zoomTo, MousePosition);
				}
				else
				{
					dragCurrent.X = translatedPoint.X;
					dragCurrent.Y = translatedPoint.Y;
					changeX = translatedPoint.X - dragStart.X;
					changeY = translatedPoint.Y - dragStart.Y;

					// Are we moving a single display item?
					if (_mouseCaptured && _selectedDisplayItem != null)
					{
						_selectedDisplayItem.Shape.MouseMove(dragCurrent.X, dragCurrent.Y, changeX, changeY);
					}
						// If we get here, we're drwing a rubber band
					else if (_banding)
					{
						int X1 = Math.Min(dragStart.X, dragStart.X + changeX);
						int Y1 = Math.Min(dragStart.Y, dragStart.Y + changeY);

						_bandRect.Location = new Point(X1, Y1);
						_bandRect.Width = Math.Abs(changeX);
						_bandRect.Height = Math.Abs(changeY);

						foreach (DisplayItem item in DisplayItems)
						{
							if (
								(changeX < 0 && item.Shape.ShapeInRect(_bandRect)) ||
								(changeX > 0 && item.Shape.ShapeAllInRect(_bandRect))
								)
							{
								if (!SelectedDisplayItems.Contains(item))
								{
									SelectedDisplayItems.Add(item);
								}
							}
							else if (SelectedDisplayItems.Contains(item))
							{
								SelectedDisplayItems.Remove(item);
							}
						}
					}
						// Are we moving a group of display items?
					else if (_mouseCaptured && _selectedDisplayItem == null && SelectedDisplayItems.Count() > 0)
					{
						foreach (DisplayItem item in SelectedDisplayItems)
						{
							item.Shape.MouseMove(zoomPoint.X, zoomPoint.Y, changeX, changeY);
						}
					}

					if (_selectedDisplayItem != null)
					{
						PreviewPoint selectPoint = _selectedDisplayItem.Shape.PointInSelectPoint(translatedPoint);
						if (selectPoint != null)
						{
							Cursor.Current = Cursors.Cross;
						}
						else if (_selectedDisplayItem.Shape.PointInShape(translatedPoint))
						{
							Cursor.Current = Cursors.SizeAll;
						}
						else
						{
							Cursor.Current = Cursors.Default;
						}
					}
					else if (SelectedDisplayItems.Count > 0)
					{
						if (MouseOverSelectedDisplayItems(translatedPoint.X, translatedPoint.Y))
						{
							Cursor.Current = Cursors.SizeAll;
						}
					}
				}
			}
		}
Пример #3
0
        private void VixenPreviewControl_MouseDown(object sender, MouseEventArgs e)
        {
            if (_editMode)
            {
                bool controlPressed = (Control.ModifierKeys == Keys.Control);
                PreviewPoint translatedPoint = new PreviewPoint(e.X + hScroll.Value, e.Y + vScroll.Value);
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    if (_currentTool == Tools.Select)
                    {
                        if (controlPressed)
                        {
                            DisplayItem item = DisplayItemAtPoint(translatedPoint);
                            if (item != null && SelectedDisplayItems.Contains(item))
                            {
                                SelectedDisplayItems.Remove(item);
                            }
                            else
                            {
                                SelectItemUnderPoint(translatedPoint, controlPressed);
                            }
                            return;
                        }

                        // Is there a single dislay item selected?
                        if (_selectedDisplayItem != null && !controlPressed)
                        {
                            // Lets see if we've got a drag point.
                            PreviewPoint selectedPoint = _selectedDisplayItem.Shape.PointInSelectPoint(translatedPoint);
                            if (selectedPoint != null)
                            {
                                dragStart = translatedPoint.ToPoint();
                                _selectedDisplayItem.Shape.SetSelectPoint(selectedPoint);
                                Capture = true;
                                _mouseCaptured = true;
                            }
                            // If we're not resizing, see if we're moving a single shape
                            else if (_selectedDisplayItem.Shape.PointInShape(translatedPoint))
                            {
                                StartMove(translatedPoint.X, translatedPoint.Y);
                            }
                            // If we get here, we're outside the shape, deselect
                            else
                            {
                                DeSelectSelectedDisplayItem();
                            }
                        }
                        // Are there multiple items selected?
                        // If so, we're moving, can't resize them...
                        else if (SelectedDisplayItems.Count > 1 && !controlPressed)
                        {
                            //if (MouseOverSelectedDisplayItems(e.X, e.Y)) {
                            //    StartMove(e.X, e.Y);
                            //}
                            //else {
                            //    SelectedDisplayItems.Clear();
                            //}
                            if (MouseOverSelectedDisplayItems(translatedPoint.X, translatedPoint.Y))
                            {
                                StartMove(translatedPoint.X, translatedPoint.Y);
                            }
                            else
                            {
                                SelectedDisplayItems.Clear();
                            }
                        }

                        SelectItemUnderPoint(translatedPoint, controlPressed);

                        // If we get this far, and we've got nothing selected, we're drawing a rubber band!
                        if (_selectedDisplayItem == null && SelectedDisplayItems.Count == 0)
                        {
                            // Capture the mouse in case we want to draw a rubber band
                            dragStart = translatedPoint.ToPoint();
                            Capture = true;
                            _mouseCaptured = true;
                            SelectedDisplayItems.Clear();
                            _bandRect.Width = 0;
                            _bandRect.Height = 0;
                            _banding = true;
                        }
                    }

                    else if (_selectedDisplayItem != null && _selectedDisplayItem.Shape.PointInShape(translatedPoint) && !_selectedDisplayItem.Shape.Creating)
                    {
                        StartMove(translatedPoint.X, translatedPoint.Y);
                    }

                    // If we're not Selecting items, we're drawing them
                    else if (_currentTool == Tools.PolyLine && _mouseCaptured)
                    {
                        return;
                    }
                    else if (_currentTool == Tools.MultiString && _mouseCaptured)
                    {
                        return;
                    }
                    else
                    {
                        DeSelectSelectedDisplayItem();

                        DisplayItem newDisplayItem = null;
                        if (_currentTool == Tools.String)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewLine(translatedPoint, translatedPoint, 50,
                                                                   elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Arch)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewArch(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Rectangle)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewRectangle(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Single)
                        {
                            newDisplayItem = new DisplayItem
                            {
                                Shape = new PreviewSingle(translatedPoint, elementsForm.SelectedNode, ZoomLevel)
                            };
                        }
                        else if (_currentTool == Tools.Ellipse)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewEllipse(translatedPoint, 50, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Triangle)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewTriangle(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Net)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewNet(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Cane)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewCane(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Star)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewStar(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.StarBurst)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewStarBurst(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Flood)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewFlood(translatedPoint, elementsForm.SelectedNode);
                        }
                        else if (_currentTool == Tools.MegaTree)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewMegaTree(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.PixelGrid)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewPixelGrid(translatedPoint, elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.Icicle)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewIcicle(translatedPoint, translatedPoint,
                                                                     elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.PolyLine)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewPolyLine(translatedPoint, translatedPoint,
                                                                       elementsForm.SelectedNode, ZoomLevel);
                        }
                        else if (_currentTool == Tools.MultiString)
                        {
                            newDisplayItem = new DisplayItem();
                            newDisplayItem.Shape = new PreviewMultiString(translatedPoint, translatedPoint,
                                                                          elementsForm.SelectedNode, ZoomLevel);
                        }

                        // Now add the newely created display item to the screen.
                        if (newDisplayItem != null)
                        {
                            AddDisplayItem(newDisplayItem);
                            newDisplayItem.ZoomLevel = ZoomLevel;
                            _selectedDisplayItem = newDisplayItem;
                            _selectedDisplayItem.Shape.PixelSize = 3;
                            _selectedDisplayItem.Shape.Select(true);
                            _selectedDisplayItem.Shape.SelectDefaultSelectPoint();
                            dragStart = translatedPoint.ToPoint();
                            Capture = true;
                            _mouseCaptured = true;
                        }
                    }
                }
                else if (e.Button == System.Windows.Forms.MouseButtons.Right)
                {
                    ContextMenu menu = null;
                    MenuItem item;

                    SelectItemUnderPoint(translatedPoint, false);

                    if (_selectedDisplayItem != null)
                    {
                        PreviewPoint selectedPoint = _selectedDisplayItem.Shape.PointInSelectPoint(translatedPoint);
                        if (_selectedDisplayItem.Shape.PointInShape(translatedPoint))
                        {
                            menu = new ContextMenu();
                            if (_selectedDisplayItem.Shape.GetType().ToString().Contains("PreviewCustom"))
                            {
                                item = new MenuItem("Separate Template Items", OnItemContextMenuClick);
                                item.Tag = "Separate";
                                menu.MenuItems.Add(item);
                            }
                        }
                    }
                    else if (SelectedDisplayItems.Count > 1)
                    {
                        menu = new ContextMenu();

                        item = new MenuItem("Create Group...", OnItemContextMenuClick);
                        item.Tag = "CreateGroup";
                        menu.MenuItems.Add(item);

                        item = new MenuItem("-");
                        menu.MenuItems.Add(item);

                        item = new MenuItem("Create Template...", OnItemContextMenuClick);
                        item.Tag = "CreateTemplate";
                        menu.MenuItems.Add(item);
                    }

                    if (menu != null)
                    {
                        if (menu.MenuItems.Count > 0)
                        {
                            item = new MenuItem("-");
                            menu.MenuItems.Add(item);
                        }

                        item = new MenuItem("Cut", OnItemContextMenuClick);
                        item.Tag = "Cut";
                        menu.MenuItems.Add(item);

                        item = new MenuItem("Copy", OnItemContextMenuClick);
                        item.Tag = "Copy";
                        menu.MenuItems.Add(item);

                        item = new MenuItem("Paste", OnItemContextMenuClick);
                        item.Tag = "Paste";
                        menu.MenuItems.Add(item);

                        item = new MenuItem("Delete", OnItemContextMenuClick);
                        item.Tag = "Delete";
                        menu.MenuItems.Add(item);

                        item = new MenuItem("-");
                        menu.MenuItems.Add(item);

                        if (Data.SaveLocations)
                        {
                            // Z location menu
                            MenuItem locationItem = new MenuItem("Set Z Location to");
                            menu.MenuItems.Add(locationItem);
                            item = new MenuItem("0 Front", OnItemContextMenuClick);
                            item.Tag = "0";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("1", OnItemContextMenuClick);
                            item.Tag = "1";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("2", OnItemContextMenuClick);
                            item.Tag = "2";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("3", OnItemContextMenuClick);
                            item.Tag = "3";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("4 Middle", OnItemContextMenuClick);
                            item.Tag = "4";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("5", OnItemContextMenuClick);
                            item.Tag = "5";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("6", OnItemContextMenuClick);
                            item.Tag = "6";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("7", OnItemContextMenuClick);
                            item.Tag = "7";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("8", OnItemContextMenuClick);
                            item.Tag = "8";
                            locationItem.MenuItems.Add(item);
                            item = new MenuItem("9 Back", OnItemContextMenuClick);
                            item.Tag = "9";
                            locationItem.MenuItems.Add(item);
                        }
                        menu.Show(this, e.Location);
                    }
                }
                else if (e.Button == System.Windows.Forms.MouseButtons.Middle)
                {
                    // Pan
                    zoomTo = MousePointToZoomPoint(e.Location);
                }
            }
        }