From 33da692248cd8d76334645b18e74f34bbef9802b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 29 Mar 2017 13:09:49 +0300 Subject: [PATCH] Added special check for tools those use free click. When a user click on point the app show line between selected point and a mouse cursor. This usefull when need to select an angle or length. But because selection of a point also emit release event this particular event should be ignored. In case of release inside of point circle all worked good, but not if select point by label. --HG-- branch : feature --- .../dialogs/tools/dialogcurveintersectaxis.cpp | 15 +++++++++++++-- .../dialogs/tools/dialogcurveintersectaxis.h | 2 ++ src/libs/vtools/dialogs/tools/dialogendline.cpp | 17 +++++++++++++++-- src/libs/vtools/dialogs/tools/dialogendline.h | 2 ++ .../dialogs/tools/dialoglineintersectaxis.cpp | 15 +++++++++++++-- .../dialogs/tools/dialoglineintersectaxis.h | 2 ++ .../vtools/dialogs/tools/dialogrotation.cpp | 11 ++++++++++- src/libs/vtools/dialogs/tools/dialogrotation.h | 2 ++ 8 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index da06c4a6e..c52d44a38 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -56,8 +56,11 @@ //--------------------------------------------------------------------------------------------------------------------- DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogCurveIntersectAxis), formulaAngle(QString()), - formulaBaseHeightAngle(0) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCurveIntersectAxis), + formulaAngle(), + formulaBaseHeightAngle(0), + m_firstRelease(false) { ui->setupUi(this); @@ -191,6 +194,14 @@ void DialogCurveIntersectAxis::ShowDialog(bool click) { if (click) { + // The check need to ignore first release of mouse button. + // User can select point by clicking on a label. + if (not m_firstRelease) + { + m_firstRelease = true; + return; + } + /*We will ignore click if poinet is in point circle*/ VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr) diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h index 531be5591..86be59791 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h @@ -88,6 +88,8 @@ private: QString formulaAngle; int formulaBaseHeightAngle; + + bool m_firstRelease; }; #endif // DIALOGCURVEINTERSECTAXIS_H diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index d67822fca..e59ac6041 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -62,8 +62,13 @@ * @param parent parent widget */ DialogEndLine::DialogEndLine(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogEndLine), - formulaLength(QString()), formulaAngle(QString()), formulaBaseHeight(0), formulaBaseHeightAngle(0) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogEndLine), + formulaLength(), + formulaAngle(), + formulaBaseHeight(0), + formulaBaseHeightAngle(0), + m_firstRelease(false) { ui->setupUi(this); @@ -298,6 +303,14 @@ void DialogEndLine::ShowDialog(bool click) { if (click) { + // The check need to ignore first release of mouse button. + // User can select point by clicking on a label. + if (not m_firstRelease) + { + m_firstRelease = true; + return; + } + /*We will ignore click if pointer is in point circle*/ VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr) diff --git a/src/libs/vtools/dialogs/tools/dialogendline.h b/src/libs/vtools/dialogs/tools/dialogendline.h index 66c61417a..79afc7e98 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.h +++ b/src/libs/vtools/dialogs/tools/dialogendline.h @@ -110,6 +110,8 @@ private: /** @brief formulaBaseHeight base height defined by dialogui */ int formulaBaseHeight; int formulaBaseHeightAngle; + + bool m_firstRelease; }; #endif // DIALOGENDLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index 2adf57691..7e4ac7123 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -60,8 +60,11 @@ //--------------------------------------------------------------------------------------------------------------------- DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogLineIntersectAxis), formulaAngle(QString()), - formulaBaseHeightAngle(0) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogLineIntersectAxis), + formulaAngle(), + formulaBaseHeightAngle(0), + m_firstRelease(false) { ui->setupUi(this); @@ -220,6 +223,14 @@ void DialogLineIntersectAxis::ShowDialog(bool click) { if (click) { + // The check need to ignore first release of mouse button. + // User can select point by clicking on a label. + if (not m_firstRelease) + { + m_firstRelease = true; + return; + } + /*We will ignore click if poinet is in point circle*/ VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr) diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h index d43f60d5e..49f690b46 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h @@ -92,6 +92,8 @@ private: QString formulaAngle; int formulaBaseHeightAngle; + + bool m_firstRelease; }; #endif // DIALOGLINEINTERSECTAXIS_H diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 9259be628..06f418a8b 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -72,7 +72,8 @@ DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QW formulaBaseHeightAngle(0), objects(), stage1(true), - m_suffix() + m_suffix(), + m_firstRelease(false) { ui->setupUi(this); @@ -200,6 +201,14 @@ void DialogRotation::ShowDialog(bool click) } else if (not stage1 && prepare && click) { + // The check need to ignore first release of mouse button. + // User can select point by clicking on a label. + if (not m_firstRelease) + { + m_firstRelease = true; + return; + } + /*We will ignore click if pointer is in point circle*/ VMainGraphicsScene *scene = qobject_cast(qApp->getCurrentScene()); SCASSERT(scene != nullptr) diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.h b/src/libs/vtools/dialogs/tools/dialogrotation.h index ada4857a9..ac6a14066 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.h +++ b/src/libs/vtools/dialogs/tools/dialogrotation.h @@ -109,6 +109,8 @@ private: QString m_suffix; + bool m_firstRelease; + void EvalAngle(); };