X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_TreeNodes.cpp;h=c08539925ec34de2a67ea6c9985c940525bc0739;hb=97917d3698f5a2f7fc9596e7c755ff8f6751e373;hp=b8434fbff6d7ca2b8bec9fb89c944a258747dde3;hpb=d4b0a5cb916f4eccf4a0bce02e43a54c7a67cb93;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_TreeNodes.cpp b/src/PartSet/PartSet_TreeNodes.cpp index b8434fbff..c08539925 100644 --- a/src/PartSet/PartSet_TreeNodes.cpp +++ b/src/PartSet/PartSet_TreeNodes.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,10 +12,9 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "PartSet_TreeNodes.h" @@ -569,18 +568,20 @@ QTreeNodesList PartSet_FolderNode::objectCreated(const QObjectPtrList& theObject } } // Add nodes in correct order - int i; - for (i = 0; i < myChildren.size(); i++) { - if (aNewNodes.contains(i)) { - myChildren.insert(i, aNewNodes[i]); + if (aNewNodes.size() > 0) { + int i; + for (i = 0; i < myChildren.size(); i++) { + if (aNewNodes.contains(i)) { + myChildren.insert(i, aNewNodes[i]); + aNewNodes.remove(i); + } + } + while (aNewNodes.size()) { + i = myChildren.size(); + myChildren.append(aNewNodes[i]); aNewNodes.remove(i); } } - while (aNewNodes.size()) { - i = myChildren.size(); - myChildren.append(aNewNodes[i]); - aNewNodes.remove(i); - } foreach(ModuleBase_ITreeNode* aNode, myChildren) { aResult.append(aNode->objectCreated(theObjects)); } @@ -649,19 +650,22 @@ QTreeNodesList PartSet_FeatureFolderNode::objectCreated(const QObjectPtrList& th } } // To add in correct order - int i; - for (i = 0; i < myChildren.size(); i++) { - if (aNewNodes.contains(i)) { - myChildren.insert(i, aNewNodes[i]); - aNewNodes.remove(i); + if (aNewNodes.size() > 0) { + int i; + for (i = 0; i < myChildren.size(); i++) { + if (aNewNodes.contains(i)) { + myChildren.insert(i, aNewNodes[i]); + aNewNodes.remove(i); + } + } + while (aNewNodes.size()) { + i = myChildren.size(); + if (aNewNodes.contains(i)) { + myChildren.append(aNewNodes[i]); + aNewNodes.remove(i); + } } } - while (aNewNodes.size()) { - i = myChildren.size(); - myChildren.append(aNewNodes[i]); - aNewNodes.remove(i); - } - // Update sub-folders foreach(ModuleBase_ITreeNode* aNode, myChildren) { aResult.append(aNode->objectCreated(theObjects)); @@ -885,13 +889,17 @@ void PartSet_PartRootNode::update() // Remove extra sub-nodes int aIndex = -1; int aId = aRows; + QMap aExistingNodes; while (aId < myChildren.size()) { ModuleBase_ITreeNode* aNode = myChildren.at(aId); if (aNode->object().get()) { aIndex = aDoc->index(aNode->object(), true); if ((aIndex == -1) || (aId != (aIndex + aRows))) { myChildren.removeAll(aNode); - delete aNode; + if (aIndex == -1) + delete aNode; + else + aExistingNodes[aIndex + aRows] = aNode; continue; } } @@ -906,12 +914,19 @@ void PartSet_PartRootNode::update() aId = i + aRows; // Take into account existing folders if (aId < myChildren.size()) { if (myChildren.at(aId)->object() != aObj) { - ModuleBase_ITreeNode* aNode = createNode(aObj); - myChildren.insert(aId, aNode); + if (aExistingNodes.contains(aId)) { + myChildren.insert(aId, aExistingNodes[aId]); + aExistingNodes.remove(aId); + } + else { + myChildren.insert(aId, createNode(aObj)); + } } } else { - ModuleBase_ITreeNode* aNode = createNode(aObj); - myChildren.append(aNode); + if (aExistingNodes.contains(myChildren.size())) + myChildren.append(aExistingNodes[myChildren.size()]); + else + myChildren.append(createNode(aObj)); } } // Update sub-folders