public static bool ModifyFamily(IBaseWindow baseWin, ref GDMFamilyRecord familyRec, TargetMode targetType, GDMIndividualRecord target) { bool result; try { baseWin.Context.BeginUpdate(); GDMTree tree = baseWin.Context.Tree; if (targetType == TargetMode.tmSpouse && target != null) { GDMSex sex = target.Sex; if (sex < GDMSex.svMale || sex > GDMSex.svFemale) { AppHost.StdDialogs.ShowError(LangMan.LS(LSID.LSID_IsNotDefinedSex)); return(false); } } using (var dlg = AppHost.ResolveDialog <IFamilyEditDlg>(baseWin)) { bool exists = (familyRec != null); if (!exists) { familyRec = new GDMFamilyRecord(tree); familyRec.InitNew(); } try { baseWin.Context.LockRecord(familyRec); dlg.Family = familyRec; 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 ModifyNote(IBaseWindow baseWin, ref GDMNoteRecord noteRec) { bool result; try { baseWin.Context.BeginUpdate(); GDMTree tree = baseWin.Context.Tree; bool exists = noteRec != null; if (!exists) { noteRec = new GDMNoteRecord(tree); noteRec.InitNew(); } try { baseWin.Context.LockRecord(noteRec); if (GlobalOptions.Instance.UseExtendedNotes) { using (var dlg = AppHost.ResolveDialog <INoteEditDlgEx>(baseWin)) { dlg.NoteRecord = noteRec; result = (AppHost.Instance.ShowModalX(dlg, false)); } } else { using (var dlg = AppHost.ResolveDialog <INoteEditDlg>(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 GDMMultimediaRecord mediaRec) { bool result; try { baseWin.Context.BeginUpdate(); GDMTree tree = baseWin.Context.Tree; using (var dlg = AppHost.ResolveDialog <IMediaEditDlg>(baseWin)) { bool exists = mediaRec != null; if (!exists) { mediaRec = new GDMMultimediaRecord(tree); mediaRec.FileReferences.Add(new GDMFileReferenceWithTitle(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 GDMLocationRecord locRec) { bool result; try { baseWin.Context.BeginUpdate(); GDMTree tree = baseWin.Context.Tree; using (var dlg = AppHost.ResolveDialog <ILocationEditDlg>(baseWin)) { bool exists = locRec != null; if (!exists) { locRec = new GDMLocationRecord(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 ModifyTask(IBaseWindow baseWin, ref GDMTaskRecord taskRec) { bool result; try { baseWin.Context.BeginUpdate(); GDMTree tree = baseWin.Context.Tree; using (var dlg = AppHost.ResolveDialog <ITaskEditDlg>(baseWin)) { bool exists = taskRec != null; if (!exists) { taskRec = new GDMTaskRecord(tree); tree.NewXRef(taskRec); } try { baseWin.Context.LockRecord(taskRec); dlg.Task = taskRec; result = AppHost.Instance.ShowModalX(dlg, false); } finally { baseWin.Context.UnlockRecord(taskRec); } if (!exists) { if (result) { tree.AddRecord(taskRec); } else { taskRec.Dispose(); taskRec = null; } } } } finally { baseWin.Context.EndUpdate(); } return(result); }
public static void TreeSync(GDMTree mainTree, string fileName, TextBox logText) { logText.Clear(); GDMTree extTree = new GDMTree(); GDMXRefReplacer repMap = new GDMXRefReplacer(); ExtList <SyncRecord> syncList = new ExtList <SyncRecord>(true); try { var gedcomProvider = new GEDCOMProvider(extTree); gedcomProvider.LoadFromFile(fileName); extTree.Header.Clear(); for (int i = 0, num = extTree.RecordsCount; i < num; i++) { GDMRecord rec = extTree[i]; syncList.Add(new SyncRecord { MasterRecord = null, UpdateRecord = rec, State = SyncState.ssUndefined, UpdateOldXRef = "", UpdateNewXRef = "" }); } for (int i = 0, num = syncList.Count; i < num; i++) { SyncRecord syncRec = syncList[i]; GDMRecord 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); } } for (int i = 0, num = repMap.Count; i < num; i++) { GDMRecord rec = repMap[i].Rec; rec.ReplaceXRefs(repMap); } for (int i = 0, num = extTree.RecordsCount; i < num; i++) { GDMRecord rec = extTree[i]; rec.ReplaceXRefs(repMap); } for (int i = 0, num = syncList.Count; i < num; i++) { SyncRecord syncRec = syncList[i]; if (syncRec.State == SyncState.ssHasMaster) { GDMRecord 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 ModifyIndividual(IBaseWindow baseWin, ref GDMIndividualRecord indivRec, GDMIndividualRecord target, TargetMode targetMode, GDMSex needSex) { bool result; try { baseWin.Context.BeginUpdate(); GDMTree tree = baseWin.Context.Tree; using (var dlg = AppHost.ResolveDialog <IPersonEditDlg>(baseWin)) { bool exists = (indivRec != null); if (!exists) { indivRec = new GDMIndividualRecord(tree); indivRec.InitNew(); indivRec.AddPersonalName(new GDMPersonalName(indivRec)); baseWin.Context.CreateEventEx(indivRec, GEDCOMTagName.BIRT, "", ""); } try { baseWin.Context.LockRecord(indivRec); dlg.Person = indivRec; if (targetMode != TargetMode.tmNone) { if (needSex == GDMSex.svMale || needSex == GDMSex.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); }