コード例 #1
0
ファイル: BaseController.cs プロジェクト: fire-eggs/GEDKeeper
        public static bool ModifyNote(IBaseWindow baseWin, ref GEDCOMNoteRecord noteRec)
        {
            bool result;

            try {
                baseWin.Context.BeginUpdate();
                GEDCOMTree tree = baseWin.Context.Tree;

                bool exists = noteRec != null;
                if (!exists)
                {
                    noteRec = new GEDCOMNoteRecord(tree, tree, "", "");
                    noteRec.InitNew();
                }

                try {
                    baseWin.Context.LockRecord(noteRec);

                    if (GlobalOptions.Instance.UseExtendedNotes)
                    {
                        using (var dlg = AppHost.Container.Resolve <INoteEditDlgEx>())
                        {
                            dlg.InitDialog(baseWin);

                            dlg.NoteRecord = noteRec;
                            result         = (AppHost.Instance.ShowModalX(dlg, false));
                        }
                    }
                    else
                    {
                        using (var dlg = AppHost.Container.Resolve <INoteEditDlg>())
                        {
                            dlg.InitDialog(baseWin);

                            dlg.NoteRecord = noteRec;
                            result         = (AppHost.Instance.ShowModalX(dlg, false));
                        }
                    }
                } finally {
                    baseWin.Context.UnlockRecord(noteRec);
                }

                if (!exists)
                {
                    if (result)
                    {
                        tree.AddRecord(noteRec);
                    }
                    else
                    {
                        noteRec.Dispose();
                        noteRec = null;
                    }
                }
            } finally {
                baseWin.Context.EndUpdate();
            }

            return(result);
        }
コード例 #2
0
ファイル: BaseController.cs プロジェクト: fire-eggs/GEDKeeper
        public static bool ModifyMedia(IBaseWindow baseWin, ref GEDCOMMultimediaRecord mediaRec)
        {
            bool result;

            try {
                baseWin.Context.BeginUpdate();
                GEDCOMTree tree = baseWin.Context.Tree;

                using (var dlg = AppHost.Container.Resolve <IMediaEditDlg>())
                {
                    dlg.InitDialog(baseWin);

                    bool exists = mediaRec != null;
                    if (!exists)
                    {
                        mediaRec = new GEDCOMMultimediaRecord(tree, tree, "", "");
                        mediaRec.FileReferences.Add(new GEDCOMFileReferenceWithTitle(tree, mediaRec, "", ""));
                        mediaRec.InitNew();
                    }

                    try {
                        baseWin.Context.LockRecord(mediaRec);

                        dlg.MediaRec = mediaRec;
                        result       = (AppHost.Instance.ShowModalX(dlg, false));
                    } finally {
                        baseWin.Context.UnlockRecord(mediaRec);
                    }

                    if (!exists)
                    {
                        if (result)
                        {
                            tree.AddRecord(mediaRec);
                        }
                        else
                        {
                            mediaRec.Dispose();
                            mediaRec = null;
                        }
                    }
                }
            } finally {
                baseWin.Context.EndUpdate();
            }

            return(result);
        }
コード例 #3
0
ファイル: BaseController.cs プロジェクト: fire-eggs/GEDKeeper
        public static bool ModifyLocation(IBaseWindow baseWin, ref GEDCOMLocationRecord locRec)
        {
            bool result;

            try {
                baseWin.Context.BeginUpdate();
                GEDCOMTree tree = baseWin.Context.Tree;

                using (var dlg = AppHost.Container.Resolve <ILocationEditDlg>())
                {
                    dlg.InitDialog(baseWin);

                    bool exists = locRec != null;
                    if (!exists)
                    {
                        locRec = new GEDCOMLocationRecord(tree, tree, "", "");
                        locRec.InitNew();
                    }

                    try {
                        baseWin.Context.LockRecord(locRec);

                        dlg.LocationRecord = locRec;
                        result             = AppHost.Instance.ShowModalX(dlg, false);
                    } finally {
                        baseWin.Context.UnlockRecord(locRec);
                    }

                    if (!exists)
                    {
                        if (result)
                        {
                            tree.AddRecord(locRec);
                        }
                        else
                        {
                            locRec.Dispose();
                            locRec = null;
                        }
                    }
                }
            } finally {
                baseWin.Context.EndUpdate();
            }

            return(result);
        }
