X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FXGUI%2FXGUI_DataModel.cpp;h=d624d14ad7d06ceecef304ebe80dc6fb8225ab72;hb=1035d41ad342fb22f5ea2552a8fc135aed95f3b8;hp=7da65684d112a024bfa6b9f37ade0a19edb5a5ea;hpb=6e421e939851e0de46554ae45a3ca0e1f67cd91d;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_DataModel.cpp b/src/XGUI/XGUI_DataModel.cpp index 7da65684d..d624d14ad 100644 --- a/src/XGUI/XGUI_DataModel.cpp +++ b/src/XGUI/XGUI_DataModel.cpp @@ -67,18 +67,31 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) { if ((*aIt)->isInHistory()) aCreated.append(*aIt); + if ((*aIt)->groupName() == ModelAPI_ResultPart::group()) { + emit beforeTreeRebuild(); + myRoot->update(); + rebuildDataTree(); + emit treeRebuilt(); + return; + } } + if (aCreated.length() == 0) + return; + + emit beforeTreeRebuild(); QTreeNodesList aNodes = myRoot->objectCreated(aCreated); ModuleBase_ITreeNode* aParent; int aRow = 0; QModelIndex aParentIndex1, aParentIndex2; ObjectPtr aObj; + bool aRebuildAll = false; + foreach(ModuleBase_ITreeNode* aNode, aNodes) { aObj = aNode->object(); aParent = aNode->parent(); if (aObj.get() && (aObj->groupName() == ModelAPI_Folder::group())) { aParent->update(); - rebuildDataTree(); + aRebuildAll = true; } else { aRow = aParent->nodeRow(aNode); @@ -88,6 +101,10 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess dataChanged(aParentIndex1, aParentIndex2); } } + if (aRebuildAll) + rebuildDataTree(); + + emit treeRebuilt(); } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) { std::shared_ptr aUpdMsg = @@ -96,6 +113,7 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess aUpdMsg->groups(); QTreeNodesList aList; std::list, std::string>>::const_iterator aIt; + emit beforeTreeRebuild(); for (aIt = aMsgGroups.cbegin(); aIt != aMsgGroups.cend(); aIt++) { aList.append(myRoot->objectsDeleted(aIt->first, aIt->second.c_str())); } @@ -111,6 +129,7 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess aNode->parent()->update(); } rebuildDataTree(); + emit treeRebuilt(); } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) { std::shared_ptr aUpdMsg = @@ -120,6 +139,7 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess QObjectPtrList aCreated; std::set::const_iterator aIt; bool aRebuildAll = false; + emit beforeTreeRebuild(); for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) { ObjectPtr aObj = (*aIt); if (!aObj->isInHistory()) @@ -135,7 +155,6 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess } if (aRebuildAll) { myRoot->update(); - rebuildDataTree(); } else { QSet aParents; @@ -158,8 +177,9 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess foreach(ModuleBase_ITreeNode* aNode, aParents) { aNode->update(); } - rebuildDataTree(); } + rebuildDataTree(); + emit treeRebuilt(); } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_ORDER_UPDATED)) { std::shared_ptr aUpdMsg = @@ -169,8 +189,10 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess std::string aGroup = aUpdMsg->reordered()->group(); ModuleBase_ITreeNode* aNode = myRoot->findParent(aDoc, aGroup.c_str()); if (aNode) { + emit beforeTreeRebuild(); aNode->update(); rebuildDataTree(); + emit treeRebuilt(); } } } @@ -195,6 +217,9 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess aCreated.append(aObj); } } + if (aCreated.length() == 0) + return; + emit beforeTreeRebuild(); foreach(ObjectPtr aObj, aCreated) { ModuleBase_ITreeNode* aNode = myRoot->subNode(aObj); if (aNode) { @@ -217,6 +242,7 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess dataChanged(aFirstIdx, aLastIdx); } } + emit treeRebuilt(); } } @@ -232,7 +258,6 @@ void XGUI_DataModel::rebuildDataTree() { beginResetModel(); endResetModel(); - emit treeRebuilt(); } //****************************************************** @@ -418,3 +443,10 @@ DocumentPtr XGUI_DataModel::document(const QModelIndex& theIndex) const ModuleBase_ITreeNode* aNode = (ModuleBase_ITreeNode*)theIndex.internalPointer(); return aNode->document(); } + + +//****************************************************** +bool XGUI_DataModel::hasNode(ModuleBase_ITreeNode* theNode) const +{ + return myRoot->hasSubNode(theNode); +}