Example #1
0
        public IMixEvaluator ConvertToEvaluator()
        {
            if (MixEntryType.SelectedItem == null)
            {
                return(new NoneMixEvaluator());
            }

            SelectableOption <MixType> selectedType = DebugHelper.CastAndAssert <SelectableOption <MixType> >(MixEntryType.SelectedItem);

            switch (selectedType.Type & MixType.TYPE_MASK)
            {
            case MixType.NUMBER_TYPE:
                if (NumericPicker.SelectedItem == null)
                {
                    return(new NoneMixEvaluator());
                }

                SelectableOption <NumericEvalType> selectedNumericType = DebugHelper.CastAndAssert <SelectableOption <NumericEvalType> >(NumericPicker.SelectedItem);

                string newTarget = ConvertNumericValueToString(selectedType.Type);

                return(MixViewModel.NumericMixEntryModelToMixEvaluator(selectedType.Type | NumericMixEvaluator <int> .NumericEvalTypeToMixTypeVariant(selectedNumericType.Type), newTarget));

            case MixType.STRING_TYPE:
                if (StringPicker.SelectedItem == null)
                {
                    return(new NoneMixEvaluator());
                }

                SelectableOption <StringEvalType> selectedStringType = DebugHelper.CastAndAssert <SelectableOption <StringEvalType> >(StringPicker.SelectedItem);

                return(MixViewModel.StringMixEntryModelToMixEvaluator(selectedType.Type | StringMixEvaluator.StringEvalTypeToMixTypeVariant(selectedStringType.Type), StringValue.Text));

            case MixType.NESTED_TYPE:
                List <IMixEvaluator> mixes = new List <IMixEvaluator>();

                foreach (object listItem in NestedList.Children)
                {
                    MixEntry listItemAsMixEntry = DebugHelper.CastAndAssert <MixEntry>(listItem);

                    mixes.Add(listItemAsMixEntry.ConvertToEvaluator());
                }

                return(MixViewModel.NestedMixEntryModelToMixEvaluator(selectedType.Type, mixes));

            case MixType.RANGE_TYPE:
                return(MixViewModel.RangeMixEntryModelToMixEvaluator(selectedType.Type | RangeMixEvaluator.RangeEvalTypeToMixTypeVariant(RangeEvalType.Days), RangeValue.Text));

            case MixType.MEMBER_TYPE:
                if (selectedType.Type == MixType.PLAYLISTMEMBER_SUBTYPE)
                {
                    if (PlaylistMemberPicker.SelectedItem == null)
                    {
                        return(new NoneMixEvaluator());
                    }

                    PlaylistViewModel selectedPlaylist = DebugHelper.CastAndAssert <PlaylistViewModel>(PlaylistMemberPicker.SelectedItem);

                    return(MixViewModel.MemberMixEntryModelToMixEvaluator(MixType.PlaylistMemberContains, selectedPlaylist.PlaylistId.ToString()));
                }
                else if (selectedType.Type == MixType.MIXMEMBER_SUBTYPE)
                {
                    if (MixMemberPicker.SelectedItem == null)
                    {
                        return(new NoneMixEvaluator());
                    }

                    MixViewModel selectedMix = DebugHelper.CastAndAssert <MixViewModel>(MixMemberPicker.SelectedItem);

                    return(MixViewModel.MemberMixEntryModelToMixEvaluator(MixType.MixMemberContains, selectedMix.MixId.ToString()));
                }
                else
                {
                    DebugHelper.Alert(new CallerInfo(), "Unexpected member type: {0}", selectedType);
                    return(new NoneMixEvaluator());
                }

            default:
                DebugHelper.Assert(new CallerInfo(), selectedType.Type == MixType.None, "Unexpected mix type: {0}", selectedType.Type);
                return(new NoneMixEvaluator());
            }
        }