Example #1
0
 public override object GetEditor(PropertyInfo pi)
 {
     Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor editor = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor();
     editor.GetItemInsertersFunc = (context) =>
     {
         List <Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter> ret      = new List <Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter>();
         Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter        inserter = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter("Record", () =>
         {
             ISourcedDescriptor desc = context.Descriptor as ISourcedDescriptor;
             object val = context.Descriptor.GetValue(desc.Source);
             if (val == null)
             {
                 return(null);
             }
             Type genericType = context.Descriptor.PropertyType.GenericTypeArguments[0];
             object newObject = Activator.CreateInstance(genericType);
             ((System.Collections.IList)val).Add(newObject);
             return(newObject);
         });
         ret.Add(inserter);
         return(ret);
     };
     editor.RemoveItemFunc = (context, obj) =>
     {
         ISourcedDescriptor desc = context.Descriptor as ISourcedDescriptor;
         object             val  = context.Descriptor.GetValue(desc.Source);
         if (val == null)
         {
             return;
         }
         ((System.Collections.IList)val).Remove(obj);
     };
     return(editor);
 }
        public override object GetEditor(Type editorBaseType)
        {
            if (attrInfo_.EnumNames != null && attrInfo_.EnumNames.Count > 0)
            {
                List <int> enumValues = new List <int>();
                for (int i = 0; i < attrInfo_.EnumNames.Count; ++i)
                {
                    enumValues.Add(i);
                }
                return(new EditorCore.Controls.PropertyGrid.NamedEnumEditor(attrInfo_.EnumNames.ToArray()));
            }
            if (attrInfo_.Name.EndsWith("Mask"))
            {
                return(new EditorCore.Controls.PropertyGrid.MaskEditor());
            }
            if (type_ == typeof(bool))
            {
                return(new Sce.Atf.Controls.PropertyEditing.BoolEditor());
            }
            else if (type_ == typeof(int))
            {
                return(new Sce.Atf.Controls.PropertyEditing.NumericEditor(typeof(int)));
            }
            else if (type_ == typeof(float))
            {
                return(new Sce.Atf.Controls.PropertyEditing.NumericEditor(typeof(float)));
            }
            else if (type_ == typeof(UrhoBackend.Vector3))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(typeof(UrhoBackend.Vector3), new[] { "X", "Y", "Z" }));
            }
            else if (type_ == typeof(UrhoBackend.Vector2))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(typeof(UrhoBackend.Vector2), new[] { "X", "Y", "Z" }));
            }
            else if (type_ == typeof(UrhoBackend.Vector4))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(typeof(UrhoBackend.Vector4), new[] { "X", "Y", "Z", "W" }));
            }
            else if (type_ == typeof(UrhoBackend.Color))
            {
                return new Sce.Atf.Controls.PropertyEditing.ColorPickerEditor {
                           EnableAlpha = true
                }
            }
            ;
            else if (type_ == typeof(UrhoBackend.ResourceRef))
            {
                return(new Sce.Atf.Controls.PropertyEditing.FileUriEditor(EditorCore.Interop.UrhoConstants.GetFilters(source_.GetAttributeDefault(attrName_).GetResourceRef())));
            }
            else if (type_ == typeof(UrhoBackend.VariantVector))
            {
            }
            else if (type_ == typeof(UrhoBackend.ResourceRefList))
            {
                return(new EditorCore.Controls.PropertyGrid.ResourceRefListEditor());
            }
            else if (type_ == typeof(UrhoBackend.VariantMap))
            {
                Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor editor = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor();
                editor.GetItemInsertersFunc = (context) =>
                {
                    Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter inserter = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter("Record", () =>
                    {
                        AttributePropertyDescriptor desc = context.Descriptor as AttributePropertyDescriptor;
                        VariantMapList list = desc.lastReturn_ as VariantMapList;
                        if (list == null)
                        {
                            return(null);
                        }
                        VariantMapRecord rec = new VariantMapRecord(list);
                        list.Add(rec);
                        rec.Enabled = true;
                        return(rec);
                    });
                    List <Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter> ret = new List <Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter>();
                    ret.Add(inserter);
                    return(ret);
                };

                editor.RemoveItemFunc = (context, obj) =>
                {
                    AttributePropertyDescriptor desc = context.Descriptor as AttributePropertyDescriptor;
                    VariantMapList list = desc.lastReturn_ as VariantMapList;
                    if (list == null)
                    {
                        return;
                    }
                    list.Remove(obj as VariantMapRecord);
                    UrhoBackend.VariantMap map = new UrhoBackend.VariantMap();
                    VariantMapRecord.Fill(map, list);
                    SetValue(context.LastSelectedObject, map);
                };

                return(editor);
            }
            else if (type_ == typeof(UrhoBackend.VariantVector))
            {
                Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor editor = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor();
                return(editor);
            }
            else if (type_ == typeof(UrhoBackend.Quaternion))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(typeof(UrhoBackend.Vector3), new[] { "X", "Y", "Z" }));
            }
            return(base.GetEditor(editorBaseType));
        }
