Beispiel #1
0
        private void UpdateSecondLevel()
        {
            using (Monitor.Enter())
            {
                var previousSecondLevel = SelectedSecondLevel;

                if (SelectedFirstLevel == BaseGroup.Any)
                {
                    SecondLevelList = EligibleBases.Select(b => b.ItemClass)
                                      .Prepend(ItemClass.Any)
                                      .Distinct()
                                      .OrderBy(c => c).ToList();
                }
                else
                {
                    var list = EligibleBases
                               .Where(b => BaseGroupEx.FromTags(b.Tags) == SelectedFirstLevel)
                               .Select(b => b.ItemClass)
                               .Distinct()
                               .OrderBy(c => c).ToList();
                    switch (list.Count)
                    {
                    case 1:
                        // Only contains the only class of the selected group
                        // -> "any" makes no sense
                        SecondLevelList = list;
                        break;

                    default:
                        SecondLevelList = list.Prepend(ItemClass.Any).ToList();
                        break;
                    }
                }
                SelectedSecondLevel = SecondLevelList.Contains(previousSecondLevel)
                    ? previousSecondLevel
                    : SecondLevelList[0];

                if (previousSecondLevel == SelectedSecondLevel)
                {
                    UpdateThirdLevel();
                }
            }
        }