コード例 #4
0
        public static bool ModifyResearch(IBaseWindow baseWin, ref GEDCOMResearchRecord researchRec)
        {
            bool result;

            try {
                baseWin.Context.BeginUpdate();
                GEDCOMTree tree = baseWin.Context.Tree;

                using (var dlg = AppHost.Container.Resolve <IResearchEditDlg>(baseWin)) {
                    bool exists = researchRec != null;
                    if (!exists)
                    {
                        researchRec = new GEDCOMResearchRecord(tree, tree, "", "");
                        researchRec.InitNew();
                    }

                    try {
                        baseWin.Context.LockRecord(researchRec);

                        dlg.Research = researchRec;
                        result       = AppHost.Instance.ShowModalX(dlg, false);
                    } finally {
                        baseWin.Context.UnlockRecord(researchRec);
                    }

                    if (!exists)
                    {
                        if (result)
                        {
                            tree.AddRecord(researchRec);
                        }
                        else
                        {
                            researchRec.Dispose();
                            researchRec = null;
                        }
                    }
                }
            } finally {
                baseWin.Context.EndUpdate();
            }

            return(result);
        }
コード例 #5
0
        public static void TreeSync(GEDCOMTree mainTree, string fileName, TextBox logText)
        {
            logText.Clear();

            GEDCOMTree           extTree  = new GEDCOMTree();
            XRefReplacer         repMap   = new XRefReplacer();
            ExtList <SyncRecord> syncList = new ExtList <SyncRecord>(true);

            try {
                var gedcomProvider = new GEDCOMProvider(extTree);
                gedcomProvider.LoadFromFile(fileName);

                extTree.Header.Clear();

                int num = extTree.RecordsCount;
                for (int i = 0; i < num; i++)
                {
                    GEDCOMRecord rec = extTree[i];
                    syncList.Add(new SyncRecord {
                        MasterRecord  = null,
                        UpdateRecord  = rec,
                        State         = SyncState.ssUndefined,
                        UpdateOldXRef = "",
                        UpdateNewXRef = ""
                    });
                }

                int num2 = syncList.Count;
                for (int i = 0; i < num2; i++)
                {
                    SyncRecord syncRec = syncList[i];

                    GEDCOMRecord rec = mainTree.FindUID(syncRec.UpdateRecord.UID);

                    if (rec != null)
                    {
                        syncRec.MasterRecord = rec;
                        syncRec.State        = SyncState.ssHasMaster;
                    }
                    else
                    {
                        syncRec.State = SyncState.ssNoMaster;
                        rec           = extTree.Extract(extTree.IndexOf(syncRec.UpdateRecord));
                        string newXRef = mainTree.XRefIndex_NewXRef(rec);
                        repMap.AddXRef(rec, rec.XRef, newXRef);
                        rec.XRef = newXRef;
                        rec.ResetOwner(mainTree);
                        mainTree.AddRecord(rec);
                    }
                }

                int num3 = repMap.Count;
                for (int i = 0; i < num3; i++)
                {
                    GEDCOMRecord rec = repMap[i].Rec;
                    rec.ReplaceXRefs(repMap);
                }

                int num4 = extTree.RecordsCount;
                for (int i = 0; i < num4; i++)
                {
                    GEDCOMRecord rec = extTree[i];
                    rec.ReplaceXRefs(repMap);
                }

                int num5 = syncList.Count;
                for (int i = 0; i < num5; i++)
                {
                    SyncRecord syncRec = syncList[i];
                    if (syncRec.State == SyncState.ssHasMaster)
                    {
                        GEDCOMRecord rec = extTree.Extract(extTree.IndexOf(syncRec.UpdateRecord));
                        rec.XRef = mainTree.XRefIndex_NewXRef(rec);
                        rec.ResetOwner(mainTree);
                        mainTree.AddRecord(rec);
                        string backUID = syncRec.MasterRecord.UID;
                        syncRec.UpdateRecord.MoveTo(syncRec.MasterRecord, true);
                        syncRec.MasterRecord.UID = backUID;
                        mainTree.DeleteRecord(rec);
                    }
                }

                logText.AppendText("Sync finished\r\n");
            } finally {
                syncList.Dispose();
                repMap.Dispose();
                extTree.Dispose();
            }
        }
