public override void UpdateView() { try { GDMPersonalName np = (fPerson.PersonalNames.Count > 0) ? fPerson.PersonalNames[0] : null; UpdateNameControls(np); fView.SexCombo.SelectedIndex = (sbyte)fPerson.Sex; fView.Patriarch.Checked = fPerson.Patriarch; fView.Bookmark.Checked = fPerson.Bookmark; //cmbRestriction.SelectedIndexChanged -= cbRestriction_SelectedIndexChanged; fView.RestrictionCombo.SelectedIndex = (sbyte)fPerson.Restriction; //cmbRestriction.SelectedIndexChanged += cbRestriction_SelectedIndexChanged; fView.EventsList.ListModel.DataOwner = fPerson; fView.NotesList.ListModel.DataOwner = fPerson; fView.MediaList.ListModel.DataOwner = fPerson; fView.SourcesList.ListModel.DataOwner = fPerson; fView.AssociationsList.ListModel.DataOwner = fPerson; fView.GroupsList.ListModel.DataOwner = fPerson; fView.NamesList.ListModel.DataOwner = fPerson; fView.SpousesList.ListModel.DataOwner = fPerson; fView.UserRefList.ListModel.DataOwner = fPerson; fView.ParentsList.ListModel.DataOwner = fPerson; UpdateControls(true); } catch (Exception ex) { Logger.LogWrite("PersonEditDlgController.UpdateView(): " + ex.Message); } }
public NamePartsRet GetNamePartsEx(GDMIndividualRecord iRec, bool formatted = true) { if (iRec == null) { throw new ArgumentNullException("iRec"); } if (iRec.PersonalNames.Count > 0) { GDMPersonalName personalName = iRec.PersonalNames[0]; NamePartsRet nameParts = GetNameParts(personalName); if (formatted) { nameParts.Surname = GKUtils.GetFmtSurname(iRec.Sex, personalName, nameParts.Surname); } return(nameParts); } else { return(new NamePartsRet()); } }
private void CheckPersonalName(GDMPersonalName persName) { CheckTagWithNotes(persName); CheckTagWithSourceCitations(persName); fBaseContext.CollectNameLangs(persName); }
public void UpdateNameControls(GDMPersonalName np) { if (np != null) { var parts = GKUtils.GetNameParts(fPerson, np, false); fView.Surname.Text = parts.Surname; fView.Name.Text = parts.Name; fView.Patronymic.Text = parts.Patronymic; fView.NamePrefix.Text = np.Pieces.Prefix; fView.Nickname.Text = np.Pieces.Nickname; fView.SurnamePrefix.Text = np.Pieces.SurnamePrefix; fView.NameSuffix.Text = np.Pieces.Suffix; fView.MarriedSurname.Text = np.Pieces.MarriedName; } else { fView.Surname.Text = ""; fView.Name.Text = ""; fView.Patronymic.Text = ""; fView.NamePrefix.Text = ""; fView.Nickname.Text = ""; fView.SurnamePrefix.Text = ""; fView.NameSuffix.Text = ""; fView.MarriedSurname.Text = ""; } }
public override bool Accept() { try { GDMPersonalName np = fPerson.PersonalNames[0]; GKUtils.SetNameParts(np, fView.Surname.Text, fView.Name.Text, fView.Patronymic.Text); GDMPersonalNamePieces pieces = np.Pieces; pieces.Nickname = fView.Nickname.Text; pieces.Prefix = fView.NamePrefix.Text; pieces.SurnamePrefix = fView.SurnamePrefix.Text; pieces.Suffix = fView.NameSuffix.Text; if (IsExtendedWomanSurname()) { pieces.MarriedName = fView.MarriedSurname.Text; } fPerson.Sex = (GDMSex)fView.SexCombo.SelectedIndex; fPerson.Patriarch = fView.Patriarch.Checked; fPerson.Bookmark = fView.Bookmark.Checked; fPerson.Restriction = (GDMRestriction)fView.RestrictionCombo.SelectedIndex; fBase.Context.ProcessIndividual(fPerson); fLocalUndoman.Commit(); fBase.NotifyRecord(fPerson, RecordAction.raEdit); return(true); } catch (Exception ex) { Logger.LogWrite("PersonEditDlgController.Accept(): " + ex.Message); return(false); } }
// TODO: pull the code down the hierarchy public NamePartsRet GetNameParts(GDMPersonalName personalName) { if (personalName == null) { throw new ArgumentNullException("personalName"); } bool hasPatronymic = HasPatronymic(); string stdSurname, stdName, stdPatronymic; // extracting standard parts stdSurname = personalName.Surname; if (hasPatronymic) { string firstPart = personalName.FirstPart; int si = firstPart.LastIndexOf(' '); if (si != -1) { stdName = firstPart.Substring(0, si); stdPatronymic = firstPart.Substring(si + 1, firstPart.Length - si - 1); } else { stdName = firstPart; stdPatronymic = string.Empty; } } else { stdName = personalName.FirstPart; stdPatronymic = string.Empty; } // extracting sub-tags parts (high priority if any) var pnPieces = personalName.Pieces; string surname = pnPieces.Surname; string name = pnPieces.Given; string patronymic = pnPieces.PatronymicName; string marriedSurname = pnPieces.MarriedName; if (hasPatronymic && !string.IsNullOrEmpty(name) && string.IsNullOrEmpty(patronymic)) { int si = name.LastIndexOf(' '); if (si != -1) { patronymic = name.Substring(si + 1, name.Length - si - 1); name = name.Substring(0, si); } } surname = !string.IsNullOrEmpty(surname) ? surname : stdSurname; name = !string.IsNullOrEmpty(name) ? name : stdName; patronymic = !string.IsNullOrEmpty(patronymic) ? patronymic : stdPatronymic; return(new NamePartsRet(surname, marriedSurname, name, patronymic, this)); }
// TODO: pull the code down the hierarchy public NamePartsRet GetNameParts(GDMPersonalName personalName) { if (personalName == null) { throw new ArgumentNullException("personalName"); } bool hasPatronymic = HasPatronymic(); string stdSurname, stdName, stdPatronymic; // extracting standard parts stdSurname = personalName.Surname; if (hasPatronymic) { string firstPart = personalName.FirstPart; string[] parts = firstPart.Split(' '); if (parts.Length > 1) { stdName = parts[0]; stdPatronymic = parts[1]; } else { stdName = firstPart; stdPatronymic = string.Empty; } } else { stdName = personalName.FirstPart; stdPatronymic = string.Empty; } // extracting sub-tags parts (high priority if any) string surname = personalName.Pieces.Surname; string name = personalName.Pieces.Given; string patronymic = personalName.Pieces.PatronymicName; string marriedSurname = personalName.Pieces.MarriedName; if (hasPatronymic && !string.IsNullOrEmpty(name)) { string[] parts = name.Split(' '); if (string.IsNullOrEmpty(patronymic) && parts.Length > 1) { name = parts[0]; patronymic = parts[1]; } } surname = !string.IsNullOrEmpty(surname) ? surname : stdSurname; name = !string.IsNullOrEmpty(name) ? name : stdName; patronymic = !string.IsNullOrEmpty(patronymic) ? patronymic : stdPatronymic; return(new NamePartsRet(surname, marriedSurname, name, patronymic, this)); }
public override void Setup() { fBase = new BaseWindowStub(); fPerson = new GDMIndividualRecord(fBase.Context.Tree); fPersonalName = new GDMPersonalName(fPerson); fDialog = new PersonalNameEditDlg(fBase); fDialog.PersonalName = fPersonalName; fDialog.Show(); }
public override void Undo() { if (fPerson == null) { return; } GDMPersonalName np = fPerson.PersonalNames[0]; GKUtils.SetNameParts(np, fOldSurname, fOldName, fOldPatronymic); }
// Returns the n'th name and associated sources public static NameAndSource GetNameAndSource(this GDMIndividualRecord record, int n) { if (record.PersonalNames.Count <= n || n < 0) { return(null); } GDMPersonalName pns = record.PersonalNames[n]; NameAndSource nas = new NameAndSource(pns.StringValue); nas.Sources.AddRange(pns.SourceCitations); return(nas); }
public void UpdateNameControls(GDMPersonalName np) { ICulture culture; if (np != null) { var parts = GKUtils.GetNameParts(fBase.Context.Tree, fPerson, np, false); culture = parts.Culture; fView.Surname.Text = parts.Surname; fView.Name.Text = parts.Name; fView.Patronymic.Text = parts.Patronymic; var pnPieces = np.Pieces; fView.NamePrefix.Text = pnPieces.Prefix; fView.Nickname.Text = pnPieces.Nickname; fView.SurnamePrefix.Text = pnPieces.SurnamePrefix; fView.NameSuffix.Text = pnPieces.Suffix; fView.MarriedSurname.Text = pnPieces.MarriedName; } else { culture = fBase.Context.Culture; fView.Surname.Text = ""; fView.Name.Text = ""; fView.Patronymic.Text = ""; fView.NamePrefix.Text = ""; fView.Nickname.Text = ""; fView.SurnamePrefix.Text = ""; fView.NameSuffix.Text = ""; fView.MarriedSurname.Text = ""; } var locked = (fView.RestrictionCombo.SelectedIndex == (int)GDMRestriction.rnLocked); fView.Patronymic.Enabled = !locked && culture.HasPatronymic(); fView.Surname.Enabled = !locked && culture.HasSurname(); }
public override bool Redo() { bool result = true; if (fPerson == null) { result = false; } else { GDMPersonalName np = fPerson.PersonalNames[0]; var parts = GKUtils.GetNameParts(fPerson, np); fOldSurname = parts.Surname; fOldName = parts.Name; fOldPatronymic = parts.Patronymic; GKUtils.SetNameParts(np, fNewSurname, fNewName, fNewPatronymic); } return(result); }
public override bool Redo() { bool result = true; if (fPerson == null) { result = false; } else { IBaseContext baseContext = ((ChangeTracker)fManager).Context; GDMPersonalName np = fPerson.PersonalNames[0]; var parts = GKUtils.GetNameParts(baseContext.Tree, fPerson, np); fOldSurname = parts.Surname; fOldName = parts.Name; fOldPatronymic = parts.Patronymic; GKUtils.SetNameParts(np, fNewSurname, fNewName, fNewPatronymic); } return(result); }
private bool ProcessIndividualName(bool redo) { GDMIndividualRecord iRec = fObj as GDMIndividualRecord; GDMPersonalName persName = fNewVal as GDMPersonalName; if (iRec == null || persName == null) { return(false); } if (fType == OperationType.otIndividualNameRemove) { redo = !redo; } if (redo) { iRec.PersonalNames.Add(persName); } else { iRec.PersonalNames.Extract(persName); } return(true); }
protected override void LoadFromReader(Stream fileStream, StreamReader reader, string streamCharset = null) { fTree.State = GDMTreeState.osLoading; try { ProgressEventHandler progressHandler = fTree.OnProgress; long fileSize = fileStream.Length; int progress = 0; GDMIndividualRecord lastIndividual = null; FXTag lastTagType = FXTag.Unknown; RelationshipType relationshipType = RelationshipType.None; var families = new List <FamilyRec>(); var children = new List <ChildRec>(); var indiIdents = new Dictionary <string, GDMIndividualRecord>(); XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Ignore; using (XmlReader xr = XmlReader.Create(fileStream, settings)) { while (xr.Read()) { if (xr.NodeType == XmlNodeType.Element && !xr.IsEmptyElement) { string nodeType = xr.Name; if (nodeType == "Person") { lastIndividual = fTree.CreateIndividual(); var persName = new GDMPersonalName(); lastIndividual.AddPersonalName(persName); // add an empty birth event AddEvent(lastIndividual, GEDCOMTagName.BIRT); lastIndividual.UID = xr.GetAttribute("Id"); indiIdents.Add(lastIndividual.UID, lastIndividual); } else if (nodeType == "Gender") { lastTagType = FXTag.Gender; } else if (nodeType == "Restriction") { lastTagType = FXTag.Restriction; } else if (nodeType == "FirstName") { lastTagType = FXTag.FirstName; } else if (nodeType == "LastName") { lastTagType = FXTag.LastName; } else if (nodeType == "Suffix") { lastTagType = FXTag.Suffix; } else if (nodeType == "IsLiving") { lastTagType = FXTag.IsLiving; } else if (nodeType == "Note") { lastTagType = FXTag.Note; } else if (nodeType == "BirthDate") { lastTagType = FXTag.BirthDate; } else if (nodeType == "BirthPlace") { lastTagType = FXTag.BirthPlace; } else if (nodeType == "DeathDate") { lastTagType = FXTag.DeathDate; } else if (nodeType == "DeathPlace") { lastTagType = FXTag.DeathPlace; } else if (nodeType == "RelationshipType") { lastTagType = FXTag.Relationship; } else if (nodeType == "PersonId") { switch (relationshipType) { case RelationshipType.Spouse: lastTagType = FXTag.SpouseLink; break; case RelationshipType.Child: lastTagType = FXTag.ChildLink; break; default: lastTagType = FXTag.Unknown; break; } relationshipType = RelationshipType.None; } } else if (xr.NodeType == XmlNodeType.Text) { string nodeValue = xr.Value; if (!string.IsNullOrEmpty(nodeValue)) { switch (lastTagType) { case FXTag.Gender: if (nodeValue == "Male") { lastIndividual.Sex = GDMSex.svMale; } else if (nodeValue == "Female") { lastIndividual.Sex = GDMSex.svFemale; } break; case FXTag.Restriction: // FIXME: parse from nodeValue lastIndividual.Restriction = GDMRestriction.rnNone; break; case FXTag.FirstName: lastIndividual.PersonalNames[0].FirstPart = nodeValue; break; case FXTag.LastName: lastIndividual.PersonalNames[0].Surname = nodeValue; break; case FXTag.Suffix: lastIndividual.PersonalNames[0].LastPart = nodeValue; break; case FXTag.IsLiving: bool isLiving = string.Equals(nodeValue, "true", StringComparison.InvariantCultureIgnoreCase); if (!isLiving) { AddEvent(lastIndividual, GEDCOMTagName.DEAT); } break; case FXTag.BirthDate: case FXTag.BirthPlace: var birthEvent = lastIndividual.FindEvent("BIRT"); if (lastTagType == FXTag.BirthDate) { SetEventDate(birthEvent, nodeValue); } else { birthEvent.Place.StringValue = nodeValue; } break; case FXTag.DeathDate: case FXTag.DeathPlace: var deathEvent = lastIndividual.FindEvent("DEAT"); // IsLiving may be wrong if (deathEvent == null) { deathEvent = AddEvent(lastIndividual, GEDCOMTagName.DEAT); } if (lastTagType == FXTag.DeathDate) { SetEventDate(deathEvent, nodeValue); } else { deathEvent.Place.StringValue = nodeValue; } break; case FXTag.Note: AddNote(lastIndividual, nodeValue); break; case FXTag.Relationship: if (nodeValue == "Spouse") { relationshipType = RelationshipType.Spouse; } else if (nodeValue == "Child") { relationshipType = RelationshipType.Child; } break; case FXTag.SpouseLink: ProcessSpouse(families, lastIndividual, nodeValue); break; case FXTag.ChildLink: ProcessChild(children, lastIndividual, nodeValue); break; } lastTagType = FXTag.Unknown; } } if (progressHandler != null) { int newProgress = (int)Math.Min(100, (fileStream.Position * 100.0f) / fileSize); if (progress != newProgress) { progress = newProgress; progressHandler(fTree, progress); } } } } foreach (var fam in families) { GDMIndividualRecord husbRec; indiIdents.TryGetValue(fam.HusbandId, out husbRec); GDMIndividualRecord wifeRec; indiIdents.TryGetValue(fam.WifeId, out wifeRec); GDMFamilyRecord famRec = fTree.CreateFamily(); famRec.AddSpouse(husbRec); famRec.AddSpouse(wifeRec); } foreach (var child in children) { GDMIndividualRecord fathRec; indiIdents.TryGetValue(child.FatherId, out fathRec); GDMIndividualRecord mothRec; indiIdents.TryGetValue(child.MotherId, out mothRec); GDMIndividualRecord childRec; indiIdents.TryGetValue(child.ChildId, out childRec); GDMFamilyRecord famRec = GetParentsFamily(fathRec, mothRec); famRec.AddChild(childRec); } } finally { fTree.State = GDMTreeState.osReady; } }
public void Test_RussianCulture() { GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I3") as GDMIndividualRecord; Assert.IsNotNull(iRec); ICulture rusCulture = new RussianCulture(); Assert.IsNotNull(rusCulture); Assert.IsTrue(rusCulture.HasPatronymic()); Assert.IsTrue(rusCulture.HasSurname()); string[] surnames = rusCulture.GetSurnames(iRec); Assert.AreEqual(1, surnames.Length); Assert.AreEqual("Ivanova", surnames[0]); Assert.Throws(typeof(ArgumentNullException), () => { rusCulture.GetSurnames(null); }); Assert.AreEqual("Иванов", rusCulture.NormalizeSurname("Иванова", true)); Assert.AreEqual("Бельский", rusCulture.NormalizeSurname("Бельская", true)); Assert.AreEqual("Грозный", rusCulture.NormalizeSurname("Грозная", true)); Assert.AreEqual("Иванов", rusCulture.NormalizeSurname("Иванов", false)); Assert.AreEqual("Бельский", rusCulture.NormalizeSurname("Бельский", false)); Assert.AreEqual("Грозный", rusCulture.NormalizeSurname("Грозный", false)); Assert.AreEqual("?", rusCulture.NormalizeSurname(null, false)); Assert.AreEqual("?", rusCulture.NormalizeSurname("", false)); Assert.AreEqual("?", rusCulture.NormalizeSurname("(Иванова)", false)); Assert.AreEqual("Иванова", rusCulture.GetMarriedSurname("Иванов")); Assert.AreEqual("Бельская", rusCulture.GetMarriedSurname("Бельский")); Assert.AreEqual("Грозная", rusCulture.GetMarriedSurname("Грозный")); Assert.AreEqual("?", rusCulture.GetMarriedSurname("")); Assert.AreEqual("?", rusCulture.GetMarriedSurname(null)); string[] snms = rusCulture.GetSurnames("Бельская (Иванова)", true); Assert.AreEqual(2, snms.Length); Assert.AreEqual("Бельский", snms[0]); Assert.AreEqual("Иванов", snms[1]); snms = rusCulture.GetSurnames("Бельская", true); Assert.AreEqual(1, snms.Length); Assert.AreEqual("Бельский", snms[0]); snms = rusCulture.GetSurnames("Бельский", false); Assert.AreEqual(1, snms.Length); Assert.AreEqual("Бельский", snms[0]); GDMSex sx = rusCulture.GetSex("Мария", "Петровна", false); Assert.AreEqual(GDMSex.svFemale, sx); sx = rusCulture.GetSex("Иван", "Петрович", false); Assert.AreEqual(GDMSex.svMale, sx); Assert.AreEqual(GDMSex.svUnknown, rusCulture.GetSex("", "", false)); Assert.AreEqual("Иванова Ивана Ивановича", rusCulture.GetPossessiveName("Иванов Иван Иванович")); GDMIndividualRecord iRec2 = fContext.Tree.CreateIndividual(); GDMPersonalName persName = new GDMPersonalName(); persName.SetNameParts("Иван Иванович", "Иванов", ""); iRec2.PersonalNames.Add(persName); Assert.AreEqual("Иванова Ивана Ивановича", rusCulture.GetPossessiveName(iRec2)); }
private static void CheckPersonalName(GDMIndividualRecord iRec, GDMPersonalName persName, IBaseContext baseContext) { baseContext.CollectNameLangs(persName); }
private static void CheckPersonalName(IBaseContext baseContext, GDMTree tree, GEDCOMFormat format, GDMPersonalName persName) { CheckTagWithNotes(tree, format, persName); CheckTagWithSourceCitations(tree, format, persName); baseContext.CollectNameLangs(persName); }
public override void Modify(object sender, ModifyEventArgs eArgs) { var iRec = fDataOwner as GDMIndividualRecord; if (fBaseWin == null || fSheetList == null || iRec == null) { return; } GDMPersonalName persName = eArgs.ItemData as GDMPersonalName; bool result = false; switch (eArgs.Action) { case RecordAction.raAdd: case RecordAction.raEdit: using (var dlg = AppHost.ResolveDialog <IPersonalNameEditDlg>(fBaseWin)) { bool exists = (persName != null); if (!exists) { persName = new GDMPersonalName(); } dlg.Individual = iRec; dlg.PersonalName = persName; result = AppHost.Instance.ShowModalX(dlg, false); if (!exists) { if (result) { result = fUndoman.DoOrdinaryOperation(OperationType.otIndividualNameAdd, iRec, persName); } else { persName.Dispose(); } } } break; case RecordAction.raDelete: if (iRec.PersonalNames.Count > 1) { result = (AppHost.StdDialogs.ShowQuestionYN(LangMan.LS(LSID.LSID_RemoveNameQuery))); if (result) { result = fUndoman.DoOrdinaryOperation(OperationType.otIndividualNameRemove, iRec, persName); } } else { AppHost.StdDialogs.ShowError(LangMan.LS(LSID.LSID_RemoveNameFailed)); } break; case RecordAction.raMoveUp: case RecordAction.raMoveDown: int idx = iRec.PersonalNames.IndexOf(persName); switch (eArgs.Action) { case RecordAction.raMoveUp: iRec.PersonalNames.Exchange(idx - 1, idx); break; case RecordAction.raMoveDown: iRec.PersonalNames.Exchange(idx, idx + 1); break; } result = true; break; } if (result) { fBaseWin.Context.Modified = true; eArgs.IsChanged = true; } }
protected override void LoadFromReader(Stream fileStream, StreamReader reader, string streamCharset = null) { fTree.State = GDMTreeState.osLoading; try { ProgressEventHandler progressHandler = fTree.OnProgress; long fileSize = fileStream.Length; int progress = 0; GDMIndividualRecord lastIndividual = null; GDMTag lastTag = null; GEDCOMTagType lastTagType = GEDCOMTagType.Unknown; XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Ignore; using (XmlReader xr = XmlReader.Create(fileStream, settings)) { while (xr.Read()) { if (xr.NodeType == XmlNodeType.Element && !xr.IsEmptyElement) { if (xr.Name == "Person") { lastIndividual = fTree.CreateIndividual(); var persName = new GDMPersonalName(lastIndividual); lastIndividual.AddPersonalName(persName); lastIndividual.UID = xr.GetAttribute("Id"); } else if (xr.Name == "Gender") { lastTagType = GEDCOMTagType.SEX; lastTag = null; } else if (xr.Name == "FirstName") { lastTagType = GEDCOMTagType.GIVN; lastTag = null; } else if (xr.Name == "LastName") { lastTagType = GEDCOMTagType.SURN; lastTag = null; } } else if (xr.NodeType == XmlNodeType.Text) { string nodeValue = xr.Value; if (lastTag != null) { lastTag = null; } else { switch (lastTagType) { case GEDCOMTagType.SEX: if (nodeValue == "Male") { lastIndividual.Sex = GDMSex.svMale; } else if (nodeValue == "Female") { lastIndividual.Sex = GDMSex.svFemale; } break; case GEDCOMTagType.GIVN: lastIndividual.PersonalNames[0].FirstPart = nodeValue; break; case GEDCOMTagType.SURN: lastIndividual.PersonalNames[0].Surname = nodeValue; break; } lastTagType = GEDCOMTagType.Unknown; } } if (progressHandler != null) { int newProgress = (int)Math.Min(100, (fileStream.Position * 100.0f) / fileSize); if (progress != newProgress) { progress = newProgress; progressHandler(fTree, progress); } } } } } finally { fTree.State = GDMTreeState.osReady; } }