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)); }
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)); }