public static Func <PrintElementNode, bool> InsertChildToCollection(PrintElementNodeBuilder builder, ICollection <PrintElementNode> elements, PrintElementNode parentElementNode, string childElementCollection, bool wrapElementMetadata = true) { return(childElementNode => { if (parentElementNode.CanInsertChild.TryInvoke(childElementNode)) { // Создание метаданных нового дочернего элемента object newChildElementMetadata = childElementNode.ElementMetadata ?? new DynamicWrapper(); // Добавление дочернего элемента в коллекцию метаданных родительского элемента var childElements = GetChildElementCollection(parentElementNode, childElementCollection, true); childElements.AddItem(wrapElementMetadata ? WrapElementMetadata(childElementNode.ElementType, newChildElementMetadata) : newChildElementMetadata); // Добавление дочернего элемента в визуальное дерево элементов builder.BuildElement(elements, parentElementNode, newChildElementMetadata, childElementNode.ElementType); return true; } return false; }); }
public static Func <PrintElementNode, bool> InsertChildToContainer(PrintElementNodeBuilder builder, ICollection <PrintElementNode> elements, PrintElementNode parentElementNode, string childElementContainer, bool wrapElementMetadata = true) { return(childElementNode => { if (parentElementNode.CanInsertChild.TryInvoke(childElementNode)) { var oldChildElement = parentElementNode.Nodes.FirstOrDefault(); if (oldChildElement == null || Helpers.AcceptQuestionMessage(Resources.ReplaceElementQuestion, parentElementNode, childElementNode)) { // Создание метаданных нового дочернего элемента object newChildElementMetadata = childElementNode.ElementMetadata ?? new DynamicWrapper(); // Добавление дочернего элемента в контейнер метаданных родительского элемента parentElementNode.ElementMetadata[childElementContainer] = wrapElementMetadata ? WrapElementMetadata(childElementNode.ElementType, newChildElementMetadata) : newChildElementMetadata; if (oldChildElement != null) { // Удаление старого дочернего элемента из визуального дерева элементов parentElementNode.Nodes.RemoveItem(oldChildElement); DeleteChildNodes(elements, oldChildElement); } // Добавление дочернего элемента в визуальное дерево элементов builder.BuildElement(elements, parentElementNode, newChildElementMetadata, childElementNode.ElementType); return true; } } return false; }); }