X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Events.h;h=97f4170a4c8f7eadda1d44a5919d9b2207aaadbd;hb=9a9079c59a6aaefb49725080f178559415482a19;hp=c4af9f5279248d6423bec10de83b7d63eb638cfc;hpb=10c74b99318f5265c9a60a178932b03f69adfee5;p=modules%2Fshaper.git diff --git a/src/Model/Model_Events.h b/src/Model/Model_Events.h index c4af9f527..97f4170a4 100644 --- a/src/Model/Model_Events.h +++ b/src/Model/Model_Events.h @@ -1,59 +1,118 @@ +// 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 - -class ModelAPI_Feature; -class ModelAPI_Document; - -/// Event ID that feature is created (comes with ModelAPI_FeatureUpdatedMessage) -static const char * EVENT_FEATURE_CREATED = "FeatureCreated"; -/// Event ID that data of feature is updated (comes with ModelAPI_FeatureUpdatedMessage) -static const char * EVENT_FEATURE_UPDATED = "FeatureUpdated"; -/// Event ID that data of feature is deleted (comes with ModelAPI_FeatureDeletedMessage) -static const char * EVENT_FEATURE_DELETED = "FeatureDeleted"; - -/// Message that feature was changed (used for Object Browser update) -class ModelAPI_FeatureUpdatedMessage : public Event_Message { - std::shared_ptr myDoc; ///< document owner of the feature - std::shared_ptr myFeature; ///< which feature is changed -public: - /// sender is not important, all information is located in the feature - ModelAPI_FeatureUpdatedMessage( - const std::shared_ptr& theDoc, - const std::shared_ptr& theFeature, - const Event_ID& theEvent); + +/// 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; + + /// creates reordered message and sends to the loop + virtual void sendReordered(const std::shared_ptr& theDoc, + const std::string& theGroup) const; + + /// must be one per application, the constructor for internal usage only + Model_EventCreator(); +}; + +/// 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 + + /// 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); + + friend class Model_EventCreator; + public: /// Returns the feature that has been updated - std::shared_ptr feature() const {return myFeature;} + virtual const std::set& objects() const; + + //! Creates a new empty group (to store it in the loop before flush) + virtual std::shared_ptr newEmpty(); + + //! Allows to join the given message with the current one + virtual void Join(const std::shared_ptr& theJoined); +}; + +/// Message that feature was deleted (used for Object Browser update) +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 + + /// 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 document that has been updated - std::shared_ptr document() const {return myDoc;} + virtual std::shared_ptr document() const + { + return myDoc; + } + + /// Returns the group where the objects were deleted + virtual const std::set& groups() const + { + return myGroups; + } + + /// Returns the new empty message of this type + virtual std::shared_ptr newEmpty(); + + /// Returns the identifier of this message + virtual const Events_ID messageId(); + + /// Appends to this message the given one + virtual void Join(const std::shared_ptr& theJoined); }; /// Message that feature was deleted (used for Object Browser update) -class ModelAPI_FeatureDeletedMessage : public Event_Message { - std::shared_ptr myDoc; ///< document owner of the feature - std::string myGroup; ///< group identifier that contained the deleted feature -public: - /// creates a message by initialization of fields - ModelAPI_FeatureDeletedMessage(const std::shared_ptr& theDoc, - const std::string& theGroup); +class Model_OrderUpdatedMessage : public ModelAPI_OrderUpdatedMessage +{ + std::shared_ptr myDoc; ///< document owner of the feature + std::string myGroup; ///< group identifier that contained the deleted feature - /// Returns the ID of this message (EVENT_FEATURE_DELETED) - static const Event_ID messageId(); + /// Use ModelAPI for creation of this event. + Model_OrderUpdatedMessage(const std::shared_ptr& theDoc, + const std::string& theGroup); - /// Returns the feature that has been updated - std::shared_ptr document() const {return myDoc;} + friend class Model_EventCreator; + public: + /// Returns the document that has been updated + virtual std::shared_ptr document() const + { + return myDoc; + } + + /// Returns the group where the objects were reordered + virtual const std::string& group() const + { + return myGroup; + } - /// Returns the group where the feature was deleted - const std::string& group() const {return myGroup;} + /// Returns the identifier of this message + virtual const Events_ID messageId(); }; #endif