]> SALOME platform Git repositories - modules/shaper.git/blob - src/ModelAPI/ModelAPI_Expression.h
Salome HOME
Merge branch 'master' into cgt/devCEA
[modules/shaper.git] / src / ModelAPI / ModelAPI_Expression.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        ModelAPI_Expression.h
4 // Created:     5 Aug 2015
5 // Author:      Sergey POKHODENKO
6
7 #ifndef ModelAPI_Expression_H_
8 #define ModelAPI_Expression_H_
9
10 #include "ModelAPI.h"
11
12 #include <memory>
13 #include <set>
14 #include <string>
15
16 /**\class ModelAPI_Expression
17  * \ingroup DataModel
18  * \brief Expression for calculated values.
19  */
20 class ModelAPI_Expression
21 {
22  public:
23   /// To virtually destroy the fields of successors
24   MODELAPI_EXPORT virtual ~ModelAPI_Expression();
25
26   /// Returns true if attribute was initialized by some value
27   MODELAPI_EXPORT virtual bool isInitialized();
28
29   /// Makes attribute initialized
30   MODELAPI_EXPORT virtual void setInitialized();
31
32   /// Sets the text of this Expression
33   MODELAPI_EXPORT virtual void setText(const std::string& theText) = 0;
34
35   /// Returns the text of this Expression
36   MODELAPI_EXPORT virtual std::string text() const = 0;
37
38   /// Allows to set expression (text) as invalid (by the parameters listener)
39   MODELAPI_EXPORT virtual void setInvalid(const bool theFlag) = 0;
40
41   /// Returns true if text is invalid
42   MODELAPI_EXPORT virtual bool isInvalid() = 0;
43
44   /// Allows to set expression (text) error (by the parameters listener)
45   MODELAPI_EXPORT virtual void setError(const std::string& theError) = 0;
46
47   /// Returns an expression error
48   MODELAPI_EXPORT virtual std::string error() = 0;
49
50   /// Defines the used parameters (by the parameters listener)
51   MODELAPI_EXPORT virtual
52     void setUsedParameters(const std::set<std::string>& theUsedParameters) = 0;
53
54   /// Returns the used parameters
55   MODELAPI_EXPORT virtual std::set<std::string> usedParameters() const = 0;
56
57   /// Returns True if the given string can be defined as a name of an expression variable
58   MODELAPI_EXPORT static bool isVariable(const std::string& theString);
59
60  protected:
61   /// Objects are created for features automatically
62   MODELAPI_EXPORT ModelAPI_Expression();
63   /// Reinitializes the internal state of the attribute (may be needed on undo/redo, abort, etc)
64   MODELAPI_EXPORT virtual void reinit() = 0;
65   /// Resets attribute to deafult state.
66   MODELAPI_EXPORT virtual void reset() {
67     myIsInitialized = false;
68   };
69
70   bool myIsInitialized; ///< is some value assigned to this attribute
71
72   friend class Model_Data;
73   friend class Model_AttributeDouble;
74   friend class Model_AttributeInteger;
75   friend class GeomData_Point;
76   friend class GeomData_Point2D;
77 };
78
79
80 /**\class ModelAPI_ExpressionDouble
81  * \ingroup DataModel
82  * \brief Expression for calculated double values.
83  */
84 class ModelAPI_ExpressionDouble : public virtual ModelAPI_Expression
85 {
86  public:
87   /// Defines the double value
88   MODELAPI_EXPORT virtual void setValue(const double theValue) = 0;
89
90   /// Returns the double value
91   MODELAPI_EXPORT virtual double value() = 0;
92
93  protected:
94   /// Objects are created for features automatically
95   MODELAPI_EXPORT ModelAPI_ExpressionDouble();
96
97   friend class Model_Data;
98 };
99
100
101 /**\class ModelAPI_ExpressionInteger
102  * \ingroup DataModel
103  * \brief Expression for calculated integer values.
104  */
105 class ModelAPI_ExpressionInteger : public virtual ModelAPI_Expression
106 {
107  public:
108   /// Defines the integer value
109   MODELAPI_EXPORT virtual void setValue(const int theValue) = 0;
110
111   /// Returns the integer value
112   MODELAPI_EXPORT virtual int value() = 0;
113
114  protected:
115   /// Objects are created for features automatically
116   MODELAPI_EXPORT ModelAPI_ExpressionInteger();
117
118   friend class Model_Data;
119 };
120
121
122 //! Smart pointers for objects
123 typedef std::shared_ptr<ModelAPI_Expression> ExpressionPtr;
124 typedef std::shared_ptr<ModelAPI_ExpressionDouble> ExpressionDoublePtr;
125 typedef std::shared_ptr<ModelAPI_ExpressionInteger> ExpressionIntegerPtr;
126
127 #endif