private ContextMenu wireMenu() { var cm = new ContextMenu(); var divide = new MenuItem { Header = "Divide", Foreground = Brushes.WhiteSmoke }; divide.Click += (s, e) => { if (StartPort.ParentNode.Types != NodeTypes.SpaghettiDivider && EndPort.ParentNode.Types != NodeTypes.SpaghettiDivider) { Task.Factory.StartNew(() => { Wire.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, new Action(() => { var divider = new SpaghettiDivider(Host, this, false); Host.AddNode(divider, Mouse.GetPosition(Host).X, Mouse.GetPosition(Host).Y); e.Handled = true; })); }); } e.Handled = true; }; var delete = new MenuItem { Header = "Delete", Foreground = Brushes.WhiteSmoke }; delete.Click += (s, e) => Delete(); cm.Items.Add(divide); cm.Items.Add(delete); return(cm); }
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); } }
public static bool LoadVirtualData(VirtualControl vc, string str) { try { for (var index = 0; index < vc.Nodes.Count; index++) { var node = vc.Nodes[index]; node.Delete(); } var data = Cipher.DeSerializeFromString <VirtualControlData>(str); for (var index = data.Nodes.Count - 1; index >= 0; index--) { var copiednode = data.Nodes[index]; var typename = copiednode.Name; Node newNode = null; foreach (var node in LoadedExternalNodes) { if (node.ToString() != typename) { continue; } newNode = node.Clone(); vc.AddNode(newNode, copiednode.X, copiednode.Y); newNode.DeSerializeData(copiednode.InputData, copiednode.OutputData); newNode.Id = copiednode.Id; break; } if (newNode != null) { continue; } var type = Type.GetType(typename); if (type != null) { var instance = Activator.CreateInstance(type, vc, false); vc.AddNode(instance as Node, copiednode.X, copiednode.Y); var node = instance as Node; if (node != null) { node.Id = copiednode.Id; } } } foreach (var eConn in data.ExecutionConnectors) { var start = vc.GetNode(eConn.StartNode_ID); var end = vc.GetNode(eConn.EndNode_ID); NodesManager.CreateExecutionConnector(vc, start.OutExecPorts[eConn.StartPort_Index], end.InExecPorts[eConn.EndPort_Index]); } foreach (var oConn in data.ObjectConnectors) { var start = vc.GetNode(oConn.StartNode_ID); var end = vc.GetNode(oConn.EndNode_ID); NodesManager.CreateObjectConnector(vc, start.OutputPorts[oConn.StartPort_Index], end.InputPorts[oConn.EndPort_Index]); } foreach (var divider in data.SpaghettiDividers) { var node = vc.GetNode(divider.EndNode_ID); var port = node.InputPorts[divider.Port_Index]; var conn = port.ConnectedConnectors[0]; var spaghettiDivider = new SpaghettiDivider(vc, conn, false) { X = divider.X, Y = divider.Y }; vc.AddNode(spaghettiDivider, spaghettiDivider.X, spaghettiDivider.Y); } } catch (Exception) { return(false); } foreach (var node in vc.Nodes) { node.Refresh(); } vc.NeedsRefresh = true; return(true); }