private ArcWidget GetArcBetweenWidgets(PetriNetElementWidget widget1, PetriNetElementWidget widget2) { var result = Widgets.FirstOrDefault (widget => widget is ArcWidget && ((((Arc)widget.Element).StartElement == widget1.Element && ((Arc)widget.Element).EndElement == widget2.Element) || (((Arc)widget.Element).StartElement == widget2.Element && ((Arc)widget.Element).EndElement == widget1.Element)) ); return result as ArcWidget; }
private bool CanWidgetsBeConnected(PetriNetElementWidget widget1, PetriNetElementWidget widget2) { return GetArcBetweenWidgets(widget1, widget2) == null && ((widget1.Element != null && widget1.Element is ITokenContainer && widget2.Element != null && widget2.Element is ITokenConsumer) || (widget1.Element != null && widget1.Element is ITokenConsumer && widget2.Element != null && widget2.Element is ITokenContainer)); }
private bool CanWidgetsBeDisconnected(PetriNetElementWidget widget1, PetriNetElementWidget widget2) { return GetArcBetweenWidgets(widget1, widget2) != null; }
private bool CanWidgetConnectionBeInverted(PetriNetElementWidget widget1, PetriNetElementWidget widget2) { var arcWidget = GetArcBetweenWidgets(widget1, widget2); if (arcWidget != null) { var arc = arcWidget.Element as Arc; if (arc != null && ((arc.StartElement == widget1.Element && widget1.Element is ITokenContainer && widget2.Element != null && widget2.Element is ITokenDispatcher) || (arc.StartElement == widget2.Element && widget2.Element is ITokenContainer && widget1.Element != null && widget1.Element is ITokenDispatcher) || (arc.StartElement == widget1.Element && widget1.Element is ITokenConsumer && widget2.Element != null && widget2.Element is ITokenContainer) || (arc.StartElement == widget2.Element && widget2.Element is ITokenConsumer && widget1.Element != null && widget1.Element is ITokenContainer) )) { return true; } } return false; }