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 ad22aa3a8c
commit 3357baef99
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);

View File

@@ -256,6 +256,8 @@ public:
void resetEdit();
/// reset edit of this document
void _resetEdit();
/// set if the edit asks for restore or not.
void setEditRestore(bool val);
/// get the in edit ViewProvider or NULL
ViewProvider *getInEdit(ViewProviderDocumentObject **parentVp=nullptr,
std::string *subname=nullptr, int *mode=nullptr, std::string *subElement=nullptr) const;

View File

@@ -221,6 +221,9 @@ bool ViewProviderAssembly::canDragObjectToTarget(App::DocumentObject* obj,
bool ViewProviderAssembly::setEdit(int mode)
{
if (mode == ViewProvider::Default) {
// Ask that this edit mode be restored. For example if it is quit to edit a sketch.
getDocument()->setEditRestore(true);
// Set the part as 'Activated' ie bold in the tree.
Gui::Command::doCommand(Gui::Command::Gui,
"appDoc = App.getDocument('%s')\n"