Esempio n. 1
1
    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);
      }
    }
Esempio n. 2
0
    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);
    }