예제 #1
0
        private void ArborViewer1_MouseMove(object sender, MouseEventArgs e)
        {
            Point     mpt     = new Point(e.Location);
            ArborNode resNode = fArborViewer.getNodeByCoord(mpt.X, mpt.Y);

            if (resNode == null)
            {
                if (fTipShow)
                {
                    //fTip.Hide(arborViewer1);
                    fArborViewer.ToolTip = string.Empty;
                    fTipShow             = false;
                }
            }
            else
            {
                if (!fTipShow)
                {
                    string             xref   = resNode.Sign;
                    GEDCOMFamilyRecord famRec = fBase.Context.Tree.XRefIndex_Find(xref) as GEDCOMFamilyRecord;
                    string             txt    = GKUtils.GetFamilyString(famRec) + " [" + xref + "] " /* + resNode.Mass.ToString()*/;

                    //fTip.Show(txt, arborViewer1, mpt.X + 24, mpt.Y);
                    fArborViewer.ToolTip = txt;
                    fTipShow             = true;
                }
            }
        }
예제 #2
0
        private void ArborViewer1_MouseMove(object sender, MouseEventArgs e)
        {
            ArborNode resNode = arborViewer1.getNodeByCoord(e.X, e.Y);

            if (resNode == null)
            {
                if (fTipShow)
                {
                    fTip.Hide(arborViewer1);
                    fTipShow = false;
                }
            }
            else
            {
                if (!fTipShow)
                {
                    string             xref   = resNode.Sign;
                    GEDCOMFamilyRecord famRec = fBase.Context.Tree.XRefIndex_Find(xref) as GEDCOMFamilyRecord;
                    string             txt    = GKUtils.GetFamilyString(famRec) + " [" + xref + "] " /* + resNode.Mass.ToString()*/;

                    fTip.Show(txt, arborViewer1, e.X + 24, e.Y);
                    fTipShow = true;
                }
            }
        }
예제 #3
0
        public object gt_get_family_wife(object recPtr)
        {
            GEDCOMFamilyRecord fam = recPtr as GEDCOMFamilyRecord;

            recPtr = (fam == null) ? null : fam.Wife.Value;
            return(recPtr);
        }
예제 #4
0
        public static bool AddIndividualMother(IBaseWindow baseWin, ChangeTracker localUndoman, GEDCOMIndividualRecord person)
        {
            bool result = false;

            GEDCOMIndividualRecord mother = baseWin.Context.SelectPerson(person, TargetMode.tmChild, GEDCOMSex.svFemale);

            if (mother != null)
            {
                GEDCOMFamilyRecord family = baseWin.Context.GetChildFamily(person, true, mother);
                if (family != null)
                {
                    if (family.Wife.Value == null)
                    {
                        // new family
                        result = localUndoman.DoOrdinaryOperation(OperationType.otFamilySpouseAttach, family, mother);
                    }
                    else
                    {
                        // selected family with wife
                        Logger.LogWrite("BaseController.AddMother(): fail, because family already has mother");
                        result = true;
                    }
                }
            }

            return(result);
        }
