PartDesign/Gui: make Transformed ViewProviders use common code with other

This commit is contained in:
Alexander Golubev 2015-07-31 14:00:14 +03:00 committed by Stefan Tröger
parent 9cba6c48ea
commit 1b1bd5f17e
11 changed files with 24 additions and 185 deletions

View File

@ -28,39 +28,11 @@
#include "ViewProviderLinearPattern.h" #include "ViewProviderLinearPattern.h"
#include "TaskLinearPatternParameters.h" #include "TaskLinearPatternParameters.h"
#include <Mod/PartDesign/App/FeatureLinearPattern.h>
#include <Mod/Sketcher/App/SketchObject.h>
#include <Gui/Control.h>
#include <Gui/Command.h>
#include <Gui/Application.h>
using namespace PartDesignGui; using namespace PartDesignGui;
PROPERTY_SOURCE(PartDesignGui::ViewProviderLinearPattern,PartDesignGui::ViewProviderTransformed) PROPERTY_SOURCE(PartDesignGui::ViewProviderLinearPattern,PartDesignGui::ViewProviderTransformed)
bool ViewProviderLinearPattern::setEdit(int ModNum) TaskDlgFeatureParameters *ViewProviderLinearPattern::getEditDialog() {
{ return new TaskDlgLinearPatternParameters (this);
ViewProviderTransformed::setEdit(ModNum);
if (ModNum == ViewProvider::Default ) {
TaskDlgLinearPatternParameters *linearpatternDlg = NULL;
if (checkDlgOpen(linearpatternDlg)) {
// always change to PartDesign WB, remember where we come from
oldWb = Gui::Command::assureWorkbench("PartDesignWorkbench");
// start the edit dialog
if (linearpatternDlg)
Gui::Control().showDialog(linearpatternDlg);
else
Gui::Control().showDialog(new TaskDlgLinearPatternParameters(this));
return true;
} else {
return false;
}
}
else {
return ViewProviderPart::setEdit(ModNum);
}
} }

View File

@ -37,7 +37,8 @@ public:
sPixmap = "PartDesign_LinearPattern.svg"; } sPixmap = "PartDesign_LinearPattern.svg"; }
protected: protected:
virtual bool setEdit(int ModNum); /// Returns a newly create dialog for the part to be placed in the task view
virtual TaskDlgFeatureParameters *getEditDialog();
}; };

View File

@ -28,39 +28,11 @@
#include "ViewProviderMirrored.h" #include "ViewProviderMirrored.h"
#include "TaskMirroredParameters.h" #include "TaskMirroredParameters.h"
#include <Mod/PartDesign/App/FeatureMirrored.h>
#include <Mod/Sketcher/App/SketchObject.h>
#include <Gui/Control.h>
#include <Gui/Command.h>
#include <Gui/Application.h>
using namespace PartDesignGui; using namespace PartDesignGui;
PROPERTY_SOURCE(PartDesignGui::ViewProviderMirrored,PartDesignGui::ViewProviderTransformed) PROPERTY_SOURCE(PartDesignGui::ViewProviderMirrored,PartDesignGui::ViewProviderTransformed)
bool ViewProviderMirrored::setEdit(int ModNum) TaskDlgFeatureParameters *ViewProviderMirrored::getEditDialog() {
{ return new TaskDlgMirroredParameters (this);
ViewProviderTransformed::setEdit(ModNum);
if (ModNum == ViewProvider::Default ) {
TaskDlgMirroredParameters *mirroredDlg = NULL;
if (checkDlgOpen(mirroredDlg)) {
// always change to PartDesign WB, remember where we come from
oldWb = Gui::Command::assureWorkbench("PartDesignWorkbench");
// start the edit dialog
if (mirroredDlg)
Gui::Control().showDialog(mirroredDlg);
else
Gui::Control().showDialog(new TaskDlgMirroredParameters(this));
return true;
} else {
return false;
}
}
else {
return ViewProviderPart::setEdit(ModNum);
}
} }

View File

@ -38,7 +38,8 @@ public:
} }
protected: protected:
virtual bool setEdit(int ModNum); /// Returns a newly create dialog for the part to be placed in the task view
virtual TaskDlgFeatureParameters *getEditDialog();
}; };

View File

