Example #1
0
        public void UpdateConfiguration(EffectConfig config)
        {
            if (context != null)
            {
                throw new InvalidOperationException();
            }

            var remainingFieldNames = new List <string>(config.FieldNames);

            foreach (var configurableField in configurableFields)
            {
                var field         = configurableField.Field;
                var allowedValues = (NamedValue[])null;

                var fieldType = field.FieldType;
                if (fieldType.IsEnum)
                {
                    var enumValues = Enum.GetValues(fieldType);
                    fieldType = Enum.GetUnderlyingType(fieldType);

                    allowedValues = new NamedValue[enumValues.Length];
                    for (var i = 0; i < enumValues.Length; i++)
                    {
                        var value = enumValues.GetValue(i);
                        allowedValues[i] = new NamedValue()
                        {
                            Name  = value.ToString(),
                            Value = Convert.ChangeType(value, fieldType, CultureInfo.InvariantCulture),
                        };
                    }
                }

                try
                {
                    var displayName  = configurableField.Attribute.DisplayName ?? field.Name;
                    var initialValue = Convert.ChangeType(configurableField.InitialValue, fieldType, CultureInfo.InvariantCulture);
                    config.UpdateField(field.Name, displayName, configurableField.Order, fieldType, initialValue, allowedValues);

                    var value = config.GetValue(field.Name);
                    field.SetValue(this, value);

                    remainingFieldNames.Remove(field.Name);
                }
                catch (Exception e)
                {
                    Trace.WriteLine($"Failed to update configuration for {field.Name} with type {fieldType}:\n{e}");
                }
            }
            foreach (var name in remainingFieldNames)
            {
                config.RemoveField(name);
            }
        }
Example #2
0
        public void ApplyConfiguration(EffectConfig config)
        {
            if (context != null)
            {
                throw new InvalidOperationException();
            }

            foreach (var configurableField in configurableFields)
            {
                var field = configurableField.Field;
                try
                {
                    var value = config.GetValue(field.Name);
                    field.SetValue(this, value);
                }
                catch (Exception e)
                {
                    Trace.WriteLine($"Failed to apply configuration for {field.Name}:\n{e}");
                }
            }
        }