X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_TreeNodes.cpp;h=c08539925ec34de2a67ea6c9985c940525bc0739;hb=97917d3698f5a2f7fc9596e7c755ff8f6751e373;hp=e8acf5f61d42c2321c4de8c27d13b1108de6bcce;hpb=29e92b65cd20fe014dc7d946034cc47e500e21e1;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_TreeNodes.cpp b/src/PartSet/PartSet_TreeNodes.cpp index e8acf5f61..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" @@ -270,6 +269,7 @@ void PartSet_ObjectNode::update() else { aNode = new PartSet_ObjectNode(aBody, this); myChildren.append(aNode); + aNode->update(); } } else if (aFieldRes.get()) { @@ -482,7 +482,9 @@ ModuleBase_ITreeNode* PartSet_FolderNode::createNode(const ObjectPtr& theObj) //ResultCompSolidPtr aCompRes = std::dynamic_pointer_cast(theObj); //if (aCompRes.get()) // return new PartSet_CompsolidNode(theObj, this); - return new PartSet_ObjectNode(theObj, this); + ModuleBase_ITreeNode* aNode = new PartSet_ObjectNode(theObj, this); + aNode->update(); + return aNode; } void PartSet_FolderNode::update() @@ -566,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)); } @@ -646,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)); @@ -813,7 +820,9 @@ ModuleBase_ITreeNode* PartSet_RootNode::createNode(const ObjectPtr& theObj) if (aFeature->getKind() == PartSetPlugin_Part::ID()) return new PartSet_PartRootNode(theObj, this); - return new PartSet_ObjectNode(theObj, this); + PartSet_ObjectNode* aNode = new PartSet_ObjectNode(theObj, this); + aNode->update(); + return aNode; } ////////////////////////////////////////////////////////////////////////////////// @@ -859,11 +868,19 @@ void PartSet_PartRootNode::update() bool aHasFields = myFieldsFolder->childrenCount() > 0; bool aHasGroups = myGroupsFolder->childrenCount() > 0; - if (aHasFields && (!myChildren.contains(myFieldsFolder))) { - myChildren.insert(3, myFieldsFolder); + if (aHasFields) { + if (!myChildren.contains(myFieldsFolder)) { + myChildren.insert(3, myFieldsFolder); + } + } else if (myChildren.contains(myFieldsFolder)) { + myChildren.removeAll(myFieldsFolder); } - if (aHasGroups && (!myChildren.contains(myGroupsFolder))) { - myChildren.insert(aHasFields ? 4 : 3, myGroupsFolder); + if (aHasGroups) { + if (!myChildren.contains(myGroupsFolder)) { + myChildren.insert(aHasFields ? 4 : 3, myGroupsFolder); + } + } else if (myChildren.contains(myGroupsFolder)) { + myChildren.removeAll(myGroupsFolder); } // Update features content @@ -872,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; } } @@ -893,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 @@ -947,7 +975,7 @@ QVariant PartSet_PartRootNode::data(int theColumn, int theRole) const Qt::ItemFlags PartSet_PartRootNode::flags(int theColumn) const { if (myObject->isDisabled()) - return (theColumn == 2) ? Qt::ItemIsSelectable : aDefaultFlag; + return (theColumn == 2) ? Qt::ItemIsSelectable : aNullFlag; SessionPtr aSession = ModelAPI_Session::get(); DocumentPtr aActiveDoc = aSession->activeDocument(); @@ -960,7 +988,9 @@ ModuleBase_ITreeNode* PartSet_PartRootNode::createNode(const ObjectPtr& theObj) { if (theObj->groupName() == ModelAPI_Folder::group()) return new PartSet_ObjectFolderNode(theObj, this); - return new PartSet_ObjectNode(theObj, this); + PartSet_ObjectNode* aNode = new PartSet_ObjectNode(theObj, this); + aNode->update(); + return aNode; } int PartSet_PartRootNode::numberOfFolders() const @@ -1066,11 +1096,13 @@ void PartSet_ObjectFolderNode::update() if (aObj != myChildren.at(i)->object()) { aNode = new PartSet_ObjectNode(aObj, this); myChildren.insert(i, aNode); + aNode->update(); } } else { aNode = new PartSet_ObjectNode(aObj, this); myChildren.append(aNode); + aNode->update(); } } } @@ -1098,11 +1130,13 @@ QTreeNodesList PartSet_ObjectFolderNode::objectCreated(const QObjectPtrList& the aNode = new PartSet_ObjectNode(aObj, this); myChildren.insert(i, aNode); aResult.append(aNode); + aNode->update(); } } else { aNode = new PartSet_ObjectNode(aObj, this); myChildren.append(aNode); aResult.append(aNode); + aNode->update(); } } return aResult; @@ -1141,6 +1175,7 @@ QTreeNodesList PartSet_ObjectFolderNode::objectsDeleted(const DocumentPtr& theDo } else { myChildren.removeAll(aNode); + aResult.removeAll(aNode); delete aNode; aRemoved = true; continue;