public void DisplayAddMemberAttribute(AddEditMemberAttribute attribute)
 {
     this.displayAddEditMemberOrBoat(true, AddEditMemberOrBoatMode.Add_Member, attribute);
 }
        private void displayAddEditMemberOrBoat(bool clearAndRedrawView, AddEditMemberOrBoatMode addEditMode, AddEditMemberAttribute memberAttribute = AddEditMemberAttribute.None, Model.Member ifEditing_selectedMember = null, AddEditBoatAttribute boatAttribute = AddEditBoatAttribute.None, Model.Boat ifEditingBoat_selectedBoat = null)
        {
            //The collected function for adding/editing member or boat

            bool memberNotBoat = (addEditMode == AddEditMemberOrBoatMode.Add_Member || addEditMode == AddEditMemberOrBoatMode.Edit_Member);
            bool addNotEdit = (addEditMode == AddEditMemberOrBoatMode.Add_Boat || addEditMode == AddEditMemberOrBoatMode.Add_Member);

            if (clearAndRedrawView)
            {
                System.Console.Clear();

                System.Console.WriteLine("");
                System.Console.WriteLine((addNotEdit ? "Add a new " : "Edit existing ") + (memberNotBoat ? "member" : "boat"));
                System.Console.WriteLine("************************");
                System.Console.WriteLine("");
                if (!addNotEdit) //if editing, or adding/editing boat
                {
                    System.Console.WriteLine("-> " + m_memberView.GetMemberPresentation(ifEditing_selectedMember, DisplayMembersMode.Compact));

                    if (addEditMode == AddEditMemberOrBoatMode.Edit_Boat)
                    {
                        System.Console.WriteLine("  -> " + m_memberView.GetBoatPresentation(ifEditingBoat_selectedBoat));
                    }

                    System.Console.WriteLine("");
                }
            }
            else
            {
                System.Console.WriteLine("");
            }

            View.ActionEnum backAction;

            View.ActionEnum anyInputEnteredAction = View.ActionEnum.NotSpecified;
            List<InputAction> specificInputs = new List<InputAction>();

            string attributeName = (memberNotBoat ? memberAttribute.ToString() : boatAttribute.ToString()).ToLower().Replace("_", " ");
            System.Console.Write("Please enter a " + (!addNotEdit ? "new " : "") + attributeName + (addNotEdit ? " for the new " + (memberNotBoat ? "member" : "boat") : ""));

            System.Console.Write(" (");

            //if adding/editing boat type, display the boat types with a number and add that number as possible input
            if (!memberNotBoat && boatAttribute == AddEditBoatAttribute.Type)
            {
                View.ActionEnum action = (addNotEdit ? View.ActionEnum.MemberBoatAddingType : View.ActionEnum.MemberBoatEditedType);

                foreach (Model.Boat.BoatType type in Enum.GetValues(typeof(Model.Boat.BoatType)))
                {
                    if (type != Model.Boat.BoatType.Undefined)
                    {
                        this.displayInputCharacters("", ((int)type).ToString(), " " + type.ToString().Replace("__", "/") + ", ", false);

                        //add input action to list
                        specificInputs.Add(new InputAction(((int)type).ToString(), action));
                    }
                }
            }
            if (!addNotEdit)
            {
                System.Console.Write("empty to leave unchanged, ");
            }
            this.displayInputCharacters("or ", "b", " to go back): ", false);

            //set the back action and the "any input" action depending on adding/editing member/boat
            if (memberNotBoat) //if member
            {
                if (addNotEdit) //if add mode
                {
                    backAction = View.ActionEnum.GoToMainMenu;
                    if (memberAttribute == AddEditMemberAttribute.Name)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberAddingName;
                    }
                    else if (memberAttribute == AddEditMemberAttribute.Personal_Number)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberAddingPersonalNumber;
                    }
                }
                else //if edit mode
                {
                    backAction = View.ActionEnum.MemberSelected_ShowMenuAgain;
                    if (memberAttribute == AddEditMemberAttribute.Name)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberEditedName;
                    }
                    else if (memberAttribute == AddEditMemberAttribute.Personal_Number)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberEditedPersonalNumber;
                    }
                }
            }
            else //if boat
            {
                backAction = View.ActionEnum.MemberSelected_ShowMenuAgain;

                if (addNotEdit) //if add mode
                {
                    if (boatAttribute == AddEditBoatAttribute.Type)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberBoatAddingType;
                    }
                    else if (boatAttribute == AddEditBoatAttribute.Length)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberBoatAddingLength;
                    }
                }
                else //if edit mode
                {
                    if (boatAttribute == AddEditBoatAttribute.Type)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberBoatEditedType;
                    }
                    else if (boatAttribute == AddEditBoatAttribute.Length)
                    {
                        anyInputEnteredAction = View.ActionEnum.MemberBoatEditedLength;
                    }
                }
            }
            if (anyInputEnteredAction == View.ActionEnum.NotSpecified)
            {
                //should never happen (as long as no new attributes are added without taking care of them here)
                throw new Exception("No action specified for attribute " + attributeName);
            }

            //add the any input action
            specificInputs.Add(new InputAction("", anyInputEnteredAction));

            //set the current possible input
            this.setPossibleInputActions(specificInputs, backAction);
        }
 //these four methods all calls displayAddEditMemberOrBoat with different parameters
 public void DisplayEditMemberAttribute(AddEditMemberAttribute attribute, Model.Member selectedMember)
 {
     this.displayAddEditMemberOrBoat(true, AddEditMemberOrBoatMode.Edit_Member, attribute, selectedMember);
 }