public ItemDefinition Clone() { var id = new ItemDefinition(ItemType); id.AllowedChildFilters = AllowedChildFilters.ToList(); id.AllowedIn = AllowedIn; id.AllowedParentFilters = AllowedParentFilters.ToList(); id.AllowedZoneNames = AllowedZoneNames.ToList(); id.AuthorizedRoles = AuthorizedRoles != null?AuthorizedRoles.ToList() : AuthorizedRoles; id.AvailableZones = AvailableZones.ToList(); id.Containers = Containers.ToList(); id.Description = Description; id.Discriminator = Discriminator; id.Displayables = Displayables.ToList(); id.Editables = Editables.ToList(); id.Enabled = Enabled; id.IconUrl = IconUrl; id.Installer = Installer; id.IsDefined = IsDefined; id.EditableModifiers = EditableModifiers.ToList(); id.ContentModifiers = ContentModifiers.ToList(); id.NumberOfItems = 0; id.RelatedTo = RelatedTo; id.SortOrder = SortOrder; id.Template = Template; id.Title = Title; id.ToolTip = ToolTip; //id.ReloadRoot(); return(id); }
/// <summary>Adds an enumeration of containable editor or container to existing editors and to a container.</summary> /// <param name="containables">The editables to add.</param> public void AddRange(IEnumerable <IUniquelyNamed> containables) { foreach (var containable in containables) { if (containable is IEditable) { Editables.AddOrReplace(containable as IEditable); } if (containable is IEditableContainer) { Containers.AddOrReplace(containable as IEditableContainer); } if (containable is EditorModifierAttribute) { EditableModifiers.Add(containable as EditorModifierAttribute); } if (containable is IDisplayable) { Displayables.AddOrReplace(containable as IDisplayable); } if (containable is IContentModifier) { ContentModifiers.Add(containable as IContentModifier); } } //ReloadRoot(); }
public ItemDefinition Clone() { var id = new ItemDefinition(ItemType); id.AllowedChildFilters = AllowedChildFilters.ToList(); id.AllowedIn = AllowedIn; id.AllowedParentFilters = AllowedParentFilters.ToList(); id.Attributes = Attributes.ToList(); id.AllowedZoneNames = AllowedZoneNames.ToList(); id.AuthorizedRoles = AuthorizedRoles != null?AuthorizedRoles.ToArray() : AuthorizedRoles; id.AvailableZones = AvailableZones.ToList(); id.Containers = new ContentList <IEditableContainer>(Containers.Select(ec => ec.TryClone())); id.ContentTransformers = ContentTransformers.ToList(); id.Description = Description; id.Discriminator = Discriminator; id.Displayables = new ContentList <IDisplayable>(Displayables.Select(d => d.TryClone())); id.Editables = new ContentList <IEditable>(Editables.Select(e => e.TryClone())); id.Enabled = Enabled; id.EditableModifiers = EditableModifiers.ToList(); id.IconUrl = IconUrl; id.Installer = Installer; id.IsDefined = IsDefined; id.NumberOfItems = 0; id.Metadata = Metadata.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); id.AdditionalFlags = AdditionalFlags.ToList(); id.RemovedFlags = RemovedFlags.ToList(); id.Properties = Properties.ToDictionary(p => p.Key, p => p.Value.Clone()); id.RelatedTo = RelatedTo; id.SortOrder = SortOrder; id.TemplateKey = TemplateKey; id.Title = Title; id.ToolTip = ToolTip; return(id); }
public IEnumerable <IUniquelyNamed> GetNamed(string name) { return(Editables.Where(e => e.Name == name).OfType <IUniquelyNamed>() .Union(Containers.Where(c => c.Name == name).OfType <IUniquelyNamed>()) .Union(Displayables.Where(d => d.Name == name).OfType <IUniquelyNamed>()) .ToList()); }
protected string GetBestSelection(string column) { var bestSelection = Editables.Select(editable => new { editable, similarity = ComputeLevenshteinDistance(editable.Name, column) }) .OrderBy(x => x.similarity).FirstOrDefault(); if (bestSelection.similarity <= 2) { return(bestSelection.editable.Name); } return(""); }
/// <summary> /// Add ports based on attributes on the class fields. /// /// This iterates through fields of a class and adds ports, editable fields, etc /// based on the attributes attached to each field. /// </summary> public void AddFieldsFromClass(Type type) { Fields.AddRange(type.GetFields( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance )); // Extract port and editable metadata from each tagged field for (int i = 0; i < Fields.Count; i++) { var attribs = Fields[i].GetCustomAttributes(true); for (int j = 0; j < attribs.Length; j++) { if (attribs[j] is InputAttribute input) { Ports.Add(new PortReflectionData() { Name = input.Name ?? Fields[i].Name, Field = Fields[i], Type = Fields[i].FieldType, Direction = PortDirection.Input, Capacity = input.Multiple ? PortCapacity.Multiple : PortCapacity.Single, HasControlElement = input.Editable, IsUsingFieldName = input.Name != null }); } else if (attribs[j] is OutputAttribute output) { Ports.Add(new PortReflectionData() { Name = output.Name ?? Fields[i].Name, Field = Fields[i], Type = Fields[i].FieldType, Direction = PortDirection.Output, Capacity = output.Multiple ? PortCapacity.Multiple : PortCapacity.Single, HasControlElement = false, IsUsingFieldName = output.Name != null }); } else if (attribs[j] is EditableAttribute editable) { Editables.Add(new EditableReflectionData() { Name = editable.Name ?? Fields[i].Name, Field = Fields[i] }); } } } }
private void AddRangeInternal(IEnumerable <IUniquelyNamed> containables) { var list = new List <IUniquelyNamed>(containables); list.Sort((f, s) => { if (f is IComparable <IUniquelyNamed> ) { return((f as IComparable <IUniquelyNamed>).CompareTo(s)); } if (s is IComparable <IUniquelyNamed> ) { return(-(s as IComparable <IUniquelyNamed>).CompareTo(f)); } return(0); }); foreach (var containable in list) { if (containable is IEditable) { Editables.AddOrReplace(containable as IEditable); } if (containable is IEditableContainer) { Containers.AddOrReplace(containable as IEditableContainer); } if (containable is EditorModifierAttribute) { EditableModifiers.Add(containable as EditorModifierAttribute); } if (containable is IDisplayable) { Displayables.AddOrReplace(containable as IDisplayable); } if (containable is IContentTransformer) { ContentTransformers.Add(containable as IContentTransformer); } NamedOperators.Add(containable); } }
public void RemoveRange(IEnumerable <IUniquelyNamed> containables) { foreach (var containable in containables) { if (containable is IEditable) { Editables.Remove(containable as IEditable); } if (containable is IEditableContainer) { Containers.Remove(containable as IEditableContainer); } if (containable is IDisplayable) { Displayables.Remove(containable as IDisplayable); } if (containable is IContentTransformer) { ContentTransformers.Remove(containable as IContentTransformer); } } }
public IContainable GetContainable(string containableName) { return(Editables.Where(e => e.Name == containableName).OfType <IContainable>().FirstOrDefault() ?? Containers.Where(c => c.Name == containableName).FirstOrDefault()); }