Salome HOME
Copyright update 2022
[modules/shaper.git] / src / Model / Model_Events.cpp
index 30d6e70a4321301f96d804b55120fcf018f7909d..0ba69e7eb20a249b5ec835036d6af824802467ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2022  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
 //
 // 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 <Model_Events.h>
@@ -33,6 +32,22 @@ void Model_EventCreator::sendUpdated(const ObjectPtr& theObject, const Events_ID
   Events_Loop::loop()->send(aMsg, isGroupped);
 }
 
+void Model_EventCreator::sendUpdated(const std::list<ObjectPtr>& theObjects,
+  const Events_ID& theEvent, const bool isGroupped) const
+{
+  if (theObjects.empty())
+    return;
+  std::list<ObjectPtr>::const_iterator anObj = theObjects.cbegin();
+  std::shared_ptr<Model_ObjectUpdatedMessage> aMsg(
+    new Model_ObjectUpdatedMessage(*anObj, theEvent));
+  for(anObj++; anObj != theObjects.cend(); anObj++) {
+    std::shared_ptr<Model_ObjectUpdatedMessage> aJoined(
+      new Model_ObjectUpdatedMessage(*anObj, theEvent));
+    aMsg->Join(aJoined);
+  }
+  Events_Loop::loop()->send(aMsg, isGroupped);
+}
+
 void Model_EventCreator::sendDeleted(const std::shared_ptr<ModelAPI_Document>& theDoc,
                                      const std::string& theGroup) const
 {
@@ -88,16 +103,18 @@ void Model_ObjectUpdatedMessage::Join(const std::shared_ptr<Events_MessageGroup>
 /////////////////////// DELETED MESSAGE /////////////////////////////
 Model_ObjectDeletedMessage::Model_ObjectDeletedMessage(
     const std::shared_ptr<ModelAPI_Document>& theDoc, const std::string& theGroup)
-    : ModelAPI_ObjectDeletedMessage(messageId(), 0),
-      myDoc(theDoc)
+    : ModelAPI_ObjectDeletedMessage(messageId(), 0)
 {
-  if (!theGroup.empty())
-    myGroups.insert(theGroup);
+  if (!theGroup.empty()) {
+    myGroups.push_back(
+      std::pair<std::shared_ptr<ModelAPI_Document>, std::string>(theDoc, theGroup));
+  }
 }
 
 std::shared_ptr<Events_MessageGroup> Model_ObjectDeletedMessage::newEmpty()
 {
-  return std::shared_ptr<Model_ObjectDeletedMessage>(new Model_ObjectDeletedMessage(myDoc, ""));
+  static const std::shared_ptr<ModelAPI_Document> anEmpty;
+  return std::shared_ptr<Model_ObjectDeletedMessage>(new Model_ObjectDeletedMessage(anEmpty, ""));
 }
 
 const Events_ID Model_ObjectDeletedMessage::messageId()
@@ -110,9 +127,19 @@ void Model_ObjectDeletedMessage::Join(const std::shared_ptr<Events_MessageGroup>
 {
   std::shared_ptr<Model_ObjectDeletedMessage> aJoined =
     std::dynamic_pointer_cast<Model_ObjectDeletedMessage>(theJoined);
-  std::set<std::string>::iterator aGIter = aJoined->myGroups.begin();
-  for (; aGIter != aJoined->myGroups.end(); aGIter++) {
-    myGroups.insert(*aGIter);
+
+  const std::list<std::pair<std::shared_ptr<ModelAPI_Document>, std::string>>& aJGroups =
+    aJoined->groups();
+
+  std::list<std::pair<std::shared_ptr<ModelAPI_Document>, std::string>>::iterator aGIter;
+  std::list<std::pair<std::shared_ptr<ModelAPI_Document>, std::string>>::const_iterator aJIter;
+  for (aJIter = aJGroups.cbegin(); aJIter != aJGroups.cend(); aJIter++) {
+    for (aGIter = myGroups.begin(); aGIter != myGroups.end(); aGIter++) {
+      if (aGIter->first == aJIter->first && aGIter->second == aJIter->second)
+        break; // exists, so no need to insert
+    }
+    if (aGIter == myGroups.end())
+      myGroups.push_back(*aJIter);
   }
 }