Optimize loading of projects with many document objects
This commit is contained in:
parent
117b6d8b0e
commit
371f3baa87
|
@ -112,8 +112,10 @@ public:
|
|||
boost::signal<void (const Document&)> signalActiveDocument;
|
||||
/// signal on saving Document
|
||||
boost::signal<void (const Document&)> signalSaveDocument;
|
||||
/// signal on starting to restore Document
|
||||
boost::signal<void (const Document&)> signalStartRestoreDocument;
|
||||
/// signal on restoring Document
|
||||
boost::signal<void (const Document&)> signalRestoreDocument;
|
||||
boost::signal<void (const Document&)> signalFinishRestoreDocument;
|
||||
//@}
|
||||
|
||||
|
||||
|
|
|
@ -999,6 +999,8 @@ void Document::restore (void)
|
|||
if (!reader.isValid())
|
||||
throw Base::FileException("Error reading compression file",FileName.getValue());
|
||||
|
||||
GetApplication().signalStartRestoreDocument(*this);
|
||||
|
||||
try {
|
||||
Document::Restore(reader);
|
||||
}
|
||||
|
@ -1019,7 +1021,7 @@ void Document::restore (void)
|
|||
It->second->purgeTouched();
|
||||
}
|
||||
|
||||
GetApplication().signalRestoreDocument(*this);
|
||||
GetApplication().signalFinishRestoreDocument(*this);
|
||||
}
|
||||
|
||||
bool Document::isSaved() const
|
||||
|
|
|
@ -89,7 +89,8 @@ struct DocumentP
|
|||
Connection connectActObject;
|
||||
Connection connectSaveDocument;
|
||||
Connection connectRestDocument;
|
||||
Connection connectLoadDocument;
|
||||
Connection connectStartLoadDocument;
|
||||
Connection connectFinishLoadDocument;
|
||||
};
|
||||
|
||||
} // namespace Gui
|
||||
|
@ -127,8 +128,10 @@ Document::Document(App::Document* pcDocument,Application * app)
|
|||
(boost::bind(&Gui::Document::Save, this, _1));
|
||||
d->connectRestDocument = pcDocument->signalRestoreDocument.connect
|
||||
(boost::bind(&Gui::Document::Restore, this, _1));
|
||||
d->connectLoadDocument = App::GetApplication().signalRestoreDocument.connect
|
||||
(boost::bind(&Gui::Document::slotRestoredDocument, this, _1));
|
||||
d->connectStartLoadDocument = App::GetApplication().signalStartRestoreDocument.connect
|
||||
(boost::bind(&Gui::Document::slotStartRestoreDocument, this, _1));
|
||||
d->connectFinishLoadDocument = App::GetApplication().signalFinishRestoreDocument.connect
|
||||
(boost::bind(&Gui::Document::slotFinishRestoreDocument, this, _1));
|
||||
|
||||
// pointer to the python class
|
||||
// NOTE: As this Python object doesn't get returned to the interpreter we
|
||||
|
@ -154,7 +157,8 @@ Document::~Document()
|
|||
d->connectActObject.disconnect();
|
||||
d->connectSaveDocument.disconnect();
|
||||
d->connectRestDocument.disconnect();
|
||||
d->connectLoadDocument.disconnect();
|
||||
d->connectStartLoadDocument.disconnect();
|
||||
d->connectFinishLoadDocument.disconnect();
|
||||
|
||||
// e.g. if document gets closed from within a Python command
|
||||
d->_isClosing = true;
|
||||
|
@ -668,8 +672,26 @@ void Document::RestoreDocFile(Base::Reader &reader)
|
|||
setModified(false);
|
||||
}
|
||||
|
||||
void Document::slotRestoredDocument(const App::Document&)
|
||||
void Document::slotStartRestoreDocument(const App::Document& doc)
|
||||
{
|
||||
if (d->_pcDocument != &doc)
|
||||
return;
|
||||
// disable this singal while loading a document
|
||||
d->connectActObject.block();
|
||||
}
|
||||
|
||||
void Document::slotFinishRestoreDocument(const App::Document& doc)
|
||||
{
|
||||
if (d->_pcDocument != &doc)
|
||||
return;
|
||||
d->connectActObject.unblock();
|
||||
App::DocumentObject* act = doc.getActiveObject();
|
||||
if (act) {
|
||||
ViewProvider* viewProvider = getViewProvider(act);
|
||||
if (viewProvider && viewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) {
|
||||
signalActivatedObject(*(static_cast<ViewProviderDocumentObject*>(viewProvider)));
|
||||
}
|
||||
}
|
||||
// some post-processing of view providers
|
||||
std::map<const App::DocumentObject*,ViewProviderDocumentObject*>::iterator it;
|
||||
for (it = d->_ViewProviderMap.begin(); it != d->_ViewProviderMap.end(); ++it) {
|
||||
|
|
|
@ -68,7 +68,8 @@ protected:
|
|||
void slotChangedObject(const App::DocumentObject&, const App::Property&);
|
||||
void slotRenamedObject(const App::DocumentObject&);
|
||||
void slotActivatedObject(const App::DocumentObject&);
|
||||
void slotRestoredDocument(const App::Document&);
|
||||
void slotStartRestoreDocument(const App::Document&);
|
||||
void slotFinishRestoreDocument(const App::Document&);
|
||||
//@}
|
||||
|
||||
public:
|
||||
|
@ -86,9 +87,9 @@ public:
|
|||
mutable boost::signal<void (const Gui::ViewProviderDocumentObject&)> signalRenamedObject;
|
||||
/// signal on activated Object
|
||||
mutable boost::signal<void (const Gui::ViewProviderDocumentObject&)> signalActivatedObject;
|
||||
/// signal on goes in edti mode
|
||||
/// signal on entering in edit mode
|
||||
mutable boost::signal<void (const Gui::ViewProviderDocumentObject&)> signalInEdit;
|
||||
/// signal on leave edit mode
|
||||
/// signal on leaving edit mode
|
||||
mutable boost::signal<void (const Gui::ViewProviderDocumentObject&)> signalResetEdit;
|
||||
//@}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user