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); }
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)); }