diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index e2a7b692e..b814b0292 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -169,10 +169,17 @@ const QString VAbstractPattern::NodePoint = QStringLiteral("NodePoint"); const QString VAbstractPattern::NodeSpline = QStringLiteral("NodeSpline"); const QString VAbstractPattern::NodeSplinePath = QStringLiteral("NodeSplinePath"); +QHash VAbstractPattern::tools = QHash(); + //--------------------------------------------------------------------------------------------------------------------- VAbstractPattern::VAbstractPattern(QObject *parent) - : QObject(parent), VDomDocument(), nameActivPP(QString()), cursor(0), tools(QHash()), - toolsOnRemove(QVector()), history(QVector()), patternPieces(QStringList()), + : QObject(parent), + VDomDocument(), + nameActivPP(QString()), + cursor(0), + toolsOnRemove(QVector()), + history(QVector()), + patternPieces(QStringList()), modified(false) {} @@ -1264,7 +1271,7 @@ void VAbstractPattern::SelectedDetail(quint32 id) } //--------------------------------------------------------------------------------------------------------------------- -void VAbstractPattern::ToolExists(const quint32 &id) const +void VAbstractPattern::ToolExists(const quint32 &id) { if (tools.contains(id) == false) { diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 8ff0a8c61..cc9f21899 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -90,9 +90,8 @@ public: virtual void UpdateToolData(const quint32 &id, VContainer *data)=0; - QHash *getTools(); - VDataTool *getTool(const quint32 &id); - void AddTool(const quint32 &id, VDataTool *tool); + static VDataTool* getTool(const quint32 &id); + static void AddTool(const quint32 &id, VDataTool *tool); void AddToolOnRemove(VDataTool *tool); @@ -329,9 +328,6 @@ protected: /** @brief cursor cursor keep id tool after which we will add new tool in file. */ quint32 cursor; - /** @brief tools list with pointer on tools. */ - QHash tools; - QVector toolsOnRemove; /** @brief history history records. */ @@ -343,7 +339,10 @@ protected: /** @brief modified keep state of the document for cases that do not cover QUndoStack*/ mutable bool modified; - void ToolExists(const quint32 &id) const; + /** @brief tools list with pointer on tools. */ + static QHash tools; + + static void ToolExists(const quint32 &id); void SetActivPP(const QString& name); @@ -374,14 +373,4 @@ private: }; -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief getTools return list of tools pointers. - * @return list. - */ -inline QHash *VAbstractPattern::getTools() -{ - return &tools; -} - #endif // VABSTRACTPATTERN_H diff --git a/src/libs/vtools/dialogs/tools/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/dialogpiecepath.cpp index ed8d41b2b..9e08bdd31 100644 --- a/src/libs/vtools/dialogs/tools/dialogpiecepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpiecepath.cpp @@ -31,6 +31,7 @@ #include "../vpatterndb/vpiecenode.h" #include "visualization/path/vistoolpiecepath.h" #include "../../tools/vabstracttool.h" +#include "../../tools/vtoolseamallowance.h" #include @@ -210,6 +211,12 @@ void DialogPiecePath::CheckState() void DialogPiecePath::ShowVisualization() { AddVisualization(); + + VToolSeamAllowance *tool = qobject_cast(VAbstractPattern::getTool(GetPieceId())); + SCASSERT(tool != nullptr); + auto visPath = qobject_cast(vis); + SCASSERT(visPath != nullptr); + visPath->setParentItem(tool); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index 42b8f9afa..35ba30b6b 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -1239,9 +1239,7 @@ template //cppcheck-suppress unusedFunction Tool* VToolDetail::InitTool(VMainGraphicsScene *scene, const VNodeDetail &node) { - QHash* tools = doc->getTools(); - SCASSERT(tools != nullptr); - Tool *tool = qobject_cast(tools->value(node.getId())); + Tool *tool = qobject_cast(doc->getTool(node.getId())); SCASSERT(tool != nullptr); connect(tool, &Tool::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); tool->setParentItem(this); diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 1dea63415..d721844eb 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -764,9 +764,7 @@ void VToolSeamAllowance::InitInternalPaths(const VPiece &detail) QVector records = detail.GetInternalPaths(); for (int i = 0; i < records.size(); ++i) { - QHash* tools = doc->getTools(); - SCASSERT(tools != nullptr); - VToolPiecePath *tool = qobject_cast(tools->value(records.at(i))); + VToolPiecePath *tool = qobject_cast(doc->getTool(records.at(i))); SCASSERT(tool != nullptr); tool->setParentItem(this); tool->SetParentType(ParentType::Item); @@ -819,9 +817,7 @@ template */ Tool *VToolSeamAllowance::InitTool(VMainGraphicsScene *scene, quint32 toolId) { - QHash* tools = doc->getTools(); - SCASSERT(tools != nullptr); - Tool *tool = qobject_cast(tools->value(toolId)); + Tool *tool = qobject_cast(doc->getTool(toolId)); SCASSERT(tool != nullptr); connect(tool, &Tool::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); tool->setParentItem(this); diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index 6002152eb..7b35d040b 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -647,24 +647,19 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d newDetail.setMx(d1.getMx()); newDetail.setMy(d1.getMy()); VToolDetail::Create(0, newDetail, scene, doc, data, parse, Source::FromTool, drawName); - QHash* tools = doc->getTools(); - SCASSERT(tools != nullptr); + + auto RemoveDetail = [doc](quint32 id) + { + VToolDetail *toolDet = qobject_cast(doc->getTool(id)); + SCASSERT(toolDet != nullptr); + bool ask = false; + toolDet->Remove(ask); + }; 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(d2id)); - SCASSERT(toolDet != nullptr); - const bool ask = false; - toolDet->Remove(ask); - } + RemoveDetail(d1id); + RemoveDetail(d2id); } SCASSERT(not children.isEmpty()) diff --git a/src/libs/vtools/undocommands/deletedetail.cpp b/src/libs/vtools/undocommands/deletedetail.cpp index 50140d16a..b6eff7437 100644 --- a/src/libs/vtools/undocommands/deletedetail.cpp +++ b/src/libs/vtools/undocommands/deletedetail.cpp @@ -96,9 +96,7 @@ void DeleteDetail::redo() // UnionDetails delete two old details and create one new. // So when UnionDetail delete detail we can't use FullParsing. So we hide detail on scene directly. - QHash* tools = doc->getTools(); - SCASSERT(tools != nullptr); - VToolDetail *toolDet = qobject_cast(tools->value(nodeId)); + VToolDetail *toolDet = qobject_cast(doc->getTool(nodeId)); SCASSERT(toolDet != nullptr); toolDet->hide(); diff --git a/src/libs/vtools/undocommands/deletepiece.cpp b/src/libs/vtools/undocommands/deletepiece.cpp index d75e879a0..fba723c2f 100644 --- a/src/libs/vtools/undocommands/deletepiece.cpp +++ b/src/libs/vtools/undocommands/deletepiece.cpp @@ -100,9 +100,7 @@ void DeletePiece::redo() // UnionDetails delete two old details and create one new. // So when UnionDetail delete detail we can't use FullParsing. So we hide detail on scene directly. - QHash* tools = doc->getTools(); - SCASSERT(tools != nullptr); - VToolSeamAllowance *toolDet = qobject_cast(tools->value(nodeId)); + VToolSeamAllowance *toolDet = qobject_cast(doc->getTool(nodeId)); SCASSERT(toolDet != nullptr); toolDet->hide();