protected override Control AddEditor(Control container) { ItemEditorList listEditor = new ItemEditorList(); listEditor.ID = Name; listEditor.ParentItem = ItemUtility.FindInParents <IItemEditor>(container).CurrentItem; container.Controls.Add(listEditor); return(listEditor); }
public override bool UpdateItem(ContentItem item, Control editor) { bool updated = false; ItemEditorList listEditor = (ItemEditorList)editor; for (int i = 0; i < listEditor.ItemEditors.Count; i++) { ItemEditor childEditor = listEditor.ItemEditors[i]; ItemEditor parentEditor = ItemUtility.FindInParents <ItemEditor>(editor.Parent); var childItem = childEditor.CurrentItem; if (childItem.ID != 0 && item.ID == 0 && !childItem.IsPage) { // we may have initialized the editor with the published version but we want to use the draft here childItem = item.FindPartVersion(childItem); } if (listEditor.DeletedIndexes.Contains(i)) { if (childItem.ID == 0) { childItem.AddTo(null); } else { Engine.Persister.Delete(childItem); } } else { if (parentEditor != null) { var subContext = parentEditor.BinderContext.CreateNestedContext(childEditor, childItem, childEditor.GetDefinition()); if (subContext.Binder.UpdateObject(subContext)) { childItem.AddTo(item); // make sure it's on parent's child collection parentEditor.BinderContext.RegisterItemToSave(childItem); updated = true; } } else { IItemEditor fallbackEditor = ItemUtility.FindInParents <IItemEditor>(editor.Parent); if (fallbackEditor != null) { fallbackEditor.Saved += delegate { var cc = childEditor.CreateCommandContext(); Engine.Resolve <CommandDispatcher>().Publish(cc); }; } } } } return(updated || listEditor.DeletedIndexes.Count > 0 || listEditor.AddedDefinitions.Count > 0); }
protected override Control AddEditor(Control container) { ItemEditorList listEditor = new ItemEditorList(); listEditor.ID = Name; if (!string.IsNullOrEmpty(MinimumTypeName)) { listEditor.MinimumType = Type.GetType(MinimumTypeName); } listEditor.ParentItem = ItemUtility.FindInParents <IItemEditor>(container).CurrentItem; listEditor.Label = Title; container.Controls.Add(listEditor); return(listEditor); }
public override bool UpdateItem(ContentItem item, Control editor) { bool updated = false; ItemEditorList listEditor = (ItemEditorList)editor; for (int i = 0; i < listEditor.ItemEditors.Count; i++) { if (listEditor.DeletedIndexes.Contains(i)) { var deletedChild = listEditor.ItemEditors[i].CurrentItem; if (deletedChild.ID == 0) { deletedChild.AddTo(null); } else { Engine.Persister.Delete(deletedChild); } } else { ItemEditor childEditor = listEditor.ItemEditors[i]; ItemEditor parentEditor = ItemUtility.FindInParents <ItemEditor>(editor.Parent); if (parentEditor != null) { var subContext = parentEditor.BinderContext.CreateNestedContext(childEditor, childEditor.CurrentItem, childEditor.GetDefinition()); if (subContext.Binder.UpdateObject(subContext)) { updated = true; } } else { IItemEditor fallbackEditor = ItemUtility.FindInParents <IItemEditor>(editor.Parent); if (fallbackEditor != null) { fallbackEditor.Saved += delegate { var cc = childEditor.CreateCommandContext(); Engine.Resolve <CommandDispatcher>().Publish(cc); }; } } } } return(updated || listEditor.DeletedIndexes.Count > 0 || listEditor.AddedDefinitions.Count > 0); }
public override void UpdateEditor(ContentItem item, Control editor) { ItemEditorList listEditor = (ItemEditorList)editor; listEditor.ParentItem = item; listEditor.ZoneName = ZoneName; // filtering of children by property generic type PropertyInfo info = item.GetContentType().GetProperty(Name); if (info != null) { foreach (Type argument in info.PropertyType.GetGenericArguments()) { if (typeof(ContentItem).IsAssignableFrom(argument) || argument.IsInterface) { listEditor.MinimumType = argument; break; } } } }