Core / Assembly: Add a way for vp edit modes to be restored.

This commit is contained in:
PaddleStroke
2024-11-20 11:17:26 +01:00
committed by WandererFan
parent 374c5713b2
commit ef3445e9e1
3 changed files with 34 additions and 1 deletions

View File

@@ -84,8 +84,12 @@ struct DocumentP
bool _isModified;
bool _isTransacting;
bool _changeViewTouchDocument;
bool _editWantsRestore;
bool _editWantsRestorePrevious;
int _editMode;
int _editModePrevious;
ViewProvider* _editViewProvider;
ViewProvider* _editViewProviderPrevious;
App::DocumentObject* _editingObject;
ViewProviderDocumentObject* _editViewProviderParent;
std::string _editSubname;
@@ -426,10 +430,14 @@ Document::Document(App::Document* pcDocument,Application * app)
d->_pcAppWnd = app;
d->_pcDocument = pcDocument;
d->_editViewProvider = nullptr;
d->_editViewProviderPrevious = nullptr;
d->_editingObject = nullptr;
d->_editViewProviderParent = nullptr;
d->_editingViewer = nullptr;
d->_editMode = 0;
d->_editModePrevious = 0;
d->_editWantsRestore = false;
d->_editWantsRestorePrevious = false;
//NOLINTBEGIN
// Setup the connections
@@ -654,7 +662,16 @@ void Document::setEditingTransform(const Base::Matrix4D &mat) {
}
void Document::resetEdit() {
bool vpIsNotNull = d->_editViewProvider != nullptr;
int modeToRestore = d->_editModePrevious;
Gui::ViewProvider* vpToRestore = d->_editViewProviderPrevious;
bool shouldRestorePrevious = d->_editWantsRestorePrevious;
Application::Instance->setEditDocument(nullptr);
if (vpIsNotNull && shouldRestorePrevious) {
setEdit(vpToRestore, modeToRestore);
}
}
void Document::_resetEdit()
@@ -669,6 +686,11 @@ void Document::_resetEdit()
d->_editViewProvider->finishEditing();
d->_editViewProviderPrevious = d->_editViewProvider;
d->_editModePrevious = d->_editMode;
d->_editWantsRestorePrevious = d->_editWantsRestore;
d->_editWantsRestore = false;
// Have to check d->_editViewProvider below, because there is a chance
// the editing object gets deleted inside the above call to
// 'finishEditing()', which will trigger our slotDeletedObject(), which
@@ -690,8 +712,9 @@ void Document::_resetEdit()
d->_editingViewer = nullptr;
d->_editObjs.clear();
d->_editingObject = nullptr;
if(Application::Instance->editDocument() == this)
if (Application::Instance->editDocument() == this) {
Application::Instance->setEditDocument(nullptr);
}
}
ViewProvider *Document::getInEdit(ViewProviderDocumentObject **parentVp,
@@ -739,6 +762,11 @@ void Document::setAnnotationViewProvider(const char* name, ViewProvider *pcProvi
}
}
void Document::setEditRestore(bool askRestore)
{
d->_editWantsRestore = askRestore;
}
ViewProvider * Document::getAnnotationViewProvider(const char* name) const
{
std::map<std::string,ViewProvider*>::const_iterator it = d->_ViewProviderMapAnnotation.find(name);