public WaypointMoveOperation(ConnectorUI ui, Point startPoint, IWaypoint wp)
            {
                _ui         = ui;
                _wp         = wp;
                _startPoint = startPoint;
                _ui.TriggerSnapshot();

                _ui.MouseMove += Ui_MouseMove;
                _ui.MouseUp   += Ui_MouseUp;
                _ui.CaptureMouse();
            }
            public MoveConnectorOperation(ConnectorUI ui, Point p)
            {
                _ui              = ui;
                _model           = ui._model;
                _startPoint      = p;
                _p0              = p;
                _moveHelper      = _model.StartMove(p);
                _newMoveDistance = _moveHelper.Distance;
                _movePointStart  = _moveHelper.StartPoint;
                var from = _moveHelper.StartingFrom;
                var to   = _moveHelper.EndingAt;

                _fromGeometry = new RectangleGeometry(from.Bounds);

                _toGeometry = new RectangleGeometry(to.Bounds);

                if (Keyboard.IsKeyDown(Key.LeftShift))
                {
                    if (TryAdjustConnectorLine())
                    {
                        //_moveHelper.Commit()
                    }
                    StopOperation(false);
                }
                else
                {
                    var initialGeometry = _moveHelper.GetGeometry(_gg, _moveHelper.LineType,
                                                                  _movePointStart, _moveHelper.EndPoint, _moveHelper.Distance);

                    _visualizer = new ConnectorMoveVisualizer(initialGeometry); //tbd
                                                                                //_visualizer.MouseMove += HandleMouseMove;
                    _isSelfTransition = _model.From == _model.To;
                    if (_moveHelper.MoveType == MoveType.MoveStartPoint && _model.CanMoveStart)
                    {
                        _mouseMove = MoveStartPoint;
                        //_allowableDockings = from.AllowableDockings(false);
                        _movingPointDocking = from.GetConnectorDocking(_moveHelper.StartPoint, false);
                        _otherPointDocking  = to.GetConnectorDocking(_moveHelper.EndPoint, true);
                        _otherPointPosition = _moveHelper.EndPoint;
                    }
                    else if (_moveHelper.MoveType == MoveType.MoveEndPoint && _model.CanMoveEnd)
                    {
                        //_allowableDockings = to.AllowableDockings(true);
                        _mouseMove          = MoveEndPoint;
                        _movingPointDocking = to.GetConnectorDocking(_moveHelper.EndPoint, true);
                        _otherPointDocking  = from.GetConnectorDocking(_moveHelper.StartPoint, false);
                        _otherPointPosition = _moveHelper.StartPoint;
                        _movePointStart     = _moveHelper.EndPoint;
                    }
                    else if (_moveHelper.MoveType == MoveType.MoveMiddlePoint)
                    {
                        _mouseMove = MoveMiddlePoint;
                    }
                    else
                    {
                        StopOperation(false);
                        return;
                    }
                    _initialOtherPointDocking = _otherPointDocking;
                    _ui.TriggerSnapshot();
                    _ui.MouseMove += HandleMouseMove;
                    _ui.MouseUp   += HandleMouseUp;
                    _ui.CaptureMouse();
                    _ui._parent.Canvas.Children.Add(_visualizer);
                }
            }