]> SALOME platform Git repositories - modules/hydro.git/blob - src/HYDROData/HYDROData_Object.h
Salome HOME
4f2ae435e1570f20557053379f822131c98c1a70
[modules/hydro.git] / src / HYDROData / HYDROData_Object.h
1 #ifndef HYDROData_Object_HeaderFile
2 #define HYDROData_Object_HeaderFile
3
4 #include <HYDROData.h>
5
6 #include <NCollection_Sequence.hxx>
7 #include <TDF_Label.hxx>
8 #include <QMap>
9
10 class QString;
11 class QStringList;
12
13 ///! Kind of an object in a document
14 typedef int ObjectKind;
15 ///! Unrecognized object
16 const ObjectKind KIND_UNKNOWN = 0;
17 const ObjectKind KIND_IMAGE = 1;
18 const ObjectKind KIND_POLYLINE = 2;
19 const ObjectKind KIND_VISUAL_STATE = 3;
20 const ObjectKind KIND_BATHYMETRY = 4;
21
22 DEFINE_STANDARD_HANDLE(HYDROData_Object, MMgt_TShared)
23
24 /**\class HYDROData_Object
25  * \brief Generic class of any object in the data model.
26  *
27  * Interface for getting access to the object that belong to the data model.
28  * Managed by Document. Provides access to the common properties: 
29  * kind of an object, name.
30  */
31 class HYDROData_Object : public MMgt_TShared
32 {
33 protected:
34   /**
35    * Enumeration of tags corresponding to the persistent object parameters.
36    */
37   enum DataTag
38   {
39     DataTag_First = 0     ///< first tag, to reserve
40     // ...
41   };
42
43 public:
44   DEFINE_STANDARD_RTTI(HYDROData_Object);
45
46   /**
47    * Returns the kind of this object. Must be redefined in all objects of known type.
48    */
49   HYDRODATA_EXPORT virtual const ObjectKind GetKind() const {return KIND_UNKNOWN;}
50
51   /**
52    * Returns the name of this object.
53    */
54   HYDRODATA_EXPORT QString GetName() const;
55
56   /**
57    * Updates the name of this object.
58    */
59   HYDRODATA_EXPORT void SetName(const QString& theName);
60
61   /**
62    * Dump object to Python script representation.
63    * Base implementation returns empty list,
64    * You should reimplement this function in your derived class if it
65    * has Python API and can be imported/exported from/to Python script.
66    */
67   HYDRODATA_EXPORT virtual QStringList DumpToPython() const;
68
69   /**
70    * Checks is object exists in the data structure.
71    * \returns true is object is not exists in the data model
72    */
73   HYDRODATA_EXPORT bool IsRemoved() const;
74
75   /**
76    * Removes object from the data structure.
77    */
78   HYDRODATA_EXPORT void Remove();
79
80   /**
81    * Returns unique integer identifier of the object (may be used for ordering of objects)
82    */
83   HYDRODATA_EXPORT inline int ID() const {return myLab.Tag();}
84
85   /**
86    * Copies all properties of this to the destinated object.
87    * Objects must be the same type.
88    * \param theDestination initialized object (from any document) - target of copying
89    */
90   HYDRODATA_EXPORT void CopyTo(Handle_HYDROData_Object theDestination) const;
91
92   /**
93    * Returns the label of this object.
94    */
95   HYDRODATA_EXPORT TDF_Label& Label() {return myLab;}
96
97 protected:
98
99   friend class HYDROData_Iterator;
100
101   /**
102    * Creates new object in the internal data structure. Use higher level objects 
103    * to create objects with real content.
104    */
105   HYDRODATA_EXPORT HYDROData_Object();
106
107   /**
108    * Destructs properties of the object and object itself, removes it from the document.
109    */
110   virtual HYDRODATA_EXPORT ~HYDROData_Object();
111
112   /**
113    * Put the object to the label of the document.
114    * \param theLabel new label of the object
115    */
116   HYDRODATA_EXPORT virtual void SetLabel(TDF_Label theLabel);
117
118   /**
119    * Internal method that used to store the byte array attribute
120    * \param theTag tag of a label to store attribute (for 0 this is myLab)
121    * \param theData pointer to bytes array
122    * \param theLen number of bytes in byte array that must be stored
123    */
124   void SaveByteArray(const int theTag, const char* theData, const int theLen);
125
126   /**
127    * Internal method that used to retreive the content of byte array attribute
128    * \param theTag tag of a label that keeps the attribute (for 0 this is myLab)
129    * \param theLen number of bytes in byte array
130    * \returns pointer to the internal data structure wit harray content, 
131    *          or NULL if array size is zero
132    */
133   const char* ByteArray(const int theTag, int& theLen);
134
135 protected:
136   /// Array of pointers to the properties of this object; index in this array is returned by \a AddProperty.
137   TDF_Label myLab; ///< label of this object
138 };
139
140 typedef NCollection_Sequence<Handle_HYDROData_Object> HYDROData_SequenceOfObjects;
141
142 ///! Is Equal for HYDROData_Object mapping
143 HYDRODATA_EXPORT bool IsEqual(const Handle_HYDROData_Object& theObj1, const Handle_HYDROData_Object& theObj2);
144
145 #endif