Example #1
0
 void CheckF2iReferences(ref IndividualClass individual)
 {
     if (parentsF2iReference.ContainsKey(individual.GetXrefName()))
     {
         IList <string> spouses = parentsF2iReference[individual.GetXrefName()];
         if (spouses.Count > individual.GetFamilySpouseList().Count)
         {
             trace.TraceData(TraceEventType.Verbose, 0, individual.GetXrefName() + " missing spouse to individual " + spouses.Count + " > " + individual.GetFamilySpouseList().Count);
             foreach (string parent in spouses)
             {
                 individual.AddRelation(new FamilyXrefClass(parent), IndividualClass.RelationType.Spouse);
                 trace.TraceData(TraceEventType.Verbose, 0, individual.GetXrefName() + " adding spouse-family to individual " + parent + " to " + individual.GetName());
             }
         }
     }
     if (childrenI2fReference.ContainsKey(individual.GetXrefName()))
     {
         IList <string> children = childrenI2fReference[individual.GetXrefName()];
         if (children.Count > individual.GetFamilyChildList().Count)
         {
             trace.TraceData(TraceEventType.Verbose, 0, individual.GetXrefName() + " missing child-family in individual " + children.Count + " > " + individual.GetFamilyChildList().Count);
             foreach (string child in children)
             {
                 individual.AddRelation(new FamilyXrefClass(child), IndividualClass.RelationType.Child);
                 trace.TraceData(TraceEventType.Verbose, 0, individual.GetXrefName() + " adding child-family to individual " + child + " to " + individual.GetName());
             }
         }
     }
 }
        public void AddRelative(RelativeType relation, IndividualClass person = null)
        {
            trace.TraceInformation("TreeViewPanel2::AddRelative " + relation);
            if (familyTree != null)
            {
                if (selectedIndividual != null)
                {
                    IndividualClass newPerson;
                    if (person != null)
                    {
                        newPerson = person;
                    }
                    else
                    {
                        newPerson = new IndividualClass();
                    }
                    newPerson.SetXrefName(familyTree.CreateNewXref(XrefType.Individual));

                    if (relation == RelativeType.Parent)
                    {
                        FamilyXrefClass         parentFamilyXref = null;
                        FamilyClass             parentFamily     = null;
                        IList <FamilyXrefClass> parents          = selectedIndividual.GetFamilyChildList();
                        if (parents != null)
                        {
                            if (parents.Count > 0)
                            {
                                // ToDo: Full support for multiple families..
                                parentFamilyXref = parents[0];
                                parentFamily     = familyTree.GetFamily(parentFamilyXref.GetXrefName());
                            }
                        }
                        if (parentFamilyXref == null)
                        {
                            parentFamilyXref = new FamilyXrefClass(familyTree.CreateNewXref(XrefType.Family));
                            //parentFamily.SetXrefName();
                            parentFamily = new FamilyClass();
                            parentFamily.SetXrefName(parentFamilyXref.GetXrefName());
                            parentFamily.AddRelation(new IndividualXrefClass(selectedIndividual.GetXrefName()), FamilyClass.RelationType.Child);
                            selectedIndividual.AddRelation(parentFamilyXref, IndividualClass.RelationType.Child);
                            familyTree.UpdateIndividual(selectedIndividual, PersonUpdateType.ChildFamily);
                        }
                        parentFamily.AddRelation(new IndividualXrefClass(newPerson.GetXrefName()), FamilyClass.RelationType.Parent);
                        newPerson.AddRelation(parentFamilyXref, IndividualClass.RelationType.Spouse);
                        familyTree.AddFamily(parentFamily);

                        familyTree.AddIndividual(newPerson);
                    }
                    else if (relation == RelativeType.Child)
                    {
                        FamilyXrefClass         childFamilyXref = null;
                        FamilyClass             childFamily     = null;
                        IList <FamilyXrefClass> children        = selectedIndividual.GetFamilySpouseList();
                        if (children != null)
                        {
                            if (children.Count > 0)
                            {
                                // ToDo: Full support for multiple families..
                                childFamilyXref = children[0];
                                childFamily     = familyTree.GetFamily(childFamilyXref.GetXrefName());
                            }
                        }
                        if (childFamilyXref == null)
                        {
                            childFamilyXref = new FamilyXrefClass(familyTree.CreateNewXref(XrefType.Family));
                            //parentFamily.SetXrefName();
                            childFamily = new FamilyClass();
                            childFamily.SetXrefName(childFamilyXref.GetXrefName());
                            childFamily.AddRelation(new IndividualXrefClass(selectedIndividual.GetXrefName()), FamilyClass.RelationType.Parent);
                            selectedIndividual.AddRelation(childFamilyXref, IndividualClass.RelationType.Spouse);
                            familyTree.UpdateIndividual(selectedIndividual, PersonUpdateType.SpouseFamily);
                        }
                        childFamily.AddRelation(new IndividualXrefClass(newPerson.GetXrefName()), FamilyClass.RelationType.Child);
                        newPerson.AddRelation(childFamilyXref, IndividualClass.RelationType.Child);
                        familyTree.AddFamily(childFamily);

                        familyTree.AddIndividual(newPerson);
                    }
                    else // if (relation == RelativeType.Unrelated)
                    {
                        familyTree.AddIndividual(newPerson);
                    }
                    //familyTree.AddIndividual(newPerson);
                }
                ShowActiveFamily();
            }
        }
        void DecodeEvent(ref IndividualClass person, ParsePersonState evType, string eventString)
        {
            switch (evType)
            {
            case ParsePersonState.Birth:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Birth, false));
            }
            break;

            case ParsePersonState.Baptism:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Baptism, false));
            }
            break;

            case ParsePersonState.Death:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Death, false));
            }
            break;

            case ParsePersonState.Burial:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Burial, false));
            }
            break;

            case ParsePersonState.Occupation:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Occupation, true));
            }
            break;

            /*case ParsePersonState.Fosterchild:
             * {
             *  IndividualEventClass occupation = new IndividualEventClass(IndividualEventClass.EventType.Adoption);
             *  occupation.AddNote(eventString);
             *  trace.TraceInformation("fosterchild " + eventString + " => " + occupation);
             *  person.AddEvent(occupation);
             * }
             * break;*/

            case ParsePersonState.Move:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Immigration, true));
            }
            break;

            case ParsePersonState.Source:
            {
                SourceDescriptionClass source = new SourceDescriptionClass(eventString);

                trace.TraceInformation("source " + eventString + " => " + source);
                person.AddSource(source);
            }
            break;

            case ParsePersonState.Lived:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.Residence, true));
            }
            break;

            case ParsePersonState.Changed:
            {
                person.AddEvent(DecodeEventType(eventString, IndividualEventClass.EventType.RecordUpdate, true));
            }
            break;

            case ParsePersonState.ChildFamily:
            {
                string familyId = "";

                foreach (char ch in eventString)
                {
                    if ((ch >= '0') && (ch <= '9') || (ch == ':'))
                    {
                        familyId += ch;
                    }
                }
                string familyXref = xrefMapLists.GetMapper(XrefType.Family).GetXRef(familyId, false);
                person.AddRelation(new FamilyXrefClass(familyXref), IndividualClass.RelationType.Child);
                trace.TraceInformation("child in " + familyId + "=" + familyXref);
                FamilyClass family = familyTree.GetFamily(familyXref);

                if (family == null)
                {
                    family = new FamilyClass();
                    family.SetXrefName(familyXref);
                }
                family.AddRelation(new IndividualXrefClass(person.GetXrefName()), FamilyClass.RelationType.Child);
                familyTree.AddFamily(family);
            }
            break;

            case ParsePersonState.SpouseFamily:
            {
                string familyId = "";

                foreach (char ch in eventString)
                {
                    if ((ch >= '0') && (ch <= '9') || (ch == ':'))
                    {
                        familyId += ch;
                    }
                }
                string familyXref = xrefMapLists.GetMapper(XrefType.Family).GetXRef(familyId, false);
                person.AddRelation(new FamilyXrefClass(familyXref), IndividualClass.RelationType.Spouse);
                trace.TraceInformation("spouse in " + familyId + "=" + familyXref);
                FamilyClass family = familyTree.GetFamily(familyXref);

                if (family == null)
                {
                    family = new FamilyClass();
                    family.SetXrefName(familyXref);
                }
                family.AddRelation(new IndividualXrefClass(person.GetXrefName()), FamilyClass.RelationType.Parent);
                familyTree.AddFamily(family);
            }
            break;
            }
        }