Example #1
0
        private List <MyUsedModuleInfo> ScanForUsedModules()
        {
            HashSet <MyModuleConfig> usedModules = new HashSet <MyModuleConfig>();

            MyNodeGroup.IteratorAction scanForModules = delegate(MyNode node)
            {
                if (MyConfiguration.AssemblyLookup.ContainsKey(node.GetType().Assembly.FullName))
                {
                    usedModules.Add(MyConfiguration.AssemblyLookup[node.GetType().Assembly.FullName]);
                }
                else
                {
                    MyLog.WARNING.WriteLine("Unregistered module used in the project: " + node.GetType().Assembly.FullName);
                }
            };

            Network.Iterate(true, scanForModules);
            scanForModules(Network);
            scanForModules(World);

            List <MyUsedModuleInfo> result = new List <MyUsedModuleInfo>();

            foreach (MyModuleConfig module in usedModules)
            {
                result.Add(new MyUsedModuleInfo()
                {
                    Name    = module.File.Name,
                    Version = module.GetXmlVersion()
                });
            }

            return(result);
        }
Example #2
0
        public void CloseObservers(MyNode node)
        {
            HashSet <ObserverForm> viewsToClose = new HashSet <ObserverForm>();

            MyNodeGroup.IteratorAction checkTarget = delegate(MyNode target)
            {
                foreach (ObserverForm ov in ObserverViews)
                {
                    if (ov.Observer.GenericTarget is MyAbstractMemoryBlock)
                    {
                        if ((ov.Observer.GenericTarget as MyAbstractMemoryBlock).Owner == target)
                        {
                            viewsToClose.Add(ov);
                        }
                    }
                    else if (ov.Observer.GenericTarget == target)
                    {
                        viewsToClose.Add(ov);
                    }
                }
            };

            checkTarget(node);

            if (node is MyNodeGroup)
            {
                (node as MyNodeGroup).Iterate(true, checkTarget);
            }

            foreach (ObserverForm ov in viewsToClose)
            {
                ov.Close();
            }
        }
Example #3
0
        public int UpdateAfterDeserialization(int topId, MyProject parentProject)
        {
            if (topId < this.Id)
            {
                topId = this.Id;
            }

            this.Owner = parentProject;

            Dictionary <int, MyNode> nodes = new Dictionary <int, MyNode>();

            topId = CollectNodesAndUpdate(this, nodes, topId);

            parentProject.ReadOnly = false;

            MyNodeGroup.IteratorAction findUnknownAction = delegate(MyNode node)
            {
                if (!MyConfiguration.KnownNodes.ContainsKey(node.GetType()))
                {
                    MyLog.WARNING.WriteLine("Unknown node type in loaded project: " + node.GetType());
                    parentProject.ReadOnly = true;

                    try
                    {
                        MyNodeConfig nodeConfig = new MyNodeConfig()
                        {
                            NodeType     = node.GetType(),
                            NodeTypeName = node.GetType().FullName
                        };

                        nodeConfig.InitIcons(Assembly.GetExecutingAssembly());
                        nodeConfig.AddObservers(Assembly.GetExecutingAssembly());

                        MyConfiguration.KnownNodes[nodeConfig.NodeType] = nodeConfig;
                    }
                    catch (Exception e)
                    {
                        MyLog.ERROR.WriteLine("Node type loading failed: " + e.Message);
                    }
                }
            };

            Iterate(true, findUnknownAction);

            foreach (MyConnectionProxy cp in m_connections)
            {
                try
                {
                    MyConnection connection = new MyConnection(nodes[cp.From], nodes[cp.To], cp.FromIndex, cp.ToIndex);
                    connection.Connect();
                }
                catch (Exception e)
                {
                    MyLog.ERROR.WriteLine("Error during connection deserialization: From id " + cp.From + " to id " + cp.To);
                }
            }

            return(topId);
        }
Example #4
0
        /// <summary>
        /// Filter all nodes in project recursively. Returns list of nodes, for which the filter function returned True.
        /// </summary>
        /// <param name="filterFunc">User-defined function for filtering</param>
        /// <returns>Node list</returns>
        public List <MyNode> Filter(FilterFunc filterFunc)
        {
            List <MyNode> nodes = new List <MyNode>();

            MyNodeGroup.IteratorAction a = x => { if (x.GetType() != typeof(MyNodeGroup) && filterFunc(x))
                                                  {
                                                      nodes.Add(x);
                                                  }
            };
            Project.Network.Iterate(true, a);
            return(nodes);
        }
Example #5
0
        private static void IterateNodes(IEnumerable <MyWorkingNode> nodes, MyNodeGroup.IteratorAction action)
        {
            foreach (MyWorkingNode node in nodes)
            {
                action(node);

                var group = node as MyNodeGroup;
                if (group != null)
                {
                    group.Iterate(true, action);
                }
            }
        }
        private HashSet <MyNode> CollectWorkingNodes(MyNodeGroup nodeGroup)
        {
            HashSet <MyNode> nodes = new HashSet <MyNode>();

            MyNodeGroup.IteratorAction action = delegate(MyNode node)
            {
                if (node is MyWorkingNode)
                {
                    node.TopologicalOrder = -1;
                    nodes.Add(node);
                }
            };

            nodeGroup.Iterate(false, action);

            return(nodes);
        }
        private void CollectWorkingNodes(MyNodeGroup nodeGroup)
        {
            m_nodes.Clear();

            MyNodeGroup.IteratorAction action = delegate(MyNode node)
            {
                if (node is MyWorkingNode)
                {
                    if (node.Parent != null)
                    {
                        node.Sequential = node.Parent.Sequential;
                    }
                    node.TopologicalOrder = -1;
                    m_nodes.Add(node);
                }
            };

            nodeGroup.Iterate(true, action);
        }
Example #8
0
 /// <summary>
 /// Prints info about nodes to DEBUG
 /// </summary>
 public void DumpNodes()
 {
     MyNodeGroup.IteratorAction a = x => { MyLog.DEBUG.WriteLine("[{0}] {1}: {2}", x.Id, x.Name, x.GetType()); };
     Project.Network.Iterate(true, a);
 }