Example #1
0
        public static object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            for (int i = 0; i < drawers.Count; i++)
            {
                if (drawers[i].TypeEquals(type))
                {
                    int           index = i;
                    IObjectDrawer d     = drawers[index];
                    if (usingDrawerIndexs.Contains(index))
                    {
                        d = GetOtherDrawer(d.GetType());
                    }
                    else
                    {
                        usingDrawerIndexs.Add(index);
                    }

                    value = d.DrawAndGetNewValue(type, value, draw, field);

                    if (!usingDrawerIndexs.Remove(index))
                    {
                        ReturnOtherDrawer(d);
                    }

                    return(value);
                }
            }

            ShowUnrecognized(draw.ShowName);
            return(value);
        }
Example #2
0
        private static object DrawAndGetNewValue(Type type, FieldInfo field, object value, bool needDelayed)
        {
            bool   changeable  = true;
            bool   staticField = field.IsStatic;
            string name        = field.Name;

            //属性会带这个字符
            if (name.Contains("k__BackingField"))
            {
                changeable = false;
                name       = "P:" + name.Replace("k__BackingField", "").Trim().TrimStart('<').TrimEnd('>').Trim();
            }

            if (staticField)
            {
                name = $"Static:{name}";
            }

            var draw = new DrawInfo()
            {
                Changeable    = changeable,
                NeedDelayed   = needDelayed,
                ShowName      = name,
                ShowNameWidth = -1,
                IsStatic      = staticField,
                FieldName     = field.Name
            };

            for (int i = 0; i < drawers.Count; i++)
            {
                if (drawers[i].TypeEquals(type))
                {
                    int           index = i;
                    IObjectDrawer d     = drawers[index];
                    if (usingDrawerIndexs.Contains(index))
                    {
                        d = GetOtherDrawer(d.GetType());
                    }
                    else
                    {
                        usingDrawerIndexs.Add(index);
                    }

                    value = d.DrawAndGetNewValue(type, value, draw, field);

                    if (!usingDrawerIndexs.Remove(index))
                    {
                        ReturnOtherDrawer(d);
                    }

                    return(value);
                }
            }

            ShowUnrecognized(name);
            return(value);
        }
Example #3
0
        private static void ReturnOtherDrawer(IObjectDrawer drawer)
        {
            Type type = drawer.GetType();

            if (otherDrawers.ContainsKey(type))
            {
                otherDrawers[type].Add(drawer);
            }
            else
            {
                otherDrawers.Add(type, new List <IObjectDrawer>()
                {
                    drawer
                });
            }
        }
        private static void ReturnDrawer(IObjectDrawer drawer)
        {
            var t = drawer.GetType();

            if (drawerPool.ContainsKey(t))
            {
                if (drawerPool[t] == null)
                {
                    drawerPool[t] = new List <IObjectDrawer>();
                }

                drawerPool[t].Add(drawer);
            }
            else
            {
                drawerPool.Add(t, new List <IObjectDrawer>()
                {
                    drawer
                });
            }
        }