public VirtualControlData(VirtualControl vc) { for (var index = vc.Nodes.Count - 1; index >= 0; index--) { var node = vc.Nodes[index]; if (node.Types != NodeTypes.Root && node.Types != NodeTypes.SpaghettiDivider) { Nodes.Add(new NodeProperties(node)); } else if (node.Types == NodeTypes.SpaghettiDivider) { SpaghettiDividers.Add(new SpaghDividerProperties(node)); VolatileConnectors.Add(new VolatileConnector { X = node.X, Y = node.Y, Connector = ((SpaghettiDivider)node).ObjectConnector }); (node as SpaghettiDivider).Delete(); } } foreach (var conn in vc.ObjectConnectors) { ObjectConnectors.Add(new ObjectConnectorProperties(conn)); } foreach (var conn in vc.ExecutionConnectors) { ExecutionConnectors.Add(new ExecutionConnectorProperties(conn)); } foreach (var conn in VolatileConnectors) { var divider = new SpaghettiDivider(vc, conn.Connector, false); for (var index = 0; index < vc.ObjectConnectors.Count; index++) { var c = vc.ObjectConnectors[index]; if (c == conn.Connector) { c.Delete(); } } conn.Connector.EndPort.ConnectedConnectors.ClearConnectors(); vc.AddNode(divider, conn.X, conn.Y); } }
//private readonly DependencyPropertyDescriptor LeftTrigger // = DependencyPropertyDescriptor.FromProperty( // Canvas.LeftProperty, typeof(Node) // ); /// <summary> /// The node that will contain the ports and data /// </summary> /// <param name="host"></param> /// <param name="type"></param> /// <param name="spontaneousAddition"></param> public Node(VirtualControl host, NodeTypes type, bool spontaneousAddition = true) { Types = type; Host = host; Style = (Style)FindResource("NodeStyle"); switch (type) { case NodeTypes.Event: Background = Brushes.Red; break; case NodeTypes.Basic: Background = Brushes.Transparent; break; case NodeTypes.Method: Background = Brushes.DeepSkyBlue; break; case NodeTypes.Function: Background = Brushes.LightGreen; break; case NodeTypes.VariableGet: Background = Brushes.Black; break; case NodeTypes.VariableSet: Background = Brushes.LightGray; break; case NodeTypes.Root: break; case NodeTypes.Code: break; case NodeTypes.SpaghettiDivider: break; case NodeTypes.CollapsedRegion: break; } var init = false; Loaded += (sender, args) => { if (!init) { FuncNodeInit(); init = true; } }; Panel.SetZIndex(this, ZIndexes.NodeIndex); KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.None); if (spontaneousAddition) { host.AddNode(this, Mouse.GetPosition(host).X - 5, Mouse.GetPosition(host).Y - 5, type == NodeTypes.Root); } Id = Guid.NewGuid().ToString(); Console.WriteLine(Id); IsVisibleChanged += Node_IsVisibleChanged; MouseDown += Node_MouseDown; }