示例#1
0
        public ColorElement(PropertyFieldWrapper memberInfo, object item, IList <Color> array = null, int index = -1) : base(memberInfo, item, (IList)array)
        {
            if (array != null)
            {
                drawLabel = false;
                height    = 30;
                c         = new ColorObject(array, index);
            }
            else
            {
                height = 30;
                c      = new ColorObject(memberInfo, item);
            }

            int order = 0;

            foreach (PropertyFieldWrapper variable in ConfigManager.GetFieldsAndProperties(c))
            {
                var wrapped = UIModConfig.WrapIt(this, ref height, variable, c, order++);

                if (array != null)
                {
                    wrapped.Item1.Left.Pixels  -= 20;
                    wrapped.Item1.Width.Pixels += 20;
                }
            }
        }
示例#2
0
        public override void OnBind()
        {
            base.OnBind();
            colorList = (IList <Color>)list;
            if (colorList != null)
            {
                drawLabel = false;
                height    = 30;
                c         = new ColorObject(colorList, index);
            }
            else
            {
                height = 30;
                c      = new ColorObject(memberInfo, item);
            }

            int order = 0;

            foreach (PropertyFieldWrapper variable in ConfigManager.GetFieldsAndProperties(c))
            {
                var wrapped = UIModConfig.WrapIt(this, ref height, variable, c, order++);

                if (colorList != null)
                {
                    wrapped.Item1.Left.Pixels  -= 20;
                    wrapped.Item1.Width.Pixels += 20;
                }
            }
        }
示例#3
0
        public override void OnBind()
        {
            base.OnBind();
            colorList = (IList <Color>)list;
            if (colorList != null)
            {
                drawLabel = false;
                height    = 30;
                c         = new ColorObject(colorList, index);
            }
            else
            {
                height = 30;
                c      = new ColorObject(memberInfo, item);
            }

            // TODO: Draw the sliders in the same manner as vanilla.
            var  colorHSLSliderAttribute = ConfigManager.GetCustomAttribute <ColorHSLSliderAttribute>(memberInfo, item, list);
            bool useHue = colorHSLSliderAttribute != null;
            bool showSaturationAndLightness = colorHSLSliderAttribute?.showSaturationAndLightness ?? false;
            bool noAlpha = ConfigManager.GetCustomAttribute <ColorNoAlphaAttribute>(memberInfo, item, list) != null;

            List <string> skip = new List <string>();

            if (noAlpha)
            {
                skip.Add(nameof(ColorObject.A));
            }
            if (useHue)
            {
                skip.AddRange(new[] { nameof(ColorObject.R), nameof(ColorObject.G), nameof(ColorObject.B) });
            }
            else
            {
                skip.AddRange(new[] { nameof(ColorObject.Hue), nameof(ColorObject.Saturation), nameof(ColorObject.Lightness) });
            }
            if (useHue && !showSaturationAndLightness)
            {
                skip.AddRange(new[] { nameof(ColorObject.Saturation), nameof(ColorObject.Lightness) });
            }

            int order = 0;

            foreach (PropertyFieldWrapper variable in ConfigManager.GetFieldsAndProperties(c))
            {
                if (skip.Contains(variable.Name))
                {
                    continue;
                }

                var wrapped = UIModConfig.WrapIt(this, ref height, variable, c, order++);

                if (colorList != null)
                {
                    wrapped.Item1.Left.Pixels  -= 20;
                    wrapped.Item1.Width.Pixels += 20;
                }
            }
        }
示例#4
0
        protected override void SetupList()
        {
            dataList.Clear();
            Array array = memberInfo.GetValue(item) as Array;
            int   count = array.Length;
            int   top   = 0;

            for (int i = 0; i < count; i++)
            {
                int index = i;
                UIModConfig.WrapIt(dataList, ref top, memberInfo, item, 0, data, itemType, index);
            }
        }
示例#5
0
        public override void OnBind()
        {
            base.OnBind();
            vector2List = (IList <Vector2>)list;
            if (vector2List != null)
            {
                drawLabel = false;
                height    = 30;
                c         = new Vector2Object(vector2List, index);
            }
            else
            {
                height = 30;
                c      = new Vector2Object(memberInfo, item);
            }

            if (rangeAttribute != null && rangeAttribute.min is float && rangeAttribute.max is float)
            {
                max = (float)rangeAttribute.max;
                min = (float)rangeAttribute.min;
            }
            if (incrementAttribute != null && incrementAttribute.increment is float)
            {
                increment = (float)incrementAttribute.increment;
            }

            int order = 0;

            foreach (PropertyFieldWrapper variable in ConfigManager.GetFieldsAndProperties(c))
            {
                var wrapped = UIModConfig.WrapIt(this, ref height, variable, c, order++);

                // Can X and Y inherit range and increment automatically? Pass in "fake PropertyFieldWrapper" to achieve? Real one desired for label.
                if (wrapped.Item2 is FloatElement floatElement)
                {
                    floatElement.min       = min;
                    floatElement.max       = max;
                    floatElement.increment = increment;
                    floatElement.drawTicks = Attribute.IsDefined(memberInfo.MemberInfo, typeof(DrawTicksAttribute));
                }

                if (vector2List != null)
                {
                    wrapped.Item1.Left.Pixels  -= 20;
                    wrapped.Item1.Width.Pixels += 20;
                }
            }
        }
