示例#1
0
 private void MouseDownObject(MouseButtonEventArgs e)
 {
     if (focusedObject != TargetObject(e))
     {
         focusedObject = TargetObject(e);
         OnPropertyChanged("ClassName");
         if (State != EMainViewModel.AddingLine)
         {
             Message = focusedObject.ToString() + " was selected.";
         }
         return;
     }
     if (focusedObject is IShape)
     {
         var shape = focusedObject as IShape;
         if (shape is Dot && (shape as Dot).attachedClass != null)
         {
             return;
         }
         initialMousePosition  = RelativeMousePosition();
         initialObjectPosition = new Point(shape.X, shape.Y);
         e.MouseDevice.Target.CaptureMouse();
         State = EMainViewModel.MovingObject;
     }
 }
示例#2
0
 private void AddArrow()
 {
     State          = EMainViewModel.AddingLine;
     addingLineType = ELine.Arrow;
     focusedObject  = null;
     Message        = "Select first dot.";
 }
示例#3
0
        private void MouseLeftButtonUp(MouseButtonEventArgs e)
        {
            // Point p = e.GetPosition(Application.Current.MainWindow.FindName("MainCanvas") as Grid);
            Point p = RelativeMousePosition();

            if (State == EMainViewModel.AddingDot)
            {
                e.Handled = true;
                State     = EMainViewModel.Null;
                if (!MouseInCanvas())
                {
                    return;
                }

                // TODO Break line by dropping dot on line. Needs its own Command class.
                //var visualElement = TargetObject(e);
                //if (visualElement is Line)
                //{
                //    var line = visualElement as Line;
                //    AddAndExecute(new AddDotCommand(Dots, new Dot() { CanvasCenterX = p.X, CanvasCenterY = p.Y }));
                //    var dot = Dots.Last();
                //    if (line.Style == ELine.Dashed)
                //        AddAndExecute(new AddLineCommand(Lines, new Line() { From = line.From, To = dot, Style = ELine.Dashed }));
                //    else
                //        AddAndExecute(new AddLineCommand(Lines, new Line() { From = line.From, To = dot, Style = ELine.Solid }));
                //    AddAndExecute(new AddLineCommand(Lines, new Line() { From = dot, To = line.To, Style = line.Style }));
                //    AddAndExecute(new RemoveLineCommand(Lines, line));
                //}
                //else

                AddAndExecute(new AddDotCommand(Dots, new Dot()
                {
                    CanvasCenterX = p.X, CanvasCenterY = p.Y
                }));
                Message = "Dot added.";
            }
            else if (State == EMainViewModel.AddingClass)
            {
                e.Handled = true;
                State     = EMainViewModel.Null;
                if (!MouseInCanvas())
                {
                    return;
                }
                AddAndExecute(new AddClassCommand(Classes, new Class()
                {
                    CanvasCenterX = p.X, CanvasCenterY = p.Y, Style = addingClassType, Name = "Unnamed " + addingClassType
                }, Dots));
                Message = addingClassType + " was added.";
            }
            else if (State == EMainViewModel.AddingLine && !(TargetObject(e) is Dot) && MouseInCanvas())
            {
                e.Handled     = true;
                focusedObject = null;
                State         = EMainViewModel.Null;
                Message       = "Adding line failed.";
            }
        }
示例#4
0
        private void MouseUpObject(MouseButtonEventArgs e)
        {
            var shape         = focusedObject as IShape;
            var mousePosition = RelativeMousePosition();

            if (State == EMainViewModel.AddingLine)
            {
                if (focusedObject is Dot)
                {
                    if (addingLineFrom == null)
                    {
                        addingLineFrom = focusedObject as Dot;
                        Message        = "Select second dot.";
                        return;
                    }
                    else if (addingLineFrom != focusedObject as Dot)
                    {
                        AddAndExecute(new AddLineCommand(Lines, new Line()
                        {
                            From = addingLineFrom, To = focusedObject as Dot, Style = addingLineType
                        }));
                        Message = "Line added.";
                    }
                }

                focusedObject  = null;
                addingLineFrom = null;
                e.Handled      = true;
                State          = EMainViewModel.Null;
            }

            else if (Mouse.Captured != null && State == EMainViewModel.MovingObject)
            {
                shape.X = initialObjectPosition.X;
                shape.Y = initialObjectPosition.Y;
                e.MouseDevice.Target.ReleaseMouseCapture();
                State = EMainViewModel.Null;
                if (MouseInCanvas())
                {
                    AddAndExecute(new MoveShapeCommand(shape, mousePosition.X - initialMousePosition.X, mousePosition.Y - initialMousePosition.Y));
                }
                else
                {
                    shape.OnMoveEnd();
                    Message = "Shape was out of bounds.";
                }
            }
        }
示例#5
0
 private void DragAndDropEnumeration()
 {
     State           = EMainViewModel.AddingClass;
     addingClassType = EClass.Enumeration;
     Message         = "Drag enumeration into canvas.";
 }
示例#6
0
 private void DragAndDropAbstract()
 {
     State           = EMainViewModel.AddingClass;
     addingClassType = EClass.Abstract;
     Message         = "Drag abstract into canvas.";
 }
示例#7
0
 private void DragAndDropInterface()
 {
     State           = EMainViewModel.AddingClass;
     addingClassType = EClass.Interface;
     Message         = "Drag interface into canvas.";
 }
示例#8
0
 private void DragAndDropClass()
 {
     State           = EMainViewModel.AddingClass;
     addingClassType = EClass.Class;
     Message         = "Drag class into canvas.";
 }
示例#9
0
 private void DragAndDropDot()
 {
     State   = EMainViewModel.AddingDot;
     Message = "Drag dot into canvas.";
 }