コード例 #6
0
        public static bool ModifyFamily(IBaseWindow baseWin, ref GEDCOMFamilyRecord familyRec, TargetMode targetType, GEDCOMIndividualRecord target)
        {
            bool result;

            try {
                baseWin.Context.BeginUpdate();
                GEDCOMTree tree = baseWin.Context.Tree;

                if (targetType == TargetMode.tmFamilySpouse && target != null)
                {
                    GEDCOMSex sex = target.Sex;
                    if (sex < GEDCOMSex.svMale || sex >= GEDCOMSex.svUndetermined)
                    {
                        AppHost.StdDialogs.ShowError(LangMan.LS(LSID.LSID_IsNotDefinedSex));
                        return(false);
                    }
                }

                using (var dlg = AppHost.Container.Resolve <IFamilyEditDlg>(baseWin)) {
                    bool exists = (familyRec != null);
                    if (!exists)
                    {
                        familyRec = new GEDCOMFamilyRecord(tree, tree, "", "");
                        familyRec.InitNew();
                    }

                    try {
                        baseWin.Context.LockRecord(familyRec);

                        dlg.Family = familyRec;

                        if (targetType != TargetMode.tmNone && target != null)
                        {
                            dlg.SetTarget(targetType, target);
                        }

                        result = (AppHost.Instance.ShowModalX(dlg, false));
                    } finally {
                        baseWin.Context.UnlockRecord(familyRec);
                    }

                    if (!exists)
                    {
                        if (result)
                        {
                            tree.AddRecord(familyRec);
                        }
                        else
                        {
                            familyRec.Clear();
                            familyRec.Dispose();
                            familyRec = null;
                        }
                    }
                }
            } finally {
                baseWin.Context.EndUpdate();
            }

            return(result);
        }
コード例 #7
0
        public static bool ModifyIndividual(IBaseWindow baseWin, ref GEDCOMIndividualRecord indivRec,
                                            GEDCOMIndividualRecord target, TargetMode targetMode, GEDCOMSex needSex)
        {
            bool result;

            try {
                baseWin.Context.BeginUpdate();
                GEDCOMTree tree = baseWin.Context.Tree;

                using (var dlg = AppHost.Container.Resolve <IPersonEditDlg>(baseWin)) {
                    bool exists = (indivRec != null);
                    if (!exists)
                    {
                        indivRec = new GEDCOMIndividualRecord(tree, tree, "", "");
                        indivRec.InitNew();

                        indivRec.AddPersonalName(new GEDCOMPersonalName(tree, indivRec, "", ""));
                        baseWin.Context.CreateEventEx(indivRec, "BIRT", "", "");
                    }

                    try {
                        baseWin.Context.LockRecord(indivRec);

                        dlg.Person = indivRec;

                        if (targetMode != TargetMode.tmNone)
                        {
                            if (needSex == GEDCOMSex.svMale || needSex == GEDCOMSex.svFemale)
                            {
                                dlg.SetNeedSex(needSex);
                            }
                            dlg.TargetMode = targetMode;
                            dlg.Target     = target;
                        }

                        result = (AppHost.Instance.ShowModalX(dlg, false));
                    } finally {
                        baseWin.Context.UnlockRecord(indivRec);
                    }

                    if (!exists)
                    {
                        if (result)
                        {
                            PostProcessPerson(baseWin, indivRec);

                            tree.AddRecord(indivRec);
                        }
                        else
                        {
                            indivRec.Clear();
                            indivRec.Dispose();
                            indivRec = null;
                        }
                    }
                }
            } finally {
                baseWin.Context.EndUpdate();
            }

            return(result);
        }