private void RemovePersonFromAllChildren(IUIPerson person) { foreach (var child in person.Children) { child.Parents.Remove(person); } }
internal void RemoveParent(IUIPerson selectedPerson, IUIPerson nonParent) { this._genealogyMaster.ParentRelationManager.RemoveParent(selectedPerson, nonParent); this.UpdateSelectedParents(selectedPerson); this.UpdateImage(); }
private void AddChildren(ref List <IWriteTo> statements, IUIPerson person, IUIPerson partner, NodeStatement point, IEnumerable <IUIPerson> childrenOfCouple) { childrenOfCouple = childrenOfCouple.Where(x => !x.IsHidden); var childrenSubgraphStatements = new List <IWriteTo>(); foreach (var child in childrenOfCouple) { var childNodeDict = new Dictionary <Id, Id> { { "label", child.Label }, { "shape", "box" }, { "color", child.IsFemale ? "pink" : "blue" }, { "fillcolor", "white" }, { "style", "filled" } }.ToImmutableDictionary(); var childNode = new NodeStatement(child.Id.ToString(), childNodeDict); var childToDotDict = new Dictionary <Id, Id> { { "dir", "none" } }.ToImmutableDictionary(); var childToDotStatement = new EdgeStatement(point.Id.Value, child.Id.ToString(), childToDotDict); childrenSubgraphStatements.Add(childNode); statements.Add(childToDotStatement); } var childrenSubgraphStatement = new SubgraphStatement("children" + (person.Id + "z" + partner.Id), childrenSubgraphStatements.ToImmutableList()); statements.Add(childrenSubgraphStatement); }
private void RemovePersonFromAllParents(IUIPerson person) { foreach (var parent in person.Parents) { parent.Children.Remove(person); } }
internal void RemoveChild(IUIPerson selectedPerson, IUIPerson nonChild) { this._genealogyMaster.ChildRelationmanager.RemoveChild(selectedPerson, nonChild); this.UpdateSelectedChildren(selectedPerson); this.UpdateImage(); }
private void UnLinkImplicitPartners(IUIPerson person) { IUIPerson lastParent = null; foreach (var parentOfPersonToRemoveParent in person.Parents) { if (lastParent != null) { if (lastParent.Partners.Contains(parentOfPersonToRemoveParent)) { if (!lastParent.Children.Intersect(parentOfPersonToRemoveParent.Children).Any()) { lastParent.Partners.Remove(parentOfPersonToRemoveParent); parentOfPersonToRemoveParent.Partners.Remove(lastParent); } } } lastParent = parentOfPersonToRemoveParent; } foreach (var partnerOfPersonToRemove in person.Partners) { partnerOfPersonToRemove.Partners.Remove(person); } }
private void AddPartner(ref List <IWriteTo> statements, IUIPerson person, NodeStatement personNode, IUIPerson partner) { if (partner.IsHidden) { return; } var edgeDictPoint = new Dictionary <Id, Id> { { "shape", "point" }, { "label", "" } }.ToImmutableDictionary(); var point = new NodeStatement("partners" + (partner.Id + "z" + person.Id), edgeDictPoint); var partnerNodeDict = new Dictionary <Id, Id> { { "label", partner.Label }, { "shape", "box" }, { "color", partner.IsFemale ? "pink" : "blue" }, { "fillcolor", "white" }, { "style", "filled" } }.ToImmutableDictionary(); var partnerNode = new NodeStatement(partner.Id.ToString(), partnerNodeDict); var edgeDictLinePersonToPoint = new Dictionary <Id, Id> { { "dir", "none" } }.ToImmutableDictionary(); var linePersonToPoint = new EdgeStatement(person.Id.ToString(), point.Id.ToString(), edgeDictLinePersonToPoint); var linePartnerToPointDict = new Dictionary <Id, Id> { { "dir", "none" } }.ToImmutableDictionary(); var linePartnerToPoint = new EdgeStatement(partner.Id.ToString(), point.Id.ToString(), linePartnerToPointDict); var parentSubgraphExists = statements.Where(x => x is SubgraphStatement).Select(y => ((SubgraphStatement)y).Name).Any(z => z.Value == "partners" + (partner.Id + "z" + person.Id) || z.Value == "partners" + (person.Id + "z" + partner.Id)); if (!parentSubgraphExists) { var parentSubgraphStatements = new List <IWriteTo>(); parentSubgraphStatements.Add(point); parentSubgraphStatements.Add(partnerNode); parentSubgraphStatements.Add(personNode); parentSubgraphStatements.Add(linePersonToPoint); parentSubgraphStatements.Add(linePartnerToPoint); var parentSubgraphStatement = new SubgraphStatement(point.Id.ToString(), parentSubgraphStatements.ToImmutableList()); statements.Add(parentSubgraphStatement); var childrenSubgraphExists = statements.Where(x => x is SubgraphStatement).Select(y => ((SubgraphStatement)y).Name).Any(z => z.Value == "children" + (partner.Id + "z" + person.Id) || z.Value == "children" + (person.Id + "z" + partner.Id)); if (!childrenSubgraphExists) { var childrenOfCouple = person.Children.Where(x => x.Parents.Contains(partner) && x.Parents.Contains(person)).Where(x => !x.IsHidden); childrenOfCouple = childrenOfCouple.OrderByDescending(x => x.GetAllDescendants().Count); this.AddChildren(ref statements, person, partner, point, childrenOfCouple); } } }
public void MoveOneUp(IUIPerson personToMoveUp) { var indexOfPerson = this.Persons.IndexOf(personToMoveUp); if (indexOfPerson > 0) { this.Persons.Swap(indexOfPerson, indexOfPerson - 1); this._genealogyMaster.Swap(indexOfPerson, indexOfPerson - 1); this.UpdateImage(); } }
public void RemoveParent(IUIPerson child, IUIPerson parent) { if (child.Parents.FirstOrDefault(x => x.Id == parent.Id) != null && parent.Children.FirstOrDefault(x => x.Id == child.Id) != null) { this.UnLinkImplicitPartners(child); child.Parents.Remove(parent); parent.Children.Remove(child); this.OnGenealogyChanged(new GenealogyMasterEventArgs(this.persons)); } }
internal void AddParent(IUIPerson selectedPerson, IUIPerson parent) { try { this._genealogyMaster.ParentRelationManager.AddParent(selectedPerson, parent); this.UpdateSelectedParents(selectedPerson); } catch (InvalidStateException ex) { MessageBox.Show(ex.Message); } this.UpdateImage(); }
private void DescendantRetriever(IUIPerson pointer, ref List <IUIPerson> descendants) { if (pointer.Children == null || !pointer.Children.Any()) { return; } foreach (var descendant in pointer.Children) { descendants.Add(descendant); this.DescendantRetriever(descendant, ref descendants); } }
public void RemovePerson(IUIPerson person) { this.persons.Remove(person); this.RemovePersonFromAllChildren(person); this.RemovePersonFromAllParents(person); this.UnLinkImplicitPartners(person); person.Children.Clear(); person.Parents.Clear(); person.Partners.Clear(); this.OnGenealogyChanged(new GenealogyMasterEventArgs(this.persons)); }
internal void AddChild(IUIPerson selectedPerson, IUIPerson child) { try { this._genealogyMaster.ChildRelationmanager.AddChild(selectedPerson, child); this.UpdateSelectedChildren(selectedPerson); } catch (InvalidStateException ex) { MessageBox.Show(ex.Message); } this.UpdateImage(); }
public List <IUIPerson> GetChildrenConceivedWithPerson(IUIPerson possiblePartner) { var commonChildren = new List <IUIPerson>(); if (!this.Partners.Contains(possiblePartner)) { return(commonChildren); } var ownChildren = this.Children; var childrenOfPartner = possiblePartner.Children; commonChildren = ownChildren.Intersect(childrenOfPartner).ToList(); return(commonChildren); }
private void UpdateSelectedParents(IUIPerson value) { this.ParentsOfSelected.Clear(); if (value == null) { return; } foreach (var parent in value.Parents) { this.ParentsOfSelected.Add(parent); } this.UpdateImage(); }
private void UpdateSelectedChildren(IUIPerson value) { this.ChildrenOfSelected.Clear(); if (value == null) { return; } foreach (var child in value.Children) { this.ChildrenOfSelected.Add(child); } this.UpdateImage(); }
public void AddPerson(IUIPerson person, bool autoDefineGender = false) { person.FirstName = person.FirstName.Trim(); person.LastName = person.LastName.Trim(); if (!this.persons.Contains(person)) { if (autoDefineGender) { person.AutoDefineGender(); } this.persons.Add(person); this.OnGenealogyChanged(new GenealogyMasterEventArgs(this.persons)); } }
private void LinkImplicitPartners(IUIPerson child) { IUIPerson lastParent = null; foreach (var parentOfPersonToAddParent in child.Parents) { if (lastParent != null) { if (!lastParent.Partners.Contains(parentOfPersonToAddParent)) { lastParent.Partners.Add(parentOfPersonToAddParent); parentOfPersonToAddParent.Partners.Add(lastParent); } } lastParent = parentOfPersonToAddParent; } }
public void AddParent(IUIPerson child, IUIPerson parent) { if (child == parent) { return; } if (child.Parents.Contains(parent)) { return; } if (child.Parents.Count == 2 && !child.Parents.Contains(parent)) { throw new InvalidStateException(string.Format("Mehr als 2 Eltern sind nicht erlaubt und {0} hat bereits 2", child.FullName)); } if (child.Children.Contains(parent) || parent.Parents.Contains(child)) { throw new InvalidStateException(string.Format("Person \"{0}\" kann nicht Kind und Eltern von \"{1}\" zugergleich sein", parent.FullName, child.FullName)); } if (parent.GetAllDescendants().Contains(child)) { throw new InvalidStateException(string.Format("Person \"{0}\" ist bereits ein Nachfahre von \"{1}\"", child.FullName, parent.FullName)); } if (!persons.Contains(parent)) { persons.Add(parent); } if (!persons.Contains(child)) { persons.Add(child); } child.Parents.Add(parent); parent.Children.Add(child); this.LinkImplicitPartners(child); this.OnGenealogyChanged(new GenealogyMasterEventArgs(this.persons)); }
private void UnLinkImplicitPartners(IUIPerson child) { IUIPerson lastParent = null; foreach (var parentOfPersonToRemoveParent in child.Parents) { if (lastParent != null) { if (lastParent.Partners.Contains(parentOfPersonToRemoveParent)) { if (!lastParent.GetChildrenConceivedWithPerson(parentOfPersonToRemoveParent).Any(x => x.Id != child.Id)) { lastParent.Partners.Remove(parentOfPersonToRemoveParent); parentOfPersonToRemoveParent.Partners.Remove(lastParent); } } } lastParent = parentOfPersonToRemoveParent; } }
public void AddPersonAsync(IUIPerson person, bool autoDefineGender = false) { Task.Run(() => AddPerson(person, autoDefineGender)); }
private void MoveOneUpMethod(IUIPerson personToMoveUp) { this.MainViewModel.MoveOneUp(personToMoveUp); }
private void RemovePersonMethod(IUIPerson personToRemove) { this.Persons.Remove(personToRemove); }
public static void AutoDefineGender(this IUIPerson person) { person.IsFemale = GenderizeApi.FirstNameIsFemale(person.FirstName); }
private bool IsSingleParent(IUIPerson person, IEnumerable <IUIPerson> partners) { return(!partners.Any() && person.Children.Any()); }
public PersonDetails(IUIPerson selectedPersonInList) { PersonDetailsViewModel.Person = selectedPersonInList; InitializeComponent(); }