/// <summary> /// Split and adding the connector when symbol is dragged form Stencil and dropped over connector /// </summary> /// <param name="param"> /// </param> private void OnSymbolDropCommandExecute(object param) { IEnumerable <object> targetCollection = (param as ItemDropEventArgs).Target as IEnumerable <object>; if (targetCollection != null) { ConnectorVM newConnector = new ConnectorVM { SourceNode = (param as ItemDropEventArgs).Source }; foreach (object target in targetCollection) { if (target is IConnector) { if ((target as ConnectorVM).TargetNode != null) { newConnector.TargetNode = (target as ConnectorVM).TargetNode; (this.Connectors as ObservableCollection <ConnectorVM>).Add(newConnector); } (target as ConnectorVM).TargetNode = (param as ItemDropEventArgs).Source; return; } } } }
/// <summary> /// To add connectors when node is dragging and on diagram page and placed over Connector /// </summary> /// <param name="param"> /// value of NodeChangedEventArgs /// </param> private void OnNodeChangedCommandExecute(object param) { if ((param as DiagramEventArgs).Item is NodeVM) { this.FindQuickCommandVisibility(param as DiagramEventArgs); } // Enables the allow drop constraints when node/Connector intersectes. ObservableCollection <ConnectorVM> ConnectorsCollections = this.Connectors as ObservableCollection <ConnectorVM>; ObservableCollection <NodeVM> NodesCollections = this.Nodes as ObservableCollection <NodeVM>; // To split and add the connectors when exisiting node is dropped on connector. if ((param as ChangeEventArgs <object, NodeChangedEventArgs>).NewValue.InteractionState == NodeChangedInteractionState.Dragged) { Rect nodeBounds = new Rect(0, 0, 0, 0); if ((((param as DiagramEventArgs).Item as NodeVM).Info as INodeInfo).InOutConnectors == null) { nodeBounds = (((param as DiagramEventArgs).Item as NodeVM).Info as INodeInfo).Bounds; ObservableCollection <ConnectorVM> ConnectorCollection = this.Connectors as ObservableCollection <ConnectorVM>; if (ConnectorCollection.Count > 0) { foreach (ConnectorVM connector in ConnectorCollection) { Rect Connectorbounds = (connector.Info as IConnectorInfo).Bounds; if (nodeBounds.IntersectsWith(Connectorbounds)) { ConnectorVM newConnector = new ConnectorVM { SourceNode = (param as DiagramEventArgs).Item, TargetNode = connector.TargetNode }; connector.TargetNode = (param as DiagramEventArgs).Item; (this.Connectors as ObservableCollection <ConnectorVM>).Add(newConnector); break; } } } } } }
public void ConnectorCreate(ConnectorVM connectorVM) { Connector connector = new Connector(); }
/// <summary> /// This command executes when an item gets deleted. /// </summary> /// <param name="param"> /// The param. /// </param> private void ItemDeletingCommandExecute(object param) { int val = ((this.SelectedItems as FlowChartSelectorVm).Connectors as IEnumerable <object>).Count(); if (val == 0) { NodeVM deletingNode = (param as ItemDeletingEventArgs).Item as NodeVM; if ((param as ItemDeletingEventArgs).Item is NodeVM && (deletingNode.Info as INodeInfo).InConnectors != null && (deletingNode.Info as INodeInfo).OutConnectors != null) { if ((deletingNode.Info as INodeInfo).InConnectors.Count() > 1 && (deletingNode.Info as INodeInfo).OutConnectors.Count() > 1 || (deletingNode.Info as INodeInfo).InConnectors.Count() == 1 && (deletingNode.Info as INodeInfo).OutConnectors.Count() == 0 || (deletingNode.Info as INodeInfo).InConnectors.Count() == 0 && (deletingNode.Info as INodeInfo).OutConnectors.Count() == 1 || (deletingNode.Info as INodeInfo).InConnectors.Count() == 0 && (deletingNode.Info as INodeInfo).OutConnectors.Count() > 1 || (deletingNode.Info as INodeInfo).InConnectors.Count() > 1 && (deletingNode.Info as INodeInfo).OutConnectors.Count() == 0) { (param as ItemDeletingEventArgs).DeleteDependentConnector = true; } else { (param as ItemDeletingEventArgs).DeleteDependentConnector = false; if ((deletingNode.Info as INodeInfo).InConnectors.Count() == 1 && (deletingNode.Info as INodeInfo).OutConnectors.Count() == 1) { NodeVM newtargetNode = null; ConnectorVM outconnector = (deletingNode.Info as INodeInfo).OutConnectors.ToList()[0] as ConnectorVM; newtargetNode = outconnector.TargetNode as NodeVM; this.ConnectorCollection.Remove(outconnector); ConnectorVM inconnector = (deletingNode.Info as INodeInfo).InConnectors.ToList()[0] as ConnectorVM; inconnector.TargetNode = newtargetNode; if (inconnector.SourceNode == inconnector.TargetNode) { this.ConnectorCollection.Remove(inconnector); } } else if ((deletingNode.Info as INodeInfo).InConnectors.Count() > 1 && (deletingNode.Info as INodeInfo).OutConnectors.Count() == 1) { NodeVM newtargetNode = null; ConnectorVM outconnector = (deletingNode.Info as INodeInfo).OutConnectors.ToList()[0] as ConnectorVM; newtargetNode = outconnector.TargetNode as NodeVM; this.ConnectorCollection.Remove(outconnector); IEnumerable <IConnector> inConnectorsCollction = (deletingNode.Info as INodeInfo).InConnectors; foreach (ConnectorVM connector in inConnectorsCollction.ToList()) { connector.TargetNode = newtargetNode; } } else if ((deletingNode.Info as INodeInfo).InConnectors.Count() == 1 && (deletingNode.Info as INodeInfo).OutConnectors.Count() > 1) { NodeVM newtargetNode = null; ConnectorVM inconnector = (deletingNode.Info as INodeInfo).InConnectors.ToList()[0] as ConnectorVM; newtargetNode = inconnector.SourceNode as NodeVM; this.ConnectorCollection.Remove(inconnector); IEnumerable <IConnector> outConnectorsCollection = (deletingNode.Info as INodeInfo).OutConnectors; foreach (ConnectorVM connector in outConnectorsCollection.ToList()) { connector.SourceNode = newtargetNode; } } } } } }
/// <summary> /// Command for adding shapes into diagram /// </summary> /// <param name="param"> Name of the shape</param> void OnAddShapesCommand(object param) { ConnectorVM connector = new ConnectorVM() { }; var nodescollection = Diagram.Nodes as ObservableCollection <NodeVM>; NodeVM selectedNode = (this.Nodes as ObservableCollection <object>).First() as NodeVM; if (selectedNode != null) { Rect selectedNodeBounds = (selectedNode.Info as INodeInfo).Bounds; if (PanelDirection == "Right") { offsetx = selectedNodeBounds.Right + 100; offsety = selectedNode.OffsetY; } else if (PanelDirection == "Left") { offsetx = selectedNodeBounds.Left - 100; offsety = selectedNode.OffsetY; } else if (PanelDirection == "Top") { offsetx = selectedNode.OffsetX; offsety = selectedNodeBounds.Top - 75; } else if (PanelDirection == "Bottom") { offsetx = selectedNode.OffsetX; offsety = selectedNodeBounds.Bottom + 75; } connector.SourceNode = selectedNode; selectedNode.IsSelected = false; } NodeVM node = new NodeVM() { OffsetX = offsetx, OffsetY = offsety, Shape = App.Current.Resources[param], }; if (param.ToString().Equals("Process") || param.ToString().Equals("Decision") || param.ToString().Equals("MultiDocument") || param.ToString().Equals("Terminator") || param.ToString().Equals("Sort") || param.ToString().Equals("Document") || param.ToString().Equals("DirectData") || param.ToString().Equals("ManualOperation") || param.ToString().Equals("InternalStorage") || param.ToString().Equals("Card") || param.ToString().Equals("PredefinedProcess") || param.ToString().Equals("Or")) { if (param.ToString().Equals("Terminator")) { node.UnitHeight = 37; node.UnitWidth = 94; } else if (param.ToString().Equals("Or")) { node.UnitHeight = 75; node.UnitWidth = 75; } else { node.UnitHeight = 56; node.UnitWidth = 94; } if (param.ToString().Equals("MultiDocument") || param.ToString().Equals("Document")) { node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 1, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0.9, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("ManualOperation")) { node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0.1, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.9, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else { node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 1, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } } else if (param.ToString().Equals("SequentialData") || param.ToString().Equals("SequentialAccessStorage")) { node.UnitHeight = 95; node.UnitWidth = 95; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.95, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 1, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("Collate")) { node.UnitHeight = 75; node.UnitWidth = 75; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("SummingJunction")) { node.UnitHeight = 75; node.UnitWidth = 75; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 1, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.15, NodeOffsetY = 0.15, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.85, NodeOffsetY = 0.15, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.15, NodeOffsetY = 0.85, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.85, NodeOffsetY = 0.85, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("Extract") || param.ToString().Equals("Merge")) { node.UnitHeight = 75; node.UnitWidth = 75; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.25, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.75, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("OffPageReference")) { node.UnitHeight = 45; node.UnitWidth = 45; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.7, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 1, NodeOffsetY = 0.7, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("StoredData")) { node.UnitHeight = 56; node.UnitWidth = 95; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.9, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("Data")) { node.UnitHeight = 56; node.UnitWidth = 95; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0.1, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.9, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } else if (param.ToString().Equals("ManualInput")) { node.UnitHeight = 56; node.UnitWidth = 95; node.Ports = new DiagramBuilder.ViewModel.PortCollection() { new NodePortVM() { NodeOffsetX = 0, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 0.2, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 1, NodeOffsetY = 0.5, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, new NodePortVM() { NodeOffsetX = 0.5, NodeOffsetY = 1, Shape = App.Current.Resources["Rectangle"], ShapeStyle = App.Current.Resources["portShapeStyle"] as Style, }, }; } connector.Constraints |= ConnectorConstraints.AllowDrop; node.Constraints |= NodeConstraints.AllowDrop; (Diagram.Nodes as ObservableCollection <NodeVM>).Add(node); connector.TargetNode = node; (Diagram.Connectors as ObservableCollection <ConnectorVM>).Add(connector); node.IsSelected = true; }