Example #1
0
        private static ProgramFeatureImageViewModel FetchProgramFeatureViewModelForFlag <TFlag>(this TFlag flag, IProgramFeatureSet <TFlag> featureSet, bool allowNullImage) where TFlag : struct
        {
            ProgramFeatureImageViewModel featureViewModel = null;
            OSImage image = featureSet.GetImageForFeature(flag);

            if (allowNullImage || (image != null))
            {
                featureViewModel = new ProgramFeatureImageViewModel(featureSet.GetFeatureName(flag), image, featureSet.GetFeatureDescription(flag), featureSet.Category, (uint)((object)flag));
            }
            return(featureViewModel);
        }
Example #2
0
        /// <summary>
        /// Produces an enumerable containing icons and other data that represent all the given flags.
        /// </summary>
        /// <typeparam name="TFlag">The data type of the flag whose view models are desired.</typeparam>
        /// <param name="flags">The flags for which to retrieve view models.</param>
        /// <param name="featureSet">The feature set that provides detailed information about each flag.</param>
        /// <returns>An enumerable containing a view model for each flag specified in the flags argument.</returns>
        public static IEnumerable <ProgramFeatureImageViewModel> ToFeatureViewModels <TFlag>(this IEnumerable <TFlag> flags, IProgramFeatureSet <TFlag> featureSet) where TFlag : struct
        {
            var viewModels = new List <ProgramFeatureImageViewModel>();

            foreach (var flag in flags)
            {
                viewModels.Add(FetchProgramFeatureViewModelForFlag(flag, featureSet, true));
            }
            return(viewModels);
        }
Example #3
0
        private static List <ProgramFeatureImageViewModel> GetImagesForFlags <TFlag>(this TFlag flags, IProgramFeatureSet <TFlag> featureSet, CompatibilityCheckMode compatibilityCheck, ref bool hasIncompatibility) where TFlag : struct
        {
            var featureViewModels = new List <ProgramFeatureImageViewModel>();
            var allFlags          = Enum.GetValues(typeof(TFlag)).Cast <object>().Distinct().ToArray();
            var currentFlags      = (Enum)((object)flags);
            var setFlags          = allFlags.Where(f => currentFlags.HasFlag((Enum)f)).Select(f => (TFlag)f);

            var featureCompatibility = ((FeatureCompatibility)(object)flags) & FeatureCompatibilityHelpers.ValidFeaturesMask;
            var incompatible         = false;

            switch (compatibilityCheck)
            {
            case CompatibilityCheckMode.None:
                foreach (var flag in setFlags)
                {
                    var image = flag.FetchProgramFeatureViewModelForFlag(featureSet, false);
                    if (image != null)
                    {
                        featureViewModels.Add(image);
                    }
                }
                break;

            case CompatibilityCheckMode.Default:
                incompatible = featureCompatibility == FeatureCompatibility.Incompatible;
                if (incompatible && featureSet.ExtendedFeaturesRequireEnhancedFlag)
                {
                    var image = default(TFlag).FetchProgramFeatureViewModelForFlag(featureSet, false);
                    if (image != null)
                    {
                        featureViewModels.Add(image);
                    }
                }
                else
                {
                    var image = ((TFlag)allFlags.GetValue((int)featureCompatibility)).FetchProgramFeatureViewModelForFlag(featureSet, false);
                    if (image != null)
                    {
                        featureViewModels.Add(image);
                    }
                    if (!featureSet.ExtendedFeaturesRequireEnhancedFlag || featureCompatibility.HasFlag(FeatureCompatibility.Enhances))
                    {
                        foreach (var flag in allFlags.Skip((int)FeatureCompatibility.NumCompatibilityModes))
                        {
                            if (((Enum)(object)flags).HasFlag((Enum)flag))
                            {
                                image = ((TFlag)flag).FetchProgramFeatureViewModelForFlag(featureSet, false);
                                if (image != null)
                                {
                                    featureViewModels.Add(image);
                                }
                            }
                        }
                    }
                }
                break;

            case CompatibilityCheckMode.OnlyCheckIncompatible:
                incompatible = featureCompatibility == FeatureCompatibility.Incompatible;
                if (incompatible)
                {
                    var image = default(TFlag).FetchProgramFeatureViewModelForFlag(featureSet, false);
                    if (image != null)
                    {
                        featureViewModels.Add(image);
                    }
                }
                break;
            }

            hasIncompatibility |= incompatible;
            return(featureViewModels);
        }