diff --git a/ChangeLog.txt b/ChangeLog.txt index 187a2e4e0..6bae0f05a 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -33,6 +33,7 @@ - [#514] Read only setting not working properly. - [#480] New tool: Midpoint between two points. - [#496] Selector for selecting which pieces to print. +- [#520] Improve Union tool. An option to select about original pieces. # Version 0.4.5 - [#435] Valentina doesn't change the cursor. diff --git a/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp b/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp index 45174be35..cc256a33d 100644 --- a/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp +++ b/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp @@ -51,6 +51,12 @@ DialogUnionDetails::~DialogUnionDetails() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +bool DialogUnionDetails::RetainPieces() const +{ + return ui->checkBox->isChecked(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save correct data and ignore wrong. diff --git a/src/libs/vtools/dialogs/tools/dialoguniondetails.h b/src/libs/vtools/dialogs/tools/dialoguniondetails.h index 5f7290d6a..90fc8df01 100644 --- a/src/libs/vtools/dialogs/tools/dialoguniondetails.h +++ b/src/libs/vtools/dialogs/tools/dialoguniondetails.h @@ -50,6 +50,8 @@ public: quint32 getD2() const; int getIndexD1() const; int getIndexD2() const; + + bool RetainPieces() const; public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) Q_DECL_OVERRIDE; private: diff --git a/src/libs/vtools/dialogs/tools/dialoguniondetails.ui b/src/libs/vtools/dialogs/tools/dialoguniondetails.ui index 6d207580b..6d9c2e68c 100644 --- a/src/libs/vtools/dialogs/tools/dialoguniondetails.ui +++ b/src/libs/vtools/dialogs/tools/dialoguniondetails.ui @@ -10,7 +10,7 @@ 0 0 300 - 78 + 96 @@ -24,13 +24,20 @@ false - + <html><head/><body><p>Do you really want to unite details?</p></body></html> + + + + Retain original pieces + + + diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index cad29dd6f..6f82a9b3d 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -520,9 +520,10 @@ VToolUnionDetails* VToolUnionDetails::Create(DialogTool *dialog, VMainGraphicsSc VDetail d2 = data->GetDetail(dialogTool->getD2()); quint32 indexD1 = static_cast(dialogTool->getIndexD1()); quint32 indexD2 = static_cast(dialogTool->getIndexD2()); + const bool retainPieces = dialogTool->RetainPieces(); qApp->getUndoStack()->beginMacro(tr("union details")); VToolUnionDetails* tool = Create(0, d1, d2, dialogTool->getD1(), dialogTool->getD2(), indexD1, indexD2, scene, - doc, data, Document::FullParse, Source::FromGui); + doc, data, Document::FullParse, Source::FromGui, retainPieces); qApp->getUndoStack()->endMacro(); return tool; } @@ -546,7 +547,8 @@ VToolUnionDetails* VToolUnionDetails::Create(DialogTool *dialog, VMainGraphicsSc VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d1, const VDetail &d2, const quint32 &d1id, const quint32 &d2id, const quint32 &indexD1, const quint32 &indexD2, VMainGraphicsScene *scene, VAbstractPattern *doc, - VContainer *data, const Document &parse, const Source &typeCreation) + VContainer *data, const Document &parse, const Source &typeCreation, + bool retainPieces) { VToolUnionDetails *unionDetails = 0; quint32 id = _id; @@ -639,17 +641,22 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d QHash* tools = doc->getTools(); SCASSERT(tools != nullptr); + if (not retainPieces) { - VToolDetail *toolDet = qobject_cast(tools->value(d1id)); - SCASSERT(toolDet != nullptr); - bool ask = false; - toolDet->Remove(ask); - } + { + VToolDetail *toolDet = qobject_cast(tools->value(d1id)); + SCASSERT(toolDet != nullptr); + bool ask = false; + toolDet->Remove(ask); + } - VToolDetail *toolDet = qobject_cast(tools->value(d2id)); - SCASSERT(toolDet != nullptr); - bool ask = false; - toolDet->Remove(ask); + { + VToolDetail *toolDet = qobject_cast(tools->value(d2id)); + SCASSERT(toolDet != nullptr); + const bool ask = false; + toolDet->Remove(ask); + } + } SCASSERT(not children.isEmpty()) SaveChildren(doc, id, children); diff --git a/src/libs/vtools/tools/vtooluniondetails.h b/src/libs/vtools/tools/vtooluniondetails.h index 1e3ab77a5..c4439d139 100644 --- a/src/libs/vtools/tools/vtooluniondetails.h +++ b/src/libs/vtools/tools/vtooluniondetails.h @@ -52,7 +52,8 @@ public: const quint32 &d2id, const quint32 &indexD1, const quint32 &indexD2, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, const Document &parse, - const Source &typeCreation); + const Source &typeCreation, + bool retainPieces = false); static void PointsOnEdge(const VDetail &d, const quint32 &index, VPointF &p1, VPointF &p2, VContainer *data); static void FindIndexJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j); static QVector GetDetailFromFile(VAbstractPattern *doc, const QDomElement &domElement);