/// <summary> /// Add a new family event for a given event type. /// </summary> /// <param name="type">The event type.</param> /// <returns> /// The new family event based on the given event type. /// </returns> public GedcomFamilyEvent AddNewEvent(GedcomEventType type) { GedcomFamilyEvent familyEvent = new GedcomFamilyEvent(); familyEvent.EventType = type; familyEvent.Level = Level + 1; familyEvent.FamRecord = this; Events.Add(familyEvent); return(familyEvent); }
/// <summary> /// Generates the XML. /// </summary> /// <param name="root">The root.</param> public override void GenerateXML(XmlNode root) { XmlDocument doc = root.OwnerDocument; XmlNode node; XmlAttribute attr; XmlNode eventNode = doc.CreateElement("EventRec"); attr = doc.CreateAttribute("Id"); attr.Value = EventXRefID; eventNode.Attributes.Append(attr); attr = doc.CreateAttribute("Type"); attr.Value = GedcomEvent.TypeToReadable(EventType); eventNode.Attributes.Append(attr); // TODO: VitalType attribute // (marriage | befmarriage | aftmarriage | // birth | befbirth | aftbirth | // death | befdeath | aftdeath) if (RecordType == GedcomRecordType.FamilyEvent) { GedcomFamilyEvent famEvent = this as GedcomFamilyEvent; GedcomFamilyRecord family = famEvent.FamRecord; // TODO: <Participant>s // probably not right, but always stick husband/wife in as // participants bool added = false; if (!string.IsNullOrEmpty(family.Husband)) { GedcomIndividualRecord husb = Database[family.Husband] as GedcomIndividualRecord; if (husb != null) { node = doc.CreateElement("Participant"); XmlNode linkNode = doc.CreateElement("Link"); attr = doc.CreateAttribute("Target"); attr.Value = "IndividualRec"; linkNode.Attributes.Append(attr); attr = doc.CreateAttribute("Ref"); attr.Value = family.Husband; linkNode.Attributes.Append(attr); node.AppendChild(linkNode); eventNode.AppendChild(node); added = true; } else { System.Diagnostics.Debug.WriteLine("Pointer to non existant husband"); } } if (!string.IsNullOrEmpty(family.Wife)) { GedcomIndividualRecord wife = Database[family.Wife] as GedcomIndividualRecord; if (wife != null) { node = doc.CreateElement("Participant"); XmlNode linkNode = doc.CreateElement("Link"); attr = doc.CreateAttribute("Target"); attr.Value = "IndividualRec"; linkNode.Attributes.Append(attr); attr = doc.CreateAttribute("Ref"); attr.Value = family.Wife; linkNode.Attributes.Append(attr); node.AppendChild(linkNode); eventNode.AppendChild(node); added = true; } else { System.Diagnostics.Debug.WriteLine("Pointer to non existant wife"); } } if (!added) { // TODO: no husband or wife now what? XML will be invalid // without a participant } } else { GedcomIndividualRecord indi = (this as GedcomIndividualEvent).IndiRecord; node = doc.CreateElement("Participant"); XmlNode linkNode = doc.CreateElement("Link"); attr = doc.CreateAttribute("Target"); attr.Value = "IndividualRec"; linkNode.Attributes.Append(attr); attr = doc.CreateAttribute("Ref"); attr.Value = indi.XRefID; linkNode.Attributes.Append(attr); XmlNode roleNode = doc.CreateElement("Role"); if (this == indi.Birth) { roleNode.AppendChild(doc.CreateTextNode("child")); } else { roleNode.AppendChild(doc.CreateTextNode("principle")); } linkNode.AppendChild(roleNode); node.AppendChild(linkNode); eventNode.AppendChild(node); } if (Date != null) { node = doc.CreateElement("Date"); node.AppendChild(doc.CreateTextNode(Date.DateString)); eventNode.AppendChild(node); } if (Place != null) { node = doc.CreateElement("Place"); node.AppendChild(doc.CreateTextNode(Place.Name)); eventNode.AppendChild(node); } GenerateNoteXML(eventNode); GenerateCitationsXML(eventNode); GenerateMultimediaXML(eventNode); GenerateChangeDateXML(eventNode); root.AppendChild(eventNode); }