public static ExtList <PatriarchObj> GetPatriarchsList(IBaseContext context, int gensMin, bool datesCheck) { ExtList <PatriarchObj> patList = new ExtList <PatriarchObj>(true); IProgressController progress = AppHost.Progress; progress.ProgressInit(LangMan.LS(LSID.LSID_PatSearch), context.Tree.RecordsCount); GKUtils.InitExtCounts(context.Tree, -1); try { int num = context.Tree.RecordsCount; for (int i = 0; i < num; i++) { GEDCOMRecord rec = context.Tree[i]; if (rec is GEDCOMIndividualRecord) { GEDCOMIndividualRecord iRec = rec as GEDCOMIndividualRecord; var parts = GKUtils.GetNameParts(iRec); int birthDate = context.FindBirthYear(iRec); int descGens = GKUtils.GetDescGenerations(iRec); bool res = (iRec.ChildToFamilyLinks.Count == 0); res = (res && iRec.Sex == GEDCOMSex.svMale); res = (res && /*nf != "" && nf != "?" &&*/ parts.Name != "" && parts.Name != "?"); res = (res && descGens >= gensMin); if (datesCheck) { res = (res && birthDate != 0); } if (res) { PatriarchObj pObj = new PatriarchObj(); pObj.IRec = iRec; pObj.BirthYear = birthDate; pObj.DescendantsCount = GKUtils.GetDescendantsCount(iRec) - 1; pObj.DescGenerations = descGens; patList.Add(pObj); } } progress.ProgressStep(); } } finally { progress.ProgressDone(); } return(patList); }