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);
            }
        }
示例#2
0
        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());
            }
        }
示例#3
0
        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);
            }
        }
示例#6
0
        // 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));
        }
示例#7
0
        // 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));
        }
示例#8
0
        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();
        }
示例#9
0
        public override void Undo()
        {
            if (fPerson == null)
            {
                return;
            }

            GDMPersonalName np = fPerson.PersonalNames[0];

            GKUtils.SetNameParts(np, fOldSurname, fOldName, fOldPatronymic);
        }
示例#10
0
        // 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);
        }
示例#11
0
        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();
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#14
0
        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);
        }
示例#15
0
        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;
            }
        }
示例#16
0
        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));
        }
示例#17
0
 private static void CheckPersonalName(GDMIndividualRecord iRec, GDMPersonalName persName, IBaseContext baseContext)
 {
     baseContext.CollectNameLangs(persName);
 }
示例#18
0
        private static void CheckPersonalName(IBaseContext baseContext, GDMTree tree, GEDCOMFormat format, GDMPersonalName persName)
        {
            CheckTagWithNotes(tree, format, persName);
            CheckTagWithSourceCitations(tree, format, persName);

            baseContext.CollectNameLangs(persName);
        }
示例#19
0
        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;
            }
        }
示例#20
0
        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;
            }
        }