Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }