public CanvasContent Deserialize() { var root = XElement.Load( myReader ); double offsetX = Double.Parse( root.Attribute( "OffsetX" ).Value, CultureInfo.InvariantCulture ); double offsetY = Double.Parse( root.Attribute( "OffsetY" ).Value, CultureInfo.InvariantCulture ); var items = new List<DesignerItem>(); var itemsXML = root.Elements( "DesignerItems" ).Elements( "DesignerItem" ); foreach( var itemXML in itemsXML ) { var id = new Guid( itemXML.Element( "ID" ).Value ); var item = DeserializeDesignerItem( itemXML, id ); item.SetConnectorDecoratorTemplate(); items.Add( item ); } var connections = new List<Connection>(); var connectionsXML = root.Elements( "Connections" ).Elements( "Connection" ); foreach( var connectionXML in connectionsXML ) { var sourceID = new Guid( connectionXML.Element( "SourceID" ).Value ); var sinkID = new Guid( connectionXML.Element( "SinkID" ).Value ); var sourceConnectorName = connectionXML.Element( "SourceConnectorName" ).Value; var sinkConnectorName = connectionXML.Element( "SinkConnectorName" ).Value; var sourceConnector = GetConnector( items, sourceID, sourceConnectorName ); var sinkConnector = GetConnector( items, sinkID, sinkConnectorName ); var connection = new Connection( sourceConnector, sinkConnector ); connection.SourceArrowSymbol = ( ArrowSymbol )Enum.Parse( typeof( ArrowSymbol ), connectionXML.Element( "SourceArrowSymbol" ).Value ); connection.SinkArrowSymbol = ( ArrowSymbol )Enum.Parse( typeof( ArrowSymbol ), connectionXML.Element( "SinkArrowSymbol" ).Value ); connection.IsDotted = connectionXML.Element( "IsDotted" ) != null ? bool.Parse( connectionXML.Element( "IsDotted" ).Value ) : false; Canvas.SetZIndex( connection, Int32.Parse( connectionXML.Element( "zIndex" ).Value ) ); var propertiesContent = ConvertBladeNamespaces(connectionXML.Element("Properties").Value); using (var reader = XmlReader.Create(new StringReader(propertiesContent))) { var properties = (ItemPropertyCollection)XamlReader.Load(reader); connection.Properties = properties; } connection.Caption = connectionXML.Element( "Caption" ).Value; connections.Add( connection ); } var canvas = new CanvasContent( items, connections ); canvas.AddOffset( offsetX, offsetY ); return canvas; }
private void CopyCurrentSelection() { var selectedDesignerItems = SelectionService.CurrentSelection.OfType<DesignerItem>(); var selectedConnections = SelectionService.CurrentSelection.OfType<Connection>().ToList(); foreach( Connection connection in this.Children.OfType<Connection>() ) { if( !selectedConnections.Contains( connection ) ) { DesignerItem sourceItem = ( from item in selectedDesignerItems where item.ID == connection.Source.ParentDesignerItem.ID select item ).FirstOrDefault(); DesignerItem sinkItem = ( from item in selectedDesignerItems where item.ID == connection.Sink.ParentDesignerItem.ID select item ).FirstOrDefault(); if( sourceItem != null && sinkItem != null && BelongToSameGroup( sourceItem, sinkItem ) ) { selectedConnections.Add( connection ); } } } var content = new CanvasContent( selectedDesignerItems, selectedConnections ); content.AddOffset( 10, 10 ); PersistenceService.CopyToClipboard( content ); }