App::PropertyPythonObject Class Reference

PropertyPythonObject is used to manage Py::Object instances as properties. More...

#include <PropertyPythonObject.h>

Inheritance diagram for App::PropertyPythonObject:
App::Property Base::Persistence Base::BaseClass

List of all members.

Public Member Functions

virtual PropertyCopy (void) const
 Returns a new copy of the property (mainly for Undo/Redo and transactions).
void fromString (const std::string &)
virtual unsigned int getMemSize (void) const
 This method is used to get the size of objects It is not meant to have the exact size, it is more or less an estimation which runs fast! Is it two bytes or a GB? This method is defined in Base::Persistence.
virtual PyObjectgetPyObject (void)
 This method returns the Python wrapper for a C++ object.
virtual Base::Type getTypeId (void) const
Py::Object getValue () const
virtual void Paste (const Property &from)
 PropertyPythonObject (void)
virtual void Restore (Base::XMLReader &reader)
 Use Python's pickle module to restore the object.
virtual void RestoreDocFile (Base::Reader &reader)
 This method is used to restore large amounts of data from a file In this method you simply stream in your with SaveDocFile() saved data.
virtual void Save (Base::Writer &writer) const
 Use Python's pickle module to save the object.
virtual void SaveDocFile (Base::Writer &writer) const
 This method is used to save large amounts of data to a binary file.
virtual void setPyObject (PyObject *)
void setValue (Py::Object)
std::string toString () const
virtual ~PropertyPythonObject ()

Static Public Member Functions

static void * create (void)
static Base::Type getClassTypeId (void)
static void init (void)

Detailed Description

PropertyPythonObject is used to manage Py::Object instances as properties.

Author:
Werner Mayer

Definition at line 47 of file PropertyPythonObject.h.


Constructor & Destructor Documentation

PropertyPythonObject::PropertyPythonObject ( void   ) 

Definition at line 44 of file PropertyPythonObject.cpp.

Referenced by Copy().

PropertyPythonObject::~PropertyPythonObject (  )  [virtual]

Definition at line 48 of file PropertyPythonObject.cpp.


Member Function Documentation

Property * PropertyPythonObject::Copy ( void   )  const [virtual]

Returns a new copy of the property (mainly for Undo/Redo and transactions).

Implements App::Property.

Definition at line 271 of file PropertyPythonObject.cpp.

References draftTools::p, and PropertyPythonObject().

void * App::PropertyPythonObject::create ( void   )  [static]

Reimplemented from App::Property.

Definition at line 42 of file PropertyPythonObject.cpp.

void PropertyPythonObject::fromString ( const std::string &  repr  ) 

Definition at line 101 of file PropertyPythonObject.cpp.

References Base::Console(), Py::Object::getAttr(), and Base::Exception::what().

Referenced by Restore(), and RestoreDocFile().

Base::Type App::PropertyPythonObject::getClassTypeId ( void   )  [static]
unsigned int PropertyPythonObject::getMemSize ( void   )  const [virtual]

This method is used to get the size of objects It is not meant to have the exact size, it is more or less an estimation which runs fast! Is it two bytes or a GB? This method is defined in Base::Persistence.

See also:
Base::Persistence

Reimplemented from App::Property.

Definition at line 266 of file PropertyPythonObject.cpp.

PyObject * PropertyPythonObject::getPyObject ( void   )  [virtual]

This method returns the Python wrapper for a C++ object.

It's in the responsibility of the programmer to do the correct reference counting. Basically there are two ways how to implement that: Either always return a new Python object then reference counting is not a matter or return always the same Python object then the reference counter must be incremented by one. However, it's absolutely forbidden to return always the same Python object without incrementing the reference counter.

The default implementation returns 'None'.

Reimplemented from Base::BaseClass.

Definition at line 68 of file PropertyPythonObject.cpp.

References Py::new_reference_to().

Base::Type App::PropertyPythonObject::getTypeId ( void   )  const [virtual]

Reimplemented from App::Property.

Definition at line 42 of file PropertyPythonObject.cpp.

