/// <summary> /// Utility method to delete a connection from the view-model. /// </summary> public void DeleteConnection(ConnectionViewModel connection) { if (MessageBox.Show("Do you want to remove the connection?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { this.Network.Connections.Remove(connection); } }
/// <summary> /// Called when the user has started to drag out a connector, thus creating a new connection. /// </summary> public ConnectionViewModel ConnectionDragStarted(ConnectorViewModel draggedOutConnector, Point curDragPoint) { // // Create a new connection to add to the view-model. // var connection = new ConnectionViewModel(); connection.ConnectionChanged += Utilities.ConnectionViewModelConnectionChanged; if (draggedOutConnector.Type == ConnectorType.Output) { // // The user is dragging out a source connector (an output) and will connect it to a destination connector (an input). // connection.SourceConnector = draggedOutConnector; connection.DestConnectorHotspot = curDragPoint; } else { // // The user is dragging out a destination connector (an input) and will connect it to a source connector (an output). // connection.DestConnector = draggedOutConnector; connection.SourceConnectorHotspot = curDragPoint; } // // Add the new connection to the view-model. // this.Network.Connections.Add(connection); return(connection); }
/// <summary> /// Called when the user has finished dragging out the new connection. /// </summary> public void ConnectionDragCompleted(ConnectionViewModel newConnection, ConnectorViewModel connectorDraggedOut, ConnectorViewModel connectorDraggedOver) { if (connectorDraggedOver == null) { // // The connection was unsuccessful. // Maybe the user dragged it out and dropped it in empty space. // this.Network.Connections.Remove(newConnection); return; } // // Only allow connections from output connector to input connector (ie each // connector must have a different type). // //(Also only allocation from one node to another, never one node back to the same node.) Condition Removed //connectorDraggedOut.ParentNode != connectorDraggedOver.ParentNode && bool connectionOk = connectorDraggedOut.Type != connectorDraggedOver.Type; if (!connectionOk) { // // Connections between connectors that have the same type, // eg input -> input or output -> output, are not allowed, // Remove the connection. // this.Network.Connections.Remove(newConnection); return; } // // The user has dragged the connection on top of another valid connector. // // // Remove any existing connection between the same two connectors. // var existingConnection = FindConnection(connectorDraggedOut, connectorDraggedOver); if (existingConnection != null) { this.Network.Connections.Remove(existingConnection); } // // Finalize the connection by attaching it to the connector // that the user dragged the mouse over. // if (newConnection.DestConnector == null) { newConnection.DestConnector = connectorDraggedOver; } else { newConnection.SourceConnector = connectorDraggedOver; } }
/// <summary> /// Called as the user continues to drag the connection. /// </summary> public void ConnectionDragging(Point curDragPoint, ConnectionViewModel connection) { if (connection.DestConnector == null) { connection.DestConnectorHotspot = curDragPoint; } else { connection.SourceConnectorHotspot = curDragPoint; } }