From 1fbb65d21dbddd00d46aa983439351e7b3962b6b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 18 Oct 2017 11:58:01 +0300 Subject: [PATCH] Fix SavePiecePathOptions undocommand. Bug with increment/decrement reference counter. --HG-- branch : develop --- .../undocommands/savepiecepathoptions.cpp | 40 +------------------ .../undocommands/savepiecepathoptions.h | 6 +-- 2 files changed, 3 insertions(+), 43 deletions(-) diff --git a/src/libs/vtools/undocommands/savepiecepathoptions.cpp b/src/libs/vtools/undocommands/savepiecepathoptions.cpp index 8e89b1ae1..a7968c9b9 100644 --- a/src/libs/vtools/undocommands/savepiecepathoptions.cpp +++ b/src/libs/vtools/undocommands/savepiecepathoptions.cpp @@ -49,10 +49,6 @@ SavePiecePathOptions::SavePiecePathOptions(const VPiecePath &oldPath, const VPie nodeId = id; } -//--------------------------------------------------------------------------------------------------------------------- -SavePiecePathOptions::~SavePiecePathOptions() -{} - //--------------------------------------------------------------------------------------------------------------------- void SavePiecePathOptions::undo() { @@ -65,6 +61,7 @@ void SavePiecePathOptions::undo() doc->RemoveAllChildren(domElement);//Very important to clear before rewrite VToolPiecePath::AddNodes(doc, domElement, m_oldPath); + DecrementReferences(m_newPath.MissingNodes(m_oldPath)); IncrementReferences(m_oldPath.MissingNodes(m_newPath)); SCASSERT(m_data); @@ -89,6 +86,7 @@ void SavePiecePathOptions::redo() VToolPiecePath::AddNodes(doc, domElement, m_newPath); DecrementReferences(m_oldPath.MissingNodes(m_newPath)); + IncrementReferences(m_newPath.MissingNodes(m_oldPath)); SCASSERT(m_data); m_data->UpdatePiecePath(nodeId, m_newPath); @@ -98,37 +96,3 @@ void SavePiecePathOptions::redo() qCDebug(vUndo, "Can't find path with id = %u.", nodeId); } } - -//--------------------------------------------------------------------------------------------------------------------- -bool SavePiecePathOptions::mergeWith(const QUndoCommand *command) -{ - const SavePiecePathOptions *saveCommand = static_cast(command); - SCASSERT(saveCommand != nullptr); - const quint32 id = saveCommand->PathId(); - - if (id != nodeId) - { - return false; - } - - m_newPath = saveCommand->NewPath(); - return true; -} - -//--------------------------------------------------------------------------------------------------------------------- -int SavePiecePathOptions::id() const -{ - return static_cast(UndoCommand::SavePiecePathOptions); -} - -//--------------------------------------------------------------------------------------------------------------------- -quint32 SavePiecePathOptions::PathId() const -{ - return nodeId; -} - -//--------------------------------------------------------------------------------------------------------------------- -VPiecePath SavePiecePathOptions::NewPath() const -{ - return m_newPath; -} diff --git a/src/libs/vtools/undocommands/savepiecepathoptions.h b/src/libs/vtools/undocommands/savepiecepathoptions.h index e6bec5586..cb336dc57 100644 --- a/src/libs/vtools/undocommands/savepiecepathoptions.h +++ b/src/libs/vtools/undocommands/savepiecepathoptions.h @@ -39,14 +39,10 @@ class SavePiecePathOptions : public VUndoCommand public: SavePiecePathOptions(const VPiecePath &oldPath, const VPiecePath &newPath, VAbstractPattern *doc, VContainer *data, quint32 id, QUndoCommand *parent = nullptr); - virtual ~SavePiecePathOptions(); + virtual ~SavePiecePathOptions()=default; virtual void undo() Q_DECL_OVERRIDE; virtual void redo() Q_DECL_OVERRIDE; - virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE; - virtual int id() const Q_DECL_OVERRIDE; - quint32 PathId() const; - VPiecePath NewPath() const; private: Q_DISABLE_COPY(SavePiecePathOptions)