From 9b145fc8307938c58cdaafb6c01675d62ff0df23 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 14 Feb 2021 19:03:19 +0100 Subject: [PATCH] TD: fix undo/redo for dimension objects * do not emit dragFinished() signal inside mousePressEvent as nothing has been done. This avoids to create an empty transaction and doesn't touch the document * inside mouseReleaseEvent() check if the mouse has been moved and only if yes emit the signal * improve error handling in mouseDoubleClickEvent * in mouseDoubleClickEvent start to edit the view provider --- src/Mod/TechDraw/Gui/QGIViewDimension.cpp | 24 ++++++++++++-------- src/Mod/TechDraw/Gui/ViewProviderDimension.h | 4 +--- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index 2bef981208..c23ba6d2ec 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -36,6 +36,8 @@ # include # include + # include + # include # include # include # include @@ -52,7 +54,6 @@ #include #include #include -#include #include @@ -76,7 +77,6 @@ #include "QGIViewDimension.h" #include "ViewProviderDimension.h" #include "DrawGuiUtil.h" -#include "TaskDimension.h" #define NORMAL 0 #define PRE 1 @@ -149,10 +149,7 @@ void QGIDatumLabel::mousePressEvent(QGraphicsSceneMouseEvent * event) m_ctrl = true; } - if(scene() && this == scene()->mouseGrabberItem()) { - Q_EMIT dragFinished(); - } - QGraphicsItem::mousePressEvent(event); + QGraphicsItem::mousePressEvent(event); } void QGIDatumLabel::mouseMoveEvent(QGraphicsSceneMouseEvent * event) @@ -164,8 +161,11 @@ void QGIDatumLabel::mouseReleaseEvent(QGraphicsSceneMouseEvent * event) { // Base::Console().Message("QGIDL::mouseReleaseEvent()\n"); m_ctrl = false; - if(scene() && this == scene()->mouseGrabberItem()) { - Q_EMIT dragFinished(); + if (QLineF(event->screenPos(), event->buttonDownScreenPos(Qt::LeftButton)) + .length() > 0) { + if (scene() && this == scene()->mouseGrabberItem()) { + Q_EMIT dragFinished(); + } } QGraphicsItem::mouseReleaseEvent(event); @@ -175,13 +175,17 @@ void QGIDatumLabel::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) { QGIViewDimension* qgivDimension = dynamic_cast(parentItem()); if (qgivDimension == nullptr) { + qWarning() << "QGIDatumLabel::mouseDoubleClickEvent: No parent item"; return; } - auto ViewProvider = static_cast(qgivDimension->getViewProvider(qgivDimension->getViewObject())); + + auto ViewProvider = dynamic_cast(qgivDimension->getViewProvider(qgivDimension->getViewObject())); if (ViewProvider == nullptr) { + qWarning() << "QGIDatumLabel::mouseDoubleClickEvent: No valid view provider"; return; } - Gui::Control().showDialog(new TaskDlgDimension(qgivDimension, ViewProvider)); + + ViewProvider->startDefaultEditMode(); QGraphicsItem::mouseDoubleClickEvent(event); } diff --git a/src/Mod/TechDraw/Gui/ViewProviderDimension.h b/src/Mod/TechDraw/Gui/ViewProviderDimension.h index 6bc047e1aa..156369a840 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDimension.h +++ b/src/Mod/TechDraw/Gui/ViewProviderDimension.h @@ -76,6 +76,7 @@ public: virtual bool setEdit(int ModNum); virtual void unsetEdit(int ModNum); virtual bool doubleClicked(void); + void startDefaultEditMode(); virtual TechDraw::DrawViewDimension* getViewObject() const; @@ -89,9 +90,6 @@ public: protected: virtual void handleChangedPropertyType(Base::XMLReader &reader, const char *TypeName, App::Property * prop); -private: - void startDefaultEditMode(); - private: static const char *StandardAndStyleEnums[]; static const char *RenderingExtentEnums[];