Exemple #1
0
        private static void BuildDictionaries(IDrawerProvider drawerProvider)
        {
            drawersByClassType = new Dictionary <Type, Type>();
            drawersByMember    = new Dictionary <MemberInfo, Type>();

            BuildDictionaries(drawerProvider, TypeExtensions.AllVisibleTypes);
            BuildDictionaries(drawerProvider, TypeExtensions.AllInvisibleTypes);
        }
Exemple #2
0
        public static bool TryGetCustomDrawerForClassMember(IDrawerProvider drawerProvider, MemberInfo member, out Type drawerType)
        {
            if (drawersByMember == null)
            {
                BuildDictionaries(drawerProvider);
            }

            return(drawersByMember.TryGetValue(member, out drawerType));
        }
Exemple #3
0
        public static Dictionary <Type, Type> GetCustomDrawersByClassType(IDrawerProvider drawerProvider)
        {
            if (drawersByClassType == null)
            {
                BuildDictionaries(drawerProvider);
            }

            return(drawersByClassType);
        }
        public static bool TryGetCustomDrawerForClass(IDrawerProvider drawerProvider, Type classType, out Type drawerType)
        {
            IUseDrawer useDrawerAttribute;

            if (AttributeUtility.TryGetImplementingAttribute(classType, out useDrawerAttribute))
            {
                drawerType = useDrawerAttribute.GetDrawerType(classType, drawerProvider.GetClassMemberDrawerType(classType), drawerProvider);
                return(true);
            }
            drawerType = null;
            return(false);
        }
        public static bool TryGetCustomDrawerForClassMember(IDrawerProvider drawerProvider, MemberInfo member, out Type drawerType)
        {
            IUseDrawer useDrawerAttribute;

            if (AttributeUtility.TryGetImplementingAttribute(member, out useDrawerAttribute))
            {
                var declaringType = member.DeclaringType;
                drawerType = useDrawerAttribute.GetDrawerType(declaringType, drawerProvider.GetClassMemberDrawerType(declaringType), drawerProvider);
                return(true);
            }
            drawerType = null;
            return(false);
        }
Exemple #6
0
        public static void TryGetDecoratorDrawer([NotNull] IDrawerProvider drawerProvider, [NotNull] LinkedMemberInfo memberInfo, ref List <IDrawer> addResultToEndOfArray, IParentDrawer parent)
        {
            var propertyAttributes = memberInfo.GetAttributes <PropertyAttribute>();

            for (int n = 0, count = propertyAttributes.Length; n < count; n++)
            {
                var propertyAttribute = propertyAttributes[n];
                IDecoratorDrawerDrawer add;
                if (drawerProvider.TryGetForDecoratorDrawer(propertyAttribute, propertyAttribute.GetType(), parent, memberInfo, out add))
                {
                    addResultToEndOfArray.Add(add);
                }
            }
        }
Exemple #7
0
 public TransformDrawerProvider([NotNull] IDrawerProvider baseProvider) : base(baseProvider)
 {
 }
 /// <summary>
 /// Create new instance of DrawerProviderModifer that works by wrapping the provided
 /// existing drawer provider and reusing its drawer fetching data and logic as the
 /// basis of drawer fetching, but possibly doing some alterations on top.
 /// </summary>
 /// <param name="baseProvider"></param>
 public DrawerProviderModifer([NotNull] IDrawerProvider baseProvider)
 {
     wrappedProvider = baseProvider;
 }
Exemple #9
0
        private static void BuildDictionaries(IDrawerProvider drawerProvider, Type[] types)
        {
                        #if DEV_MODE && DEBUG_BUILD
            Debug.Log("UseDrawerAttributeUtility.BuildDictionaries - building from " + types.Length + " types...");
                        #endif

            for (int t = types.Length - 1; t >= 0; t--)
            {
                var type       = types[t];
                var attributes = type.GetCustomAttributes(false);
                Compatibility.PluginAttributeConverterProvider.ConvertAll(ref attributes);

                for (int a = attributes.Length - 1; a >= 0; a--)
                {
                    var attribute          = attributes[a];
                    var useDrawerAttribute = attribute as IUseDrawer;
                    if (useDrawerAttribute == null)
                    {
                        continue;
                    }

                    var drawerType = useDrawerAttribute.GetDrawerType(type, drawerProvider.GetClassDrawerType(type));

                                        #if DEV_MODE && DEBUG_BUILD
                    Debug.LogError("IUseDrawer: use drawer " + drawerType.Name + " for class " + type.Name);
                                        #endif

                    try
                    {
                        drawersByClassType.Add(type, drawerType);
                    }
                    catch (Exception e)
                    {
                        Debug.LogError(e);
                    }
                }

                var members = type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly);
                for (int m = members.Length - 1; m >= 0; m--)
                {
                    var member = members[m];
                    attributes = member.GetCustomAttributes(false);
                    Compatibility.PluginAttributeConverterProvider.ConvertAll(ref attributes);

                    for (int a = attributes.Length - 1; a >= 0; a--)
                    {
                        var useDrawerAttribute = attributes[a] as IUseDrawer;
                        if (useDrawerAttribute == null)
                        {
                            continue;
                        }

                        var memberType = member.DeclaringType;

                        var drawerType = useDrawerAttribute.GetDrawerType(memberType, drawerProvider.GetClassMemberDrawerType(memberType));

                                                #if DEV_MODE && DEBUG_BUILD
                        Debug.Log("IUseDrawer: use drawer " + drawerType.Name + " for class member \"" + member.Name + "\" of class " + type.Name);
                                                #endif

                        try
                        {
                            drawersByMember.Add(member, drawerType);
                        }
                        catch (Exception e)
                        {
                            Debug.LogError(e);
                        }
                    }
                }
            }
        }