PD: Replace helper functions in subclasses of TaskDlgFeatureParameters with a template function
This commit is contained in:
@@ -340,20 +340,12 @@ TaskDlgChamferParameters::~TaskDlgChamferParameters() = default;
|
||||
|
||||
//==== calls from the TaskView ===============================================================
|
||||
|
||||
|
||||
//void TaskDlgChamferParameters::open()
|
||||
//{
|
||||
// // a transaction is already open at creation time of the chamfer
|
||||
// if (!Gui::Command::hasPendingCommand()) {
|
||||
// QString msg = tr("Edit chamfer");
|
||||
// Gui::Command::openCommand((const char*)msg.toUtf8());
|
||||
// }
|
||||
//}
|
||||
bool TaskDlgChamferParameters::accept()
|
||||
{
|
||||
auto obj = vp->getObject();
|
||||
if (!obj->isError())
|
||||
auto obj = getObject();
|
||||
if (!obj->isError()) {
|
||||
parameter->showObject();
|
||||
}
|
||||
|
||||
parameter->apply();
|
||||
|
||||
|
||||
@@ -302,9 +302,10 @@ TaskDlgDraftParameters::~TaskDlgDraftParameters() = default;
|
||||
|
||||
bool TaskDlgDraftParameters::accept()
|
||||
{
|
||||
auto tobj = vp->getObject();
|
||||
if (!tobj->isError())
|
||||
auto tobj = getObject();
|
||||
if (!tobj->isError()) {
|
||||
parameter->showObject();
|
||||
}
|
||||
|
||||
parameter->apply();
|
||||
|
||||
|
||||
@@ -456,10 +456,10 @@ TaskDlgDressUpParameters::~TaskDlgDressUpParameters() = default;
|
||||
|
||||
bool TaskDlgDressUpParameters::accept()
|
||||
{
|
||||
getDressUpView()->highlightReferences(false);
|
||||
getViewObject<ViewProviderDressUp>()->highlightReferences(false);
|
||||
std::vector<std::string> refs = parameter->getReferences();
|
||||
std::stringstream str;
|
||||
str << Gui::Command::getObjectCmd(vp->getObject()) << ".Base = ("
|
||||
str << Gui::Command::getObjectCmd(getObject()) << ".Base = ("
|
||||
<< Gui::Command::getObjectCmd(parameter->getBase()) << ",[";
|
||||
for (const auto & ref : refs)
|
||||
str << "\"" << ref << "\",";
|
||||
@@ -470,7 +470,7 @@ bool TaskDlgDressUpParameters::accept()
|
||||
|
||||
bool TaskDlgDressUpParameters::reject()
|
||||
{
|
||||
getDressUpView()->highlightReferences(false);
|
||||
getViewObject<ViewProviderDressUp>()->highlightReferences(false);
|
||||
return TaskDlgFeatureParameters::reject();
|
||||
}
|
||||
|
||||
|
||||
@@ -113,9 +113,6 @@ public:
|
||||
explicit TaskDlgDressUpParameters(ViewProviderDressUp *DressUpView);
|
||||
~TaskDlgDressUpParameters() override;
|
||||
|
||||
ViewProviderDressUp* getDressUpView() const
|
||||
{ return static_cast<ViewProviderDressUp*>(vp); }
|
||||
|
||||
public:
|
||||
/// is called by the framework if the dialog is accepted (Ok)
|
||||
bool accept() override;
|
||||
|
||||
@@ -59,6 +59,34 @@ private:
|
||||
void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override;
|
||||
|
||||
protected:
|
||||
template<typename T = PartDesignGui::ViewProvider> T* getViewObject() const
|
||||
{
|
||||
static_assert(std::is_base_of<PartDesignGui::ViewProvider, T>::value,
|
||||
"Wrong template argument");
|
||||
return dynamic_cast<T*>(vp);
|
||||
}
|
||||
|
||||
template<typename T = App::DocumentObject> T* getObject() const
|
||||
{
|
||||
static_assert(std::is_base_of<App::DocumentObject, T>::value, "Wrong template argument");
|
||||
if (vp) {
|
||||
return dynamic_cast<T*>(vp->getObject());
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Gui::Document* getGuiDocument() const
|
||||
{
|
||||
return vp ? vp->getDocument() : nullptr;
|
||||
}
|
||||
|
||||
App::Document* getAppDocument() const
|
||||
{
|
||||
auto obj = getObject();
|
||||
return obj ? obj->getDocument() : nullptr;
|
||||
}
|
||||
|
||||
bool isUpdateBlocked() const
|
||||
{
|
||||
return blockUpdate;
|
||||
@@ -98,11 +126,25 @@ public:
|
||||
/// is called by the framework if the dialog is rejected (Cancel)
|
||||
bool reject() override;
|
||||
|
||||
/// Returns the view provider dialog is runed for
|
||||
PartDesignGui::ViewProvider *viewProvider() const { return vp; }
|
||||
template<typename T = PartDesignGui::ViewProvider> T* getViewObject() const
|
||||
{
|
||||
static_assert(std::is_base_of<PartDesignGui::ViewProvider, T>::value,
|
||||
"Wrong template argument");
|
||||
return dynamic_cast<T*>(vp);
|
||||
}
|
||||
|
||||
protected:
|
||||
PartDesignGui::ViewProvider *vp;
|
||||
template<typename T = App::DocumentObject> T* getObject() const
|
||||
{
|
||||
static_assert(std::is_base_of<App::DocumentObject, T>::value, "Wrong template argument");
|
||||
if (vp) {
|
||||
return dynamic_cast<T*>(vp->getObject());
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
PartDesignGui::ViewProvider* vp;
|
||||
};
|
||||
|
||||
} //namespace PartDesignGui
|
||||
|
||||
@@ -209,20 +209,12 @@ TaskDlgFilletParameters::~TaskDlgFilletParameters() = default;
|
||||
|
||||
//==== calls from the TaskView ===============================================================
|
||||
|
||||
|
||||
//void TaskDlgFilletParameters::open()
|
||||
//{
|
||||
// // a transaction is already open at creation time of the fillet
|
||||
// if (!Gui::Command::hasPendingCommand()) {
|
||||
// QString msg = tr("Edit fillet");
|
||||
// Gui::Command::openCommand((const char*)msg.toUtf8());
|
||||
// }
|
||||
//}
|
||||
bool TaskDlgFilletParameters::accept()
|
||||
{
|
||||
auto obj = vp->getObject();
|
||||
if (!obj->isError())
|
||||
auto obj = getObject();
|
||||
if (!obj->isError()) {
|
||||
parameter->showObject();
|
||||
}
|
||||
|
||||
parameter->apply();
|
||||
|
||||
|
||||
@@ -134,9 +134,6 @@ class TaskDlgHelixParameters : public TaskDlgSketchBasedParameters
|
||||
|
||||
public:
|
||||
explicit TaskDlgHelixParameters(ViewProviderHelix* HelixView);
|
||||
|
||||
ViewProviderHelix* getHelixView() const
|
||||
{ return static_cast<ViewProviderHelix*>(vp); }
|
||||
};
|
||||
|
||||
} //namespace PartDesignGui
|
||||
|
||||
@@ -1185,7 +1185,7 @@ TaskDlgHoleParameters::TaskDlgHoleParameters(ViewProviderHole* HoleView)
|
||||
: TaskDlgSketchBasedParameters(HoleView)
|
||||
{
|
||||
assert(HoleView);
|
||||
parameter = new TaskHoleParameters(static_cast<ViewProviderHole*>(vp));
|
||||
parameter = new TaskHoleParameters(HoleView);
|
||||
|
||||
Content.push_back(parameter);
|
||||
}
|
||||
|
||||
@@ -146,8 +146,6 @@ public:
|
||||
explicit TaskDlgHoleParameters(ViewProviderHole *HoleView);
|
||||
~TaskDlgHoleParameters() override;
|
||||
|
||||
ViewProviderHole* getHoleView() const { return static_cast<ViewProviderHole*>(vp); }
|
||||
|
||||
protected:
|
||||
TaskHoleParameters *parameter;
|
||||
};
|
||||
|
||||
@@ -375,17 +375,18 @@ TaskDlgLoftParameters::~TaskDlgLoftParameters() = default;
|
||||
|
||||
bool TaskDlgLoftParameters::accept()
|
||||
{
|
||||
PartDesign::Loft* pcLoft = static_cast<PartDesign::Loft*>(vp->getObject());
|
||||
static_cast<ViewProviderLoft*>(vp)->highlightReferences(ViewProviderLoft::Both, false);
|
||||
if (auto loft = getObject<PartDesign::Loft>()) {
|
||||
getViewObject<ViewProviderLoft>()->highlightReferences(ViewProviderLoft::Both, false);
|
||||
|
||||
// First verify that the loft can be built and then hide the sections as otherwise
|
||||
// they will remain hidden if the loft's recompute fails
|
||||
if (TaskDlgSketchBasedParameters::accept()) {
|
||||
for (App::DocumentObject* obj : pcLoft->Sections.getValues()) {
|
||||
Gui::cmdAppObjectHide(obj);
|
||||
// First verify that the loft can be built and then hide the sections as otherwise
|
||||
// they will remain hidden if the loft's recompute fails
|
||||
if (TaskDlgSketchBasedParameters::accept()) {
|
||||
for (App::DocumentObject* obj : loft->Sections.getValues()) {
|
||||
Gui::cmdAppObjectHide(obj);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -87,9 +87,6 @@ public:
|
||||
explicit TaskDlgLoftParameters(ViewProviderLoft *LoftView,bool newObj=false);
|
||||
~TaskDlgLoftParameters() override;
|
||||
|
||||
ViewProviderLoft* getLoftView() const
|
||||
{ return static_cast<ViewProviderLoft*>(vp); }
|
||||
|
||||
/// is called by the framework if the dialog is accepted (Ok)
|
||||
bool accept() override;
|
||||
|
||||
|
||||
@@ -62,10 +62,11 @@ class TaskDlgPadParameters : public TaskDlgExtrudeParameters
|
||||
public:
|
||||
explicit TaskDlgPadParameters(ViewProviderPad *PadView, bool newObj=false);
|
||||
|
||||
ViewProviderPad* getPadView() const { return static_cast<ViewProviderPad*>(vp); }
|
||||
|
||||
protected:
|
||||
TaskExtrudeParameters* getTaskParameters() override { return parameters; };
|
||||
TaskExtrudeParameters* getTaskParameters() override
|
||||
{
|
||||
return parameters;
|
||||
}
|
||||
|
||||
private:
|
||||
TaskPadParameters* parameters;
|
||||
|
||||
@@ -1097,21 +1097,21 @@ void TaskDlgPipeParameters::onButtonToggled(QAbstractButton *button, bool checke
|
||||
|
||||
switch (id) {
|
||||
case StateHandlerTaskPipe::SelectionModes::refProfile:
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(ViewProviderPipe::Profile, checked);
|
||||
getViewObject<ViewProviderPipe>()->highlightReferences(ViewProviderPipe::Profile, checked);
|
||||
break;
|
||||
case StateHandlerTaskPipe::SelectionModes::refSpine:
|
||||
case StateHandlerTaskPipe::SelectionModes::refSpineEdgeAdd:
|
||||
case StateHandlerTaskPipe::SelectionModes::refSpineEdgeRemove:
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(ViewProviderPipe::Spine, checked);
|
||||
getViewObject<ViewProviderPipe>()->highlightReferences(ViewProviderPipe::Spine, checked);
|
||||
break;
|
||||
case StateHandlerTaskPipe::SelectionModes::refAuxSpine:
|
||||
case StateHandlerTaskPipe::SelectionModes::refAuxSpineEdgeAdd:
|
||||
case StateHandlerTaskPipe::SelectionModes::refAuxSpineEdgeRemove:
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, checked);
|
||||
getViewObject<ViewProviderPipe>()->highlightReferences(ViewProviderPipe::AuxiliarySpine, checked);
|
||||
break;
|
||||
case StateHandlerTaskPipe::SelectionModes::refSectionAdd:
|
||||
case StateHandlerTaskPipe::SelectionModes::refSectionRemove:
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(ViewProviderPipe::Section, checked);
|
||||
getViewObject<ViewProviderPipe>()->highlightReferences(ViewProviderPipe::Section, checked);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -65,11 +65,11 @@ class TaskDlgPocketParameters : public TaskDlgExtrudeParameters
|
||||
public:
|
||||
explicit TaskDlgPocketParameters(ViewProviderPocket *PocketView);
|
||||
|
||||
ViewProviderPocket* getPocketView() const
|
||||
{ return static_cast<ViewProviderPocket*>(vp); }
|
||||
|
||||
protected:
|
||||
TaskExtrudeParameters* getTaskParameters() override { return parameters; }
|
||||
TaskExtrudeParameters* getTaskParameters() override
|
||||
{
|
||||
return parameters;
|
||||
}
|
||||
|
||||
private:
|
||||
TaskPocketParameters* parameters;
|
||||
|
||||
@@ -122,11 +122,6 @@ class TaskDlgRevolutionParameters : public TaskDlgSketchBasedParameters
|
||||
|
||||
public:
|
||||
explicit TaskDlgRevolutionParameters(PartDesignGui::ViewProvider *RevolutionView);
|
||||
|
||||
ViewProvider* getRevolutionView() const
|
||||
{
|
||||
return vp;
|
||||
}
|
||||
};
|
||||
|
||||
} //namespace PartDesignGui
|
||||
|
||||
@@ -250,19 +250,20 @@ TaskDlgSketchBasedParameters::~TaskDlgSketchBasedParameters() = default;
|
||||
//==== calls from the TaskView ===============================================================
|
||||
|
||||
|
||||
bool TaskDlgSketchBasedParameters::accept() {
|
||||
App::DocumentObject* feature = vp->getObject();
|
||||
bool TaskDlgSketchBasedParameters::accept()
|
||||
{
|
||||
auto feature = getObject<PartDesign::ProfileBased>();
|
||||
|
||||
// Make sure the feature is what we are expecting
|
||||
// Should be fine but you never know...
|
||||
if (!feature->isDerivedFrom<PartDesign::ProfileBased>()) {
|
||||
if (!feature) {
|
||||
throw Base::TypeError("Bad object processed in the sketch based dialog.");
|
||||
}
|
||||
|
||||
// First verify that the feature can be built and then hide the profile as otherwise
|
||||
// it will remain hidden if the feature's recompute fails
|
||||
if (TaskDlgFeatureParameters::accept()) {
|
||||
App::DocumentObject* sketch = static_cast<PartDesign::ProfileBased*>(feature)->Profile.getValue();
|
||||
App::DocumentObject* sketch = feature->Profile.getValue();
|
||||
Gui::cmdAppObjectHide(sketch);
|
||||
return true;
|
||||
}
|
||||
@@ -272,24 +273,29 @@ bool TaskDlgSketchBasedParameters::accept() {
|
||||
|
||||
bool TaskDlgSketchBasedParameters::reject()
|
||||
{
|
||||
PartDesign::ProfileBased* pcSketchBased = static_cast<PartDesign::ProfileBased*>(vp->getObject());
|
||||
App::DocumentObjectWeakPtrT weakptr(pcSketchBased);
|
||||
// get the Sketch
|
||||
Sketcher::SketchObject *pcSketch = static_cast<Sketcher::SketchObject*>(pcSketchBased->Profile.getValue());
|
||||
bool rv;
|
||||
auto feature = getObject<PartDesign::ProfileBased>();
|
||||
|
||||
// rv should be true anyway but to be on the safe side due to further changes better respect it.
|
||||
rv = TaskDlgFeatureParameters::reject();
|
||||
// Make sure the feature is what we are expecting
|
||||
// Should be fine but you never know...
|
||||
if (!feature) {
|
||||
throw Base::TypeError("Bad object processed in the sketch based dialog.");
|
||||
}
|
||||
|
||||
App::DocumentObjectWeakPtrT weakptr(feature);
|
||||
auto sketch = dynamic_cast<Sketcher::SketchObject*>(feature->Profile.getValue());
|
||||
|
||||
bool value = TaskDlgFeatureParameters::reject();
|
||||
|
||||
// if abort command deleted the object the sketch is visible again.
|
||||
// The previous one feature already should be made visible
|
||||
if (weakptr.expired()) {
|
||||
// Make the sketch visible
|
||||
if (pcSketch && Gui::Application::Instance->getViewProvider(pcSketch))
|
||||
Gui::Application::Instance->getViewProvider(pcSketch)->show();
|
||||
if (sketch && Gui::Application::Instance->getViewProvider(sketch)) {
|
||||
Gui::Application::Instance->getViewProvider(sketch)->show();
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
return value;
|
||||
}
|
||||
|
||||
#include "moc_TaskSketchBasedParameters.cpp"
|
||||
|
||||
@@ -280,7 +280,7 @@ TaskDlgThicknessParameters::~TaskDlgThicknessParameters() = default;
|
||||
|
||||
bool TaskDlgThicknessParameters::accept()
|
||||
{
|
||||
auto obj = vp->getObject();
|
||||
auto obj = getObject();
|
||||
if (!obj->isError()) {
|
||||
parameter->showObject();
|
||||
}
|
||||
|
||||
@@ -615,13 +615,10 @@ void TaskTransformedParameters::indexesMoved()
|
||||
// TaskDialog
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
TaskDlgTransformedParameters::TaskDlgTransformedParameters(
|
||||
ViewProviderTransformed* TransformedView_)
|
||||
: TaskDlgFeatureParameters(TransformedView_)
|
||||
TaskDlgTransformedParameters::TaskDlgTransformedParameters(ViewProviderTransformed* viewProvider)
|
||||
: TaskDlgFeatureParameters(viewProvider)
|
||||
{
|
||||
assert(vp);
|
||||
message = new TaskTransformedMessages(getTransformedView());
|
||||
|
||||
message = new TaskTransformedMessages(viewProvider);
|
||||
Content.push_back(message);
|
||||
}
|
||||
|
||||
@@ -639,7 +636,6 @@ bool TaskDlgTransformedParameters::reject()
|
||||
{
|
||||
// ensure that we are not in selection mode
|
||||
parameter->exitSelectionMode();
|
||||
|
||||
return TaskDlgFeatureParameters::reject();
|
||||
}
|
||||
|
||||
|
||||
@@ -295,11 +295,6 @@ class TaskDlgTransformedParameters: public PartDesignGui::TaskDlgFeatureParamete
|
||||
public:
|
||||
explicit TaskDlgTransformedParameters(ViewProviderTransformed* TransformedView);
|
||||
|
||||
ViewProviderTransformed* getTransformedView() const
|
||||
{
|
||||
return static_cast<ViewProviderTransformed*>(vp);
|
||||
}
|
||||
|
||||
/// is called by the framework if the dialog is accepted (Ok)
|
||||
bool accept() override;
|
||||
/// is called by the framework if the dialog is rejected (Cancel)
|
||||
|
||||
@@ -88,7 +88,7 @@ bool ViewProvider::setEdit(int ModNum)
|
||||
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
|
||||
TaskDlgFeatureParameters *featureDlg = qobject_cast<TaskDlgFeatureParameters *>(dlg);
|
||||
// NOTE: if the dialog is not partDesigan dialog the featureDlg will be NULL
|
||||
if (featureDlg && featureDlg->viewProvider() != this) {
|
||||
if (featureDlg && featureDlg->getViewObject() != this) {
|
||||
featureDlg = nullptr; // another feature left open its task panel
|
||||
}
|
||||
if (dlg && !featureDlg) {
|
||||
|
||||
@@ -70,7 +70,7 @@ bool ViewProviderHole::setEdit(int ModNum)
|
||||
// the task panel
|
||||
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
|
||||
TaskDlgHoleParameters *holeDlg = qobject_cast<TaskDlgHoleParameters *>(dlg);
|
||||
if (holeDlg && holeDlg->getHoleView() != this)
|
||||
if (holeDlg && holeDlg->getViewObject() != this)
|
||||
holeDlg = nullptr; // another hole left open its task panel
|
||||
if (dlg && !holeDlg) {
|
||||
QMessageBox msgBox;
|
||||
|
||||
Reference in New Issue
Block a user