diff --git a/src/App/Document.h b/src/App/Document.h index f192244e8cc7..bd7f630236d1 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -123,8 +123,12 @@ class AppExport Document : public App::PropertyContainer boost::signal signalRestoreDocument; boost::signal&, Base::Writer &)> signalExportObjects; + boost::signal&, + Base::Writer &)> signalExportViewObjects; boost::signal&, Base::XMLReader&)> signalImportObjects; + boost::signal&, Base::Reader&, + const std::map&)> signalImportViewObjects; //@} /** @name File handling of the document */ diff --git a/src/App/MergeDocuments.cpp b/src/App/MergeDocuments.cpp index 3f5198b29826..f02f7d417f84 100644 --- a/src/App/MergeDocuments.cpp +++ b/src/App/MergeDocuments.cpp @@ -25,6 +25,9 @@ # include # include #endif + +#include + #include "MergeDocuments.h" #include #include @@ -94,12 +97,17 @@ class XMLMergeReader : public Base::XMLReader }; } -MergeDocuments::MergeDocuments(App::Document* doc) : appdoc(doc) +MergeDocuments::MergeDocuments(App::Document* doc) : guiup(false), appdoc(doc) { connectExport = doc->signalExportObjects.connect (boost::bind(&MergeDocuments::exportObject, this, _1, _2)); connectImport = doc->signalImportObjects.connect (boost::bind(&MergeDocuments::importObject, this, _1, _2)); + + QCoreApplication* app = QCoreApplication::instance(); + if (app && app->inherits("QApplication")) { + guiup = true; + } } MergeDocuments::~MergeDocuments() @@ -143,19 +151,27 @@ void MergeDocuments::exportObject(const std::vector& o, Ba void MergeDocuments::Save (Base::Writer & w) const { // Save view provider stuff + if (guiup) { + w.addFile("GuiDocument.xml", this); + } } void MergeDocuments::Restore(Base::XMLReader &r) { // Restore view provider stuff + if (guiup) { + r.addFile("GuiDocument.xml", this); + } } void MergeDocuments::SaveDocFile (Base::Writer & w) const { // Save view provider stuff + appdoc->signalExportViewObjects(this->objects, w); } void MergeDocuments::RestoreDocFile(Base::Reader & r) { // Restore view provider stuff + appdoc->signalImportViewObjects(this->objects, r, this->nameMap); } diff --git a/src/App/MergeDocuments.h b/src/App/MergeDocuments.h index f11236b9def7..65693ba772cb 100644 --- a/src/App/MergeDocuments.h +++ b/src/App/MergeDocuments.h @@ -49,6 +49,7 @@ class AppExport MergeDocuments : public Base::Persistence void RestoreDocFile(Base::Reader & r); private: + bool guiup; zipios::ZipInputStream* stream; App::Document* appdoc; std::vector objects; diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index d448f3600968..1774ac790fbf 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -94,6 +94,8 @@ struct DocumentP Connection connectRestDocument; Connection connectStartLoadDocument; Connection connectFinishLoadDocument; + Connection connectExportObjects; + Connection connectImportObjects; }; } // namespace Gui @@ -136,6 +138,11 @@ Document::Document(App::Document* pcDocument,Application * app) d->connectFinishLoadDocument = App::GetApplication().signalFinishRestoreDocument.connect (boost::bind(&Gui::Document::slotFinishRestoreDocument, this, _1)); + d->connectExportObjects = pcDocument->signalExportViewObjects.connect + (boost::bind(&Gui::Document::exportObjects, this, _1, _2)); + d->connectImportObjects = pcDocument->signalImportViewObjects.connect + (boost::bind(&Gui::Document::importObjects, this, _1, _2, _3)); + // pointer to the python class // NOTE: As this Python object doesn't get returned to the interpreter we // mustn't increment it (Werner Jan-12-2006) @@ -162,6 +169,8 @@ Document::~Document() d->connectRestDocument.disconnect(); d->connectStartLoadDocument.disconnect(); d->connectFinishLoadDocument.disconnect(); + d->connectExportObjects.disconnect(); + d->connectImportObjects.disconnect(); // e.g. if document gets closed from within a Python command d->_isClosing = true;