示例#1
0
 public PackageNode(Package package)
 {
     Text = package.Name;
     Package = package;
     ImageKey = "folder";
     SelectedImageKey = "folder";
     Package.ItemAdded += new ProjectItemEventHandler(Package_ItemAdded);
     Package.ItemRemoved += new ProjectItemEventHandler(Package_ItemRemoved);
     Package.Renamed += new EventHandler(Package_Renamed);
 }
示例#2
0
        public virtual void Deserialize(DeserializeContext context, XmlElement root)
        {
            if (root == null)
                throw new ArgumentNullException("root");

            Id = root["Id"].GetValue(Guid.Empty);
            name = root["Name"].GetValue(Strings.Untitled);
            Collapsed = root["Collapsed"].GetValue(false);

            XmlNodeList nodeList = root.SelectNodes("ProjectItems/ProjectItem");

            foreach (XmlElement itemElement in nodeList)
            {
                XmlAttribute typeAttribute = itemElement.Attributes["type"];
                XmlAttribute assemblyAttribute = itemElement.Attributes["assembly"];


                if (assemblyAttribute == null)
                {
                    string typeName = typeAttribute.InnerText;
                    IProjectItem projectItem = null;
                    if (typeName == ProjectItemType.Package.ToString())
                        projectItem = new Package();
                    else if (typeName == ProjectItemType.Model.ToString())
                        projectItem = Model.CreateProjectItem();
                    else if(typeName == EntityType.Class.ToString())
                        projectItem = ProjectInfo.Language.CreateClass("Class");
                    else if (typeName == EntityType.Delegate.ToString())
                        projectItem = ProjectInfo.Language.CreateDelegate("Delegate");
                    else if (typeName == EntityType.Enum.ToString())
                        projectItem = ProjectInfo.Language.CreateEnum("Enum");
                    else if (typeName == EntityType.Interface.ToString())
                        projectItem = ProjectInfo.Language.CreateInterface("Interface");
                    else if (typeName == EntityType.Structure.ToString())
                        projectItem = ProjectInfo.Language.CreateStructure("Structure");

                    if(projectItem == null)
                        throw new InvalidException("Invalid type [{0}] of ProjectItem.".FormatArgs(typeName));
                    projectItem.ProjectInfo = ProjectInfo;
                    projectItem.Deserialize(context, itemElement);
                    Add(projectItem);
                }
                else
                {

                    string typeName = typeAttribute.InnerText;
                    string assemblyName = assemblyAttribute.InnerText;

                    try
                    {
                        Assembly assembly = Assembly.Load(assemblyName);
                        IProjectItem projectItem = (IProjectItem)assembly.CreateInstance(
                            typeName, false,
                            BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
                            null, null, null, null);
                        projectItem.ProjectInfo = ProjectInfo;
                        projectItem.Deserialize(context, itemElement);
                        Add(projectItem);
                    }
                    catch (InvalidException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidException("Invalid type or assembly of ProjectItem.", ex);
                    }
                }
            }
            OnDeserializing(new SerializeEventArgs(root));
        }