private bool DeleteElement(SvgElement element, bool deleteFromParent) { if (element == null) { return(false); } var parent = element.GetParent(); if (parent == null) { // root node cannot be delete! ErrorMessage = "root node cannot be delete!"; return(false); } // set the Next reference of the previous if (element.GetPrevious() != null) { element.GetPrevious().SetNext(element.GetNext()); } // set the Previous reference of the next if (element.GetNext() != null) { element.GetNext().SetPrevious(element.GetPrevious()); } // check if the element is the first child // the deleteFromParent flag is used to avoid deleting // all parent-child relationship. This is used in the Cut // operation where the subtree can be pasted if (deleteFromParent) { if (IsFirstChild(element)) { // set the Child reference of the parent to the next element.GetParent().SetChild(element.GetNext()); } } // delete its children var child = element.GetChild(); while (child != null) { DeleteElement(child, false); child = child.GetNext(); } // delete the element from the colloection svgDocumentElements.Remove(element.GetInternalId()); return(true); }
/// <summary> /// It creates a new element copying all attributes from elementToClone; the new /// element is inserted under the parent element provided. /// </summary> /// <param name="parent">Parent element. If null the element is added under the root.</param> /// <param name="elementToClone">Element to be cloned</param> /// <returns></returns> public SvgElement CloneElement(SvgElement parent, SvgElement elementToClone) { // calculate unique id var sOldId = elementToClone.GetAttributeStringValue(SvgAttribute.SvgAttributes.AttrCoreId); var sNewId = sOldId; if (sOldId != "") { int i = 1; // check if it is unique while (GetSvgElement(sNewId) != null) { sNewId = sOldId + "_" + i.ToString(); i++; } } // clone operation var newElement = AddElement(parent, elementToClone.GetElementName()); newElement.CloneAttributeList(elementToClone); if (sNewId != "") { newElement.SetAttributeValue(SvgAttribute.SvgAttributes.AttrCoreId, sNewId); } if (elementToClone.GetChild() != null) { newElement.SetChild(CloneElement(newElement, elementToClone.GetChild())); if (elementToClone.GetChild().GetNext() != null) { newElement.GetChild().SetNext(CloneElement(newElement, elementToClone.GetChild().GetNext())); } } return(newElement); }
private bool DeleteElement(SvgElement element, bool deleteFromParent) { if ( element == null ) { return false; } var parent = element.GetParent(); if ( parent == null ) { // root node cannot be delete! ErrorMessage = "root node cannot be delete!"; return false; } // set the Next reference of the previous if ( element.GetPrevious() != null ) { element.GetPrevious().SetNext(element.GetNext()); } // set the Previous reference of the next if ( element.GetNext() != null ) { element.GetNext().SetPrevious(element.GetPrevious()); } // check if the element is the first child // the deleteFromParent flag is used to avoid deleting // all parent-child relationship. This is used in the Cut // operation where the subtree can be pasted if ( deleteFromParent ) { if ( IsFirstChild(element) ) { // set the Child reference of the parent to the next element.GetParent().SetChild(element.GetNext()); } } // delete its children var child = element.GetChild(); while ( child != null ) { DeleteElement(child, false); child = child.GetNext(); } // delete the element from the colloection svgDocumentElements.Remove(element.GetInternalId()); return true; }
/// <summary> /// It creates a new element copying all attributes from elementToClone; the new /// element is inserted under the parent element provided. /// </summary> /// <param name="parent">Parent element. If null the element is added under the root.</param> /// <param name="elementToClone">Element to be cloned</param> /// <returns></returns> public SvgElement CloneElement(SvgElement parent, SvgElement elementToClone) { // calculate unique id var sOldId = elementToClone.GetAttributeStringValue(SvgAttribute.SvgAttributes.AttrCoreId); var sNewId = sOldId; if ( sOldId != "" ) { int i = 1; // check if it is unique while ( GetSvgElement(sNewId) != null ) { sNewId = sOldId + "_" + i.ToString(); i++; } } // clone operation var newElement = AddElement(parent, elementToClone.GetElementName()); newElement.CloneAttributeList(elementToClone); if ( sNewId != "" ) { newElement.SetAttributeValue(SvgAttribute.SvgAttributes.AttrCoreId, sNewId); } if ( elementToClone.GetChild() != null ) { newElement.SetChild(CloneElement(newElement, elementToClone.GetChild())); if ( elementToClone.GetChild().GetNext() != null ) { newElement.GetChild().SetNext(CloneElement(newElement, elementToClone.GetChild().GetNext())); } } return newElement; }
private void AddNodeToTree(SvgElement eleParent, SvgElement eleToAdd, SvgElement eleBefore) { if (eleToAdd == null) { return; } string sNodeName = eleToAdd.GetElementName(); string sId; sId = eleToAdd.Id; if (sId != "") { sNodeName += "_"; sNodeName += sId; //sNodeName += ")"; } TreeViewItem node = new TreeViewItem { Name = sNodeName }; node.Tag = eleToAdd.GetInternalId(); TreeViewItem nodeParent = null; TreeViewItem nodeBefore = null; if (eleParent != null) { nodeParent = FindNodeByTag(null, eleParent.GetInternalId().ToString()); } if (eleBefore != null) { nodeBefore = FindNodeByTag(nodeParent, eleBefore.GetInternalId().ToString()); } if (nodeParent == null) { if (nodeBefore == null) { TreeViewPrintFile.Items.Add(node); } else { //TreeViewPrintFile.Items.Insert(nodeBefore.Index, node); } } else { if (nodeBefore == null) { nodeParent.Items.Add(node); } else { //nodeParent.Items.Insert(nodeBefore.Index, node); } } //node.ImageIndex = (int)eleToAdd.getElementType(); //node.SelectedImageIndex = nod.ImageIndex; //node.Expand(); if (eleToAdd.GetChild() != null) { AddNodeToTree(eleToAdd, eleToAdd.GetChild(), null); SvgElement nxt = eleToAdd.GetChild().GetNext(); while (nxt != null) { AddNodeToTree(eleToAdd, nxt, null); nxt = nxt.GetNext(); } } TreeViewPrintFile.Items.MoveCurrentTo(node); }