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();
                }
            }
        }
Beispiel #2
0
        private void UpdateThirdLevel()
        {
            var previousThirdLevel = SelectedThirdLevel;

            if (SelectedSecondLevel == ItemClass.Any)
            {
                ThirdLevelList = new[] { Tags.Default };
            }
            else
            {
                var matchingBases = EligibleBases
                                    .Where(b => b.ItemClass == SelectedSecondLevel)
                                    .ToList();
                var list = _thirdLevelOptions
                           .Where(t => matchingBases.Any(b => b.Tags.HasFlag(t)))
                           .ToList();
                switch (list.Count)
                {
                case 0:
                    ThirdLevelList = new[] { Tags.Default };
                    break;

                case 1:
                    ThirdLevelList = list;
                    break;

                default:
                    ThirdLevelList = list.Prepend(Tags.Default).ToList();
                    break;
                }
            }
            SelectedThirdLevel = ThirdLevelList.Contains(previousThirdLevel)
                ? previousThirdLevel
                : ThirdLevelList[0];

            if (previousThirdLevel == SelectedThirdLevel)
            {
                UpdateBaseList();
            }
        }
Beispiel #3
0
        private void UpdateBaseList()
        {
            using (Monitor.Enter())
            {
                var previousSelectedBase = SelectedBase;

                if (SelectedType == ItemType.Any)
                {
                    BaseList = SelectedGroup == ItemGroup.Any
                        ? EligibleBases.ToList() : BasesPerGroup[SelectedGroup].ToList();
                }
                else
                {
                    BaseList = BasesPerType[SelectedType].ToList();
                }
                SelectedBase = BaseList[0];

                if (SelectedBase == previousSelectedBase)
                {
                    UpdateBase();
                }
            }
        }