protected override void OnMouseUp(MouseButtonEventArgs e) { if (HitConnector != null) { var sourceConnector = this.sourceConnector; var sinkConnector = HitConnector; var model = new ConnectionModel(sourceConnector.ConnectorViewModel.ConnectorModel, sinkConnector.ConnectorViewModel.ConnectorModel); var connectionViewModel = new ConnectionViewModel(sourceConnector.ConnectorViewModel, sinkConnector.ConnectorViewModel, model); var newConnection = new Connection(sourceConnector, sinkConnector, connectionViewModel); Panel.SetZIndex(newConnection, designerCanvas.Children.Count); designerCanvas.Children.Add(newConnection); var vm = designerCanvas.DataContext as EditorWindowViewModel; if (vm == null) throw new ArgumentNullException("designerCanvas.DataContext as EditorWindowViewModel"); vm.Add(connectionViewModel); } if (HitDesignerItem != null) { HitDesignerItem.IsDragConnectionOver = false; } if (IsMouseCaptured) ReleaseMouseCapture(); var adornerLayer = AdornerLayer.GetAdornerLayer(designerCanvas); if (adornerLayer != null) { adornerLayer.Remove(this); } }
public ConnectionAdorner(DesignerCanvas designer, Connection connection) : base(designer) { designerCanvas = designer; adornerCanvas = new Canvas(); visualChildren = new VisualCollection(this); visualChildren.Add(adornerCanvas); this.connection = connection; this.connection.PropertyChanged += AnchorPositionChanged; InitializeDragThumbs(); drawingPen = new Pen(Brushes.LightSlateGray, 1); drawingPen.LineJoin = PenLineJoin.Round; Unloaded += ConnectionAdorner_Unloaded; }
private void RemoveConnection(Connection connection) { Children.Remove(connection); var vm = EditorWindowViewModel(); vm.Remove(connection.ConnectionViewModel); }
private void Open_Executed(object sender, ExecutedRoutedEventArgs e) { var root = LoadSerializedDataFromFile(); if (root == null) return; Children.Clear(); SelectionService.ClearSelection(); 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, 0, 0); Children.Add(item); SetConnectorDecoratorTemplate(item); } InvalidateVisual(); 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(sourceID, sourceConnectorName); var sinkConnector = GetConnector(sinkID, sinkConnectorName); var connection = new Connection(sourceConnector, sinkConnector, null); SetZIndex(connection, int.Parse(connectionXML.Element("zIndex").Value)); Children.Add(connection); } }
private void Paste_Executed(object sender, ExecutedRoutedEventArgs e) { var root = LoadSerializedDataFromClipBoard(); if (root == null) return; // create DesignerItems var mappingOldToNewIDs = new Dictionary<Guid, Guid>(); var newItems = new List<ISelectable>(); var itemsXML = root.Elements("DesignerItems").Elements("DesignerItem"); var offsetX = double.Parse(root.Attribute("OffsetX").Value, CultureInfo.InvariantCulture); var offsetY = double.Parse(root.Attribute("OffsetY").Value, CultureInfo.InvariantCulture); foreach (var itemXML in itemsXML) { var oldID = new Guid(itemXML.Element("ID").Value); var newID = Guid.NewGuid(); mappingOldToNewIDs.Add(oldID, newID); var item = DeserializeDesignerItem(itemXML, newID, offsetX, offsetY); Children.Add(item); SetConnectorDecoratorTemplate(item); newItems.Add(item); } // update group hierarchy SelectionService.ClearSelection(); foreach (DesignerItem el in newItems) { if (el.ParentID != Guid.Empty) el.ParentID = mappingOldToNewIDs[el.ParentID]; } foreach (DesignerItem item in newItems) { if (item.ParentID == Guid.Empty) { SelectionService.AddToSelection(item); } } // create Connections var connectionsXML = root.Elements("Connections").Elements("Connection"); foreach (var connectionXML in connectionsXML) { var oldSourceID = new Guid(connectionXML.Element("SourceID").Value); var oldSinkID = new Guid(connectionXML.Element("SinkID").Value); if (mappingOldToNewIDs.ContainsKey(oldSourceID) && mappingOldToNewIDs.ContainsKey(oldSinkID)) { var newSourceID = mappingOldToNewIDs[oldSourceID]; var newSinkID = mappingOldToNewIDs[oldSinkID]; var sourceConnectorName = connectionXML.Element("SourceConnectorName").Value; var sinkConnectorName = connectionXML.Element("SinkConnectorName").Value; var sourceConnector = GetConnector(newSourceID, sourceConnectorName); var sinkConnector = GetConnector(newSinkID, sinkConnectorName); var connection = new Connection(sourceConnector, sinkConnector, null); SetZIndex(connection, int.Parse(connectionXML.Element("zIndex").Value)); Children.Add(connection); SelectionService.AddToSelection(connection); } } BringToFront.Execute(null, this); // update paste offset root.Attribute("OffsetX").Value = (offsetX + 10).ToString(); root.Attribute("OffsetY").Value = (offsetY + 10).ToString(); Clipboard.Clear(); Clipboard.SetData(DataFormats.Xaml, root); }