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