예제 #5
0
        private static void SearchKGInt(Vertex prevNode, GEDCOMIndividualRecord iRec,
                                        KinshipsGraph graph, RelationKind relation, RelationKind inverseRelation)
        {
            if (iRec == null)
            {
                return;
            }

            Vertex currNode = graph.FindVertex(iRec.XRef);

            if (currNode != null)
            {
                if (prevNode != null)
                {
                    graph.AddRelation(prevNode, currNode, relation, inverseRelation);
                }

                return;
            }
            else
            {
                currNode = graph.AddIndividual(iRec);

                if (prevNode != null)
                {
                    graph.AddRelation(prevNode, currNode, relation, inverseRelation);
                }
            }

            if (iRec.ChildToFamilyLinks.Count > 0)
            {
                GEDCOMFamilyRecord fam = iRec.GetParentsFamily();
                if (fam != null)
                {
                    GEDCOMIndividualRecord father, mother;
                    father = fam.GetHusband();
                    mother = fam.GetWife();

                    SearchKGInt(currNode, father, graph, RelationKind.rkParent, RelationKind.rkChild);
                    SearchKGInt(currNode, mother, graph, RelationKind.rkParent, RelationKind.rkChild);
                }
            }

            int num = iRec.SpouseToFamilyLinks.Count;

            for (int i = 0; i < num; i++)
            {
                GEDCOMFamilyRecord     family = iRec.SpouseToFamilyLinks[i].Family;
                GEDCOMIndividualRecord spouse = ((iRec.Sex == GEDCOMSex.svMale) ? family.GetWife() : family.GetHusband());

                SearchKGInt(currNode, spouse, graph, RelationKind.rkSpouse, RelationKind.rkSpouse);

                int num2 = family.Children.Count;
                for (int j = 0; j < num2; j++)
                {
                    GEDCOMIndividualRecord child = (GEDCOMIndividualRecord)family.Children[j].Value;
                    SearchKGInt(currNode, child, graph, RelationKind.rkChild, RelationKind.rkParent);
                }
            }
        }
예제 #6
0
        private static bool CheckPersonsEx(GEDCOMIndividualRecord rec1, GEDCOMIndividualRecord rec2)
        {
            GEDCOMFamilyRecord fam1 = rec1.GetParentsFamily();
            GEDCOMFamilyRecord fam2 = rec2.GetParentsFamily();

            return(!Equals(fam1, fam2));
        }
예제 #7
0
        private void ModifySpousesSheet(object sender, ModifyEventArgs eArgs)
        {
            GEDCOMFamilyRecord family = eArgs.ItemData as GEDCOMFamilyRecord;

            if (eArgs.Action == RecordAction.raJump)
            {
                if (family != null && (fPerson.Sex == GEDCOMSex.svMale || fPerson.Sex == GEDCOMSex.svFemale))
                {
                    GEDCOMPointer sp = null;
                    switch (fPerson.Sex)
                    {
                    case GEDCOMSex.svMale:
                        sp = family.Wife;
                        break;

                    case GEDCOMSex.svFemale:
                        sp = family.Husband;
                        break;
                    }

                    if (sp != null)
                    {
                        GEDCOMIndividualRecord spouse = (GEDCOMIndividualRecord)sp.Value;
                        AcceptChanges();
                        fBase.SelectRecordByXRef(spouse.XRef);
                        Close();
                    }
                }
            }
        }
예제 #8
0
        private static void PL_WalkDescLinks(Graph graph, PGNode prevNode, GEDCOMIndividualRecord ancestor)
        {
            for (int i = 0, count = ancestor.SpouseToFamilyLinks.Count; i < count; i++)
            {
                GEDCOMFamilyRecord family = ancestor.SpouseToFamilyLinks[i].Family;
                PGNode             node   = family.ExtData as PGNode;

                if (node != null && node.Type != PGNodeType.Default)
                {
                    IVertex vtx = graph.FindVertex(node.FamilyXRef);
                    if (vtx == null)
                    {
                        vtx = graph.AddVertex(node.FamilyXRef, node);
                    }

                    if (prevNode != null)
                    {
                        graph.AddDirectedEdge(prevNode.FamilyXRef, node.FamilyXRef, 1, null);
                    }

                    prevNode = node;
                }

                for (int k = 0, count2 = family.Children.Count; k < count2; k++)
                {
                    GEDCOMIndividualRecord child = family.Children[k].Value as GEDCOMIndividualRecord;
                    PL_WalkDescLinks(graph, prevNode, child);
                }
            }
        }
