Salome HOME
projects
/
modules
/
shaper.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update viewer on delete an item
[modules/shaper.git]
/
src
/
XGUI
/
XGUI_DataModel.cpp
diff --git
a/src/XGUI/XGUI_DataModel.cpp
b/src/XGUI/XGUI_DataModel.cpp
index 92a4bc67ce6d7e5293dfb66e5781bcb1c580b14b..d624d14ad7d06ceecef304ebe80dc6fb8225ab72 100644
(file)
--- a/
src/XGUI/XGUI_DataModel.cpp
+++ b/
src/XGUI/XGUI_DataModel.cpp
@@
-1,4
+1,4
@@
-// Copyright (C) 2014-201
7
CEA/DEN, EDF R&D
+// Copyright (C) 2014-201
9
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
//
// 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
//
// 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<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include "XGUI_DataModel.h"
//
#include "XGUI_DataModel.h"
@@
-68,18
+67,31
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) {
if ((*aIt)->isInHistory())
aCreated.append(*aIt);
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;
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();
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);
}
else {
aRow = aParent->nodeRow(aNode);
@@
-89,6
+101,10
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
dataChanged(aParentIndex1, aParentIndex2);
}
}
dataChanged(aParentIndex1, aParentIndex2);
}
}
+ if (aRebuildAll)
+ rebuildDataTree();
+
+ emit treeRebuilt();
}
else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) {
std::shared_ptr<ModelAPI_ObjectDeletedMessage> aUpdMsg =
}
else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) {
std::shared_ptr<ModelAPI_ObjectDeletedMessage> aUpdMsg =
@@
-97,14
+113,23
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
aUpdMsg->groups();
QTreeNodesList aList;
std::list<std::pair<std::shared_ptr<ModelAPI_Document>, std::string>>::const_iterator aIt;
aUpdMsg->groups();
QTreeNodesList aList;
std::list<std::pair<std::shared_ptr<ModelAPI_Document>, 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()));
}
for (aIt = aMsgGroups.cbegin(); aIt != aMsgGroups.cend(); aIt++) {
aList.append(myRoot->objectsDeleted(aIt->first, aIt->second.c_str()));
}
+ // Remove obsolete nodes
+ QTreeNodesList aRemaining;
foreach(ModuleBase_ITreeNode* aNode, aList) {
foreach(ModuleBase_ITreeNode* aNode, aList) {
+ if (myRoot->hasSubNode(aNode))
+ aRemaining.append(aNode);
+ }
+ // Update remaining nodes
+ foreach(ModuleBase_ITreeNode* aNode, aRemaining) {
if (aNode->parent())
aNode->parent()->update();
}
rebuildDataTree();
if (aNode->parent())
aNode->parent()->update();
}
rebuildDataTree();
+ emit treeRebuilt();
}
else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) {
std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
}
else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) {
std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
@@
-114,6
+139,7
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
QObjectPtrList aCreated;
std::set<ObjectPtr>::const_iterator aIt;
bool aRebuildAll = false;
QObjectPtrList aCreated;
std::set<ObjectPtr>::const_iterator aIt;
bool aRebuildAll = false;
+ emit beforeTreeRebuild();
for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) {
ObjectPtr aObj = (*aIt);
if (!aObj->isInHistory())
for (aIt = aObjects.cbegin(); aIt != aObjects.cend(); aIt++) {
ObjectPtr aObj = (*aIt);
if (!aObj->isInHistory())
@@
-129,21
+155,31
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
}
if (aRebuildAll) {
myRoot->update();
}
if (aRebuildAll) {
myRoot->update();
- rebuildDataTree();
}
else {
}
else {
+ QSet<ModuleBase_ITreeNode*> aParents;
foreach(ObjectPtr aObj, aCreated) {
ModuleBase_ITreeNode* aNode = myRoot->subNode(aObj);
if (aNode) {
foreach(ObjectPtr aObj, aCreated) {
ModuleBase_ITreeNode* aNode = myRoot->subNode(aObj);
if (aNode) {
- aNode->update();
- rebuildDataTree();
- QModelIndex aFirstIdx = getIndex(aNode, 0);
- QModelIndex aLastIdx = getIndex(aNode, 2);
-
- dataChanged(aFirstIdx, aLastIdx);
+ if (aNode->parent()) {
+ if (aNode->parent() == myRoot) {
+ aParents.clear();
+ aParents.insert(myRoot);
+ break;
+ }
+ else {
+ aNode = aNode->parent();
+ }
+ }
+ aParents.insert(aNode);
}
}
}
}
+ foreach(ModuleBase_ITreeNode* aNode, aParents) {
+ aNode->update();
+ }
}
}
+ rebuildDataTree();
+ emit treeRebuilt();
}
else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_ORDER_UPDATED)) {
std::shared_ptr<ModelAPI_OrderUpdatedMessage> aUpdMsg =
}
else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_ORDER_UPDATED)) {
std::shared_ptr<ModelAPI_OrderUpdatedMessage> aUpdMsg =
@@
-153,8
+189,10
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
std::string aGroup = aUpdMsg->reordered()->group();
ModuleBase_ITreeNode* aNode = myRoot->findParent(aDoc, aGroup.c_str());
if (aNode) {
std::string aGroup = aUpdMsg->reordered()->group();
ModuleBase_ITreeNode* aNode = myRoot->findParent(aDoc, aGroup.c_str());
if (aNode) {
+ emit beforeTreeRebuild();
aNode->update();
rebuildDataTree();
aNode->update();
rebuildDataTree();
+ emit treeRebuilt();
}
}
}
}
}
}
@@
-179,6
+217,9
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
aCreated.append(aObj);
}
}
aCreated.append(aObj);
}
}
+ if (aCreated.length() == 0)
+ return;
+ emit beforeTreeRebuild();
foreach(ObjectPtr aObj, aCreated) {
ModuleBase_ITreeNode* aNode = myRoot->subNode(aObj);
if (aNode) {
foreach(ObjectPtr aObj, aCreated) {
ModuleBase_ITreeNode* aNode = myRoot->subNode(aObj);
if (aNode) {
@@
-201,6
+242,7
@@
void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMess
dataChanged(aFirstIdx, aLastIdx);
}
}
dataChanged(aFirstIdx, aLastIdx);
}
}
+ emit treeRebuilt();
}
}
}
}
@@
-216,7
+258,6
@@
void XGUI_DataModel::rebuildDataTree()
{
beginResetModel();
endResetModel();
{
beginResetModel();
endResetModel();
- emit treeRebuilt();
}
//******************************************************
}
//******************************************************
@@
-402,3
+443,10
@@
DocumentPtr XGUI_DataModel::document(const QModelIndex& theIndex) const
ModuleBase_ITreeNode* aNode = (ModuleBase_ITreeNode*)theIndex.internalPointer();
return aNode->document();
}
ModuleBase_ITreeNode* aNode = (ModuleBase_ITreeNode*)theIndex.internalPointer();
return aNode->document();
}
+
+
+//******************************************************
+bool XGUI_DataModel::hasNode(ModuleBase_ITreeNode* theNode) const
+{
+ return myRoot->hasSubNode(theNode);
+}