[TD]prevent detail object deletion during task dialog
This commit is contained in:
committed by
Yorik van Havre
parent
1d64a3a983
commit
c47cd6bece
@@ -651,6 +651,17 @@ void TaskDlgDetail::modifyStandardButtons(QDialogButtonBox* box)
|
||||
widget->saveButtons(btnOK, btnCancel);
|
||||
}
|
||||
|
||||
std::string TaskDlgDetail::getDetailName() const
|
||||
{
|
||||
DrawViewDetail* detailObj = widget->getDetailFeat();
|
||||
if (!detailObj) {
|
||||
return {"not found"};
|
||||
}
|
||||
|
||||
return detailObj->getNameInDocument();
|
||||
}
|
||||
|
||||
|
||||
//==== calls from the TaskView ===============================================================
|
||||
void TaskDlgDetail::open()
|
||||
{
|
||||
|
||||
@@ -65,6 +65,9 @@ public:
|
||||
QPushButton* btnCancel);
|
||||
void enableTaskButtons(bool button);
|
||||
|
||||
TechDraw::DrawViewPart* getBaseFeat();
|
||||
TechDraw::DrawViewDetail* getDetailFeat();
|
||||
|
||||
public Q_SLOTS:
|
||||
void onDraggerClicked(bool clicked);
|
||||
void onHighlightMoved(QPointF dragEnd);
|
||||
@@ -93,8 +96,6 @@ protected:
|
||||
void restoreDetailState();
|
||||
QPointF getAnchorScene();
|
||||
|
||||
TechDraw::DrawViewPart* getBaseFeat();
|
||||
TechDraw::DrawViewDetail* getDetailFeat();
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui_TaskDetail> ui;
|
||||
@@ -152,6 +153,8 @@ public:
|
||||
|
||||
void modifyStandardButtons(QDialogButtonBox* box) override;
|
||||
|
||||
std::string getDetailName() const;
|
||||
|
||||
private:
|
||||
TaskDetail * widget;
|
||||
Gui::TaskView::TaskBox* taskbox;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user