예제 #9
0
        private void SetFamily(GEDCOMFamilyRecord value)
        {
            fFamily = value;
            try {
                fChildrenList.ListModel.DataOwner = fFamily;
                fEventsList.ListModel.DataOwner   = fFamily;
                fNotesList.ListModel.DataOwner    = fFamily;
                fMediaList.ListModel.DataOwner    = fFamily;
                fSourcesList.ListModel.DataOwner  = fFamily;

                if (fFamily == null)
                {
                    cmbMarriageStatus.Enabled       = false;
                    cmbMarriageStatus.SelectedIndex = 0;
                    cmbRestriction.SelectedIndex    = 0;
                }
                else
                {
                    string stat    = fFamily.GetTagStringValue("_STAT");
                    int    statIdx = GKUtils.GetMarriageStatusIndex(stat);
                    cmbMarriageStatus.Enabled       = true;
                    cmbMarriageStatus.SelectedIndex = statIdx;
                    cmbRestriction.SelectedIndex    = (sbyte)fFamily.Restriction;
                }

                UpdateControls();
            } catch (Exception ex) {
                Logger.LogWrite("FamilyEditDlg.SetFamily(): " + ex.Message);
            }
        }
예제 #10
0
        public static GEDCOMFamilyRecord CreateFamilyRecord(int recordNo)
        {
            var                  family = new GEDCOMFamilyRecord(recordNo);
            GEDCOMRecord         childRecord;
            GEDCOMEventStructure marrEvent;

            switch (recordNo)
            {
            case 1:
                childRecord = new GEDCOMRecord(family.Level + 1, "", "@I1@", "HUSB", "");
                family.ChildRecords.Add(childRecord);
                childRecord = new GEDCOMRecord(family.Level + 1, "", "@I2@", "WIFE", "");
                family.ChildRecords.Add(childRecord);
                marrEvent = new GEDCOMEventStructure(family.Level + 1, "MARR", "11 JUN 1988", "MyTown");
                family.ChildRecords.Add(marrEvent);
                break;

            case 2:
                childRecord = new GEDCOMRecord(family.Level + 1, "", "@I3@", "HUSB", "");
                family.ChildRecords.Add(childRecord);
                childRecord = new GEDCOMRecord(family.Level + 1, "", "@I2@", "WIFE", "");
                family.ChildRecords.Add(childRecord);
                marrEvent = new GEDCOMEventStructure(family.Level + 1, "MARR", "09 APR 2001", "MyTown");
                family.ChildRecords.Add(marrEvent);
                break;
            }

            return(family);
        }
예제 #11
0
        public override void UpdateContents()
        {
            var iRec = fDataOwner as GEDCOMIndividualRecord;

            if (fSheetList == null || iRec == null)
            {
                return;
            }

            try {
                fSheetList.BeginUpdate();
                fSheetList.ClearItems();

                foreach (GEDCOMChildToFamilyLink cfLink in iRec.ChildToFamilyLinks)
                {
                    GEDCOMFamilyRecord famRec = cfLink.Family;

                    fSheetList.AddItem(cfLink, new object[] { GKUtils.GetFamilyString(famRec),
                                                              LangMan.LS(GKData.ParentTypes[(int)cfLink.PedigreeLinkageType]) });
                }

                fSheetList.EndUpdate();
            } catch (Exception ex) {
                Logger.LogWrite("ParentsSublistModel.UpdateContents(): " + ex.Message);
            }
        }
예제 #12
0
        private bool ParentIsRequired(GEDCOMSex needSex)
        {
            TreeChartPerson p = fTreeBox.Selected;

            if (p == null || p.Rec == null)
            {
                return(false);
            }

            bool familyExist = p.Rec.GetParentsFamily() != null;

            if (!familyExist)
            {
                return(true);
            }

            GEDCOMIndividualRecord mother, father;
            GEDCOMFamilyRecord     fam = p.Rec.GetParentsFamily();

            if (fam == null)
            {
                father = null;
                mother = null;
            }
            else
            {
                father = fam.GetHusband();
                mother = fam.GetWife();
            }

            bool needParent = (father == null && needSex == GEDCOMSex.svMale) ||
                              (mother == null && needSex == GEDCOMSex.svFemale);

            return(needParent);
        }
예제 #13
0
        public object gt_get_family_husband(object recPtr)
        {
            GEDCOMFamilyRecord fam = recPtr as GEDCOMFamilyRecord;

            recPtr = (fam == null) ? null : fam.Husband.Value;
            return(recPtr);
        }
