]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
"Integer" Attribute added.
authorsbh <sergey.belash@opencascade.com>
Wed, 3 Sep 2014 07:27:27 +0000 (11:27 +0400)
committersbh <sergey.belash@opencascade.com>
Wed, 3 Sep 2014 07:27:27 +0000 (11:27 +0400)
12 files changed:
src/Model/CMakeLists.txt
src/Model/Model_AttributeInteger.cpp [new file with mode: 0644]
src/Model/Model_AttributeInteger.h [new file with mode: 0644]
src/Model/Model_AttributeString.cpp
src/Model/Model_AttributeString.h
src/Model/Model_Data.cpp
src/Model/Model_Data.h
src/ModelAPI/CMakeLists.txt
src/ModelAPI/ModelAPI.i
src/ModelAPI/ModelAPI_AttributeInteger.h [new file with mode: 0644]
src/ModelAPI/ModelAPI_Data.h
src/ModelAPI/ModelAPI_PluginManager.cpp

index bd10db278bc1ca934146eb2be6c47d331d2a9998..63d79a60eb9d0c02433bb48cb561820c428e6449 100644 (file)
@@ -13,6 +13,7 @@ SET(PROJECT_HEADERS
     Model_AttributeRefList.h
     Model_AttributeBoolean.h
     Model_AttributeString.h
+    Model_AttributeInteger.h
     Model_Events.h
     Model_Update.h
     Model_Validator.h
@@ -35,6 +36,7 @@ SET(PROJECT_SOURCES
     Model_AttributeRefList.cpp
     Model_AttributeBoolean.cpp
     Model_AttributeString.cpp
+    Model_AttributeInteger.cpp
     Model_Events.cpp
     Model_Update.cpp
     Model_Validator.cpp
diff --git a/src/Model/Model_AttributeInteger.cpp b/src/Model/Model_AttributeInteger.cpp
new file mode 100644 (file)
index 0000000..1d72baa
--- /dev/null
@@ -0,0 +1,35 @@
+// File:        Model_AttributeInteger.cpp
+// Created:     03 sep 2014
+// Author:      sbh
+
+#include <Model_AttributeInteger.h>
+
+#include <ModelAPI_Attribute.h>
+#include <ModelAPI_Data.h>
+#include <ModelAPI_Object.h>
+
+#include <Standard_TypeDef.hxx>
+#include <TDataStd_Integer.hxx>
+
+void Model_AttributeInteger::setValue(const int theValue)
+{
+  if (!myIsInitialized || myInteger->Get() != theValue) {
+    myInteger->Set(theValue);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+int Model_AttributeInteger::value()
+{
+  return myInteger->Get();
+}
+
+Model_AttributeInteger::Model_AttributeInteger(TDF_Label& theLabel)
+{
+  // check the attribute could be already presented in this doc (after load document)
+  myIsInitialized = theLabel.FindAttribute(TDataStd_Integer::GetID(), myInteger) == Standard_True;
+  if (!myIsInitialized) {
+    // create attribute: not initialized by value yet, just zero
+    myInteger = TDataStd_Integer::Set(theLabel, 0);
+  }
+}
diff --git a/src/Model/Model_AttributeInteger.h b/src/Model/Model_AttributeInteger.h
new file mode 100644 (file)
index 0000000..c4be993
--- /dev/null
@@ -0,0 +1,36 @@
+// File:        Model_AttributeInteger.h
+// Created:     03 sep 2014
+// Author:      sbh
+
+#ifndef MODEL_ATTRIBUTEINTEGER_H_
+#define MODEL_ATTRIBUTEINTEGER_H_
+
+#include <Model.h>
+#include <ModelAPI_AttributeInteger.h>
+
+#include <TDF_Label.hxx>
+#include <TDataStd_Integer.hxx>
+
+/**\class Model_AttributeInteger
+ * \ingroup DataModel
+ * \brief Attribute that contains integer (int).
+ */
+
+class Model_AttributeInteger : public ModelAPI_AttributeInteger
+{
+  Handle_TDataStd_Integer myInteger;
+ public:
+  /// Defines the int value
+  MODEL_EXPORT virtual void setValue(const int theValue);
+
+  /// Returns the int value
+  MODEL_EXPORT virtual int value();
+
+ protected:
+  /// Initializes attibutes
+  Model_AttributeInteger(TDF_Label& theLabel);
+
+  friend class Model_Data;
+};
+
+#endif
index fa22e10224566a26c9f746dfd5a61a0806783696..8a9d6f0ebcea225222a1361f5842200645c65647 100644 (file)
@@ -1,6 +1,6 @@
 // File:        Model_AttributeString.cpp
-// Created:     2 june 2014
-// Author:      Vitaly Smetannikov
+// Created:     25 august 2014
+// Author:      sbh
 
 #include <Model_AttributeString.h>
 #include <ModelAPI_AttributeString.h>
index 2695cbcf5ee16f256dc953557378e652aba03f86..a75ddae6a6e3313b5177b18677e0c1b05944311c 100644 (file)
@@ -1,9 +1,9 @@
 // File:        Model_AttributeString.h
-// Created:     2 june 2014
-// Author:      Vitaly Smetannikov
+// Created:     25 august 2014
+// Author:      sbh
 
-#ifndef Model_AttributeString_H_
-#define Model_AttributeString_H_
+#ifndef MODEL_ATTRIBUTESTRING_H_
+#define MODEL_ATTRIBUTESTRING_H_
 
 #include <Model.h>
 #include <ModelAPI_AttributeString.h>
 
 class Model_AttributeString : public ModelAPI_AttributeString
 {
-  Handle_TDataStd_Name myString;  ///< double is Real attribute
+  Handle_TDataStd_Name myString;
  public:
-  /// Defines the double value
+  /// Defines the std::string value
   MODEL_EXPORT virtual void setValue(const std::string& theValue);
 
-  /// Returns the double value
+  /// Returns the std::string  value
   MODEL_EXPORT virtual std::string value();
 
  protected:
index dc80d902407594bf1794ad48ce6a5ed69877b567..d97975153fc87bd3f3bfd72cf710da011ff86d5b 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <Model_Data.h>
 #include <Model_AttributeDocRef.h>
+#include <Model_AttributeInteger.h>
 #include <Model_AttributeDouble.h>
 #include <Model_AttributeReference.h>
 #include <Model_AttributeRefAttr.h>
@@ -20,6 +21,8 @@
 
 #include <TDataStd_Name.hxx>
 
+#include <string>
+
 Model_Data::Model_Data()
 {
 }
@@ -62,8 +65,14 @@ void Model_Data::addAttribute(const std::string& theID, const std::string theAtt
   ModelAPI_Attribute* anAttr = 0;
   if (theAttrType == ModelAPI_AttributeDocRef::type()) {
     anAttr = new Model_AttributeDocRef(anAttrLab);
+  } else if (theAttrType == Model_AttributeInteger::type()) {
+    anAttr = new Model_AttributeInteger(anAttrLab);
   } else if (theAttrType == ModelAPI_AttributeDouble::type()) {
     anAttr = new Model_AttributeDouble(anAttrLab);
+  } else if (theAttrType == Model_AttributeBoolean::type()) {
+    anAttr = new Model_AttributeBoolean(anAttrLab);
+  } else if (theAttrType == Model_AttributeString::type()) {
+    anAttr = new Model_AttributeString(anAttrLab);
   } else if (theAttrType == ModelAPI_AttributeReference::type()) {
     anAttr = new Model_AttributeReference(anAttrLab);
   } else if (theAttrType == ModelAPI_AttributeRefAttr::type()) {
@@ -76,10 +85,6 @@ void Model_Data::addAttribute(const std::string& theID, const std::string theAtt
     anAttr = new GeomData_Dir(anAttrLab);
   } else if (theAttrType == GeomData_Point2D::type()) {
     anAttr = new GeomData_Point2D(anAttrLab);
-  } else if (theAttrType == Model_AttributeBoolean::type()) {
-    anAttr = new Model_AttributeBoolean(anAttrLab);
-  } else if (theAttrType == Model_AttributeString::type()) {
-    anAttr = new Model_AttributeString(anAttrLab);
   }
   if (anAttr) {
     myAttrs[theID] = boost::shared_ptr<ModelAPI_Attribute>(anAttr);
@@ -119,6 +124,21 @@ boost::shared_ptr<ModelAPI_AttributeDouble> Model_Data::real(const std::string&
   return aRes;
 }
 
+boost::shared_ptr<ModelAPI_AttributeInteger> Model_Data::integer(const std::string& theID)
+{
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  if (aFound == myAttrs.end()) {
+    // TODO: generate error on unknown attribute request and/or add mechanism for customization
+    return boost::shared_ptr<ModelAPI_AttributeInteger>();
+  }
+  boost::shared_ptr<ModelAPI_AttributeInteger> aRes = boost::dynamic_pointer_cast<
+      ModelAPI_AttributeInteger>(aFound->second);
+  if (!aRes) {
+    // TODO: generate error on invalid attribute type request
+  }
+  return aRes;
+}
+
 boost::shared_ptr<ModelAPI_AttributeBoolean> Model_Data::boolean(const std::string& theID)
 {
   std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
index 6597787697e15399e192b73edfa4eaa003ace48a..31ff67ff2adcf25fdeb823285c904cecf7b4172f 100644 (file)
@@ -10,6 +10,7 @@
 #include <ModelAPI_AttributeBoolean.h>
 #include <ModelAPI_AttributeDocRef.h>
 #include <ModelAPI_AttributeDouble.h>
+#include <ModelAPI_AttributeInteger.h>
 #include <ModelAPI_AttributeRefAttr.h>
 #include <ModelAPI_AttributeReference.h>
 #include <ModelAPI_AttributeRefList.h>
@@ -65,6 +66,9 @@ class Model_Data : public ModelAPI_Data
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeDocRef> docRef(const std::string& theID);
   /// Returns the attribute that contains real value with double precision
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeDouble> real(const std::string& theID);
+  /// Returns the attribute that contains integer value
+  MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeInteger>
+    integer(const std::string& theID);
   /// Returns the attribute that contains reference to a feature
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeReference>
     reference(const std::string& theID);
index e108834735f793213a150204954a9b32ebdce0dc..d7493bb18b737eaaa5cb52db6a59cef492a09b09 100644 (file)
@@ -12,6 +12,7 @@ SET(PROJECT_HEADERS
     ModelAPI_Object.h
     ModelAPI_Document.h
     ModelAPI_Attribute.h
+    ModelAPI_AttributeInteger.h
     ModelAPI_AttributeDouble.h
     ModelAPI_AttributeDocRef.h
     ModelAPI_AttributeReference.h
index 29e75fe30145c3d5265fe47cd2c6362ef102dd3d..dbcb59eaf3cccc62f13c0bdf06c36dcc3a45a2ea 100644 (file)
@@ -12,6 +12,7 @@
   #include "ModelAPI_Attribute.h"
   #include "ModelAPI_AttributeDocRef.h"
   #include "ModelAPI_AttributeDouble.h"
+  #include "ModelAPI_AttributeInteger.h"
   #include "ModelAPI_AttributeString.h"
   #include "ModelAPI_AttributeReference.h"
   #include "ModelAPI_AttributeRefAttr.h"
@@ -50,6 +51,7 @@
 %shared_ptr(ModelAPI_Attribute)
 %shared_ptr(ModelAPI_AttributeDocRef)
 %shared_ptr(ModelAPI_AttributeDouble)
+%shared_ptr(ModelAPI_AttributeInteger)
 %shared_ptr(ModelAPI_AttributeString)
 %shared_ptr(ModelAPI_AttributeReference)
 %shared_ptr(ModelAPI_AttributeRefAttr)
@@ -68,6 +70,7 @@
 %include "ModelAPI_Attribute.h"
 %include "ModelAPI_AttributeDocRef.h"
 %include "ModelAPI_AttributeDouble.h"
+%include "ModelAPI_AttributeInteger.h"
 %include "ModelAPI_AttributeString.h"
 %include "ModelAPI_AttributeReference.h"
 %include "ModelAPI_AttributeRefAttr.h"
diff --git a/src/ModelAPI/ModelAPI_AttributeInteger.h b/src/ModelAPI/ModelAPI_AttributeInteger.h
new file mode 100644 (file)
index 0000000..6e63caf
--- /dev/null
@@ -0,0 +1,55 @@
+// File:        ModelAPI_AttributeInteger.h
+// Created:     2 Apr 2014
+// Author:      Mikhail PONIKAROV
+
+#ifndef MODELAPI_ATTRIBUTEINTEGER_H_
+#define MODELAPI_ATTRIBUTEINTEGER_H_
+
+#include <ModelAPI.h>
+#include <ModelAPI_Attribute.h>
+
+#include <string>
+
+
+/**\class ModelAPI_AttributeInteger
+ * \ingroup DataModel
+ * \brief API for the attribute that contains integer (int).
+ */
+
+class ModelAPI_AttributeInteger : public ModelAPI_Attribute
+{
+ public:
+  /// Defines the integer value
+  MODELAPI_EXPORT virtual void setValue(const int theValue) = 0;
+
+  /// Returns the inhteger value
+  MODELAPI_EXPORT virtual int value() = 0;
+
+  /// Returns the type of this class of attributes
+  MODELAPI_EXPORT static std::string type()
+  {
+    return "Integer";
+  }
+
+  /// Returns the type of this class of attributes, not static method
+  MODELAPI_EXPORT virtual std::string attributeType()
+  {
+    return type();
+  }
+
+  /// To virtually destroy the fields of successors
+  MODELAPI_EXPORT virtual ~ModelAPI_AttributeInteger()
+  {
+  }
+
+ protected:
+  /// Objects are created for features automatically
+  MODELAPI_EXPORT ModelAPI_AttributeInteger()
+  {
+  }
+};
+
+//! Pointer on double attribute
+typedef boost::shared_ptr<ModelAPI_AttributeInteger> AttributeIntegerPtr;
+
+#endif
index b11bb66fb45b521a589eef83dd561bcb1616bdf6..ba9691136bb3566f661ec5445f5dd35fa38246d2 100644 (file)
@@ -11,6 +11,7 @@
 #include <boost/shared_ptr.hpp>
 
 class ModelAPI_AttributeDocRef;
+class ModelAPI_AttributeInteger;
 class ModelAPI_AttributeDouble;
 class ModelAPI_AttributeReference;
 class ModelAPI_AttributeRefAttr;
@@ -41,6 +42,8 @@ class MODELAPI_EXPORT ModelAPI_Data
   virtual boost::shared_ptr<ModelAPI_AttributeDocRef> docRef(const std::string& theID) = 0;
   /// Returns the attribute that contains real value with double precision
   virtual boost::shared_ptr<ModelAPI_AttributeDouble> real(const std::string& theID) = 0;
+  /// Returns the attribute that contains integer value
+  virtual boost::shared_ptr<ModelAPI_AttributeInteger> integer(const std::string& theID) = 0;
   /// Returns the attribute that contains reference to a feature
   virtual boost::shared_ptr<ModelAPI_AttributeReference> reference(const std::string& theID) = 0;
   /// Returns the attribute that contains reference to an attribute of a feature
index 35048c4258232c143738e8ede6157a5aa364db90..52f14debaf7b8eb580e1a2bfdf3a60da02cabd76 100644 (file)
@@ -16,6 +16,7 @@
 #include <ModelAPI_AttributeDocRef.h>
 #include <ModelAPI_AttributeDouble.h>
 #include <ModelAPI_AttributeBoolean.h>
+#include <ModelAPI_AttributeInteger.h>
 #include <ModelAPI_AttributeString.h>
 #include <ModelAPI_AttributeReference.h>
 #include <ModelAPI_AttributeRefAttr.h>