diff --git a/src/app/tools/drawTools/vtoolpoint.cpp b/src/app/tools/drawTools/vtoolpoint.cpp index 5c1f891f7..ff9095ef4 100644 --- a/src/app/tools/drawTools/vtoolpoint.cpp +++ b/src/app/tools/drawTools/vtoolpoint.cpp @@ -30,6 +30,7 @@ #include #include "../../geometry/vpointf.h" #include "../../visualization/vgraphicssimpletextitem.h" +#include "../../undocommands/movelabel.h" const QString VToolPoint::TagName = QStringLiteral("point"); @@ -121,13 +122,9 @@ void VToolPoint::NameChangePosition(const QPointF &pos) */ void VToolPoint::UpdateNamePosition(qreal mx, qreal my) { - QDomElement domElement = doc->elementById(QString().setNum(id)); - if (domElement.isElement()) - { - doc->SetAttribute(domElement, AttrMx, qApp->fromPixel(mx)); - doc->SetAttribute(domElement, AttrMy, qApp->fromPixel(my)); - emit toolhaveChange(); - } + MoveLabel *moveLabel = new MoveLabel(doc, mx, my, id, this->scene()); + connect(moveLabel, &MoveLabel::NeedLiteParsing, doc, &VPattern::LiteParseTree); + qApp->getUndoStack()->push(moveLabel); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/undocommands/movelabel.cpp b/src/app/undocommands/movelabel.cpp new file mode 100644 index 000000000..eaada78e2 --- /dev/null +++ b/src/app/undocommands/movelabel.cpp @@ -0,0 +1,133 @@ +/************************************************************************ + ** + ** @file movelabel.cpp + ** @author Roman Telezhynskyi + ** @date 25 12, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2014 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "movelabel.h" +#include +#include +#include "../xml/vpattern.h" +#include "../tools/vabstracttool.h" +#include "../core/vapplication.h" + +//--------------------------------------------------------------------------------------------------------------------- +MoveLabel::MoveLabel(VPattern *doc, const double &x, const double &y, const quint32 &id, QGraphicsScene *scene, + QUndoCommand *parent) + : VUndoCommand(QDomElement(), doc, parent), oldMx(0.0), oldMy(0.0), newMx(x), newMy(y), scene(scene) +{ + setText(tr("Move point label")); + nodeId = id; + qCDebug(vUndo)<<"Point id"<elementById(QString().setNum(id)); + if (domElement.isElement()) + { + oldMx = qApp->toPixel(doc->GetParametrDouble(domElement, VAbstractTool::AttrMx, "0.0")); + oldMy = qApp->toPixel(doc->GetParametrDouble(domElement, VAbstractTool::AttrMy, "0.0")); + + qCDebug(vUndo)<<"Label old Mx"<(command); + SCASSERT(moveCommand != nullptr); + const quint32 id = moveCommand->getPointId(); + + if (id != nodeId) + { + return false; + } + + qCDebug(vUndo)<<"Mergin undo."; + newMx = moveCommand->getNewMx(); + newMy = moveCommand->getNewMy(); + qCDebug(vUndo)<<"Label new Mx"<(UndoCommand::MoveLabel); +} + +//--------------------------------------------------------------------------------------------------------------------- +void MoveLabel::Do(double mx, double my) +{ + qCDebug(vUndo)<<"New mx"<elementById(QString().setNum(nodeId)); + if (domElement.isElement()) + { + doc->SetAttribute(domElement, VAbstractTool::AttrMx, QString().setNum(qApp->fromPixel(mx))); + doc->SetAttribute(domElement, VAbstractTool::AttrMy, QString().setNum(qApp->fromPixel(my))); + + emit NeedLiteParsing(Document::LitePPParse); + + QList list = scene->views(); + VAbstractTool::NewSceneRect(scene, list[0]); + } + else + { + qCDebug(vUndo)<<"Can't find point with id ="< + ** @date 25 12, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2014 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef MOVELABEL_H +#define MOVELABEL_H + +#include "vundocommand.h" + +class QGraphicsScene; + +class MoveLabel : public VUndoCommand +{ + Q_OBJECT +public: + MoveLabel(VPattern *doc, const double &x, const double &y, const quint32 &id, QGraphicsScene *scene, + QUndoCommand *parent = 0); + virtual ~MoveLabel(); + virtual void undo(); + virtual void redo(); + virtual bool mergeWith(const QUndoCommand *command); + virtual int id() const; + quint32 getPointId() const; + double getNewMx() const; + double getNewMy() const; + void Do(double mx, double my); +private: + Q_DISABLE_COPY(MoveLabel) + double oldMx; + double oldMy; + double newMx; + double newMy; + QGraphicsScene *scene; +}; + +//--------------------------------------------------------------------------------------------------------------------- +inline quint32 MoveLabel::getPointId() const +{ + return nodeId; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline double MoveLabel::getNewMx() const +{ + return newMx; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline double MoveLabel::getNewMy() const +{ + return newMy; +} + +#endif // MOVELABEL_H diff --git a/src/app/undocommands/undocommands.pri b/src/app/undocommands/undocommands.pri index f71684f29..255bd8719 100644 --- a/src/app/undocommands/undocommands.pri +++ b/src/app/undocommands/undocommands.pri @@ -17,7 +17,8 @@ HEADERS += \ $$PWD/adduniondetails.h \ $$PWD/deletedetail.h \ $$PWD/vundocommand.h \ - $$PWD/renamepp.h + $$PWD/renamepp.h \ + $$PWD/movelabel.h SOURCES += \ @@ -36,5 +37,6 @@ SOURCES += \ $$PWD/adduniondetails.cpp \ $$PWD/deletedetail.cpp \ $$PWD/vundocommand.cpp \ - $$PWD/renamepp.cpp + $$PWD/renamepp.cpp \ + $$PWD/movelabel.cpp diff --git a/src/app/undocommands/vundocommand.h b/src/app/undocommands/vundocommand.h index 44b6c33ab..ef5971fb1 100644 --- a/src/app/undocommands/vundocommand.h +++ b/src/app/undocommands/vundocommand.h @@ -46,7 +46,8 @@ enum class UndoCommand: char { AddPatternPiece, MoveDetail, DeleteTool, DeletePatternPiece, - RenamePP + RenamePP, + MoveLabel }; class VPattern;