// TODO: rollback changes when exception! private void ParseSource() { int srcYear; if (!int.TryParse(edSourceYear.Text, out srcYear)) { ShowError(fLangMan.LS(FLS.LSID_SourceYearInvalid)); return; } string srcName = cbSource.Text; string srcPage = edPage.Text; string place = edPlace.Text; GDMSourceRecord srcRec = null; if (!string.IsNullOrEmpty(srcName)) { srcRec = fBase.Context.FindSource(srcName); if (srcRec == null) { srcRec = fBase.Context.Tree.CreateSource(); srcRec.ShortTitle = srcName; } } GDMIndividualRecord iMain = null; int num = dataGridView1.Rows.Count; for (int r = 0; r < num; r++) { DataGridViewRow row = dataGridView1.Rows[r]; string lnk = CheckStr((string)row.Cells[0].Value); string nm = CheckStr((string)row.Cells[1].Value); string pt = CheckStr((string)row.Cells[2].Value); string fm = CheckStr((string)row.Cells[3].Value); string age = CheckStr((string)row.Cells[4].Value); string comment = CheckStr((string)row.Cells[5].Value); if (!string.IsNullOrEmpty(lnk)) { PersonLink link = GetLinkByName(lnk); if (link == PersonLink.plNone) { continue; } GDMSex sx = fBase.Context.DefineSex(nm, pt); GDMIndividualRecord iRec = fBase.Context.CreatePersonEx(nm, pt, fm, sx, false); if (!string.IsNullOrEmpty(age) && ConvertHelper.IsDigits(age)) { int birthYear = srcYear - int.Parse(age); fBase.Context.CreateEventEx(iRec, GEDCOMTagName.BIRT, "ABT " + birthYear.ToString(), ""); } if (!string.IsNullOrEmpty(place)) { GDMCustomEvent evt = fBase.Context.CreateEventEx(iRec, GEDCOMTagName.RESI, "", ""); evt.Place.StringValue = place; } if (!string.IsNullOrEmpty(comment)) { GDMNoteRecord noteRec = fBase.Context.Tree.CreateNote(); noteRec.SetNoteText(comment); iRec.AddNote(noteRec); } if (srcRec != null) { iRec.AddSource(srcRec, srcPage, 0); } fBase.NotifyRecord(iRec, RecordAction.raAdd); GDMFamilyRecord family = null; if (link == PersonLink.plPerson) { iMain = iRec; string evName = ""; if (rbSK_Met.Checked) { switch (cbEventType.SelectedIndex) { case 0: evName = GEDCOMTagName.BIRT; break; case 1: evName = GEDCOMTagName.DEAT; break; case 2: evName = GEDCOMTagName.MARR; break; } } if (evName == GEDCOMTagName.BIRT || evName == GEDCOMTagName.DEAT) { GDMCustomEvent evt = fBase.Context.CreateEventEx(iRec, evName, GDMDate.CreateByFormattedStr(edEventDate.Text, false), ""); evt.Place.StringValue = place; } else if (evName == GEDCOMTagName.MARR) { family = fBase.Context.GetMarriageFamily(iRec, true); GDMCustomEvent evt = fBase.Context.CreateEventEx(family, evName, GDMDate.CreateByFormattedStr(edEventDate.Text, false), ""); evt.Place.StringValue = place; } } else { if (iMain == null) { throw new PersonScanException(fLangMan.LS(FLS.LSID_BasePersonInvalid)); } else { switch (link) { case PersonLink.plFather: case PersonLink.plMother: family = fBase.Context.GetParentsFamily(iMain, true); family.AddSpouse(iRec); break; case PersonLink.plGodparent: iMain.AddAssociation(fLangMan.LS(FLS.LSID_PLGodparent), iRec); break; case PersonLink.plSpouse: family = fBase.Context.GetMarriageFamily(iMain, true); family.AddSpouse(iRec); break; case PersonLink.plChild: family = fBase.Context.GetMarriageFamily(iMain, true); family.AddChild(iRec); break; } } } } } InitSourceControls(); }
private GDMCustomDate AssembleDate() { GDMCustomDate result = null; GDMCalendar cal1 = fView.Date1Calendar.GetSelectedTag <GDMCalendar>(); GDMCalendar cal2 = fView.Date2Calendar.GetSelectedTag <GDMCalendar>(); GDMDate gcd1 = GDMDate.CreateByFormattedStr(fView.Date1.NormalizeDate, cal1, true); if (gcd1 == null) { throw new ArgumentNullException("gcd1"); } GDMDate gcd2 = GDMDate.CreateByFormattedStr(fView.Date2.NormalizeDate, cal2, true); if (gcd2 == null) { throw new ArgumentNullException("gcd2"); } gcd1.YearBC = fView.Date1BC.Checked; gcd2.YearBC = fView.Date2BC.Checked; switch (fView.EventDateType.SelectedIndex) { case 0: result = gcd1; break; case 1: // BEF gcd2 result = GDMCustomDate.CreateRange(null, null, gcd2); break; case 2: // AFT gcd1 result = GDMCustomDate.CreateRange(null, gcd1, null); break; case 3: // "BET " + gcd1 + " AND " + gcd2 result = GDMCustomDate.CreateRange(null, gcd1, gcd2); break; case 4: // FROM gcd1 result = GDMCustomDate.CreatePeriod(null, gcd1, null); break; case 5: // TO gcd2 result = GDMCustomDate.CreatePeriod(null, null, gcd2); break; case 6: // FROM gcd1 TO gcd2 result = GDMCustomDate.CreatePeriod(null, gcd1, gcd2); break; case 7: // ABT gcd1 result = GDMCustomDate.CreateApproximated(null, gcd1, GDMApproximated.daAbout); break; case 8: // CAL gcd1 result = GDMCustomDate.CreateApproximated(null, gcd1, GDMApproximated.daCalculated); break; case 9: // EST gcd1 result = GDMCustomDate.CreateApproximated(null, gcd1, GDMApproximated.daEstimated); break; } return(result); }