@ -29,40 +29,14 @@
#include "ViewProviderMultiTransform.h" #include "ViewProviderMultiTransform.h"
#include "TaskMultiTransformParameters.h" #include "TaskMultiTransformParameters.h"
#include <Mod/PartDesign/App/FeatureMultiTransform.h> #include <Mod/PartDesign/App/FeatureMultiTransform.h>
#include <Mod/Sketcher/App/SketchObject.h>
#include <Gui/Control.h>
#include <Gui/Command.h> #include <Gui/Command.h>
#include <Gui/Application.h>
using namespace PartDesignGui; using namespace PartDesignGui;
PROPERTY_SOURCE(PartDesignGui::ViewProviderMultiTransform,PartDesignGui::ViewProviderTransformed) PROPERTY_SOURCE(PartDesignGui::ViewProviderMultiTransform,PartDesignGui::ViewProviderTransformed)
bool ViewProviderMultiTransform::setEdit(int ModNum) TaskDlgFeatureParameters *ViewProviderMultiTransform::getEditDialog() {
{ return new TaskDlgMultiTransformParameters (this);
ViewProviderTransformed::setEdit(ModNum);
if (ModNum == ViewProvider::Default ) {
TaskDlgMultiTransformParameters *multitransformDlg = NULL;
if (checkDlgOpen(multitransformDlg)) {
// always change to PartDesign WB, remember where we come from
oldWb = Gui::Command::assureWorkbench("PartDesignWorkbench");
// start the edit dialog
if (multitransformDlg)
Gui::Control().showDialog(multitransformDlg);
else
Gui::Control().showDialog(new TaskDlgMultiTransformParameters(this));
return true;
} else {
return false;
}
}
else {
return ViewProviderPart::setEdit(ModNum);
}
} }
std::vector<App::DocumentObject*> ViewProviderMultiTransform::claimChildren(void) const std::vector<App::DocumentObject*> ViewProviderMultiTransform::claimChildren(void) const
@ -80,7 +54,7 @@ bool ViewProviderMultiTransform::onDelete(const std::vector<std::string> &svec)
PartDesign::MultiTransform* pcMultiTransform = static_cast<PartDesign::MultiTransform*>(getObject()); PartDesign::MultiTransform* pcMultiTransform = static_cast<PartDesign::MultiTransform*>(getObject());
std::vector<App::DocumentObject*> transformFeatures = pcMultiTransform->Transformations.getValues(); std::vector<App::DocumentObject*> transformFeatures = pcMultiTransform->Transformations.getValues();
// if abort command deleted the object the transformed features must be deleted, too // if the multitransform object was deleted the transformed features must be deleted, too
for (std::vector<App::DocumentObject*>::const_iterator it = transformFeatures.begin(); it != transformFeatures.end(); ++it) for (std::vector<App::DocumentObject*>::const_iterator it = transformFeatures.begin(); it != transformFeatures.end(); ++it)
{ {
if ((*it) != NULL) if ((*it) != NULL)

View File

@ -41,7 +41,9 @@ public:
virtual bool onDelete(const std::vector<std::string> &); virtual bool onDelete(const std::vector<std::string> &);
protected: protected:
virtual bool setEdit(int ModNum); /// Returns a newly create dialog for the part to be placed in the task view
virtual TaskDlgFeatureParameters *getEditDialog();
}; };

View File

@ -28,39 +28,11 @@
#include "ViewProviderPolarPattern.h" #include "ViewProviderPolarPattern.h"
#include "TaskPolarPatternParameters.h" #include "TaskPolarPatternParameters.h"
#include <Mod/PartDesign/App/FeaturePolarPattern.h>
#include <Mod/Sketcher/App/SketchObject.h>
#include <Gui/Control.h>
#include <Gui/Command.h>
#include <Gui/Application.h>
using namespace PartDesignGui; using namespace PartDesignGui;
PROPERTY_SOURCE(PartDesignGui::ViewProviderPolarPattern,PartDesignGui::ViewProviderTransformed) PROPERTY_SOURCE(PartDesignGui::ViewProviderPolarPattern,PartDesignGui::ViewProviderTransformed)
bool ViewProviderPolarPattern::setEdit(int ModNum) TaskDlgFeatureParameters *ViewProviderPolarPattern::getEditDialog() {
{ return new TaskDlgPolarPatternParameters (this);
ViewProviderTransformed::setEdit(ModNum);
if (ModNum == ViewProvider::Default ) {
TaskDlgPolarPatternParameters *polarpatternDlg = NULL;
if (checkDlgOpen(polarpatternDlg)) {
// always change to PartDesign WB, remember where we come from
oldWb = Gui::Command::assureWorkbench("PartDesignWorkbench");
// start the edit dialog
if (polarpatternDlg)
Gui::Control().showDialog(polarpatternDlg);
else
Gui::Control().showDialog(new TaskDlgPolarPatternParameters(this));
return true;
} else {
return false;
}
}
else {
return ViewProviderPart::setEdit(ModNum);
}
} }

