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()); } }