Example #1
0
        private void AddReverseConnection(ConnectingRectangleViewModel source, ConnectingRectangleViewModel destination)
        {
            var sourceLetter      = source.Letter;
            var destinationLetter = destination.Letter;

            if (sourceLetter != destinationLetter)
            {
                ConnectingAlphabetViewModel sourceAlphabet, destinationAlphabet;
                if (TopAlphabet.ConnectingRectangles.Contains(source))
                {
                    sourceAlphabet      = TopAlphabet;
                    destinationAlphabet = BottomAlphabet;
                }
                else
                {
                    sourceAlphabet      = BottomAlphabet;
                    destinationAlphabet = TopAlphabet;
                }

                var reverseSourceLetter      = sourceAlphabet.ConnectingRectangles.Single(x => x.Letter == destinationLetter);
                var reverseDestinationLetter = destinationAlphabet.ConnectingRectangles.Single(x => x.Letter == sourceLetter);
                var line = AddLine(reverseSourceLetter, reverseDestinationLetter);
                AddNewConnection(reverseSourceLetter, reverseDestinationLetter, line);
            }
        }
Example #2
0
        public void Handle(RectangleClickMessage message)
        {
            var rectangle = message.Rectangle;

            if (!_isConnecting)
            {
                _isConnecting    = true;
                _sourceRectangle = rectangle;

                if (_sourceRectangle.IsConnected)
                {
                    RemoveExistingConnection(_sourceRectangle);
                }

                StartDrawingLine(_sourceRectangle);
            }
            else
            {
                _isConnecting         = false;
                _destinationRectangle = rectangle;

                if (ConnectionNotPossible(rectangle))
                {
                    CancelDrawingLine();
                    return;
                }

                if (_destinationRectangle.IsConnected)
                {
                    RemoveExistingConnection(_destinationRectangle);
                }

                AddConnection(_sourceRectangle, _destinationRectangle, _line);
            }
        }
Example #3
0
        private void FinishDrawingLine(ConnectingRectangleViewModel rectangle)
        {
            var endPosition = GetAnchorPoint(rectangle);

            _line.SetEndPoint(endPosition);

            View.MouseMove -= View_MouseMove;
        }
Example #4
0
        private void AddNewConnection(ConnectingRectangleViewModel source, ConnectingRectangleViewModel destination, Line line)
        {
            var connection = _factory.CreateConnection(source, destination, line);

            _connections.Add(connection);

            _plugboardController.AddPlugboardConnection(connection.From, connection.To);
        }
Example #5
0
        private Point GetAnchorPoint(ConnectingRectangleViewModel rectangle)
        {
            var view        = rectangle.View;
            var width       = view.Width;
            var height      = view.Height;
            var middlePoint = new Point(width / 2, height / 2);

            return(view.TranslatePoint(middlePoint, Grid));
        }
Example #6
0
        private void StartDrawingLine(ConnectingRectangleViewModel rectangle)
        {
            var startPosition = GetAnchorPoint(rectangle);

            _line = DrawerHelper.GetLine(startPosition, startPosition, isHitTestVisible: false);

            AddLineToGrid(_line);

            View.MouseMove += View_MouseMove;
        }
Example #7
0
        private Line AddLine(ConnectingRectangleViewModel source, ConnectingRectangleViewModel destination)
        {
            var startPosition = GetAnchorPoint(source);
            var endPosition   = GetAnchorPoint(destination);

            var line = DrawerHelper.GetLine(startPosition, endPosition, isHitTestVisible: false);

            AddLineToGrid(line);

            return(line);
        }
Example #8
0
        private void RemoveExistingConnection(ConnectingRectangleViewModel rectangle)
        {
            var letter            = rectangle.Letter;
            var connection        = _connections.Single(con => con.SourceRectangle.Letter == letter);
            var reverseConnection = _connections.Single(con => con.DestinationRectangle.Letter == letter);

            RemoveConnection(connection);
            RemoveConnection(reverseConnection);

            void RemoveConnection(RectangleConnection con)
            {
                con.Clear();

                var line = con.ConnectingLine;

                Grid.Children.Remove(line);
                _connections.Remove(con);

                _plugboardController.RemovePlugboardConnection(con.From, con.To);
            }
        }
Example #9
0
 private void AddConnection(ConnectingRectangleViewModel source, ConnectingRectangleViewModel destination, Line line)
 {
     FinishDrawingLine(destination);
     AddNewConnection(source, destination, line);
     AddReverseConnection(source, destination);
 }
Example #10
0
 /// <summary>
 /// Checks if destination rectangle is from different collection than source rectangle
 /// </summary>
 /// <param name="rectangle"></param>
 /// <returns></returns>
 private bool ConnectionNotPossible(ConnectingRectangleViewModel rectangle)
 {
     return(TopAlphabet.ConnectingRectangles.Contains(_sourceRectangle) && TopAlphabet.ConnectingRectangles.Contains(rectangle) ||
            BottomAlphabet.ConnectingRectangles.Contains(_sourceRectangle) && BottomAlphabet.ConnectingRectangles.Contains(rectangle));
 }