PD: 0004582: Mulit-transformation dialog cannot be cancelled
This commit is contained in:
@@ -275,6 +275,7 @@ void TaskMultiTransformParameters::onTransformEdit()
|
||||
else
|
||||
return; // TODO: Show an error?
|
||||
|
||||
subTask->setEnabledTransaction(isEnabledTransaction());
|
||||
connect(ui->checkBoxUpdateView, SIGNAL(toggled(bool)),
|
||||
subTask, SLOT(onUpdateView(bool)));
|
||||
}
|
||||
@@ -293,7 +294,9 @@ void TaskMultiTransformParameters::onTransformAddMirrored()
|
||||
if (!pcActiveBody)
|
||||
return;
|
||||
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Mirrored"));
|
||||
if (isEnabledTransaction())
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Mirrored"));
|
||||
|
||||
FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::Mirrored','"<<newFeatName<<"')");
|
||||
auto Feat = pcActiveBody->getDocument()->getObject(newFeatName.c_str());
|
||||
if (!Feat)
|
||||
@@ -319,7 +322,9 @@ void TaskMultiTransformParameters::onTransformAddLinearPattern()
|
||||
if (!pcActiveBody)
|
||||
return;
|
||||
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Make LinearPattern"));
|
||||
if (isEnabledTransaction())
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Make LinearPattern"));
|
||||
|
||||
FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::LinearPattern','"<<newFeatName<<"')");
|
||||
auto Feat = pcActiveBody->getDocument()->getObject(newFeatName.c_str());
|
||||
if (!Feat)
|
||||
@@ -355,7 +360,9 @@ void TaskMultiTransformParameters::onTransformAddPolarPattern()
|
||||
if (!pcActiveBody)
|
||||
return;
|
||||
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "PolarPattern"));
|
||||
if (isEnabledTransaction())
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "PolarPattern"));
|
||||
|
||||
FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::PolarPattern','"<<newFeatName<<"')");
|
||||
auto Feat = pcActiveBody->getDocument()->getObject(newFeatName.c_str());
|
||||
if (!Feat)
|
||||
@@ -381,7 +388,9 @@ void TaskMultiTransformParameters::onTransformAddScaled()
|
||||
if (!pcActiveBody)
|
||||
return;
|
||||
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Scaled"));
|
||||
if (isEnabledTransaction())
|
||||
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Scaled"));
|
||||
|
||||
FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::Scaled','"<<newFeatName<<"')");
|
||||
auto Feat = pcActiveBody->getDocument()->getObject(newFeatName.c_str());
|
||||
if (!Feat)
|
||||
@@ -494,7 +503,6 @@ void TaskMultiTransformParameters::onUpdateView(bool on)
|
||||
{
|
||||
blockUpdate = !on;
|
||||
if (on) {
|
||||
setupTransaction();
|
||||
recomputeFeature();
|
||||
}
|
||||
}
|
||||
@@ -539,6 +547,7 @@ TaskDlgMultiTransformParameters::TaskDlgMultiTransformParameters(ViewProviderMul
|
||||
: TaskDlgTransformedParameters(MultiTransformView)
|
||||
{
|
||||
parameter = new TaskMultiTransformParameters(MultiTransformView);
|
||||
parameter->setEnabledTransaction(false);
|
||||
|
||||
Content.push_back(parameter);
|
||||
}
|
||||
|
||||
@@ -170,6 +170,9 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms
|
||||
|
||||
void TaskTransformedParameters::setupTransaction()
|
||||
{
|
||||
if (!isEnabledTransaction())
|
||||
return;
|
||||
|
||||
auto obj = getObject();
|
||||
if (!obj)
|
||||
return;
|
||||
@@ -185,6 +188,16 @@ void TaskTransformedParameters::setupTransaction()
|
||||
transactionID = App::GetApplication().setActiveTransaction(n.c_str());
|
||||
}
|
||||
|
||||
void TaskTransformedParameters::setEnabledTransaction(bool on)
|
||||
{
|
||||
enableTransaction = on;
|
||||
}
|
||||
|
||||
bool TaskTransformedParameters::isEnabledTransaction() const
|
||||
{
|
||||
return enableTransaction;
|
||||
}
|
||||
|
||||
void TaskTransformedParameters::onButtonAddFeature(bool checked)
|
||||
{
|
||||
if (checked) {
|
||||
@@ -322,13 +335,15 @@ PartDesignGui::ViewProviderTransformed *TaskTransformedParameters::getTopTransfo
|
||||
} else {
|
||||
rv = TransformedView;
|
||||
}
|
||||
assert (rv);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
PartDesign::Transformed *TaskTransformedParameters::getTopTransformedObject() const {
|
||||
App::DocumentObject *transform = getTopTransformedView()->getObject();
|
||||
ViewProviderTransformed* vp = getTopTransformedView();
|
||||
if (!vp)
|
||||
return nullptr;
|
||||
|
||||
App::DocumentObject *transform = vp->getObject();
|
||||
assert (transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId()));
|
||||
return static_cast<PartDesign::Transformed*>(transform);
|
||||
}
|
||||
@@ -344,6 +359,9 @@ PartDesign::Transformed *TaskTransformedParameters::getObject() const {
|
||||
|
||||
App::DocumentObject *TaskTransformedParameters::getBaseObject() const {
|
||||
PartDesign::Feature* feature = getTopTransformedObject ();
|
||||
if (!feature)
|
||||
return nullptr;
|
||||
|
||||
// NOTE: getBaseObject() throws if there is no base; shouldn't happen here.
|
||||
App::DocumentObject *base = feature->getBaseObject(true);
|
||||
if(!base) {
|
||||
@@ -355,7 +373,8 @@ App::DocumentObject *TaskTransformedParameters::getBaseObject() const {
|
||||
}
|
||||
|
||||
App::DocumentObject* TaskTransformedParameters::getSketchObject() const {
|
||||
return getTopTransformedObject()->getSketchObject();
|
||||
PartDesign::Transformed* feature = getTopTransformedObject();
|
||||
return feature ? feature->getSketchObject() : nullptr;
|
||||
}
|
||||
|
||||
void TaskTransformedParameters::hideObject()
|
||||
|
||||
@@ -143,6 +143,14 @@ public:
|
||||
|
||||
virtual void apply() = 0;
|
||||
|
||||
/*!
|
||||
* \brief setEnabledTransaction
|
||||
* The transaction handling of this panel can be disabled if there is another
|
||||
* instance that does it already, e.g. TaskDlgMultiTransformParameters.
|
||||
* By default, transactions are enabled.
|
||||
*/
|
||||
void setEnabledTransaction(bool);
|
||||
bool isEnabledTransaction() const;
|
||||
void setupTransaction();
|
||||
|
||||
int getTransactionID() const {
|
||||
@@ -213,6 +221,7 @@ protected:
|
||||
QWidget* proxy;
|
||||
ViewProviderTransformed *TransformedView;
|
||||
int transactionID = 0;
|
||||
bool enableTransaction = true;
|
||||
|
||||
enum selectionModes { none, addFeature, removeFeature, reference };
|
||||
selectionModes selectionMode;
|
||||
|
||||
@@ -39,6 +39,12 @@ TaskDlgFeatureParameters *ViewProviderMultiTransform::getEditDialog() {
|
||||
return new TaskDlgMultiTransformParameters (this);
|
||||
}
|
||||
|
||||
void ViewProviderMultiTransform::setupContextMenu(QMenu* menu, QObject* receiver, const char* member)
|
||||
{
|
||||
this->addDefaultAction(menu, QObject::tr("Edit %1").arg(QString::fromStdString(featureName)));
|
||||
PartDesignGui::ViewProvider::setupContextMenu(menu, receiver, member);
|
||||
}
|
||||
|
||||
std::vector<App::DocumentObject*> ViewProviderMultiTransform::claimChildren(void) const
|
||||
{
|
||||
PartDesign::MultiTransform* pcMultiTransform = static_cast<PartDesign::MultiTransform*>(getObject());
|
||||
|
||||
@@ -38,14 +38,13 @@ public:
|
||||
}
|
||||
|
||||
std::vector<App::DocumentObject*> claimChildren(void) const;
|
||||
void setupContextMenu(QMenu*, QObject*, const char*);
|
||||
|
||||
virtual bool onDelete(const std::vector<std::string> &);
|
||||
|
||||
protected:
|
||||
/// Returns a newly create dialog for the part to be placed in the task view
|
||||
virtual TaskDlgFeatureParameters *getEditDialog();
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user