Gui: Add handling for BaseFeatures outside of Body edge case

This commit is contained in:
Kacper Donat
2025-09-07 01:08:25 +02:00
parent 94fd2cbee2
commit 25e9a8b7b7
2 changed files with 24 additions and 0 deletions

View File

@@ -72,9 +72,25 @@ void ViewProviderBase::setupContextMenu(QMenu* menu, QObject* receiver, const ch
if (!base->Placement.testStatus(App::Property::Immutable) &&
!base->Placement.testStatus(App::Property::ReadOnly) &&
!base->Placement.testStatus(App::Property::Hidden)) {
// Handling of the edge case where some base features are outside the body
// that should not happen, but it was possible to do in older FreeCAD versions.
// This ensures that for older files it still works correctly.
if (!getBodyViewProvider()) {
ViewProviderPartExt::setupContextMenu(menu, receiver, member);
}
ViewProvider::setupContextMenu(menu, receiver, member);
}
}
Gui::ViewProvider* ViewProviderBase::startEditing(int ModNum)
{
if (!getBodyViewProvider()) {
return ViewProviderPartExt::startEditing(ModNum);
}
return ViewProvider::startEditing(ModNum);
}
bool ViewProviderBase::setEdit(int ModNum)
{
@@ -82,6 +98,12 @@ bool ViewProviderBase::setEdit(int ModNum)
if (!base->Placement.testStatus(App::Property::Immutable) &&
!base->Placement.testStatus(App::Property::ReadOnly) &&
!base->Placement.testStatus(App::Property::Hidden)) {
// same as in setupContextMenu
if (!getBodyViewProvider()) {
return ViewProviderPartExt::setEdit(ModNum);
}
return ViewProvider::setEdit(ModNum);
}

View File

@@ -41,6 +41,8 @@ public:
bool doubleClicked() override;
void setupContextMenu(QMenu* menu, QObject* receiver, const char* member) override;
Gui::ViewProvider* startEditing(int ModNum) override;
protected:
bool setEdit(int ModNum) override;
};