Core: restoreContent not restoring expressions (#21152)

This commit is contained in:
PaddleStroke
2025-05-06 19:02:35 +02:00
committed by GitHub
parent 920029f5ce
commit 4c8fadd68d
4 changed files with 24 additions and 1 deletions

View File

@@ -1215,6 +1215,20 @@ void DocumentObject::onDocumentRestored()
}
}
void DocumentObject::restoreFinished()
{
// some link type property cannot restore link information until other
// objects has been restored. For example, PropertyExpressionEngine and
// PropertySheet with expression containing label reference.
// So on document load they are handled in Document::afterRestore, but if the user
// use dumpContent and restoreContent then they need to be handled here.
std::vector<App::Property*> props;
getPropertyList(props);
for (auto prop : props) {
prop->afterRestore();
}
}
void DocumentObject::onUndoRedoFinished()
{}

View File

@@ -752,6 +752,8 @@ protected:
void onEarlyChange(const Property* prop) override;
/// get called after a document has been fully restored
virtual void onDocumentRestored();
/// get called after an object finishes restoreContent.
void restoreFinished() override;
/// get called after an undo/redo transaction is finished
virtual void onUndoRedoFinished();
/// get called after setting the document

View File

@@ -10368,7 +10368,7 @@ bool SketchObject::getBlockedState(const Constraint* cstr, bool& blockedstate) c
void SketchObject::onDocumentRestored()
{
try {
restoreFinished();
onSketchRestore();
Part::Part2DObject::onDocumentRestored();
}
catch (...) {
@@ -10376,6 +10376,12 @@ void SketchObject::onDocumentRestored()
}
void SketchObject::restoreFinished()
{
App::DocumentObject::restoreFinished();
onSketchRestore();
}
void SketchObject::onSketchRestore()
{
try {
migrateSketch();

View File

@@ -917,6 +917,7 @@ protected:
void onDocumentRestored() override;
void restoreFinished() override;
void onSketchRestore();
std::string validateExpression(const App::ObjectIdentifier& path,
std::shared_ptr<const App::Expression> expr);