Example #3
0
        public override object GetEditor(Type editorBaseType)
        {
            // NUMBERS
            if (PropertyType == typeof(int) || PropertyType == typeof(float) || PropertyType == typeof(uint))
            {
                return(new Sce.Atf.Controls.PropertyEditing.NumericEditor(PropertyType));
            }
            // BOOL
            else if (PropertyType == typeof(bool))
            {
                return(new Sce.Atf.Controls.PropertyEditing.BoolEditor());
            }
            // STRING
            else if (PropertyType == typeof(string))
            {
                return(base.GetEditor(editorBaseType));
            }

            // VECTORS
            else if (PropertyType == typeof(UrhoBackend.Vector2))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(PropertyType, new string[] { "X", "Y" }));
            }
            else if (PropertyType == typeof(UrhoBackend.IntVector2))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(PropertyType, new string[] { "X", "Y" }));
            }
            else if (PropertyType == typeof(UrhoBackend.Vector3))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(PropertyType, new string[] { "X", "Y", "Z" }));
            }
            else if (PropertyType == typeof(UrhoBackend.Vector4))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(PropertyType, new string[] { "X", "Y", "Z", "W" }));
            }
            else if (PropertyType == typeof(UrhoBackend.Quaternion))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(typeof(UrhoBackend.Vector3), new string[] { "X", "Y", "Z" }));
            }
            else if (PropertyType == typeof(UrhoBackend.Color))
            {
                return new EditorCore.Controls.PropertyGrid.ColorPickerEditor {
                           EnableAlpha = true
                }
            }
            ;
            else if (PropertyType == typeof(UrhoBackend.Rect))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(PropertyType, new string[] { "L", "T", "R", "B" }));
            }
            else if (PropertyType == typeof(UrhoBackend.IntRect))
            {
                return(new EditorCore.Controls.PropertyGrid.VectorEditor(PropertyType, new string[] { "L", "T", "R", "B" }));
            }
            else if (PropertyType == typeof(UrhoBackend.ResourceRef))
            {
                UrhoBackend.UrhoResource metaAttr = PropertyType.GetCustomAttribute <UrhoBackend.UrhoResource>();
                if (metaAttr == null)
                {
                    return(new Sce.Atf.Controls.PropertyEditing.FileUriEditor());
                }
                return(new Sce.Atf.Controls.PropertyEditing.FileUriEditor(EditorCore.Interop.UrhoConstants.GetFilters(metaAttr.ResourceTypes)));
            }

            // ENUMERATIONS
            else if (PropertyType.IsEnum)
            {
                return(new EditorCore.Controls.PropertyGrid.NamedEnumEditor(Enum.GetNames(PropertyType)));
            }
            else if (typeof(UrhoBackend.IParentedList).IsAssignableFrom(PropertyType))
            {
                Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor editor = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor();
                editor.GetItemInsertersFunc = (context) =>
                {
                    List <Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter> ret = new List <Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter>();
                    UrhoBackend.CollectionInsert insertAttr = property_.GetCustomAttribute <UrhoBackend.CollectionInsert>();
                    if (insertAttr != null)
                    {
                        Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter inserter = new Sce.Atf.Controls.PropertyEditing.EmbeddedCollectionEditor.ItemInserter("Record", () =>
                        {
                            UrhoBackend.IParentedList src = context.GetValue() as UrhoBackend.IParentedList;
                            return(src.Parent.GetType().GetMethod(insertAttr.Method).Invoke(src.Parent, null));
                        });
                        ret.Add(inserter);
                    }
                    return(ret);
                };
                UrhoBackend.CollectionRemove remover = property_.GetCustomAttribute <UrhoBackend.CollectionRemove>();
                if (remover != null)
                {
                    editor.RemoveItemFunc = (context, obj) =>
                    {
                        UrhoBackend.IParentedList src = context.GetValue() as UrhoBackend.IParentedList;
                        uint index = (uint)src.IndexOf(obj);
                        src.Parent.GetType().GetMethod(remover.Method).Invoke(src.Parent, new object[] { index });
                    }
                }
                ;
                return(editor);
            }
            return(base.GetEditor(editorBaseType));
        }