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
{
#include <memory>
-/// Allovs to create ModelAPI messages
+/// Allows to create ModelAPI messages
class Model_EventCreator : public ModelAPI_EventCreator
{
public:
/// creates created, updated or moved messages and sends to the loop
virtual void sendUpdated(const ObjectPtr& theObject, const Events_ID& theEvent,
const bool isGroupped = true) const;
+
+ /// creates created, updated or moved messages with the objects collection and sends to the loop
+ virtual void sendUpdated(const std::list<ObjectPtr>& theObjects, const Events_ID& theEvent,
+ const bool isGroupped = true) const;
/// creates deleted message and sends to the loop
virtual void sendDeleted(const std::shared_ptr<ModelAPI_Document>& theDoc,
const std::string& theGroup) const;
if (myTrsf.get() && baseRef().get()) { // the second condition is due to #2035
return baseRef()->partDoc();
}
+ if (!data()->isValid())
+ return DocumentPtr();
DocumentPtr aRes = data()->document(DOC_REF())->value();
return aRes;
}
std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
const std::set<ObjectPtr>& anObjs = aMsg->objects();
std::set<ObjectPtr>::const_iterator anObjIter = anObjs.cbegin();
+ std::list<ObjectPtr> aFeatures, aResults;
for(; anObjIter != anObjs.cend(); anObjIter++) {
if (std::dynamic_pointer_cast<Model_Document>((*anObjIter)->document())->executeFeatures()) {
if ((*anObjIter)->groupName() == ModelAPI_Feature::group()) {
// results creation means enabling, not update
- ModelAPI_EventCreator::get()->sendUpdated(*anObjIter, kUpdatedEvent);
+ aFeatures.push_back(*anObjIter);
} else {
- ModelAPI_EventCreator::get()->sendUpdated(*anObjIter, kRedisplayEvent);
+ aResults.push_back(*anObjIter);
}
}
}
+ ModelAPI_EventCreator::get()->sendUpdated(aFeatures, kUpdatedEvent);
+ ModelAPI_EventCreator::get()->sendUpdated(aResults, kRedisplayEvent);
return;
}
if (theMessage->eventID() == kUpdatedEvent) {
static const char * EVENT_DOCUMENT_CHANGED = "CurrentDocumentChanged";
/// Event ID that order of objects in group is changed,
-/// so, tree must be fully rectreated (movement of feature)
+/// so, tree must be fully recreated (movement of feature)
static const char * EVENT_ORDER_UPDATED = "OrderUpdated";
/// Event ID that the sketch is prepared and all grouped messages for the solver may be flushed
static const char * EVENT_UPDATE_SELECTION = "UpdateSelection";
/// Returns the identifier of the kind of a message
virtual const Events_ID messageId() = 0;
- /// Appenad to this message the given one.
+ /// Appends to this message the given one.
virtual void Join(const std::shared_ptr<Events_MessageGroup>& theJoined) = 0;
};
/// creates created, updated or moved messages and sends to the loop
virtual void sendUpdated(const ObjectPtr& theObject, const Events_ID& theEvent,
const bool isGroupped = true) const = 0;
+ /// creates created, updated or moved messages with the objects collection and sends to the loop
+ virtual void sendUpdated(const std::list<ObjectPtr>& theObjects, const Events_ID& theEvent,
+ const bool isGroupped = true) const = 0;
/// creates deleted message and sends to the loop
virtual void sendDeleted(const std::shared_ptr<ModelAPI_Document>& theDoc,
const std::string& theGroup) const = 0;
static void set(const ModelAPI_EventCreator* theCreator);
};
-// TODO(sbh): Move this message into a separate package, like "GuiAPI"
/// Contains the state information about the feature: is it enabled or disabled.
class ModelAPI_FeatureStateMessage : public Events_Message
{
int myDOF;
};
-/// Message sent when feature or attrubute has been moved.
+/// Message sent when feature or attribute has been moved.
/// Stores the moving object/attribute, original and new positions of mouse.
class ModelAPI_ObjectMovedMessage : public Events_Message
{