private void ProcessHalfMajorSelectionOfSide(ToppingDisplayItem thisItemSelected)
        {
            if (thisItemSelected.ListItemIsSelected)
            {
                thisItemSelected.ListItemIsSelected = true;
                thisItemSelected.SelectionColor     = Color.CornflowerBlue;
                ChangeButtonSelection(thisItemSelected, thisItemSelected.ListTopping.ToppingWholeHalf);
            }

            thisPizza.Toppings.AddMajorToppings();
            thisPizza.Toppings.ChangeMajorToppingsHalf(thisItemSelected.ListTopping.ToppingWholeHalf);
            ChangeButtonSelection(thisItemSelected, thisItemSelected.ListTopping.ToppingWholeHalf);

            //find all major toppings in ToppingSelectionsList and call ChangeButtonSelection on them.
            foreach (var toppingSelection in ToppingSelectionsList)
            {
                if (toppingSelection.ListTopping.ToppingName == ToppingName.Mushrooms ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.GreenPeppers ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.Onion ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.Pepperoni ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.Sausage ||
                    toppingSelection.ListTopping.ToppingName == ToppingName.BlackOlives)
                {
                    toppingSelection.ListItemIsSelected = true;
                    toppingSelection.SelectionColor     = Color.CornflowerBlue;
                    ChangeButtonSelection(toppingSelection, thisItemSelected.ListTopping.ToppingWholeHalf);
                }
            }
        }
        private void ProcessMajorToppingSelection(ToppingDisplayItem majorSelection)
        {
            if (majorSelection.ListItemIsSelected)
            {
                majorSelection.SelectionColor = Xamarin.Forms.Color.CornflowerBlue;
                if (majorSelection.ButtonASelected || majorSelection.ButtonBSelected)
                {
                    ProcessHalfMajorSelectionOfSide(majorSelection);
                }
                else
                {
                    majorSelection.ButtonWSelected = true;
                    ThisPizza.MajorMamaInfo        = MajorOrMama.Major;
                    ThisPizza.PopulateDisplayName();  //Updates to show MAJOR
                    SelectMajorToppings();
                    ThisPizza.Toppings.AddMajorToppings();
                }
            }
            else
            {
                majorSelection.SelectionColor  = Xamarin.Forms.Color.Black;
                majorSelection.ButtonWSelected = false;
                majorSelection.ButtonASelected = false;
                majorSelection.ButtonBSelected = false;
                ThisPizza.MajorMamaInfo        = MajorOrMama.Neither;
                ThisPizza.PopulateDisplayName();  //Updates to remove MAJOR
                ThisPizza.Toppings.RemoveToppings(new List <ToppingName>
                {
                    ToppingName.Mushrooms,
                    ToppingName.BlackOlives,
                    ToppingName.GreenPeppers,
                    ToppingName.Onion,
                    ToppingName.Pepperoni,
                    ToppingName.Sausage
                });

                foreach (var toppingSelection in ToppingSelectionsList)
                {
                    if (toppingSelection.ListTopping.ToppingName == ToppingName.Mushrooms ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.GreenPeppers ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Onion ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Pepperoni ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Sausage ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.BlackOlives)
                    {
                        toppingSelection.ButtonWSelected    = false;
                        toppingSelection.ButtonASelected    = false;
                        toppingSelection.ButtonBSelected    = false;
                        toppingSelection.ListItemIsSelected = false;
                        toppingSelection.SelectionColor     = Xamarin.Forms.Color.Black;
                    }
                }
            }
        }
        //For selection or deselection of the Half Major topping.
        private void ProcessHalfMajorToppingSelection(ToppingDisplayItem halfMajorSelection)
        {
            if (halfMajorSelection.ListItemIsSelected)
            {
                SelectMajorToppings(halfMajorSelection.ListTopping.ToppingWholeHalf);
                ThisPizza.Toppings.AddMajorToppingsToHalf(ToppingWholeHalf.HalfA);

                halfMajorSelection.ListItemIsSelected = true;
                halfMajorSelection.ButtonASelected    = true;
            }
            else
            {
                ThisPizza.Toppings.RemoveToppings(new List <ToppingName>
                {
                    ToppingName.Mushrooms,
                    ToppingName.BlackOlives,
                    ToppingName.GreenPeppers,
                    ToppingName.Onion,
                    ToppingName.Pepperoni,
                    ToppingName.Sausage
                });

                foreach (var toppingSelection in ToppingSelectionsList)
                {
                    if (toppingSelection.ListTopping.ToppingName == ToppingName.Mushrooms ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.GreenPeppers ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Onion ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Pepperoni ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.Sausage ||
                        toppingSelection.ListTopping.ToppingName == ToppingName.BlackOlives)
                    {
                        toppingSelection.ButtonWSelected    = false;
                        toppingSelection.ButtonASelected    = false;
                        toppingSelection.ButtonBSelected    = false;
                        toppingSelection.ListItemIsSelected = false;
                    }
                }
                halfMajorSelection.ListItemIsSelected = false;
                halfMajorSelection.ButtonWSelected    = false;
                halfMajorSelection.ButtonASelected    = false;
                halfMajorSelection.ButtonBSelected    = false;
            }
        }
        /// <summary>
        /// Makes sure only W or A or B (one and only one) may be
        /// selected at a time.
        /// </summary>
        /// <param name="thisItemSelected"></param>
        /// <param name="wholeOrHalf"></param>
        public void ChangeButtonSelection(ToppingDisplayItem thisItemSelected, ToppingWholeHalf wholeOrHalf)
        {
            switch (wholeOrHalf)
            {
            case ToppingWholeHalf.Whole:
                thisItemSelected.ButtonWSelected = true;
                thisItemSelected.ButtonASelected = false;
                thisItemSelected.ButtonBSelected = false;
                break;

            case ToppingWholeHalf.HalfA:
                thisItemSelected.ButtonASelected = true;
                thisItemSelected.ButtonBSelected = false;
                thisItemSelected.ButtonWSelected = false;
                break;

            case ToppingWholeHalf.HalfB:
                thisItemSelected.ButtonBSelected = true;
                thisItemSelected.ButtonASelected = false;
                thisItemSelected.ButtonWSelected = false;
                break;
            }
        }
        public void SelectTopping(int selectionIndex)
        {
            //Can't change ListView directly - must change underlying data.  Get this data by the index.
            ToppingDisplayItem thisSelection = ToppingSelectionsList[selectionIndex];

            if (!ToppingFooterPageModel.ExtraToppingSelected ||
                (ToppingFooterPageModel.ExtraToppingSelected && !thisSelection.ListItemIsSelected))
            {
                thisSelection.ListItemIsSelected = !thisSelection.ListItemIsSelected;  //toggle topping selection.
            }

            thisSelection.ListTopping.ToppingModifier = ToppingFooterPageModel.GetToppingModifierType();

            if (thisSelection.ListTopping.ToppingName == ToppingName.Major)
            {
                ProcessMajorToppingSelection(thisSelection);
            }
            //else if (thisSelection.ListTopping.ToppingName == ToppingName.HalfMajor)
            //{
            //    ProcessHalfMajorToppingSelection(thisSelection);
            //}
            else
            {
                if (ToppingFooterPageModel.ExtraToppingSelected)
                {
                    if (thisSelection.ListTopping.Count == 0)
                    {
                        thisSelection.ListTopping.Count = 1;
                    }
                    thisSelection.ListTopping.Count++;
                }
                else if (ToppingFooterPageModel.NoToppingSelected)
                {
                    thisPizza.Toppings.RemoveTopping(thisSelection.ListTopping.ToppingName);
                }

                if (thisSelection.ListItemIsSelected)
                {
                    if (thisSelection.ListTopping.ToppingName == ToppingName.SatchPanSlice)
                    {
                        ThisPizza.ChangePizzaToDeep();
                        OnChangeHeadingPizzaName();
                    }
                    else if (ToppingFooterPageModel.ExtraToppingSelected &&
                             thisSelection.ListTopping.Count > 1 &&
                             ThisPizza.Toppings.IsToppingAlreadyAdded(thisSelection.ListTopping.ToppingName))
                    {
                        ThisPizza.Toppings.UpdateToppingsTotal();
                        ThisPizza.UpdateItemTotal();
                        thisSelection.SelectionColor  = Xamarin.Forms.Color.CornflowerBlue;
                        thisSelection.ButtonWSelected = true;
                    }
                    else
                    {
                        thisSelection.ListTopping.SequenceSelected = ThisPizza.Toppings.CurrentToppings.Count + 1;
                        ThisPizza.Toppings.AddTopping(thisSelection.ListTopping);
                        ThisPizza.UpdateItemTotal();
                        thisSelection.SelectionColor  = Xamarin.Forms.Color.CornflowerBlue;
                        thisSelection.ButtonWSelected = true;
                    }
                }
                else
                {
                    if (thisSelection.ListTopping.ToppingName == ToppingName.SatchPanSlice &&
                        ThisPizza.PizzaType == PizzaType.PanSlice)
                    {
                        ThisPizza.ChangePizzaSliceFromPanToThin();
                        OnChangeHeadingPizzaName();
                    }
                    thisSelection.ListTopping.SequenceSelected = 0;
                    thisSelection.ListTopping.ToppingModifier  = ToppingModifierType.None;
                    thisSelection.ListTopping.Count            = 0;
                    ThisPizza.Toppings.RemoveTopping(thisSelection.ListTopping.ToppingName);
                    thisSelection.SelectionColor  = Xamarin.Forms.Color.Black;
                    thisSelection.ButtonASelected = false;
                    thisSelection.ButtonBSelected = false;
                    thisSelection.ButtonWSelected = false;
                }

                //Modifier buttons only work if selected before the topping is selected.  At this point,
                //all should be reset back to black/unselected.
                ToppingFooterPageModel.ExtraToppingSelected  = false;
                ToppingFooterPageModel.LiteToppingSelected   = false;
                ToppingFooterPageModel.NoToppingSelected     = false;
                ToppingFooterPageModel.OnSideToppingSelected = false;
            }

            //Can't remember why I might need this....
            //if (thisSelection.ListTopping.ToppingName == ToppingName.Cheese)
            //{
            //    if (App.AllToppings.ContainsKey(ToppingName.NoCheese))
            //    {
            //        thisPizza.Toppings.AddTopping(App.AllToppings[ToppingName.NoCheese]);
            //    }
            //}
            //else if (thisSelection.ListTopping.ToppingName == ToppingName.RicottaCalzone ||
            //    thisSelection.ListTopping.ToppingName == ToppingName.Ricotta)
            //{
            //    if (App.AllToppings.ContainsKey(ToppingName.NoRicotta))
            //    {
            //        thisPizza.Toppings.AddTopping(App.AllToppings[ToppingName.NoRicotta]);
            //    }
            //}
        }
        public PizzaToppingsPageModel(Pizza currentPizza)
        {
            try
            {
                if (currentPizza.PizzaType == PizzaType.LunchSpecialSlice)
                {
                    AddToOrderText = "Add Lunch Special To Order";
                }
                else
                {
                    AddToOrderText = "Add Pizza To Order";
                }
                ThisPizza = currentPizza;
                AddPizzaToOrderCommand = new Command(OnAddPizzaToOrder);
                BaseSelections         = new string[]
                {
                    "Pesto Base", "White Base", "Regular Base"
                };
                CookSelections = new string[]
                {
                    "Crispy Cook", "Kid Cook", "Light Cook", "Regular Cook"
                };

                var toppingsList = MenuFood.PizzaToppings.Values.ToList();
                ToppingSelectionsList = new ObservableCollection <ToppingDisplayItem>();
                int toppingSelectionIndex = 0;
                for (int i = 0; i < toppingsList.Count; i++)
                {
                    if (!toppingsList[i].ForPizza)
                    {
                        continue;
                    }
                    if (ThisPizza.PizzaType != PizzaType.Indy &&
                        toppingsList[i].ForIndyOnly)
                    {
                        continue;
                    }
                    if (ThisPizza.PizzaType != PizzaType.ThinSlice &&
                        ThisPizza.PizzaType != PizzaType.LunchSpecialPanSlice &&
                        toppingsList[i].ForSliceOnly)
                    {
                        continue;
                    }
                    var toppingSelection = new ToppingDisplayItem(this);

                    bool toppingisAlreadyOnThisPizza = false;
                    if (ThisPizza != null && ThisPizza.Toppings != null)
                    {
                        foreach (var topping in ThisPizza.Toppings.CurrentToppings)
                        {
                            if (topping.ToppingName == toppingsList[i].ToppingName)
                            {
                                toppingisAlreadyOnThisPizza  = true;
                                toppingSelection.ListTopping = topping;
                                if (topping.ToppingWholeHalf == ToppingWholeHalf.HalfA)
                                {
                                    toppingSelection.ButtonASelected = true;
                                }
                                else if (topping.ToppingWholeHalf == ToppingWholeHalf.HalfB)
                                {
                                    toppingSelection.ButtonBSelected = true;
                                }
                                toppingSelection.ListItemIsSelected = true;
                                toppingSelection.SelectionColor     = Xamarin.Forms.Color.CornflowerBlue;
                                break;
                            }
                        }
                    }
                    if (!toppingisAlreadyOnThisPizza)
                    {
                        Topping newTopping = toppingsList[i];

                        //Initialize variable items in Topping object:
                        newTopping.ToppingDisplayName = DisplayNames.GetToppingDisplayName(newTopping.ToppingName);
                        newTopping.ToppingModifier    = ToppingModifierType.None;
                        newTopping.ToppingWholeHalf   = ToppingWholeHalf.Whole;
                        newTopping.SequenceSelected   = 0;
                        newTopping.Count                    = 1;
                        toppingSelection.ListTopping        = newTopping;
                        toppingSelection.ListItemIsSelected = false;
                        toppingSelection.SelectionColor     = Xamarin.Forms.Color.Black;
                    }

                    if (toppingsList[i].ToppingName == ToppingName.Major &&
                        ThisPizza.MajorMamaInfo == MajorOrMama.Major)
                    {
                        toppingSelection.ListItemIsSelected = true;
                        toppingSelection.SelectionColor     = Xamarin.Forms.Color.CornflowerBlue;
                    }

                    toppingSelection.SelectionIndex = toppingSelectionIndex;
                    toppingSelectionIndex++;
                    toppingSelection.ButtonWVisible = true;

                    //If the pizza type is a slice, don't display whole/halfa/halfb options.
                    toppingSelection.AreWholeHalfColumnsVisible = true;

                    if (ThisPizza.PizzaType == PizzaType.ThinSlice ||
                        ThisPizza.PizzaType == PizzaType.LunchSpecialSlice ||
                        ThisPizza.PizzaType == PizzaType.LunchSpecialPanSlice ||
                        ThisPizza.PizzaType == PizzaType.PanSlice)
                    {
                        toppingSelection.AreWholeHalfColumnsVisible = false;
                    }

                    ToppingSelectionsList.Add(toppingSelection);
                }

                if (ThisPizza != null &&
                    ThisPizza.Toppings != null &&
                    ThisPizza.MajorMamaInfo == MajorOrMama.Major &&
                    ThisPizza.Toppings.CurrentToppings.Count == 0)
                {
                    SelectMajorToppings();
                    ThisPizza.Toppings.AddMajorToppings();
                }
            }
            catch (Exception ex)
            {
                var whatisthis = ex.InnerException;
                throw;
            }
        }