Example #1
0
        protected void addChild_Click(object sender, EventArgs e)
        {
            string newChildName  = "";
            string newParentName = "";

            newChildName  = childNameTextBox.Text;
            newParentName = familyMemberList.SelectedItem.Text;

            // Get FamilyTree and stacks of ancestors and related from ViewState
            OurFamilyTree       = (FamilyTree)ViewState["OurFamilyTree"];
            addedChildAncestors = (Stack <FamilyMember>)ViewState["addedChildAncestors"];
            related             = (Stack <FamilyMember>)ViewState["related"];

            FamilyMember ParentAboutToGetNewChild =
                OurFamilyTree.FindFamilyMemberByName(newParentName, ref addedChildAncestors);

            // string listOfAncestors = "<br/>";

            /*
             * // Build long string of ancestors
             * foreach (var ancestor in addedChildAncestors)
             * {
             *  listOfAncestors += ancestor.Name + " ";
             * }
             */

            resultLabel.Text = ParentAboutToGetNewChild.AddChild(newChildName);
            //    + "<br/>Ancestor Chain:" + listOfAncestors;
            familyTreeLabel.Text = OurFamilyTree.DisplayFamilyTree(ref addedChildAncestors, ref related, null);

            // Clear stack of ancestors
            addedChildAncestors.Clear();

            // Clear all dropdowns.
            familyMemberList.Items.Clear();
            firstFamilyMember.Items.Clear();
            secondFamilyMember.Items.Clear();

            foreach (var name in OurFamilyTree.ListOfAllNames)
            {
                familyMemberList.Items.Add(name.ToString());
                firstFamilyMember.Items.Add(name.ToString());
                secondFamilyMember.Items.Add(name.ToString());
            }
        }
Example #2
0
        protected void findCommonAncestor_Click(object sender, EventArgs e)
        {
            FamilyMember firstCommonAncestor = null;

            // Get stuff from ViewState
            OurFamilyTree         = (FamilyTree)ViewState["OurFamilyTree"];
            firstMemberAncestors  = (Stack <FamilyMember>)ViewState["firstMemberAncestors"];
            secondMemberAncestors = (Stack <FamilyMember>)ViewState["secondMemberAncestors"];
            related = (Stack <FamilyMember>)ViewState["related"];

            // Create a stack to hold uncommon ancestors for both family members.
            Stack <FamilyMember> uncommonAncestors = new Stack <FamilyMember>();

            // Find first related family member by name.
            FamilyMember firstRelatedFamilyMember =
                OurFamilyTree.FindFamilyMemberByName(firstFamilyMember.SelectedValue, ref firstMemberAncestors);

            // Find second related family member by name.
            FamilyMember secondRelatedFamilyMember =
                OurFamilyTree.FindFamilyMemberByName(secondFamilyMember.SelectedValue, ref secondMemberAncestors);

            // Push both related family members on stack of related.
            related.Push(firstRelatedFamilyMember);
            related.Push(secondRelatedFamilyMember);

            foreach (var firstMemberAncestor in firstMemberAncestors)
            {
                // If the First Member Ancestor being investigated is not in the second Member Ancestors
                // then it is uncommon, so push it into the uncommonAncestorsStack.

                if (!secondMemberAncestors.Contains(firstMemberAncestor))
                {
                    uncommonAncestors.Push(firstMemberAncestor);
                }
            }

            // Do the same as above reversing first and second member ancestors

            foreach (var secondMemberAncestor in secondMemberAncestors)
            {
                // If the Second Member Ancestor being investigated is not in the first Member Ancestors
                // then it is uncommon, so push it into the uncommonAncestorsStack.

                if (!firstMemberAncestors.Contains(secondMemberAncestor))
                {
                    uncommonAncestors.Push(secondMemberAncestor);
                }
            }

            // Find first common ancestor
            foreach (var firstMemberAncestor in firstMemberAncestors)
            {
                if (secondMemberAncestors.Contains(firstMemberAncestor))
                {
                    firstCommonAncestor = firstMemberAncestor;
                    break;
                }
            }

            familyTreeLabel.Text = OurFamilyTree.DisplayFamilyTree(ref uncommonAncestors, ref related, firstCommonAncestor);

            commonAncestor.Text = firstCommonAncestor.Name;

            firstMemberAncestors.Clear();
            secondMemberAncestors.Clear();
            uncommonAncestors.Clear();
        }