示例#6
0
        protected override void SetupList()
        {
            dataList.Clear();
            int top = 0;

            dataWrapperList = new List <ISetElementWrapper>();

            Type genericType = typeof(SetElementWrapper <>).MakeGenericType(setType);

            if (data != null)
            {
                var valuesEnumerator = ((IEnumerable)data).GetEnumerator();

                int i = 0;
                while (valuesEnumerator.MoveNext())
                {
                    ISetElementWrapper proxy = (ISetElementWrapper)Activator.CreateInstance(genericType,
                                                                                            new object[] { valuesEnumerator.Current, (object)data });
                    dataWrapperList.Add(proxy);

                    var wrappermemberInfo = ConfigManager.GetFieldsAndProperties(this).ToList()[0];
                    int index             = i;
                    var wrapped           = UIModConfig.WrapIt(dataList, ref top, wrappermemberInfo, this, 0, dataWrapperList, genericType, i);
                    wrapped.Item2.Left.Pixels  += 24;
                    wrapped.Item2.Width.Pixels -= 24;

                    // Add delete button.
                    UIModConfigHoverImage deleteButton = new UIModConfigHoverImage(deleteTexture, "Remove");
                    deleteButton.VAlign = 0.5f;

                    // fix delete.
                    object o = valuesEnumerator.Current;                     // needed for closure?
                    deleteButton.OnClick += (a, b) => {
                        var removeMethod = data.GetType().GetMethods().FirstOrDefault(m => m.Name == "Remove");
                        removeMethod.Invoke(data, new object[] { o });
                        SetupList();
                        Interface.modConfig.SetPendingChanges();
                    };
                    wrapped.Item1.Append(deleteButton);

                    i++;
                }
            }
        }
示例#7
0
        private void SetupList()
        {
            dataList.Clear();

            object data = _GetValue();

            if (data != null)
            {
                if (separatePage && !ignoreSeparatePage)
                {
                    separatePagePanel = UIModConfig.MakeSeparateListPanel(item, data, memberInfo, array, index, AbridgedTextDisplayFunction);
                }
                else
                {
                    int order = 0;
                    foreach (PropertyFieldWrapper variable in ConfigManager.GetFieldsAndProperties(data))
                    {
                        if (Attribute.IsDefined(variable.MemberInfo, typeof(JsonIgnoreAttribute)))
                        {
                            continue;
                        }

                        int             top    = 0;
                        HeaderAttribute header = ConfigManager.GetCustomAttribute <HeaderAttribute>(variable, null, null);
                        if (header != null)
                        {
                            var wrapper = new PropertyFieldWrapper(typeof(HeaderAttribute).GetProperty(nameof(HeaderAttribute.Header)));
                            UIModConfig.WrapIt(dataList, ref top, wrapper, header, order++);
                        }
                        var wrapped = UIModConfig.WrapIt(dataList, ref top, variable, data, order++);
                        if (array != null)
                        {
                            //wrapped.Item1.Left.Pixels -= 20;
                            wrapped.Item1.Width.Pixels += 20;
                        }
                        else
                        {
                            //wrapped.Item1.Left.Pixels += 20;
                            //wrapped.Item1.Width.Pixels -= 20;
                        }
                    }
                }
            }
        }
