bool ViewProvider::onDelete(const std::vector<std::string> &) { PartDesign::Feature* feature = static_cast<PartDesign::Feature*>(getObject()); App::DocumentObject* previous = feature->getBaseObject(/* silent = */ true ); // Make the tip or the previous feature visiable again with preference to the previous one // if the feature was visiable itself if (isShow()) { // TODO TaskDlgFeatureParameters::reject has the same code. May be this one is excess? // (2015-07-24, Fat-Zer) if (previous && Gui::Application::Instance->getViewProvider(previous)) { Gui::Application::Instance->getViewProvider(previous)->show(); } else { // Body feature housekeeping Part::BodyBase* body = PartDesign::Body::findBodyOf(getObject()); if (body != NULL) { App::DocumentObject* tip = body->Tip.getValue(); if (tip && Gui::Application::Instance->getViewProvider(tip)) { Gui::Application::Instance->getViewProvider(tip)->show(); } } } } return true; }
bool TaskDlgFeatureParameters::reject() { PartDesign::Feature* feature = static_cast<PartDesign::Feature*>(vp->getObject()); PartDesign::Body* body = PartDesign::Body::findBodyOf(feature); // Find out previous feature we won't be able to do it after abort // (at least in the body case) App::DocumentObject* previous = feature->getBaseObject(/* silent = */ true ); // detach the task panel from the selection to avoid to invoke // eventually onAddSelection when the selection changes std::vector<QWidget*> subwidgets = getDialogContent(); for (auto it : subwidgets) { TaskSketchBasedParameters* param = qobject_cast<TaskSketchBasedParameters*>(it); if (param) param->detachSelection(); } // roll back the done things Gui::Command::abortCommand(); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); // if abort command deleted the object make the previous feature visible again if (!Gui::Application::Instance->getViewProvider(feature)) { // Make the tip or the previous feature visiable again with preference to the previous one // TODO: ViewProvider::onDelete has the same code. May be this one is excess? if (previous && Gui::Application::Instance->getViewProvider(previous)) { Gui::Application::Instance->getViewProvider(previous)->show(); } else if (body != NULL) { App::DocumentObject* tip = body->Tip.getValue(); if (tip && Gui::Application::Instance->getViewProvider(tip)) { Gui::Application::Instance->getViewProvider(tip)->show(); } } } return true; }
Part::Feature *TaskTransformedParameters::getBaseObject() const { PartDesign::Feature* feature = getTopTransformedObject (); // NOTE: getBaseObject() throws if there is no base; shouldn't happen here. return feature->getBaseObject(); }