예제 #1
0
        private bool EditorMemberPredicate(MemberInfo info, bool showNonPublic)
        {
            PropertyInfo             property    = info as PropertyInfo;
            FieldInfo                field       = info as FieldInfo;
            EditorHintFlagsAttribute flagsAttrib = info.GetCustomAttributes <EditorHintFlagsAttribute>().FirstOrDefault();

            // Accept all members in "Debug Mode", if not declared inside Duality itself
            if (showNonPublic && info.DeclaringType.Assembly != typeof(DualityApp).Assembly)
            {
                return(true);
            }

            // Accept explicitly visible members
            if (flagsAttrib != null && (flagsAttrib.Flags & MemberFlags.Visible) != MemberFlags.None)
            {
                return(true);
            }

            // Reject properties with non-public getters
            if (property != null)
            {
                MethodInfo getter = property.GetGetMethod(true);
                if (getter == null)
                {
                    return(false);
                }
                if (!getter.IsPublic)
                {
                    return(false);
                }
            }

            // Reject non-public fields
            if (field != null && !field.IsPublic)
            {
                return(false);
            }

            // Reject even public fields of a Component - we don't want to encourage using them, since Duality basically works with Properties.
            if (field != null && typeof(Component).IsAssignableFrom(info.DeclaringType))
            {
                return(false);
            }

            // Reject explicitly invisible members
            if (flagsAttrib != null && (flagsAttrib.Flags & MemberFlags.Invisible) != MemberFlags.None)
            {
                return(false);
            }

            return(true);
        }
예제 #2
0
        /// <summary>
        /// Adds items to the checklistbox based on the members of the enum
        /// </summary>
        private void FillEnumMembers()
        {
            foreach (string name in Enum.GetNames(enumType))
            {
                var field = enumType.GetField(name, ReflectionHelper.BindAll);
                EditorHintFlagsAttribute flagsAttrib = field.GetCustomAttributes(typeof(EditorHintFlagsAttribute), true).FirstOrDefault() as EditorHintFlagsAttribute;
                if (flagsAttrib != null && (flagsAttrib.Flags & MemberFlags.Invisible) != MemberFlags.None)
                {
                    continue;
                }

                this.Items.Add(name);
            }
        }
예제 #3
0
        private void FillEnumMembers()
        {
            foreach (string name in Enum.GetNames(enumType))
            {
                var field = enumType.GetField(name, ReflectionHelper.BindAll);
                EditorHintFlagsAttribute flagsAttrib = field.GetCustomAttributes(typeof(EditorHintFlagsAttribute), true).FirstOrDefault() as EditorHintFlagsAttribute;
                if (flagsAttrib != null && (flagsAttrib.Flags & MemberFlags.Invisible) != MemberFlags.None)
                {
                    continue;
                }

                object val      = Enum.Parse(enumType, name);
                ulong  ulongVal = (ulong)Convert.ChangeType(val, typeof(ulong));

                Add(ulongVal, name);
            }
        }
예제 #4
0
        private bool EditorMemberPredicate(MemberInfo info)
        {
            if (this.ShowNonPublic)
            {
                // Show member, if not declared inside Duality itself
                if (info.DeclaringType.Assembly != typeof(DualityApp).Assembly)
                {
                    return(true);
                }

                // Reject non-public fields
                FieldInfo field = info as FieldInfo;
                if (field != null && !field.IsPublic)
                {
                    return(false);
                }

                // Reject non-public properties
                PropertyInfo property = info as PropertyInfo;
                if (property != null && property.GetGetMethod(false) == null && property.GetSetMethod(false) == null)
                {
                    return(false);
                }
            }
            else
            {
                // Don't show fields of a Component - we don't want to encourage using them, since Duality basically works with Properties.
                if (info is FieldInfo && typeof(Component).IsAssignableFrom(info.DeclaringType))
                {
                    return(false);
                }
            }

            // Reject invisible members
            EditorHintFlagsAttribute flagsAttrib = info.GetEditorHint <EditorHintFlagsAttribute>();

            if (flagsAttrib != null && (flagsAttrib.Flags & MemberFlags.Invisible) != MemberFlags.None)
            {
                return(false);
            }

            return(true);
        }
예제 #5
0
        private bool EditorMemberAffectsOthers(MemberInfo info)
        {
            EditorHintFlagsAttribute flagsAttrib = info.GetCustomAttributes <EditorHintFlagsAttribute>().FirstOrDefault();

            return(this.ShowNonPublic || (flagsAttrib != null && (flagsAttrib.Flags & MemberFlags.AffectsOthers) != MemberFlags.None));
        }