[TD]prevent detail object deletion during task dialog

This commit is contained in:
wandererfan
2025-07-17 18:35:49 -04:00
committed by Yorik van Havre
parent 1d64a3a983
commit c47cd6bece
3 changed files with 34 additions and 3 deletions

View File

@@ -365,12 +365,28 @@ void ViewProviderViewPart::handleChangedPropertyType(Base::XMLReader &reader, co
bool ViewProviderViewPart::onDelete(const std::vector<std::string> & subNames)
{
// Base::Console().message("VPVP::onDelete(%d subNames)\n", subNames.size());
// we cannot delete if the view has a section or detail view
(void) subNames;
QString bodyMessage;
QTextStream bodyMessageStream(&bodyMessage);
// this code should be in a ViewProviderDetail if we had one. Since we do not, we have to deal
// with a derived class here in the parent
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
auto* dlgDetail = dynamic_cast<TaskDlgDetail*>(dlg);
if (dlgDetail) {
std::string dlgDetailTarget = dlgDetail->getDetailName(); //new method
if (getViewObject()->getNameInDocument() == dlgDetailTarget) {
bodyMessageStream << qApp->translate("Std_Delete",
"Close open dialog before deleting detail object");
bodyMessage = bodyMessageStream.readLine();
QMessageBox::warning(Gui::getMainWindow(),
qApp->translate("Std_Delete", "Object dependencies"), bodyMessage,
QMessageBox::Ok);
return false;
}
}
// get child views
auto viewSection = getViewObject()->getSectionRefs();
auto viewDetail = getViewObject()->getDetailRefs();
@@ -378,6 +394,7 @@ bool ViewProviderViewPart::onDelete(const std::vector<std::string> & subNames)
if (!viewSection.empty() || !viewDetail.empty()) {
bodyMessageStream << qApp->translate("Std_Delete",
"You cannot delete this view because it has one or more dependent views that would become broken.");
bodyMessage = bodyMessageStream.readLine();
QMessageBox::warning(Gui::getMainWindow(),
qApp->translate("Std_Delete", "Object dependencies"), bodyMessage,
QMessageBox::Ok);