PropertyPythonObject is used to manage Py::Object instances as properties. More...
#include <PropertyPythonObject.h>
Public Member Functions | |
virtual Property * | Copy (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 PyObject * | getPyObject (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) |
PropertyPythonObject is used to manage Py::Object instances as properties.
Definition at line 47 of file PropertyPythonObject.h.
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.
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] |
Reimplemented from App::Property.
Definition at line 42 of file PropertyPythonObject.cpp.
Referenced by Gui::ViewProviderPythonFeatureImp::attach(), Gui::ViewProviderPythonFeatureImp::claimChildren(), App::FeaturePythonImp::execute(), Gui::ViewProviderPythonFeatureImp::finishRestoring(), Gui::ViewProviderPythonFeatureImp::getDefaultDisplayMode(), Gui::ViewProviderPythonFeatureImp::getDisplayModes(), Gui::ViewProviderPythonFeatureImp::getIcon(), Gui::ViewProviderPythonFeatureImp::onChanged(), App::FeaturePythonImp::onChanged(), Paste(), Gui::ViewProviderPythonFeatureImp::setDisplayMode(), Gui::ViewProviderPythonFeatureImp::setEdit(), Gui::ViewProviderPythonFeatureObserver::slotAppendObject(), Gui::ViewProviderPythonFeatureObserver::slotDeleteObject(), Gui::ViewProviderPythonFeatureImp::unsetEdit(), and Gui::ViewProviderPythonFeatureImp::updateData().
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.
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 |
Definition at line 63 of file PropertyPythonObject.cpp.
Referenced by Gui::ViewProviderPythonFeatureT< ViewProviderT >::onChanged().
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] |
Definition at line 278 of file PropertyPythonObject.cpp.
References App::Property::aboutToSetValue(), getClassTypeId(), App::Property::getTypeId(), and App::Property::hasSetValue().
void PropertyPythonObject::Restore | ( | Base::XMLReader & | reader | ) | [virtual] |
Use Python's pickle module to restore the object.
Implements Base::Persistence.
Definition at line 223 of file PropertyPythonObject.cpp.
References App::Property::aboutToSetValue(), Base::XMLReader::addFile(), Base::base64_decode(), buffer, DrawingExample::file, fromString(), Base::XMLReader::getAttribute(), Base::XMLReader::hasAttribute(), App::Property::hasSetValue(), and Base::XMLReader::readElement().
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 ); }
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 | ) |
Definition at line 56 of file PropertyPythonObject.cpp.
References App::Property::aboutToSetValue(), and App::Property::hasSetValue().
std::string PropertyPythonObject::toString | ( | void | ) | const |
Definition at line 80 of file PropertyPythonObject.cpp.
References Py::String::as_std_string(), Base::Console(), Py::Object::getAttr(), and Base::Exception::what().
Referenced by Save(), and SaveDocFile().