Py::Object PropertyPythonObject::getValue ( void   )  const
void App::PropertyPythonObject::init ( void   )  [static]

Reimplemented from App::Property.

Definition at line 42 of file PropertyPythonObject.cpp.

void PropertyPythonObject::Paste ( const Property from  )  [virtual]
void PropertyPythonObject::Restore ( Base::XMLReader reader  )  [virtual]
void PropertyPythonObject::RestoreDocFile ( Base::Reader  )  [virtual]

This method is used to restore large amounts of data from a file In this method you simply stream in your with SaveDocFile() saved data.

Again you have to apply for the call of this method in the Restore() call:

 void PropertyMeshKernel::Restore(Base::XMLReader &reader)
 {
   reader.readElement("Mesh");
   std::string file (reader.getAttribute("file") );
 
   if(file == "")
   {
     // read XML
     MeshCore::MeshDocXML restorer(*_pcMesh);
     restorer.Restore(reader);
   }else{
     // initate a file read
     reader.addFile(file.c_str(),this);
  }
 }

After you issued the reader.addFile() your RestoreDocFile() is called:

 void PropertyMeshKernel::RestoreDocFile(Base::Reader &reader)
 {
     _pcMesh->Read( reader );
 }
See also:
Base::Reader,Base::XMLReader

Reimplemented from Base::Persistence.

Definition at line 254 of file PropertyPythonObject.cpp.

References App::Property::aboutToSetValue(), buffer, fromString(), and App::Property::hasSetValue().

void PropertyPythonObject::Save ( Base::Writer writer  )  const [virtual]

Use Python's pickle module to save the object.

Implements Base::Persistence.

Definition at line 206 of file PropertyPythonObject.cpp.

References Base::base64_encode(), Base::Writer::ind(), Base::Writer::Stream(), and toString().

void PropertyPythonObject::SaveDocFile ( Base::Writer  )  const [virtual]

This method is used to save large amounts of data to a binary file.

Sometimes it makes no sense to write property data as XML. In case the amount of data is too big or the data type has a more effective way to save itself. In this cases it is possible to write the data in a seperate file inside the document archive. In case you want do so you have to re-implement SaveDocFile(). First, you have to inform the framework in Save() that you want do so. Here an example from the Mesh module which can save a (pontetionaly big) triangle mesh:

 void PropertyMeshKernel::Save (Base::Writer &writer) const
 {
   if (writer.isForceXML())
   {
     writer << writer.ind() << "<Mesh>" << std::endl;
     MeshCore::MeshDocXML saver(*_pcMesh);
     saver.Save(writer);
   }else{
    writer << writer.ind() << "<Mesh file=\"" << writer.addFile("MeshKernel.bms", this) << "\"/>" << std::endl;
 }

The writer.isForceXML() is an indication to force you to write XML. Regardless of size and effectivness. The second part informs the Base::writer through writer.addFile("MeshKernel.bms", this) that this object wants to write a file with the given name. The method addFile() returns a unique name that then is written in the XML stream. This allows your RestoreDocFile() method to identify and read the file again. Later your SaveDocFile() method is called as many times as you issued the addFile() call:

 void PropertyMeshKernel::SaveDocFile (Base::Writer &writer) const
 {
     _pcMesh->Write( writer );
 }

In this method you can simply stream your content to the file (Base::Writer inheriting from ostream).

Reimplemented from Base::Persistence.

Definition at line 247 of file PropertyPythonObject.cpp.

References buffer, Base::Writer::Stream(), and toString().

void PropertyPythonObject::setPyObject ( PyObject obj  )  [virtual]

Reimplemented from Base::BaseClass.

Definition at line 73 of file PropertyPythonObject.cpp.

References App::Property::aboutToSetValue(), and App::Property::hasSetValue().

void PropertyPythonObject::setValue ( Py::Object  o  ) 
std::string PropertyPythonObject::toString ( void   )  const

The documentation for this class was generated from the following files:

Generated on Wed Nov 23 19:01:45 2011 for FreeCAD by  doxygen 1.6.1