X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Events.h;h=6c492c1ca3a3f1eff6ac8d4fe5e3862e7bfcea38;hb=6268ce56824c1df106da799af34f4575f247061a;hp=1fbf1980e1481b40ab2c1ef50340bf6131fc09f7;hpb=f581964034f8df715c46a07c5ecb762492d6b4cf;p=modules%2Fshaper.git diff --git a/src/Model/Model_Events.h b/src/Model/Model_Events.h index 1fbf1980e..6c492c1ca 100644 --- a/src/Model/Model_Events.h +++ b/src/Model/Model_Events.h @@ -1,110 +1,83 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: Model_Events.h // Created: 10 Apr 2014 // Author: Mikhail PONIKAROV -#ifndef Model_Events_HeaderFile -#define Model_Events_HeaderFile +#ifndef Model_Events_H_ +#define Model_Events_H_ #include -#include -#include -#include -#include -#include - -#include "ModelAPI_Feature.h" +#include + +#include + +/// Allovs 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 deleted message and sends to the loop + virtual void sendDeleted(const std::shared_ptr& theDoc, + const std::string& theGroup) const; + + /// must be one per application, the constructor for internal usage only + Model_EventCreator(); +}; -class ModelAPI_Document; +/// Message that feature was changed (used for Object Browser update): moved, updated and deleted +class Model_ObjectUpdatedMessage : public ModelAPI_ObjectUpdatedMessage +{ + std::set myObjects; ///< which feature is changed -/// Event ID that feature is created (comes with Model_FeatureUpdatedMessage) -static const char * EVENT_FEATURE_CREATED = "FeatureCreated"; -/// Event ID that data of feature is updated (comes with Model_FeatureUpdatedMessage) -static const char * EVENT_FEATURE_UPDATED = "FeatureUpdated"; -/// Event ID that data of feature is deleted (comes with Model_FeatureDeletedMessage) -static const char * EVENT_FEATURE_DELETED = "FeatureDeleted"; -/// Event ID that data of feature is updated (comes with Model_FeaturesMovedMessage) -static const char * EVENT_FEATURE_MOVED = "FeaturesMoved"; + /// Sender is not important, all information is located in the feature. + /// Use ModelAPI for creation of this event. Used for creation, movement and edition events. + Model_ObjectUpdatedMessage(const ObjectPtr& theObject, const Events_ID& theEvent); -/// Message that feature was changed (used for Object Browser update): moved, updated and deleted -class Model_FeatureUpdatedMessage : public Events_MessageGroup { - std::set myFeatures; ///< which feature is changed -public: - /// sender is not important, all information is located in the feature - Model_FeatureUpdatedMessage( - const FeaturePtr& theFeature, - const Events_ID& theEvent) : Events_MessageGroup(theEvent, 0) - {if (theFeature) myFeatures.insert(theFeature);} + friend class Model_EventCreator; + public: /// Returns the feature that has been updated - std::set features() const {return myFeatures;} + virtual const std::set& objects() const; //! Creates a new empty group (to store it in the loop before flush) - virtual Events_MessageGroup* newEmpty() { - FeaturePtr anEmptyFeature; - return new Model_FeatureUpdatedMessage(anEmptyFeature, eventID()); - } + virtual std::shared_ptr newEmpty(); //! Allows to join the given message with the current one - virtual void Join(Events_MessageGroup& theJoined) { - Model_FeatureUpdatedMessage* aJoined = dynamic_cast(&theJoined); - std::set::iterator aFIter = aJoined->myFeatures.begin(); - for(; aFIter != aJoined->myFeatures.end(); aFIter++) { - myFeatures.insert(*aFIter); - } - } + virtual void Join(const std::shared_ptr& theJoined); }; /// Message that feature was deleted (used for Object Browser update) -class Model_FeatureDeletedMessage : public Events_MessageGroup { - boost::shared_ptr myDoc; ///< document owner of the feature - std::set myGroups; ///< group identifiers that contained the deleted feature -public: - /// creates a message by initialization of fields -// Model_FeatureDeletedMessage(const boost::shared_ptr& theDoc, -// const std::string& theGroup); +class Model_ObjectDeletedMessage : public ModelAPI_ObjectDeletedMessage +{ + std::shared_ptr myDoc; ///< document owner of the feature + std::set myGroups; ///< group identifiers that contained the deleted feature - /// Returns the ID of this message (EVENT_FEATURE_DELETED) -// static const Events_ID messageId(); + /// Use ModelAPI for creation of this event. + Model_ObjectDeletedMessage(const std::shared_ptr& theDoc, + const std::string& theGroup); + friend class Model_EventCreator; + public: /// Returns the feature that has been updated - boost::shared_ptr document() const {return myDoc;} - - /// Returns the group where the feature was deleted - const std::set& groups() const {return myGroups;} - - //! Creates a new empty group (to store it in the loop before flush) -// virtual Events_MessageGroup* newEmpty(); - - //! Allows to join the given message with the current one -// virtual void Join(Events_MessageGroup& theJoined); - - Events_MessageGroup* newEmpty() { - return new Model_FeatureDeletedMessage(myDoc, ""); - } - - Model_FeatureDeletedMessage( - const boost::shared_ptr& theDoc, const std::string& theGroup) - : Events_MessageGroup(messageId(), 0), myDoc(theDoc) - + virtual std::shared_ptr document() const { - if (!theGroup.empty()) - myGroups.insert(theGroup); + return myDoc; } - const Events_ID messageId() + /// Returns the group where the feature was deleted + virtual const std::set& groups() const { - static Events_ID MY_ID = Events_Loop::eventByName(EVENT_FEATURE_DELETED); - return MY_ID; + return myGroups; } - void Join(Events_MessageGroup& theJoined) - { - Model_FeatureDeletedMessage* aJoined = dynamic_cast(&theJoined); - std::set::iterator aGIter = aJoined->myGroups.begin(); - for(; aGIter != aJoined->myGroups.end(); aGIter++) { - myGroups.insert(*aGIter); - } - } + virtual std::shared_ptr newEmpty(); + + virtual const Events_ID messageId(); + + virtual void Join(const std::shared_ptr& theJoined); }; #endif