/// <summary> /// Called by the base ConnectAction class to create the underlying relationship. /// </summary> /// <remarks> /// This implementation delegates calls to the ConnectionBuilder ContainsBuilder. /// </remarks> public override void CreateConnection(DslDiagrams::ShapeElement sourceShapeElement, DslDiagrams::ShapeElement targetShapeElement, DslDiagrams::PaintFeedbackArgs paintFeedbackArgs) { if (sourceShapeElement == null) { throw new global::System.ArgumentNullException("sourceShapeElement"); } if (targetShapeElement == null) { throw new global::System.ArgumentNullException("targetShapeElement"); } sourceShapeElement = RemovePassThroughShapes(sourceShapeElement); targetShapeElement = RemovePassThroughShapes(targetShapeElement); DslModeling::ModelElement sourceElement = sourceShapeElement.ModelElement; if (sourceElement == null) { sourceElement = sourceShapeElement; } DslModeling::ModelElement targetElement = targetShapeElement.ModelElement; if (targetElement == null) { targetElement = targetShapeElement; } ContainsBuilder.Connect(sourceElement, targetElement); }
/// <summary> /// Called by the base ConnectAction class to determine if the given shapes can be connected. /// </summary> /// <remarks> /// This implementation delegates calls to the ConnectionBuilder ContainsBuilder. /// </remarks> public override bool CanCreateConnection(DslDiagrams::ShapeElement sourceShapeElement, DslDiagrams::ShapeElement targetShapeElement, ref string connectionWarning) { bool canConnect = true; if (sourceShapeElement == null) { throw new global::System.ArgumentNullException("sourceShapeElement"); } sourceShapeElement = RemovePassThroughShapes(sourceShapeElement); DslModeling::ModelElement sourceElement = sourceShapeElement.ModelElement; if (sourceElement == null) { sourceElement = sourceShapeElement; } DslModeling::ModelElement targetElement = null; if (targetShapeElement != null) { targetShapeElement = RemovePassThroughShapes(targetShapeElement); targetElement = targetShapeElement.ModelElement; if (targetElement == null) { targetElement = targetShapeElement; } } // base.CanCreateConnection must be called to check whether existing Locks prevent this link from getting created. canConnect = base.CanCreateConnection(sourceShapeElement, targetShapeElement, ref connectionWarning); if (canConnect) { if (targetShapeElement == null) { return(ContainsBuilder.CanAcceptSource(sourceElement)); } else { return(ContainsBuilder.CanAcceptSourceAndTarget(sourceElement, targetElement)); } } else { //return false return(canConnect); } }