Salome HOME
Prepare version 1.2.1: quick fix for iteration 2 release
[modules/shaper.git] / src / Model / Model_Update.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        Model_Update.hxx
4 // Created:     25 Jun 2014
5 // Author:      Mikhail PONIKAROV
6
7 #ifndef Model_Update_H_
8 #define Model_Update_H_
9
10 #include "Model.h"
11 #include <ModelAPI_Data.h>
12 #include "Events_Listener.h"
13 #include <memory>
14 #include <set>
15 #include <map>
16
17 class ModelAPI_Object;
18 class ModelAPI_Feature;
19
20 /**\class Model_Update
21  * \ingroup DataModel
22  * \brief Updates the results of features when it is needed.
23  */
24 class Model_Update : public Events_Listener
25 {
26   /// created features during this transaction: must be updated all the time
27   std::set<std::shared_ptr<ModelAPI_Object> > myJustCreated;
28   /// updated features during this transaction: must be updated in the end of transaction
29   std::set<std::shared_ptr<ModelAPI_Object> > myJustUpdated;
30   /// to know that all next updates are caused by this execution
31   bool myIsExecuted;
32   /// to know execute or not automatically all update
33   bool myIsAutomatic;
34   /// to know that some parameter was changed during this operation
35   bool myIsParamUpdated;
36
37  public:
38   /// Is called only once, on startup of the application
39   Model_Update();
40
41   /// Processes the feature argument update: executes the results
42   MODEL_EXPORT virtual void processEvent(const std::shared_ptr<Events_Message>& theMessage);
43
44 protected:
45   /// updates all features in the document and then - in sub-documents
46   void updateInDoc(std::shared_ptr<ModelAPI_Document> theDoc);
47   /// Recoursively checks and updates the feature if needed (calls the execute method)
48   /// Returns true if feature was updated.
49   void updateFeature(std::shared_ptr<ModelAPI_Feature> theFeature);
50
51   /// Updates the selection and parametrical arguments before the later feature analysis
52   void updateArguments(std::shared_ptr<ModelAPI_Feature> theFeature);
53
54   /// Sends the redisplay events for feature and results, updates the updated status
55   void redisplayWithResults(std::shared_ptr<ModelAPI_Feature> theFeature, 
56     const ModelAPI_ExecState theState);
57
58   /// On operation start/end/abort the "Just" fileds must be cleared and processed in the right way
59   /// \param theTotalUpdate force to updates everything that has been changed in this operation
60   void processOperation(const bool theTotalUpdate, const bool theFinish = false);
61
62   /// Performs the feature execution
63   /// \returns the status of execution
64   void executeFeature(std::shared_ptr<ModelAPI_Feature> theFeature);
65
66   /// returns true if the object was created or updated
67   bool isUpdated(const std::shared_ptr<ModelAPI_Object>& theObj);
68 };
69
70 #endif