コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: SvgDocument.cs プロジェクト: MelvinLervick/r3d
        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;
        }
コード例 #4
0
ファイル: SvgDocument.cs プロジェクト: MelvinLervick/r3d
        /// <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;
        }
コード例 #5
0
ファイル: MainWindow.xaml.cs プロジェクト: MelvinLervick/r3d
        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);
        }