示例#1
0
        private void ProjectTreeView_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            TreeNode    SelectedNode = ProjectTreeView.GetNodeAt(e.Location);
            imsBaseNode tempNode     = ((imsBaseNode)(SelectedNode.Tag));

            if (tempNode != null)
            {
                NodePropertyGrid.SelectedObject = ((imsBaseNode)(SelectedNode.Tag));
            }
        }
        public void DeserializePCSystem(string pathString)
        {
            int             nodeIndex;
            BinaryFormatter DeSerializeFormatter  = new BinaryFormatter();
            FileStream      DeSerializeFileStream = new FileStream(pathString, FileMode.Open);

            object[]    cTorParams = new object[] { DeSerializeFormatter, DeSerializeFileStream };
            long        startingFP; imsBaseNode tempBaseNode;
            List <Type> AllTypes = new List <Type>();

            foreach (Assembly tempAss in importedDLLs)
            {
                foreach (Type tempType in tempAss.GetTypes())
                {
                    AllTypes.Add(tempType);
                }
            }
            List <imsBaseNode> tempGlobalNodeList = new List <imsBaseNode>();

            while (DeSerializeFileStream.Position < DeSerializeFileStream.Length)
            {
                startingFP   = DeSerializeFileStream.Position;
                tempBaseNode = new imsBaseNode(DeSerializeFormatter, DeSerializeFileStream);

                if (AllTypes.Contains(tempBaseNode.getNodeType))
                {
                    DeSerializeFileStream.Position = startingFP;
                    tempGlobalNodeList.Add((imsBaseNode)(Activator.CreateInstance(tempBaseNode.getNodeType, cTorParams)));
                }
                else
                {
                    DeSerializeFileStream.Close();
                    throw (new Exception("Deserialized unknown node type from file"));
                }


                // if the node ids don't line up...
                if (tempGlobalNodeList[tempGlobalNodeList.Count - 1].getGlobalNodeID != tempGlobalNodeList.FindIndex(x => x.getGlobalNodeID == tempBaseNode.getGlobalNodeID))
                {
                    DeSerializeFileStream.Close();
                    throw (new Exception("DeSerialized Node ID's dont Line Up"));
                }
            }
            DeSerializeFileStream.Close();

            APISysModules.Clear();
            globalNodeList.Clear();

            foreach (imsBaseNode deSerialNode in tempGlobalNodeList)
            {
                globalNodeList.Add(deSerialNode);

                if (typeof(imsAPISysModule).IsInstanceOfType(deSerialNode))
                {
                    ((imsAPISysModule)deSerialNode).deSerializeSetAPILinks(this);
                }
            }
            foreach (imsBaseNode deSerialNode in tempGlobalNodeList)
            {
                if (typeof(imsSysModuleNode).IsInstanceOfType(deSerialNode))
                {
                    ((imsSysModuleNode)deSerialNode).deSerializeLinkNodes(globalNodeList);
                }
            }
        }