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); }
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); }
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); }
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); }
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(); } }
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); }
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); }