From 814e414b4b3ad6d80e2be2b65c2e426f0dae4e62 Mon Sep 17 00:00:00 2001 From: dismine Date: Mon, 16 Jun 2014 10:52:55 +0300 Subject: [PATCH] Fix for broken move detail and move single point. --HG-- branch : feature --- src/app/tools/drawTools/vabstractspline.cpp | 2 +- src/app/tools/drawTools/vdrawtool.h | 2 +- src/app/tools/drawTools/vtoolarc.cpp | 2 +- src/app/tools/drawTools/vtoolline.cpp | 2 +- src/app/tools/drawTools/vtoolpoint.cpp | 4 +++- src/app/tools/drawTools/vtoolsinglepoint.cpp | 4 ++-- src/app/tools/drawTools/vtoolsinglepoint.h | 2 +- src/app/tools/vabstracttool.cpp | 8 ++++---- src/app/tools/vabstracttool.h | 3 ++- src/app/tools/vtooldetail.cpp | 8 ++++---- src/app/undocommands/deltool.cpp | 6 ++++-- src/app/undocommands/deltool.h | 4 +++- src/app/undocommands/movedetail.cpp | 11 +++++++++-- src/app/undocommands/movedetail.h | 1 + 14 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/app/tools/drawTools/vabstractspline.cpp b/src/app/tools/drawTools/vabstractspline.cpp index a9b983c70..b1705a21a 100644 --- a/src/app/tools/drawTools/vabstractspline.cpp +++ b/src/app/tools/drawTools/vabstractspline.cpp @@ -154,7 +154,7 @@ void VAbstractSpline::keyReleaseEvent(QKeyEvent *event) switch (event->key()) { case Qt::Key_Delete: - DeleteTool(); + DeleteTool(this); break; default: break; diff --git a/src/app/tools/drawTools/vdrawtool.h b/src/app/tools/drawTools/vdrawtool.h index ec15a3987..407deccba 100644 --- a/src/app/tools/drawTools/vdrawtool.h +++ b/src/app/tools/drawTools/vdrawtool.h @@ -137,7 +137,7 @@ protected: } if (selectedAction == actionRemove) { - DeleteTool(); + DeleteTool(tool); } } } diff --git a/src/app/tools/drawTools/vtoolarc.cpp b/src/app/tools/drawTools/vtoolarc.cpp index e7d85ee78..6612affdd 100644 --- a/src/app/tools/drawTools/vtoolarc.cpp +++ b/src/app/tools/drawTools/vtoolarc.cpp @@ -349,7 +349,7 @@ void VToolArc::keyReleaseEvent(QKeyEvent *event) switch (event->key()) { case Qt::Key_Delete: - DeleteTool(); + DeleteTool(this); break; default: break; diff --git a/src/app/tools/drawTools/vtoolline.cpp b/src/app/tools/drawTools/vtoolline.cpp index 3ecc506cd..b210a8458 100644 --- a/src/app/tools/drawTools/vtoolline.cpp +++ b/src/app/tools/drawTools/vtoolline.cpp @@ -315,7 +315,7 @@ void VToolLine::keyReleaseEvent(QKeyEvent *event) switch (event->key()) { case Qt::Key_Delete: - DeleteTool(); + DeleteTool(this); break; default: break; diff --git a/src/app/tools/drawTools/vtoolpoint.cpp b/src/app/tools/drawTools/vtoolpoint.cpp index e2350396e..52815ea12 100644 --- a/src/app/tools/drawTools/vtoolpoint.cpp +++ b/src/app/tools/drawTools/vtoolpoint.cpp @@ -199,6 +199,7 @@ void VToolPoint::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) */ void VToolPoint::RefreshPointGeometry(const VPointF &point) { + this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); this->setPen(QPen(currentColor, qApp->toPixel(qApp->widthHairLine())/factor)); QRectF rec = QRectF(0, 0, radius*2/factor, radius*2/factor); rec.translate(-rec.center().x(), -rec.center().y()); @@ -213,6 +214,7 @@ void VToolPoint::RefreshPointGeometry(const VPointF &point) namePoint->setPos(QPointF(point.mx(), point.my())); connect(namePoint, &VGraphicsSimpleTextItem::NameChangePosition, this, &VToolPoint::NameChangePosition); RefreshLine(); + this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); } //--------------------------------------------------------------------------------------------------------------------- @@ -279,7 +281,7 @@ void VToolPoint::keyReleaseEvent(QKeyEvent *event) switch (event->key()) { case Qt::Key_Delete: - DeleteTool(); + DeleteTool(this); break; default: break; diff --git a/src/app/tools/drawTools/vtoolsinglepoint.cpp b/src/app/tools/drawTools/vtoolsinglepoint.cpp index cfd526a6a..612271189 100644 --- a/src/app/tools/drawTools/vtoolsinglepoint.cpp +++ b/src/app/tools/drawTools/vtoolsinglepoint.cpp @@ -161,7 +161,6 @@ QVariant VToolSinglePoint::itemChange(QGraphicsItem::GraphicsItemChange change, } if (change == ItemPositionHasChanged && scene()) { - this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); // value - this is new position. QPointF newPos = value.toPointF(); @@ -185,8 +184,9 @@ void VToolSinglePoint::decrementReferens() } //--------------------------------------------------------------------------------------------------------------------- -void VToolSinglePoint::DeleteTool(bool ask) +void VToolSinglePoint::DeleteTool(QGraphicsItem *tool, bool ask) { + Q_UNUSED(tool) if (ask) { QMessageBox msgBox; diff --git a/src/app/tools/drawTools/vtoolsinglepoint.h b/src/app/tools/drawTools/vtoolsinglepoint.h index 78b7b0ebd..ff515fe54 100644 --- a/src/app/tools/drawTools/vtoolsinglepoint.h +++ b/src/app/tools/drawTools/vtoolsinglepoint.h @@ -59,7 +59,7 @@ protected: virtual void RefreshDataInFile(); QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); virtual void decrementReferens(); - virtual void DeleteTool(bool ask = true); + virtual void DeleteTool(QGraphicsItem *tool, bool ask = true); virtual void SaveDialog(QDomElement &domElement); private: QString namePP; diff --git a/src/app/tools/vabstracttool.cpp b/src/app/tools/vabstracttool.cpp index 0a06a78f8..36445b1f1 100644 --- a/src/app/tools/vabstracttool.cpp +++ b/src/app/tools/vabstracttool.cpp @@ -242,8 +242,9 @@ QPointF VAbstractTool::addVector(const QPointF &p, const QPointF &p1, const QPoi * @brief DeleteTool full delete object form scene and file. * @param tool tool */ -void VAbstractTool::DeleteTool(bool ask) +void VAbstractTool::DeleteTool(QGraphicsItem *tool, bool ask) { + DelTool *delTool = new DelTool(doc, id, tool); if (ask) { QMessageBox msgBox; @@ -256,10 +257,9 @@ void VAbstractTool::DeleteTool(bool ask) { return; } + /*Ugly hack. If UnionDetails delete detail no need emit FullParsing */ + connect(delTool, &DelTool::NeedFullParsing, doc, &VPattern::NeedFullParsing); } - - DelTool *delTool = new DelTool(doc, id); - connect(delTool, &DelTool::NeedFullParsing, doc, &VPattern::NeedFullParsing); qApp->getUndoStack()->push(delTool); } diff --git a/src/app/tools/vabstracttool.h b/src/app/tools/vabstracttool.h index c29e6c587..27ceac280 100644 --- a/src/app/tools/vabstracttool.h +++ b/src/app/tools/vabstracttool.h @@ -37,6 +37,7 @@ class QLineF; class QPointF; class QGraphicsScene; class QGraphicsView; +class QGraphicsItem; class QRectF; /** @@ -145,7 +146,7 @@ protected: * @brief RemoveReferens decrement value of reference. */ virtual void RemoveReferens(){} - virtual void DeleteTool(bool ask = true); + virtual void DeleteTool(QGraphicsItem *tool, bool ask = true); Qt::PenStyle LineStyle(); private: Q_DISABLE_COPY(VAbstractTool) diff --git a/src/app/tools/vtooldetail.cpp b/src/app/tools/vtooldetail.cpp index b5b5d40d7..7d7b2127e 100644 --- a/src/app/tools/vtooldetail.cpp +++ b/src/app/tools/vtooldetail.cpp @@ -273,7 +273,7 @@ void VToolDetail::Create(const quint32 &_id, const VDetail &newDetail, VMainGrap */ void VToolDetail::Remove(bool ask) { - DeleteTool(ask); + DeleteTool(this, ask); } //--------------------------------------------------------------------------------------------------------------------- @@ -368,7 +368,6 @@ QVariant VToolDetail::itemChange(QGraphicsItem::GraphicsItemChange change, const { if (change == ItemPositionHasChanged && scene()) { - this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); // value - this is new position. QPointF newPos = value.toPointF(); @@ -403,7 +402,7 @@ void VToolDetail::keyReleaseEvent(QKeyEvent *event) switch (event->key()) { case Qt::Key_Delete: - DeleteTool(); + DeleteTool(this); break; default: break; @@ -457,7 +456,7 @@ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) } if (selectedAction == actionRemove) { - DeleteTool(); + DeleteTool(this); } } @@ -544,6 +543,7 @@ void VToolDetail::AddNode(VPattern *doc, QDomElement &domElement, const VNodeDet */ void VToolDetail::RefreshGeometry() { + this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); QPainterPath path = VEquidistant().ContourPath(id, this->getData()); this->setPath(path); diff --git a/src/app/undocommands/deltool.cpp b/src/app/undocommands/deltool.cpp index d6b2a6c80..4b3594717 100644 --- a/src/app/undocommands/deltool.cpp +++ b/src/app/undocommands/deltool.cpp @@ -28,11 +28,12 @@ #include "deltool.h" #include "../xml/vpattern.h" +#include //--------------------------------------------------------------------------------------------------------------------- -DelTool::DelTool(VPattern *doc, quint32 id, QUndoCommand *parent) +DelTool::DelTool(VPattern *doc, quint32 id, QGraphicsItem *tool, QUndoCommand *parent) : QObject(), QUndoCommand(parent), xml(QDomElement()), parentNode(QDomNode()), previousNode(QDomNode()), - doc(doc), toolId(id) + doc(doc), toolId(id), tool(tool) { setText(tr("Delete tool")); QDomElement domElement = doc->elementById(QString().setNum(id)); @@ -67,6 +68,7 @@ void DelTool::redo() if (domElement.isElement()) { parentNode.removeChild(domElement); + tool->hide(); emit NeedFullParsing(); } else diff --git a/src/app/undocommands/deltool.h b/src/app/undocommands/deltool.h index 3c9ba4a3d..856f95aa3 100644 --- a/src/app/undocommands/deltool.h +++ b/src/app/undocommands/deltool.h @@ -33,12 +33,13 @@ #include class VPattern; +class QGraphicsItem; class DelTool : public QObject, public QUndoCommand { Q_OBJECT public: - DelTool(VPattern *doc, quint32 id, QUndoCommand *parent = 0); + DelTool(VPattern *doc, quint32 id, QGraphicsItem *tool, QUndoCommand *parent = 0); virtual ~DelTool(); virtual void undo(); virtual void redo(); @@ -51,6 +52,7 @@ private: QDomNode previousNode; VPattern *doc; quint32 toolId; + QGraphicsItem *tool; }; #endif // DELTOOL_H diff --git a/src/app/undocommands/movedetail.cpp b/src/app/undocommands/movedetail.cpp index 05ec57297..1470b058d 100644 --- a/src/app/undocommands/movedetail.cpp +++ b/src/app/undocommands/movedetail.cpp @@ -37,7 +37,8 @@ //--------------------------------------------------------------------------------------------------------------------- MoveDetail::MoveDetail(VPattern *doc, const double &x, const double &y, const quint32 &id, QGraphicsScene *scene, QUndoCommand *parent) - : QObject(), QUndoCommand(parent), doc(doc), oldX(0.0), oldY(0.0), newX(x), newY(y), detId(id), scene(scene) + : QObject(), QUndoCommand(parent), doc(doc), oldX(0.0), oldY(0.0), newX(x), newY(y), detId(id), scene(scene), + redoFlag(false) { setText(QObject::tr("Move detail")); @@ -67,6 +68,7 @@ void MoveDetail::undo() { doc->SetAttribute(domElement, VAbstractTool::AttrMx, QString().setNum(qApp->fromPixel(oldX))); doc->SetAttribute(domElement, VAbstractTool::AttrMy, QString().setNum(qApp->fromPixel(oldY))); + qDebug()<<"undo move detail"<SetAttribute(domElement, VAbstractTool::AttrMx, QString().setNum(qApp->fromPixel(newX))); doc->SetAttribute(domElement, VAbstractTool::AttrMy, QString().setNum(qApp->fromPixel(newY))); + qDebug()<<"redo move detail"< list = scene->views(); VAbstractTool::NewSceneRect(scene, list[0]); diff --git a/src/app/undocommands/movedetail.h b/src/app/undocommands/movedetail.h index d53413d6b..aa5e8520b 100644 --- a/src/app/undocommands/movedetail.h +++ b/src/app/undocommands/movedetail.h @@ -59,6 +59,7 @@ private: double newY; quint32 detId; QGraphicsScene *scene; + bool redoFlag; }; //---------------------------------------------------------------------------------------------------------------------