View File

@ -37,7 +37,8 @@ public:
sPixmap = "PartDesign_PolarPattern.svg"; } sPixmap = "PartDesign_PolarPattern.svg"; }
protected: protected:
virtual bool setEdit(int ModNum); /// Returns a newly create dialog for the part to be placed in the task view
virtual TaskDlgFeatureParameters *getEditDialog();
}; };

View File

@ -28,39 +28,11 @@
#include "ViewProviderScaled.h" #include "ViewProviderScaled.h"
#include "TaskScaledParameters.h" #include "TaskScaledParameters.h"
#include <Mod/PartDesign/App/FeatureScaled.h>
#include <Mod/Sketcher/App/SketchObject.h>
#include <Gui/Control.h>
#include <Gui/Command.h>
#include <Gui/Application.h>
using namespace PartDesignGui; using namespace PartDesignGui;
PROPERTY_SOURCE(PartDesignGui::ViewProviderScaled,PartDesignGui::ViewProviderTransformed) PROPERTY_SOURCE(PartDesignGui::ViewProviderScaled,PartDesignGui::ViewProviderTransformed)
bool ViewProviderScaled::setEdit(int ModNum) TaskDlgFeatureParameters *ViewProviderScaled::getEditDialog() {
{ return new TaskDlgScaledParameters (this);
ViewProviderTransformed::setEdit(ModNum);
if (ModNum == ViewProvider::Default ) {
TaskDlgScaledParameters *scaledDlg = NULL;
if (checkDlgOpen(scaledDlg)) {
// always change to PartDesign WB, remember where we come from
oldWb = Gui::Command::assureWorkbench("PartDesignWorkbench");
// start the edit dialog
if (scaledDlg)
Gui::Control().showDialog(scaledDlg);
else
Gui::Control().showDialog(new TaskDlgScaledParameters(this));
return true;
} else {
return false;
}
}
else {
return ViewProviderPart::setEdit(ModNum);
}
} }

View File

@ -37,7 +37,8 @@ public:
sPixmap = "PartDesign_Scaled.svg"; } sPixmap = "PartDesign_Scaled.svg"; }
protected: protected:
virtual bool setEdit(int ModNum); /// Returns a newly create dialog for the part to be placed in the task view
virtual TaskDlgFeatureParameters *getEditDialog();
}; };

View File

@ -109,7 +109,8 @@ bool ViewProviderTransformed::setEdit(int ModNum)
pcRoot->addChild(pcRejectedRoot); pcRoot->addChild(pcRejectedRoot);
recomputeFeature(); recomputeFeature();
return true;
return ViewProvider::setEdit(ModNum);
} }
void ViewProviderTransformed::unsetEdit(int ModNum) void ViewProviderTransformed::unsetEdit(int ModNum)
@ -136,36 +137,6 @@ bool ViewProviderTransformed::onDelete(const std::vector<std::string> &s)
return ViewProvider::onDelete(s); return ViewProvider::onDelete(s);
} }
const bool ViewProviderTransformed::checkDlgOpen(TaskDlgTransformedParameters* transformedDlg) {
// When double-clicking on the item for this feature the
// object unsets and sets its edit mode without closing
// the task panel
Gui::TaskView::TaskDialog *dlg = Gui::Control().activeDialog();
transformedDlg = qobject_cast<TaskDlgTransformedParameters *>(dlg);
if ((transformedDlg != NULL) && (transformedDlg->getTransformedView() != this))
transformedDlg = NULL; // another transformed feature left open its task panel
if ((dlg != NULL) && (transformedDlg == NULL)) {
QMessageBox msgBox;
msgBox.setText(QObject::tr("A dialog is already open in the task panel"));
msgBox.setInformativeText(QObject::tr("Do you want to close this dialog?"));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
int ret = msgBox.exec();
if (ret == QMessageBox::Yes)
Gui::Control().reject();
else
return false;
}
// clear the selection (convenience)
Gui::Selection().clearSelection();
// Continue (usually in virtual method setEdit())
return true;
}
void ViewProviderTransformed::recomputeFeature(void) void ViewProviderTransformed::recomputeFeature(void)
{ {
PartDesign::Transformed* pcTransformed = static_cast<PartDesign::Transformed*>(getObject()); PartDesign::Transformed* pcTransformed = static_cast<PartDesign::Transformed*>(getObject());