예제 #14
0
        private void WriteCompactFmt(PedigreePerson person)
        {
            if (fOptions.PedigreeOptions.IncludeNotes && person.IRec.Notes.Count != 0)
            {
                int num = person.IRec.Notes.Count;
                for (int i = 0; i < num; i++)
                {
                    GEDCOMNotes note = person.IRec.Notes[i];
                    fWriter.addParagraph(GKUtils.MergeStrings(note.Notes), fTextFont);
                }
            }

            bool spIndex = person.IRec.SpouseToFamilyLinks.Count > 1;

            int num2 = person.IRec.SpouseToFamilyLinks.Count;

            for (int i = 0; i < num2; i++)
            {
                GEDCOMFamilyRecord family = person.IRec.SpouseToFamilyLinks[i].Family;
                if (fBase.Context.IsRecordAccess(family.Restriction))
                {
                    GEDCOMPointer sp;
                    string        st;
                    string        unk;
                    if (person.IRec.Sex == GEDCOMSex.svMale)
                    {
                        sp  = family.Wife;
                        st  = LangMan.LS(LSID.LSID_WifeSign);
                        unk = LangMan.LS(LSID.LSID_UnkFemale);
                    }
                    else
                    {
                        sp  = family.Husband;
                        st  = LangMan.LS(LSID.LSID_HusbSign);
                        unk = LangMan.LS(LSID.LSID_UnkMale);
                    }

                    if (spIndex)
                    {
                        st += (i + 1).ToString();
                    }
                    st += " - ";

                    GEDCOMIndividualRecord irec = sp.Value as GEDCOMIndividualRecord;
                    if (irec != null)
                    {
                        st = st + GKUtils.GetNameString(irec, true, false) + GKUtils.GetPedigreeLifeStr(irec, fOptions.PedigreeOptions.Format) /* + this.idLink(this.FindPerson(irec))*/;
                    }
                    else
                    {
                        st += unk;
                    }

                    fWriter.addParagraph(st, fTextFont);
                }
            }
        }
