From 6bf31f284642c64a174aed9a146d9fe1fd29e7d3 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 30 Jun 2016 18:32:08 +0300 Subject: [PATCH] Resolved issue #483. File lost. Fixed crash after redo Unite tool. Caused by wrong position of modeling objects. --HG-- branch : develop --- src/app/valentina/xml/vpattern.cpp | 8 ++--- .../tools/nodeDetails/vabstractnode.cpp | 6 ++-- .../vtools/tools/nodeDetails/vabstractnode.h | 4 ++- .../vtools/tools/nodeDetails/vnodearc.cpp | 8 ++--- src/libs/vtools/tools/nodeDetails/vnodearc.h | 4 +-- .../vtools/tools/nodeDetails/vnodepoint.cpp | 8 ++--- .../vtools/tools/nodeDetails/vnodepoint.h | 5 +-- .../vtools/tools/nodeDetails/vnodespline.cpp | 8 ++--- .../vtools/tools/nodeDetails/vnodespline.h | 5 +-- .../tools/nodeDetails/vnodesplinepath.cpp | 10 +++--- .../tools/nodeDetails/vnodesplinepath.h | 4 +-- src/libs/vtools/tools/vtooluniondetails.cpp | 20 ++++++----- src/libs/vtools/tools/vtooluniondetails.h | 2 +- src/libs/vtools/undocommands/adddetnode.cpp | 33 ++++++++++++++----- src/libs/vtools/undocommands/adddetnode.h | 6 +++- 15 files changed, 80 insertions(+), 51 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index abaac899c..8202161e1 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -1299,7 +1299,7 @@ void VPattern::ParseNodePoint(const QDomElement &domElement, const Document &par return;// Just ignore } data->UpdateGObject(id, new VPointF(*point, point->name(), mx, my, idObject, Draw::Modeling)); - VNodePoint::Create(this, data, sceneDetail, id, idObject, parse, Source::FromFile, idTool); + VNodePoint::Create(this, data, sceneDetail, id, idObject, parse, Source::FromFile, "", idTool); } catch (const VExceptionBadId &e) { @@ -2219,7 +2219,7 @@ void VPattern::ParseNodeSpline(const QDomElement &domElement, const Document &pa return;// Just ignore } - VNodeSpline::Create(this, data, id, idObject, parse, Source::FromFile, idTool); + VNodeSpline::Create(this, data, id, idObject, parse, Source::FromFile, "", idTool); } catch (const VExceptionBadId &e) { @@ -2264,7 +2264,7 @@ void VPattern::ParseNodeSplinePath(const QDomElement &domElement, const Document Q_UNUSED(e); return;// Just ignore } - VNodeSplinePath::Create(this, data, id, idObject, parse, Source::FromFile, idTool); + VNodeSplinePath::Create(this, data, id, idObject, parse, Source::FromFile, "", idTool); } catch (const VExceptionBadId &e) { @@ -2344,7 +2344,7 @@ void VPattern::ParseNodeArc(const QDomElement &domElement, const Document &parse arc->setIdObject(idObject); arc->setMode(Draw::Modeling); data->UpdateGObject(id, arc); - VNodeArc::Create(this, data, id, idObject, parse, Source::FromFile, idTool); + VNodeArc::Create(this, data, id, idObject, parse, Source::FromFile, "", idTool); } catch (const VExceptionBadId &e) { diff --git a/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp b/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp index 8b883f58f..889fb3331 100644 --- a/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp +++ b/src/libs/vtools/tools/nodeDetails/vabstractnode.cpp @@ -44,9 +44,9 @@ const QString VAbstractNode::AttrIdTool = QStringLiteral("idTool"); * @param parent parent object. */ VAbstractNode::VAbstractNode(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &idNode, - const quint32 &idTool, QObject *parent) + const QString &drawName, const quint32 &idTool, QObject *parent) : VAbstractTool(doc, data, id, parent), parentType(ParentType::Item), idNode(idNode), idTool(idTool), - currentColor(Qt::black) + currentColor(Qt::black), m_drawName(drawName) { _referens = 0; } @@ -137,6 +137,6 @@ void VAbstractNode::GroupVisibility(quint32 object, bool visible) */ void VAbstractNode::AddToModeling(const QDomElement &domElement) { - AddDetNode *addNode = new AddDetNode(domElement, doc); + AddDetNode *addNode = new AddDetNode(domElement, doc, m_drawName); qApp->getUndoStack()->push(addNode); } diff --git a/src/libs/vtools/tools/nodeDetails/vabstractnode.h b/src/libs/vtools/tools/nodeDetails/vabstractnode.h index 4272514da..795f44c9f 100644 --- a/src/libs/vtools/tools/nodeDetails/vabstractnode.h +++ b/src/libs/vtools/tools/nodeDetails/vabstractnode.h @@ -43,7 +43,7 @@ class VAbstractNode : public VAbstractTool Q_OBJECT public: VAbstractNode(VAbstractPattern *doc, VContainer *data, const quint32 &id, const quint32 &idNode, - const quint32 &idTool, QObject *parent = nullptr); + const QString &drawName = QString(), const quint32 &idTool = 0, QObject *parent = nullptr); virtual ~VAbstractNode() Q_DECL_OVERRIDE {} static const QString AttrIdTool; virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE; @@ -67,6 +67,8 @@ protected: /** @brief currentColor current tool color. */ QColor currentColor; + QString m_drawName; + void AddToModeling(const QDomElement &domElement); virtual void SetVisualization() Q_DECL_OVERRIDE {} diff --git a/src/libs/vtools/tools/nodeDetails/vnodearc.cpp b/src/libs/vtools/tools/nodeDetails/vnodearc.cpp index 06922cbdc..04381a653 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodearc.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodearc.cpp @@ -45,8 +45,8 @@ const QString VNodeArc::ToolType = QStringLiteral("modeling"); * @param qoParent QObject parent */ VNodeArc::VNodeArc(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Source &typeCreation, - const quint32 &idTool, QObject *qoParent) - :VAbstractNode(doc, data, id, idArc, idTool, qoParent) + const QString &drawName, const quint32 &idTool, QObject *qoParent) + :VAbstractNode(doc, data, id, idArc, drawName, idTool, qoParent) { ToolCreation(typeCreation); } @@ -63,12 +63,12 @@ VNodeArc::VNodeArc(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 * @param idTool tool id. */ void VNodeArc::Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, - const Document &parse, const Source &typeCreation, const quint32 &idTool) + const Document &parse, const Source &typeCreation, const QString &drawName, const quint32 &idTool) { VAbstractTool::AddRecord(id, Tool::NodeArc, doc); if (parse == Document::FullParse) { - VNodeArc *arc = new VNodeArc(doc, data, id, idArc, typeCreation, idTool, doc); + VNodeArc *arc = new VNodeArc(doc, data, id, idArc, typeCreation, drawName, idTool, doc); doc->AddTool(id, arc); if (idTool != NULL_ID) diff --git a/src/libs/vtools/tools/nodeDetails/vnodearc.h b/src/libs/vtools/tools/nodeDetails/vnodearc.h index fc6597b68..3ca8afbd6 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodearc.h +++ b/src/libs/vtools/tools/nodeDetails/vnodearc.h @@ -40,7 +40,7 @@ class VNodeArc :public VAbstractNode Q_OBJECT public: static void Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Document &parse, - const Source &typeCreation, const quint32 &idTool = 0); + const Source &typeCreation, const QString &drawName = QString(), const quint32 &idTool = 0); static const QString ToolType; virtual QString getTagName() const Q_DECL_OVERRIDE; @@ -57,7 +57,7 @@ private: Q_DISABLE_COPY(VNodeArc) VNodeArc(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idArc, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr); + const QString &drawName = QString(), const quint32 &idTool = 0, QObject *qoParent = nullptr); }; #endif // VNODEARC_H4 diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp index 995b85a77..0f33788c9 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp @@ -48,8 +48,8 @@ const QString VNodePoint::ToolType = QStringLiteral("modeling"); * @param parent parent object. */ VNodePoint::VNodePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idPoint, const Source &typeCreation, - const quint32 &idTool, QObject *qoParent, QGraphicsItem *parent) - :VAbstractNode(doc, data, id, idPoint, idTool, qoParent), QGraphicsEllipseItem(parent), radius(0), + const QString &drawName, const quint32 &idTool, QObject *qoParent, QGraphicsItem *parent) + :VAbstractNode(doc, data, id, idPoint, drawName, idTool, qoParent), QGraphicsEllipseItem(parent), radius(0), namePoint(nullptr), lineName(nullptr) { radius = ToPixel(DefPointRadius/*mm*/, Unit::Mm); @@ -82,14 +82,14 @@ VNodePoint::VNodePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quin */ void VNodePoint::Create(VAbstractPattern *doc, VContainer *data, VMainGraphicsScene *scene, quint32 id, quint32 idPoint, const Document &parse, - const Source &typeCreation, const quint32 &idTool) + const Source &typeCreation, const QString &drawName, const quint32 &idTool) { VAbstractTool::AddRecord(id, Tool::NodePoint, doc); if (parse == Document::FullParse) { //TODO Need create garbage collector and remove all nodes, what we don't use. //Better check garbage before each saving file. Check only modeling tags. - VNodePoint *point = new VNodePoint(doc, data, id, idPoint, typeCreation, idTool, doc); + VNodePoint *point = new VNodePoint(doc, data, id, idPoint, typeCreation, drawName, idTool, doc); connect(scene, &VMainGraphicsScene::EnableToolMove, point, &VNodePoint::EnableToolMove); connect(scene, &VMainGraphicsScene::EnablePointItemHover, point, &VNodePoint::AllowHover); diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.h b/src/libs/vtools/tools/nodeDetails/vnodepoint.h index fcf12a3ac..e5304133f 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.h +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.h @@ -46,7 +46,7 @@ class VNodePoint: public VAbstractNode, public QGraphicsEllipseItem public: static void Create(VAbstractPattern *doc, VContainer *data, VMainGraphicsScene *scene, quint32 id, quint32 idPoint, const Document &parse, - const Source &typeCreation, const quint32 &idTool = 0); + const Source &typeCreation, const QString &drawName = QString(), const quint32 &idTool = 0); static const QString ToolType; virtual int type() const Q_DECL_OVERRIDE {return Type;} @@ -94,7 +94,8 @@ private: Q_DISABLE_COPY(VNodePoint) VNodePoint(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idPoint, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr, QGraphicsItem * parent = nullptr ); + const QString &drawName = QString(), const quint32 &idTool = 0, QObject *qoParent = nullptr, + QGraphicsItem * parent = nullptr ); }; #endif // VNODEPOINT_H diff --git a/src/libs/vtools/tools/nodeDetails/vnodespline.cpp b/src/libs/vtools/tools/nodeDetails/vnodespline.cpp index 5555bf0ba..6abb3036b 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodespline.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodespline.cpp @@ -45,8 +45,8 @@ const QString VNodeSpline::ToolType = QStringLiteral("modelingSpline"); * @param qoParent QObject parent. */ VNodeSpline::VNodeSpline(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, - const Source &typeCreation, const quint32 &idTool, QObject *qoParent) - :VAbstractNode(doc, data, id, idSpline, idTool, qoParent) + const Source &typeCreation, const QString &drawName, const quint32 &idTool, QObject *qoParent) + :VAbstractNode(doc, data, id, idSpline, drawName, idTool, qoParent) { ToolCreation(typeCreation); } @@ -65,13 +65,13 @@ VNodeSpline::VNodeSpline(VAbstractPattern *doc, VContainer *data, quint32 id, qu */ VNodeSpline *VNodeSpline::Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, - const Source &typeCreation, const quint32 &idTool) + const Source &typeCreation, const QString &drawName, const quint32 &idTool) { VAbstractTool::AddRecord(id, Tool::NodeSpline, doc); VNodeSpline *spl = nullptr; if (parse == Document::FullParse) { - spl = new VNodeSpline(doc, data, id, idSpline, typeCreation, idTool, doc); + spl = new VNodeSpline(doc, data, id, idSpline, typeCreation, drawName, idTool, doc); doc->AddTool(id, spl); if (idTool != NULL_ID) diff --git a/src/libs/vtools/tools/nodeDetails/vnodespline.h b/src/libs/vtools/tools/nodeDetails/vnodespline.h index 08823b0d9..878285492 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodespline.h +++ b/src/libs/vtools/tools/nodeDetails/vnodespline.h @@ -41,7 +41,8 @@ class VNodeSpline:public VAbstractNode public: static VNodeSpline *Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, - const Source &typeCreation, const quint32 &idTool = 0); + const Source &typeCreation, const QString &drawName = QString(), + const quint32 &idTool = 0); static const QString ToolType; virtual QString getTagName() const Q_DECL_OVERRIDE; @@ -58,7 +59,7 @@ private: Q_DISABLE_COPY(VNodeSpline) VNodeSpline(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr); + const QString &drawName = QString(), const quint32 &idTool = 0, QObject *qoParent = nullptr); }; #endif // VNODESPLINE_H diff --git a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp index 4c16ce503..42112bf6b 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.cpp @@ -46,8 +46,9 @@ const QString VNodeSplinePath::ToolType = QStringLiteral("modelingPath"); * @param qoParent QObject parent. */ VNodeSplinePath::VNodeSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, - const Source &typeCreation, const quint32 &idTool, QObject *qoParent) - :VAbstractNode(doc, data, id, idSpline, idTool, qoParent) + const Source &typeCreation, const QString &drawName, const quint32 &idTool, + QObject *qoParent) + :VAbstractNode(doc, data, id, idSpline, drawName, idTool, qoParent) { ToolCreation(typeCreation); } @@ -64,12 +65,13 @@ VNodeSplinePath::VNodeSplinePath(VAbstractPattern *doc, VContainer *data, quint3 * @param idTool tool id. */ void VNodeSplinePath::Create(VAbstractPattern *doc, VContainer *data, quint32 id, - quint32 idSpline, const Document &parse, const Source &typeCreation, const quint32 &idTool) + quint32 idSpline, const Document &parse, const Source &typeCreation, + const QString &drawName, const quint32 &idTool) { VAbstractTool::AddRecord(id, Tool::NodeSplinePath, doc); if (parse == Document::FullParse) { - VNodeSplinePath *splPath = new VNodeSplinePath(doc, data, id, idSpline, typeCreation, idTool, doc); + VNodeSplinePath *splPath = new VNodeSplinePath(doc, data, id, idSpline, typeCreation, drawName, idTool, doc); doc->AddTool(id, splPath); if (idTool != NULL_ID) diff --git a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h index 2976cc53b..3519a6c9e 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h +++ b/src/libs/vtools/tools/nodeDetails/vnodesplinepath.h @@ -41,7 +41,7 @@ class VNodeSplinePath : public VAbstractNode public: static void Create(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Document &parse, - const Source &typeCreation, const quint32 &idTool = 0); + const Source &typeCreation, const QString &drawName = QString(), const quint32 &idTool = 0); static const QString ToolType; virtual QString getTagName() const Q_DECL_OVERRIDE; @@ -58,7 +58,7 @@ private: Q_DISABLE_COPY(VNodeSplinePath) VNodeSplinePath(VAbstractPattern *doc, VContainer *data, quint32 id, quint32 idSpline, const Source &typeCreation, - const quint32 &idTool = 0, QObject *qoParent = nullptr); + const QString &drawName = QString(), const quint32 &idTool = 0, QObject *qoParent = nullptr); }; #endif // VNODESPLINEPATH_H diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index 11aaf9960..50700e308 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -95,6 +95,8 @@ VToolUnionDetails::VToolUnionDetails(VAbstractPattern *doc, VContainer *data, co * @param det detail what we union. * @param i index node in detail. * @param idTool id tool union details. + * @param children + * @param drawName * @param dx bias node x axis. * @param dy bias node y axis. * @param pRotate point rotation. @@ -102,8 +104,8 @@ VToolUnionDetails::VToolUnionDetails(VAbstractPattern *doc, VContainer *data, co */ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, VDetail &newDetail, const VDetail &det, const int &i, - const quint32 &idTool, QVector &children, const qreal &dx, - const qreal &dy, const quint32 &pRotate, const qreal &angle) + const quint32 &idTool, QVector &children, const QString &drawName, + const qreal &dx, const qreal &dy, const quint32 &pRotate, const qreal &angle) { quint32 id = 0, idObject = 0; switch (det.at(i).getTypeTool()) @@ -124,7 +126,8 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte VPointF *point1 = new VPointF(*point); point1->setMode(Draw::Modeling); id = data->AddGObject(point1); - VNodePoint::Create(doc, data, scene, id, idObject, Document::FullParse, Source::FromGui, idTool); + VNodePoint::Create(doc, data, scene, id, idObject, Document::FullParse, Source::FromGui, drawName, + idTool); } } break; @@ -161,7 +164,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte arc2->setMode(Draw::Modeling); id = data->AddGObject(arc2); - VNodeArc::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, idTool); + VNodeArc::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); } } break; @@ -196,7 +199,7 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte VSpline *spl1 = new VSpline(*spl); spl1->setMode(Draw::Modeling); id = data->AddGObject(spl1); - VNodeSpline::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, idTool); + VNodeSpline::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); delete p4; delete p1; @@ -265,7 +268,8 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte VSplinePath *path1 = new VSplinePath(*path); path1->setMode(Draw::Modeling); id = data->AddGObject(path1); - VNodeSplinePath::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, idTool); + VNodeSplinePath::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, + idTool); } } break; @@ -609,7 +613,7 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d QVector children; do { - AddToNewDetail(scene, doc, data, newDetail, d1.RemoveEdge(indexD1), i, id, children); + AddToNewDetail(scene, doc, data, newDetail, d1.RemoveEdge(indexD1), i, id, children, drawName); ++i; if (i > d1.indexOfNode(det1p1.getId()) && pointsD2 < countNodeD2-1) { @@ -621,7 +625,7 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d { j=0; } - AddToNewDetail(scene, doc, data, newDetail, d2.RemoveEdge(indexD2), j, id, children, + AddToNewDetail(scene, doc, data, newDetail, d2.RemoveEdge(indexD2), j, id, children, drawName, dx, dy, det1p1.getId(), angle); ++pointsD2; ++j; diff --git a/src/libs/vtools/tools/vtooluniondetails.h b/src/libs/vtools/tools/vtooluniondetails.h index 4ba45ab19..1e3ab77a5 100644 --- a/src/libs/vtools/tools/vtooluniondetails.h +++ b/src/libs/vtools/tools/vtooluniondetails.h @@ -70,7 +70,7 @@ public: static const QString NodeTypeModeling; static void AddToNewDetail(VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data, VDetail &newDetail, const VDetail &det, const int &i, const quint32 &idTool, - QVector &children, const qreal &dx = 0, + QVector &children, const QString &drawName, const qreal &dx = 0, const qreal &dy = 0, const quint32 &pRotate = 0, const qreal &angle = 0); static void UpdatePoints(VContainer *data, const VDetail &det, const int &i, QVector &children, const qreal &dx = 0, const qreal &dy = 0, diff --git a/src/libs/vtools/undocommands/adddetnode.cpp b/src/libs/vtools/undocommands/adddetnode.cpp index 443b449b8..7d263f7d2 100644 --- a/src/libs/vtools/undocommands/adddetnode.cpp +++ b/src/libs/vtools/undocommands/adddetnode.cpp @@ -29,8 +29,8 @@ #include "adddetnode.h" //--------------------------------------------------------------------------------------------------------------------- -AddDetNode::AddDetNode(const QDomElement &xml, VAbstractPattern *doc, QUndoCommand *parent) - : VUndoCommand(xml, doc, parent) +AddDetNode::AddDetNode(const QDomElement &xml, VAbstractPattern *doc, const QString &drawName, QUndoCommand *parent) + : VUndoCommand(xml, doc, parent), m_drawName(drawName) { setText(QObject::tr("add node")); nodeId = doc->GetParametrId(xml); @@ -45,15 +45,15 @@ void AddDetNode::undo() { qCDebug(vUndo, "Undo."); - QDomElement modelingElement; - if (doc->GetActivNodeElement(VAbstractPattern::TagModeling, modelingElement)) + QDomElement modeling = GetModelingSection(); + if (not modeling.isNull()) { QDomElement domElement = doc->elementById(nodeId); if (domElement.isElement()) { - if (modelingElement.removeChild(domElement).isNull()) + if (modeling.removeChild(domElement).isNull()) { - qCDebug(vUndo, "Can't delete node."); + qCDebug(vUndo, "Can't delete node."); return; } } @@ -75,10 +75,10 @@ void AddDetNode::redo() { qCDebug(vUndo, "Redo."); - QDomElement modelingElement; - if (doc->GetActivNodeElement(VAbstractPattern::TagModeling, modelingElement)) + QDomElement modeling = GetModelingSection(); + if (not modeling.isNull()) { - modelingElement.appendChild(xml); + modeling.appendChild(xml); } else { @@ -86,3 +86,18 @@ void AddDetNode::redo() return; } } + +//--------------------------------------------------------------------------------------------------------------------- +QDomElement AddDetNode::GetModelingSection() const +{ + QDomElement modeling; + if (m_drawName.isEmpty()) + { + doc->GetActivNodeElement(VAbstractPattern::TagModeling, modeling); + } + else + { + modeling = doc->GetDraw(m_drawName).firstChildElement(VAbstractPattern::TagModeling); + } + return modeling; +} diff --git a/src/libs/vtools/undocommands/adddetnode.h b/src/libs/vtools/undocommands/adddetnode.h index 5176f5218..828408798 100644 --- a/src/libs/vtools/undocommands/adddetnode.h +++ b/src/libs/vtools/undocommands/adddetnode.h @@ -35,12 +35,16 @@ class AddDetNode : public VUndoCommand { Q_OBJECT public: - AddDetNode(const QDomElement &xml, VAbstractPattern *doc, QUndoCommand *parent = 0); + AddDetNode(const QDomElement &xml, VAbstractPattern *doc, const QString &drawName, QUndoCommand *parent = 0); virtual ~AddDetNode() Q_DECL_OVERRIDE; virtual void undo() Q_DECL_OVERRIDE; virtual void redo() Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(AddDetNode) + + QString m_drawName; + + QDomElement GetModelingSection() const; }; #endif // ADDDETNODE_H