示例#8
0
        protected override void SetupList()
        {
            dataList.Clear();
            int top = 0;

            if (data != null)
            {
                for (int i = 0; i < ((IList)data).Count; i++)
                {
                    int index   = i;
                    var wrapped = UIModConfig.WrapIt(dataList, ref top, memberInfo, item, 0, data, listType, index);

                    wrapped.Item2.Left.Pixels  += 24;
                    wrapped.Item2.Width.Pixels -= 30;

                    // Add delete button.
                    UIModConfigHoverImage deleteButton = new UIModConfigHoverImage(deleteTexture, "Remove");
                    deleteButton.VAlign   = 0.5f;
                    deleteButton.OnClick += (a, b) => { ((IList)data).RemoveAt(index); SetupList(); Interface.modConfig.SetPendingChanges(); };
                    wrapped.Item1.Append(deleteButton);
                }
            }
        }
        protected override void SetupList()
        {
            dataList.Clear();
            int top = 0;

            dataWrapperList = new List <IDictionaryElementWrapper>();

            //var genericListType = typeof(List<>);
            //var specificListType = genericListType.MakeGenericType(typeof(double));
            //var list = Activator.CreateInstance(specificListType);

            //var listType = typeof(List<>);
            //var constructedListType = listType.MakeGenericType(keyType);
            //var keyList = (IList)Activator.CreateInstance(constructedListType);

            //foreach (var item in ((IDictionary)data))
            //{
            //	//var wrapped = UIModConfig.WrapIt(dataList, ref top, memberInfo, item, ref sliderID, keys, keyType, i2);
            //	keyList.Add(item);
            //	//i2++;
            //}
            //((IDictionary)data).

            //string elementTypeName = Console.ReadLine();
            //Type elementType = Type.GetType(elementTypeName);
            //Type[] types = new Type[] { elementType };

            //Type listType = memberInfo.Type.GetGenericArguments()[0];
            //Type listType = typeof(Dictionary<>);
            //Type genericType = listType.MakeGenericType(types);
            //IProxy proxy = (IProxy)Activator.CreateInstance(genericType);

            //Type genericType = typeof(Dictionary<,>).MakeGenericType(keyType, valueType);
            Type genericType = typeof(DictionaryElementWrapper <,>).MakeGenericType(keyType, valueType);

            if (data != null)
            {
                var keys             = ((IDictionary)data).Keys;
                var values           = ((IDictionary)data).Values;
                var keysEnumerator   = keys.GetEnumerator();
                var valuesEnumerator = values.GetEnumerator();
                int i = 0;
                while (keysEnumerator.MoveNext())
                {
                    valuesEnumerator.MoveNext();
                    //var wrapper = new UIModConfigDictionaryElementWrapper<typeof(keysEnumerator.Current), typeof(keysEnumerator.Current)>(keysEnumerator.Current, valuesEnumerator.Current, this);
                    //dynamic sampleObject = new ExpandoObject();
                    //sampleObject.key = keysEnumerator.Current;
                    //sampleObject.value = valuesEnumerator.Current;
                    //var wrapperwrapper = new UIModConfigDictionaryElementWrapperWrapper(sampleObject);

                    IDictionaryElementWrapper proxy = (IDictionaryElementWrapper)Activator.CreateInstance(genericType,
                                                                                                          new object[] { keysEnumerator.Current, valuesEnumerator.Current, (IDictionary)data });
                    dataWrapperList.Add(proxy);
                    //var v = new { Key = keysEnumerator.Current, Value = valuesEnumerator.Current };

                    //dataWrapperList.Add(wrapper);
                    //}

                    //var wrapperwrapper = new UIModConfigDictionaryElementWrapperWrapper(v);

                    //	var keys = ((IDictionary)data).Keys.ToList();
                    //var values = ((IDictionary)data).Values.ToList();
                    //for (int i = 0; i < ((IDictionary)data).Count; i++)
                    //{
                    //((IDictionary)data).
                    //	int index = i;
                    //((IDictionary)data).
                    //Type tupleType = typeof(Tuple<,>);
                    //	var wrapper = new UIModConfigDictionaryElementWrapper(((IDictionary)data)[], , this);
                    Type itemType          = memberInfo.Type.GetGenericArguments()[0];
                    var  wrappermemberInfo = ConfigManager.GetFieldsAndProperties(this).ToList()[0];
                    int  index             = i;
                    var  wrapped           = UIModConfig.WrapIt(dataList, ref top, wrappermemberInfo, this, 0, dataWrapperList, genericType, i);          // TODO: Sometime key is below value for some reason. IntFloatDictionary.
                    //var wrapped = UIModConfig.WrapIt(dataList, ref top, wrappermemberInfo, wrapperwrapper, ref sliderID);
                    // save wrap, pre save check?
                    wrapped.Item2.Left.Pixels  += 24;
                    wrapped.Item2.Width.Pixels -= 24;

                    // Add delete button.
                    UIModConfigHoverImage deleteButton = new UIModConfigHoverImage(deleteTexture, "Remove");
                    deleteButton.VAlign = 0.5f;

                    // fix delete.
                    object o = keysEnumerator.Current;
                    deleteButton.OnClick += (a, b) => {
                        ((IDictionary)data).Remove(o);
                        SetupList();
                        Interface.modConfig.SetPendingChanges();
                    };
                    wrapped.Item1.Append(deleteButton);

                    i++;
                }
            }
        }