public void AddNewFamilyMember(Person person, KindOfRelative kindOfRelative) { var list = new List<KindOfRelative> {kindOfRelative}; var checkedVertex = GetCheckedVertex(); if (checkedVertex != null) { list.Add(ConvertTo.KindOfRelative(checkedVertex.WhoIsRelativeTextBlock.Text)); } var vertex = new Vertex { DataContext = person, WhoIsRelativeTextBlock = {Text = ConvertTo.String(RelationshipsDictionary.GetKindOfRelative(list))} }; TreeCanvas.Children.Add(vertex); var point = CalculateCoordinates(vertex, checkedVertex, kindOfRelative); AddRelationship(vertex, checkedVertex, kindOfRelative); vertex.IsChecked = true; if ((point.X > ActualWidth) && ((double.IsNaN(Width)) || (point.X > Width))) { Width = point.X; } if ((point.Y > ActualHeight) && ((double.IsNaN(Height)) || (point.X > Height))) { Height = point.Y; } JustOneVertexChecked(); RepositionAllObjects(); }
public static string String(KindOfRelative kindOfRelative) { switch (kindOfRelative) { case Entities.KindOfRelative.Me: return "Я"; case Entities.KindOfRelative.Father: return "Папа"; case Entities.KindOfRelative.Mother: return "Мама"; case Entities.KindOfRelative.Brother: return "Брат"; case Entities.KindOfRelative.Sister: return "Сестра"; case Entities.KindOfRelative.Grandfather: return "Дедушка"; case Entities.KindOfRelative.Grandmother: return "Бабушка"; case Entities.KindOfRelative.GreatGrandmother: return "Прабабушка"; case Entities.KindOfRelative.GreatGrandfather: return "Прадедушка"; case Entities.KindOfRelative.GreatGreatGrandmother: return "Прапрабабушка"; case Entities.KindOfRelative.GreatGreatGrandfather: return "Прапрадедушка"; case Entities.KindOfRelative.Aunt: return "Тетя"; case Entities.KindOfRelative.Uncle: return "Дядя"; case Entities.KindOfRelative.Husband: return "Муж"; case Entities.KindOfRelative.Wife: return "Жена"; case Entities.KindOfRelative.BrotherInLow: return "Зять(муж сестры)"; default: return ""; } }
private static KindOfRelative Get(KindOfRelative kindOfRelative1, KindOfRelative kindOfRelative2) { if ((kindOfRelative1 == KindOfRelative.Father) && ((kindOfRelative2 == KindOfRelative.Father) || (kindOfRelative2 == KindOfRelative.Mother))) { return KindOfRelative.Grandfather; } if ((kindOfRelative1 == KindOfRelative.Father) && ((kindOfRelative2 == KindOfRelative.Grandfather) || (kindOfRelative2 == KindOfRelative.Grandmother))) { return KindOfRelative.GreatGrandfather; } if ((kindOfRelative1 == KindOfRelative.Father) && ((kindOfRelative2 == KindOfRelative.GreatGrandfather) || (kindOfRelative2 == KindOfRelative.GreatGrandmother))) { return KindOfRelative.GreatGreatGrandfather; } if ((kindOfRelative1 == KindOfRelative.Mother) && ((kindOfRelative2 == KindOfRelative.Father) || (kindOfRelative2 == KindOfRelative.Mother))) { return KindOfRelative.Grandmother; } if ((kindOfRelative1 == KindOfRelative.Mother) && ((kindOfRelative2 == KindOfRelative.Grandfather) || (kindOfRelative2 == KindOfRelative.Grandmother))) { return KindOfRelative.GreatGrandmother; } if ((kindOfRelative1 == KindOfRelative.Mother) && ((kindOfRelative2 == KindOfRelative.GreatGrandfather) || (kindOfRelative2 == KindOfRelative.GreatGrandmother))) { return KindOfRelative.GreatGreatGrandmother; } if ((kindOfRelative1 == KindOfRelative.Sister) && (kindOfRelative2 == KindOfRelative.Sister)) { return KindOfRelative.Sister; } if ((kindOfRelative1 == KindOfRelative.Brother) && (kindOfRelative2 == KindOfRelative.Brother)) { return KindOfRelative.Brother; } if ((kindOfRelative1 == KindOfRelative.Brother) && (kindOfRelative2 == KindOfRelative.Sister)) { return KindOfRelative.Brother; } if ((kindOfRelative1 == KindOfRelative.Sister) && (kindOfRelative2 == KindOfRelative.Brother)) { return KindOfRelative.Sister; } if ((kindOfRelative1 == KindOfRelative.Sister) && ((kindOfRelative2 == KindOfRelative.Mother) || (kindOfRelative2 == KindOfRelative.Father))) { return KindOfRelative.Aunt; } if ((kindOfRelative1 == KindOfRelative.Brother) && ((kindOfRelative2 == KindOfRelative.Mother) || (kindOfRelative2 == KindOfRelative.Father))) { return KindOfRelative.Uncle; } if ((kindOfRelative1 == KindOfRelative.Brother) && (kindOfRelative2 == KindOfRelative.Aunt)) { return KindOfRelative.Uncle; } if ((kindOfRelative1 == KindOfRelative.Husband) && (kindOfRelative2 == KindOfRelative.Sister)) { return KindOfRelative.BrotherInLow; } return KindOfRelative.NotRelative; }
private Point CalculateCoordinates(Vertex vertex, Vertex checkedVertex, KindOfRelative kindOfRelative) { double left = 0, bottom = 0; if (checkedVertex != null) { if (kindOfRelative == KindOfRelative.Father) { left = Canvas.GetLeft(checkedVertex) - offset; bottom = Canvas.GetBottom(checkedVertex) + offset; } else if (kindOfRelative == KindOfRelative.Mother) { left = Canvas.GetLeft(checkedVertex) + offset; bottom = Canvas.GetBottom(checkedVertex) + offset; } else if (kindOfRelative == KindOfRelative.Brother || kindOfRelative == KindOfRelative.Sister) { left = Canvas.GetLeft(checkedVertex) + checkedVertex.Width + offset; bottom = Canvas.GetBottom(checkedVertex); } else if (kindOfRelative == KindOfRelative.Husband || kindOfRelative == KindOfRelative.Wife) { left = Canvas.GetLeft(checkedVertex) - checkedVertex.Width - offset; bottom = Canvas.GetBottom(checkedVertex); } } else { left = TreeCanvas.ActualWidth/2 - vertex.Width/2; bottom = 20; } Canvas.SetLeft(vertex, left); Canvas.SetBottom(vertex, bottom); return new Point(left + vertex.Width + offset/2, bottom + vertex.Height + offset/2); }
private void AddRelationship(Vertex vertex, Vertex checkedVertex, KindOfRelative kindOfRelative) { if (checkedVertex != null) { double vertexMiddleX, vertexMiddleY; if (Canvas.GetBottom(vertex) != Canvas.GetBottom(checkedVertex)) { vertexMiddleX = Canvas.GetLeft(vertex) + vertex.Width/2; vertexMiddleY = Canvas.GetBottom(vertex) - vertex.Height; } else if ((kindOfRelative == KindOfRelative.Husband) || (kindOfRelative == KindOfRelative.Wife)) { vertexMiddleX = Canvas.GetLeft(checkedVertex); vertexMiddleY = Canvas.GetBottom(vertex) + vertex.Height / 2; } else { vertexMiddleX = Canvas.GetLeft(checkedVertex) + checkedVertex.Width; vertexMiddleY = Canvas.GetBottom(vertex) + vertex.Height/2; } var relationship = new Relationship(vertex, checkedVertex) { Line = {X1 = 0, Y1 = 0, Stroke = Brushes.Black, StrokeThickness = 1} }; if (kindOfRelative == KindOfRelative.Father) { relationship.Line.X2 = offset; relationship.Line.Y2 = offset/2; } else if (kindOfRelative == KindOfRelative.Mother) { relationship.Line.X2 = -offset; relationship.Line.Y2 = offset/2; } else if ((kindOfRelative == KindOfRelative.Brother) || (kindOfRelative == KindOfRelative.Sister)) { relationship.Line.X2 = offset; relationship.Line.Y2 = 0; } else if ((kindOfRelative == KindOfRelative.Husband) || (kindOfRelative == KindOfRelative.Wife)) { relationship.Line.X2 = -offset; relationship.Line.Y2 = 0; } TreeCanvas.Children.Add(relationship); Canvas.SetLeft(relationship, vertexMiddleX); Canvas.SetBottom(relationship, vertexMiddleY); } }