Core / Assembly: Add a way for vp edit modes to be restored.
This commit is contained in:
committed by
WandererFan
parent
374c5713b2
commit
ef3445e9e1
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user