예제 #15
0
        private void CheckSpouses(StringList buffer, GEDCOMIndividualRecord curPerson)
        {
            int num2 = buffer.Count;

            for (int i = 0; i < num2; i++)
            {
                string line = buffer[i];
                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                try
                {
                    var slRet = ImportUtils.ParseSpouseLine(line);
                    if (slRet != null)
                    {
                        // define sex
                        string    spSex = slRet.Spouse;
                        GEDCOMSex sx    = (spSex[0] == 'М') ? GEDCOMSex.svMale : GEDCOMSex.svFemale;

                        // extract name
                        line = line.Substring(slRet.Pos).Trim();

                        if (!string.IsNullOrEmpty(line))
                        {
                            GEDCOMIndividualRecord spouse = DefinePerson(line, sx);
                            GEDCOMFamilyRecord     family = GetFamilyByNum(curPerson, slRet.MarrNum);

                            if (spouse == null || family == null)
                            {
                                // TODO: error to log, reporting causes
                            }
                            else
                            {
                                family.AddSpouse(spouse);

                                // extract marriage date
                                if (!string.IsNullOrEmpty(slRet.ExtData))
                                {
                                    string marrDate = slRet.ExtData.Substring(1, slRet.ExtData.Length - 2).Trim();

                                    if (marrDate != "")
                                    {
                                        SetEvent(family, "MARR", marrDate);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogWrite("Importer.CheckSpouses(): " + ex.Message);
                }
            }
        }
        public void EditParents()
        {
            GEDCOMFamilyRecord family = fBase.Context.GetChildFamily(fPerson, false, null);

            if (family != null && BaseController.ModifyFamily(fBase, ref family, TargetMode.tmNone, null))
            {
                UpdateControls();
            }
        }
예제 #17
0
        public override void UpdateContents()
        {
            var iRec = fDataOwner as GEDCOMIndividualRecord;

            if (fSheetList == null || iRec == null)
            {
                return;
            }

            try
            {
                fSheetList.BeginUpdate();
                fSheetList.ClearItems();

                int idx = 0;
                foreach (GEDCOMSpouseToFamilyLink spLink in iRec.SpouseToFamilyLinks)
                {
                    idx += 1;

                    GEDCOMFamilyRecord family = spLink.Family;
                    if (family == null)
                    {
                        continue;
                    }

                    GEDCOMIndividualRecord relPerson;
                    string relName;

                    if (iRec.Sex == GEDCOMSex.svMale)
                    {
                        relPerson = family.GetWife();
                        relName   = LangMan.LS(LSID.LSID_UnkFemale);
                    }
                    else
                    {
                        relPerson = family.GetHusband();
                        relName   = LangMan.LS(LSID.LSID_UnkMale);
                    }

                    if (relPerson != null)
                    {
                        relName = GKUtils.GetNameString(relPerson, true, false);
                    }

                    fSheetList.AddItem(family, new object[] { idx,
                                                              relName, new GEDCOMDateItem(GKUtils.GetMarriageDate(family)) });
                }

                fSheetList.EndUpdate();
            }
            catch (Exception ex)
            {
                Logger.LogWrite("SpousesSublistModel.UpdateContents(): " + ex.Message);
            }
        }
예제 #18
0
        public override void Setup()
        {
            base.Setup();

            fBase         = new BaseWindowStub();
            fFamilyRecord = new GEDCOMFamilyRecord(fBase.Context.Tree, fBase.Context.Tree, "", "");

            fDialog        = new FamilyEditDlg(fBase);
            fDialog.Family = fFamilyRecord;
            fDialog.Show();
        }
예제 #19
0
        private void btnParentsEdit_Click(object sender, EventArgs e)
        {
            AcceptTempData();

            GEDCOMFamilyRecord family = fBase.Context.GetChildFamily(fPerson, false, null);

            if (family != null && BaseController.ModifyFamily(fBase, ref family, TargetMode.tmNone, null))
            {
                UpdateControls();
            }
        }
        public void JumpToMother()
        {
            GEDCOMFamilyRecord family = fBase.Context.GetChildFamily(fPerson, false, null);

            if (family == null)
            {
                return;
            }

            JumpToRecord(family.GetWife());
        }
        public void AddParents()
        {
            AcceptTempData();

            GEDCOMFamilyRecord family = fBase.Context.SelectFamily(fPerson);

            if (family != null && family.IndexOfChild(fPerson) < 0)
            {
                fLocalUndoman.DoOrdinaryOperation(OperationType.otIndividualParentsAttach, fPerson, family);
            }
            UpdateControls();
        }
        public void UpdateFamily(Family family)
        {
            Requires.NotNull("family", family);

            GEDCOMFamilyRecord record = _document.SelectFamilyRecord(GEDCOMUtil.CreateId("F", family.Id));

            if (record == null)
            {
                //record not in repository
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #23
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            switch (e.Key)
            {
            case Keys.Plus:
                if (Keys.None == e.Modifiers)
                {
                    Zoom = Math.Min(fZoom * 1.05f, ZOOM_HIGH_LIMIT);
                }
                break;

            case Keys.Minus:
                if (Keys.None == e.Modifiers)
                {
                    Zoom = Math.Max(fZoom * 0.95f, ZOOM_LOW_LIMIT);
                }
                break;

            case Keys.D0:
                if (e.Control)
                {
                    Zoom = 1.0f;
                }
                break;

            case Keys.Left:
                if (fChartType == CircleChartType.Ancestors && fModel.RootPerson != null)
                {
                    GEDCOMFamilyRecord fam = fModel.RootPerson.GetParentsFamily();
                    var father             = (fam == null) ? null : fam.GetHusband();
                    if (father != null)
                    {
                        RootPerson = father;
                    }
                }
                break;

            case Keys.Right:
                if (fChartType == CircleChartType.Ancestors && fModel.RootPerson != null)
                {
                    GEDCOMFamilyRecord fam = fModel.RootPerson.GetParentsFamily();
                    var mother             = (fam == null) ? null : fam.GetWife();
                    if (mother != null)
                    {
                        RootPerson = mother;
                    }
                }
                break;
            }

            base.OnKeyDown(e);
        }
예제 #24
0
        public void gt_bind_family_spouse(object familyPtr, object spousePtr)
        {
            GEDCOMFamilyRecord fRec = familyPtr as GEDCOMFamilyRecord;

            if (fRec == null)
            {
                return;
            }

            GEDCOMIndividualRecord spRec = spousePtr as GEDCOMIndividualRecord;

            fRec.AddSpouse(spRec);
        }
예제 #25
0
        public void gt_bind_family_child(object familyPtr, object childPtr)
        {
            GEDCOMFamilyRecord fRec = familyPtr as GEDCOMFamilyRecord;

            if (fRec == null)
            {
                return;
            }

            GEDCOMIndividualRecord chRec = childPtr as GEDCOMIndividualRecord;

            fRec.AddChild(chRec);
        }
예제 #26
0
        public object gt_get_person_parents_family(object recPtr)
        {
            GEDCOMIndividualRecord rec = recPtr as GEDCOMIndividualRecord;

            if (rec == null)
            {
                return(null);
            }

            GEDCOMFamilyRecord fam = rec.GetParentsFamily();

            return(fam);
        }
예제 #27
0
        public object gt_get_person_spouse_family(object recPtr, int spIdx)
        {
            GEDCOMIndividualRecord rec = recPtr as GEDCOMIndividualRecord;

            if (rec == null)
            {
                return(null);
            }

            GEDCOMFamilyRecord fam = rec.SpouseToFamilyLinks[spIdx].Family;

            return(fam);
        }
예제 #28
0
        private DescPersonSegment TraverseDescendants(GEDCOMIndividualRecord iRec, int gen)
        {
            if (iRec == null)
            {
                return(null);
            }

            try
            {
                fIndividualsCount++;

                DescPersonSegment resultSegment = new DescPersonSegment(gen);
                resultSegment.IRec = iRec;
                fSegments.Add(resultSegment);

                if (gen < fVisibleGenerations)
                {
                    int numberOfFamilyLinks = iRec.SpouseToFamilyLinks.Count;
                    for (int j = 0; j < numberOfFamilyLinks; j++)
                    {
                        GEDCOMFamilyRecord family = iRec.SpouseToFamilyLinks[j].Family;
                        if (!fBase.Context.IsRecordAccess(family.Restriction))
                        {
                            continue;
                        }

                        fBase.Context.ProcessFamily(family);

                        int numberOfChildren = family.Children.Count;
                        for (int i = 0; i < numberOfChildren; i++)
                        {
                            GEDCOMIndividualRecord child        = family.Children[i].Value as GEDCOMIndividualRecord;
                            DescPersonSegment      childSegment = TraverseDescendants(child, gen + 1);

                            int size = Math.Max(1, childSegment.TotalSubSegments);
                            resultSegment.TotalSubSegments += size;

                            resultSegment.ChildSegments.Add(childSegment);
                        }
                    }
                }

                return(resultSegment);
            }
            catch
            {
                return(null);
            }
        }
예제 #29
0
        public void GEDCOMWriter_WriterRecord_Correctly_Renders_Family_Record_And_Children()
        {
            var          sb     = new StringBuilder();
            GEDCOMWriter writer = GEDCOMWriter.Create(sb);

            writer.NewLine = "\n";

            GEDCOMFamilyRecord record = Util.CreateFamilyRecord(1);

            //write Header
            writer.WriteRecord(record);

            //Assert
            GEDCOMAssert.IsValidOutput(GetEmbeddedFileString("OneFamily"), sb);
        }
예제 #30
0
        private void btnMotherSel_Click(object sender, EventArgs e)
        {
            GEDCOMFamilyRecord family = fBase.Context.GetChildFamily(fPerson, false, null);

            if (family == null)
            {
                return;
            }

            AcceptChanges();
            GEDCOMIndividualRecord mother = family.GetWife();

            fBase.SelectRecordByXRef(mother.XRef);
            Close();
        }