From 6ec85f3bdf5ef941da00c65f453d56eae2b12b55 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 17 Nov 2022 16:42:03 +0200 Subject: [PATCH] New option Interactive tools. --- ChangeLog.txt | 1 + .../preferencesconfigurationpage.cpp | 2 + .../preferencesconfigurationpage.ui | 17 ++++++- src/libs/vmisc/vcommonsettings.cpp | 13 +++++ src/libs/vmisc/vcommonsettings.h | 3 ++ .../vtools/dialogs/tools/dialogalongline.cpp | 23 +++++---- .../vtools/dialogs/tools/dialogalongline.h | 2 + src/libs/vtools/dialogs/tools/dialogarc.cpp | 28 ++++++----- src/libs/vtools/dialogs/tools/dialogarc.h | 2 + .../dialogs/tools/dialogarcwithlength.cpp | 28 ++++++----- .../dialogs/tools/dialogarcwithlength.h | 2 + .../vtools/dialogs/tools/dialogbisector.cpp | 23 ++++++--- .../vtools/dialogs/tools/dialogbisector.h | 2 + .../tools/dialogcurveintersectaxis.cpp | 18 ++++--- .../vtools/dialogs/tools/dialogcutarc.cpp | 23 ++++++--- src/libs/vtools/dialogs/tools/dialogcutarc.h | 2 + .../vtools/dialogs/tools/dialogcutspline.cpp | 23 ++++++--- .../vtools/dialogs/tools/dialogcutspline.h | 2 + .../dialogs/tools/dialogcutsplinepath.cpp | 23 ++++++--- .../dialogs/tools/dialogcutsplinepath.h | 2 + .../dialogs/tools/dialogellipticalarc.cpp | 25 +++++++--- .../dialogs/tools/dialogellipticalarc.h | 2 + .../vtools/dialogs/tools/dialogendline.cpp | 24 +++++++--- src/libs/vtools/dialogs/tools/dialogendline.h | 2 + .../dialogs/tools/dialoglineintersectaxis.cpp | 22 +++++---- .../vtools/dialogs/tools/dialognormal.cpp | 23 ++++++--- src/libs/vtools/dialogs/tools/dialognormal.h | 2 + .../tools/dialogpointfromcircleandtangent.cpp | 25 +++++++--- .../tools/dialogpointfromcircleandtangent.h | 2 + .../dialogs/tools/dialogpointofcontact.cpp | 25 +++++++--- .../dialogs/tools/dialogpointofcontact.h | 2 + .../dialogpointofintersectioncircles.cpp | 47 ++++++++++++------- .../tools/dialogpointofintersectioncircles.h | 2 + .../dialogs/tools/dialogshoulderpoint.cpp | 23 ++++++--- .../dialogs/tools/dialogshoulderpoint.h | 2 + .../line/vistoollineintersectaxis.cpp | 19 ++++++-- .../line/vistoolpointofcontact.cpp | 3 +- .../line/vistoolpointofcontact.h | 2 +- .../vistoolpointofintersectioncircles.cpp | 2 +- 39 files changed, 351 insertions(+), 142 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 00d80ba7a..c09a136dd 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -9,6 +9,7 @@ - [smart-pattern/valentina#184] Fix incorrect seam allowance. - Export area of piece in Final measurements. - New option Show accuracy radius. +- New option Interactive tools. # Valentina 0.7.52 September 12, 2022 - Fix crash when default locale is ru. diff --git a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp index 1e48107a2..f8fb7a85c 100644 --- a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp +++ b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp @@ -123,6 +123,7 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent) ui->checkBoxFreeCurve->setChecked(settings->IsFreeCurveMode()); ui->checkBoxZoomFitBestCurrentPP->setChecked(settings->IsDoubleClickZoomFitBestCurrentPP()); + ui->checkBoxInteractiveTools->setChecked(settings->IsInteractiveTools()); //----------------------- Toolbar ui->toolBarStyleCheck->setChecked(settings->GetToolBarStyle()); @@ -202,6 +203,7 @@ auto PreferencesConfigurationPage::Apply() -> QStringList settings->SetFreeCurveMode(ui->checkBoxFreeCurve->isChecked()); settings->SetDoubleClickZoomFitBestCurrentPP(ui->checkBoxZoomFitBestCurrentPP->isChecked()); + settings->SetInteractiveTools(ui->checkBoxInteractiveTools->isChecked()); if (m_langChanged || m_systemChanged) { diff --git a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui index 6eff5d3d6..b037d1f47 100644 --- a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui +++ b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui @@ -33,9 +33,9 @@ 0 - -27 + 0 624 - 838 + 867 @@ -235,6 +235,19 @@ + + + + Disable if you want to skip interactive part of creating tools. And go straight to editing formulas instead. + + + Interactive tools + + + true + + + diff --git a/src/libs/vmisc/vcommonsettings.cpp b/src/libs/vmisc/vcommonsettings.cpp index e0abb860f..9d0b0fd4d 100644 --- a/src/libs/vmisc/vcommonsettings.cpp +++ b/src/libs/vmisc/vcommonsettings.cpp @@ -91,6 +91,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAskContinueIfLayout Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationToolBarStyle, (QLatin1String("configuration/tool_bar_style"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationFreeCurveMode, (QLatin1String("configuration/freeCurveMode"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDoubleClickZoomFitBestCurrentPP, (QLatin1String("configuration/doubleClickZoomFitBestCurrentPP"))) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationInteractiveTools, (QLatin1String("configuration/interactiveTools"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDontUseNativeDialog, (QLatin1String("configuration/dontUseNativeDialog"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUndo, (QLatin1String("pattern/undo"))) // NOLINT @@ -670,6 +671,18 @@ void VCommonSettings::SetDoubleClickZoomFitBestCurrentPP(bool value) setValue(*settingConfigurationDoubleClickZoomFitBestCurrentPP, value); } +//--------------------------------------------------------------------------------------------------------------------- +bool VCommonSettings::IsInteractiveTools() const +{ + return value(*settingConfigurationInteractiveTools, true).toBool(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VCommonSettings::SetInteractiveTools(bool value) +{ + setValue(*settingConfigurationInteractiveTools, value); +} + //--------------------------------------------------------------------------------------------------------------------- auto VCommonSettings::GetUndoCount() const -> int { diff --git a/src/libs/vmisc/vcommonsettings.h b/src/libs/vmisc/vcommonsettings.h index 359490188..22422e88f 100644 --- a/src/libs/vmisc/vcommonsettings.h +++ b/src/libs/vmisc/vcommonsettings.h @@ -125,6 +125,9 @@ public: auto IsDoubleClickZoomFitBestCurrentPP() const -> bool; void SetDoubleClickZoomFitBestCurrentPP(bool value); + auto IsInteractiveTools() const -> bool; + void SetInteractiveTools(bool value); + auto GetUndoCount() const -> int; void SetUndoCount(const int &value); diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.cpp b/src/libs/vtools/dialogs/tools/dialogalongline.cpp index 0bafeb90a..5d07d6ec2 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogalongline.cpp @@ -292,10 +292,9 @@ void DialogAlongLine::ChosenSecondPoint(quint32 id, const QString &toolTip) prepare = true; - if (m_buildMidpoint) + if (m_buildMidpoint || not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) { - setModal(true); - show(); + FinishCreating(); } } else @@ -305,6 +304,16 @@ void DialogAlongLine::ChosenSecondPoint(quint32 id, const QString &toolTip) } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogAlongLine::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPointId set id second point of line @@ -380,13 +389,7 @@ void DialogAlongLine::ShowDialog(bool click) SetFormula(QString::number(FromPixel(len, *data->GetPatternUnit()))); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.h b/src/libs/vtools/dialogs/tools/dialogalongline.h index bbafb79c0..c6211143e 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.h +++ b/src/libs/vtools/dialogs/tools/dialogalongline.h @@ -124,6 +124,8 @@ private: void SetCurrentLength(); void ChosenSecondPoint(quint32 id, const QString &toolTip); + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogarc.cpp b/src/libs/vtools/dialogs/tools/dialogarc.cpp index f80159b59..cb17dad3a 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarc.cpp @@ -257,17 +257,6 @@ void DialogArc::ShowDialog(bool click) auto *arcVis = qobject_cast(vis); SCASSERT(arcVis != nullptr) - auto FinishCreating = [this, arcVis]() - { - arcVis->SetMode(Mode::Show); - arcVis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); - }; - if (click) { // The check need to ignore first release of mouse button. @@ -400,6 +389,11 @@ void DialogArc::ChosenObject(quint32 id, const SceneObject &type) } prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -551,6 +545,18 @@ void DialogArc::EvalF() m_angleF2 = Eval(formulaData, m_flagF2); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogArc::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetCenter return id of center point diff --git a/src/libs/vtools/dialogs/tools/dialogarc.h b/src/libs/vtools/dialogs/tools/dialogarc.h index 685f3d51e..7a54fc8cf 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.h +++ b/src/libs/vtools/dialogs/tools/dialogarc.h @@ -157,6 +157,8 @@ private: void EvalRadius(); void EvalF(); + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp index 5182e5465..b4a025126 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp @@ -284,17 +284,6 @@ void DialogArcWithLength::ShowDialog(bool click) { if (prepare) { - auto FinishCreating = [this]() - { - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); - }; - if (click) { // The check need to ignore first release of mouse button. @@ -384,6 +373,11 @@ void DialogArcWithLength::ChosenObject(quint32 id, const SceneObject &type) } prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -544,3 +538,15 @@ void DialogArcWithLength::EvalF() Eval(formulaData, m_flagF1); } + +//--------------------------------------------------------------------------------------------------------------------- +void DialogArcWithLength::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); +} diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h index 301204659..3b691b87a 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h @@ -150,6 +150,8 @@ private: void Radius(); void Length(); void EvalF(); + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.cpp b/src/libs/vtools/dialogs/tools/dialogbisector.cpp index 0d0611d8d..a53866211 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.cpp +++ b/src/libs/vtools/dialogs/tools/dialogbisector.cpp @@ -387,13 +387,7 @@ void DialogBisector::ShowDialog(bool click) SetFormula(QString::number(FromPixel(len, *data->GetPatternUnit()))); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } //--------------------------------------------------------------------------------------------------------------------- @@ -443,10 +437,25 @@ void DialogBisector::ChosenThirdPoint(quint32 id) line->SetPoint3Id(id); line->RefreshGeometry(); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogBisector::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetTypeLine return type of line diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.h b/src/libs/vtools/dialogs/tools/dialogbisector.h index 972fe19b5..36eee2c7c 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.h +++ b/src/libs/vtools/dialogs/tools/dialogbisector.h @@ -122,6 +122,8 @@ private: qint32 m_number{0}; void ChosenThirdPoint(quint32 id); + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index a1061a0f4..4b9b5faaf 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -225,8 +225,7 @@ void DialogCurveIntersectAxis::ShowDialog(bool click) } /*We will ignore click if poinet is in point circle*/ - VMainGraphicsScene *scene = - qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); + auto *scene = qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); SCASSERT(scene != nullptr) const QSharedPointer point = data->GeometricObject(GetBasePointId()); QLineF line = QLineF(static_cast(*point), scene->getScenePos()); @@ -238,12 +237,11 @@ void DialogCurveIntersectAxis::ShowDialog(bool click) } } - VisToolCurveIntersectAxis *line = qobject_cast(vis); + auto *line = qobject_cast(vis); SCASSERT(line != nullptr) + SetAngle(line->Angle());//Show in dialog angle what user choose - this->SetAngle(line->Angle());//Show in dialog angle what user choose emit ToolTip(QString()); - DialogAccepted();// Just set default values and don't show dialog } } @@ -253,7 +251,7 @@ void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { if (prepare == false)// After first choose we ignore all objects { - VisToolCurveIntersectAxis *line = qobject_cast(vis); + auto *line = qobject_cast(vis); SCASSERT(line != nullptr) switch (number) @@ -284,6 +282,14 @@ void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) line->setAxisPointId(id); line->RefreshGeometry(); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + emit ToolTip(QString()); + + setModal(true); + show(); + } } } break; diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp index 7271c30c5..71df49e32 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp @@ -177,6 +177,11 @@ void DialogCutArc::ChosenObject(quint32 id, const SceneObject &type) auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -250,6 +255,16 @@ void DialogCutArc::ValidateAlias() CheckState(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutArc::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief setArcId set id of arc @@ -388,11 +403,5 @@ void DialogCutArc::ShowDialog(bool click) } } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.h b/src/libs/vtools/dialogs/tools/dialogcutarc.h index a7f398a42..babf08a7f 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.h +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.h @@ -116,6 +116,8 @@ private: QString m_originAliasSuffix2{}; bool m_firstRelease{false}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp index 1a33679e1..8544020a0 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp @@ -185,6 +185,11 @@ void DialogCutSpline::ChosenObject(quint32 id, const SceneObject &type) auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -258,6 +263,16 @@ void DialogCutSpline::ValidateAlias() CheckState(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSpline::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSpline::DeployFormulaTextEdit() { @@ -388,11 +403,5 @@ void DialogCutSpline::ShowDialog(bool click) } } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.h b/src/libs/vtools/dialogs/tools/dialogcutspline.h index c710f24c2..d731c96fd 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.h +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.h @@ -116,6 +116,8 @@ private: QString m_originAliasSuffix2{}; bool m_firstRelease{false}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp index ffee728fb..98b12fc38 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp @@ -185,6 +185,11 @@ void DialogCutSplinePath::ChosenObject(quint32 id, const SceneObject &type) auto *window = qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -258,6 +263,16 @@ void DialogCutSplinePath::ValidateAlias() CheckState(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSplinePath::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSplinePath::DeployFormulaTextEdit() { @@ -389,11 +404,5 @@ void DialogCutSplinePath::ShowDialog(bool click) } } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h index 8b0889b7f..c4bd036cf 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h @@ -115,6 +115,8 @@ private: QString m_originAliasSuffix2{}; bool m_firstRelease{false}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp b/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp index 95dc3d0c2..098114e01 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp @@ -442,6 +442,18 @@ void DialogEllipticalArc::EvalAngles() m_angleRotation = Eval(formulaData, m_flagRotationAngle); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEllipticalArc::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::FXRadius1() { @@ -633,13 +645,7 @@ void DialogEllipticalArc::ShowDialog(bool click) SetRotationAngle(QString::number(Angle() - path->StartingRotationAngle())); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } //--------------------------------------------------------------------------------------------------------------------- @@ -671,6 +677,11 @@ void DialogEllipticalArc::ChosenObject(quint32 id, const SceneObject &type) vis->VisualMode(id); } prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.h b/src/libs/vtools/dialogs/tools/dialogellipticalarc.h index 7f2a34537..712c9030f 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.h +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.h @@ -186,6 +186,8 @@ private: void EvalRadiuses(); void EvalAngles(); + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index f1844f69a..382bd214c 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -221,6 +221,11 @@ void DialogEndLine::ChosenObject(quint32 id, const SceneObject &type) SCASSERT(window != nullptr) connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -353,16 +358,12 @@ void DialogEndLine::ShowDialog(bool click) return; } } - this->setModal(true); - auto *line = qobject_cast(vis); SCASSERT(line != nullptr) + SetAngle(line->Angle());//Show in dialog angle what user choose + SetFormula(line->Length()); - this->SetAngle(line->Angle());//Show in dialog angle what user choose - this->SetFormula(line->Length()); - emit ToolTip(QString()); - timerFormulaLength->start(); - this->show(); + FinishCreating(); } } @@ -397,6 +398,15 @@ void DialogEndLine::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogEndLine::FinishCreating() +{ + setModal(true); + emit ToolTip(QString()); + timerFormulaLength->start(); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- DialogEndLine::~DialogEndLine() { diff --git a/src/libs/vtools/dialogs/tools/dialogendline.h b/src/libs/vtools/dialogs/tools/dialogendline.h index 68780ee86..f4233587b 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.h +++ b/src/libs/vtools/dialogs/tools/dialogendline.h @@ -121,6 +121,8 @@ private: bool flagFormula; bool flagError; bool flagName; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index bedce0dcb..bf1f9da18 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -249,8 +249,7 @@ void DialogLineIntersectAxis::ShowDialog(bool click) } /*We will ignore click if poinet is in point circle*/ - VMainGraphicsScene *scene = - qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); + auto *scene = qobject_cast(VAbstractValApplication::VApp()->getCurrentScene()); SCASSERT(scene != nullptr) const QSharedPointer point = data->GeometricObject(GetBasePointId()); QLineF line = QLineF(static_cast(*point), scene->getScenePos()); @@ -262,12 +261,12 @@ void DialogLineIntersectAxis::ShowDialog(bool click) } } - VisToolLineIntersectAxis *line = qobject_cast(vis); + auto *line = qobject_cast(vis); SCASSERT(line != nullptr) + SetAngle(line->Angle());//Show in dialog angle what user choose - this->SetAngle(line->Angle());//Show in dialog angle what user choose + line->SetMode(Mode::Show); emit ToolTip(QString()); - DialogAccepted();// Just set default values and don't show dialog } } @@ -279,7 +278,7 @@ void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { if (type == SceneObject::Point) { - VisToolLineIntersectAxis *line = qobject_cast(vis); + auto *line = qobject_cast(vis); SCASSERT(line != nullptr) switch (number) @@ -289,8 +288,8 @@ void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { number++; line->VisualMode(id); - VAbstractMainWindow *window = - qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); + auto *window = + qobject_cast(VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(line, &VisToolLineIntersectAxis::ToolTip, window, &VAbstractMainWindow::ShowToolTip); } @@ -320,6 +319,13 @@ void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) line->SetAxisPointId(id); line->RefreshGeometry(); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + vis->SetMode(Mode::Show); + emit ToolTip(QString()); + show(); + } } } } diff --git a/src/libs/vtools/dialogs/tools/dialognormal.cpp b/src/libs/vtools/dialogs/tools/dialognormal.cpp index ef4a893e3..797758115 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.cpp +++ b/src/libs/vtools/dialogs/tools/dialognormal.cpp @@ -225,6 +225,11 @@ void DialogNormal::ChosenObject(quint32 id, const SceneObject &type) VAbstractValApplication::VApp()->getMainWindow()); SCASSERT(window != nullptr) connect(line, &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } break; @@ -259,6 +264,16 @@ void DialogNormal::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogNormal::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPointId set id of second point @@ -459,11 +474,5 @@ void DialogNormal::ShowDialog(bool click) SetFormula(QString::number(FromPixel(len, *data->GetPatternUnit()))); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } diff --git a/src/libs/vtools/dialogs/tools/dialognormal.h b/src/libs/vtools/dialogs/tools/dialognormal.h index 947cd3811..36153caa9 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.h +++ b/src/libs/vtools/dialogs/tools/dialognormal.h @@ -122,6 +122,8 @@ private: /** @brief number number of handled objects */ qint32 m_number{0}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp index 1b5a52364..197d6f7b0 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp @@ -227,13 +227,7 @@ void DialogPointFromCircleAndTangent::ShowDialog(bool click) SetCircleRadius(QString::number(FromPixel(line.length(), *data->GetPatternUnit()))); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } //--------------------------------------------------------------------------------------------------------------------- @@ -272,6 +266,11 @@ void DialogPointFromCircleAndTangent::ChosenObject(quint32 id, const SceneObject point->SetCenterId(id); point->RefreshGeometry(); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } break; @@ -371,6 +370,18 @@ void DialogPointFromCircleAndTangent::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointFromCircleAndTangent::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h index 43f34c0b8..6cbbef731 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h @@ -103,6 +103,8 @@ private: /** @brief number number of handled objects */ qint32 m_number{0}; bool m_firstRelease{false}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp index 35e5818f6..4f15d202f 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp @@ -209,13 +209,7 @@ void DialogPointOfContact::ShowDialog(bool click) SetRadius(QString::number(FromPixel(line.length(), *data->GetPatternUnit()))); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } //--------------------------------------------------------------------------------------------------------------------- @@ -278,6 +272,11 @@ void DialogPointOfContact::ChosenObject(quint32 id, const SceneObject &type) line->SetRadiusId(id); line->RefreshGeometry(); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } @@ -310,6 +309,18 @@ void DialogPointOfContact::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfContact::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPoint set id second point diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.h b/src/libs/vtools/dialogs/tools/dialogpointofcontact.h index a5f44f205..5330bdb96 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.h @@ -114,6 +114,8 @@ private: qint32 m_number{0}; bool m_firstRelease{false}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp index 91f102f75..7221c331e 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp @@ -252,17 +252,6 @@ void DialogPointOfIntersectionCircles::ShowDialog(bool click) return; } - auto FinishCreating = [this]() - { - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); - }; - if (click) { // The check need to ignore first release of mouse button. @@ -323,13 +312,21 @@ void DialogPointOfIntersectionCircles::ChosenObject(quint32 id, const SceneObjec case 0: if (SetObject(id, ui->comboBoxCircle1Center, QString())) { - ++m_stage; point->VisualMode(id); - auto *window = qobject_cast( - VAbstractValApplication::VApp()->getMainWindow()); - SCASSERT(window != nullptr) - connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + m_stage = 2; + emit ToolTip(tr("Select second circle center")); + } + else + { + ++m_stage; + auto *window = qobject_cast( + VAbstractValApplication::VApp()->getMainWindow()); + SCASSERT(window != nullptr) + connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + } } break; case 2: @@ -341,6 +338,12 @@ void DialogPointOfIntersectionCircles::ChosenObject(quint32 id, const SceneObjec point->RefreshGeometry(); ++m_stage; prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + return; + } } } break; @@ -485,6 +488,18 @@ void DialogPointOfIntersectionCircles::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfIntersectionCircles::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + + emit ToolTip(QString()); + + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::SetNotes(const QString ¬es) { diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h index 48ffa3a2e..a46a7753d 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h @@ -122,6 +122,8 @@ private: /** @brief number number of handled objects */ qint32 m_stage{0}; + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp index 5c34f79c3..a0e09d774 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp @@ -277,10 +277,25 @@ void DialogShoulderPoint::ChosenThirdPoint(quint32 id) line->SetLineP2Id(id); line->RefreshGeometry(); prepare = true; + + if (not VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) + { + FinishCreating(); + } } } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogShoulderPoint::FinishCreating() +{ + vis->SetMode(Mode::Show); + vis->RefreshGeometry(); + emit ToolTip(QString()); + setModal(true); + show(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief setPShoulder set id shoulder point @@ -467,11 +482,5 @@ void DialogShoulderPoint::ShowDialog(bool click) SetFormula(QString::number(FromPixel(line.length(), *data->GetPatternUnit()))); } - vis->SetMode(Mode::Show); - vis->RefreshGeometry(); - - emit ToolTip(QString()); - - setModal(true); - show(); + FinishCreating(); } diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h index 1c3003cce..bdee5a3cf 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h @@ -121,6 +121,8 @@ private: qint32 m_number{0}; void ChosenThirdPoint(quint32 id); + + void FinishCreating(); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp index aef6d2de6..b0d1d96c8 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp @@ -83,15 +83,21 @@ void VisToolLineIntersectAxis::RefreshGeometry() { QLineF axis; const QSharedPointer third = GetData()->GeometricObject(m_axisPointId); + DrawPoint(m_basePoint, static_cast(*third), Color(VColor::MainColor)); + if (VFuzzyComparePossibleNulls(m_angle, -1)) { + if (GetMode() == Mode::Show) + { + return; + } axis = Axis(static_cast(*third), ScenePos()); } else { axis = Axis(static_cast(*third), m_angle); } - DrawPoint(m_basePoint, static_cast(*third), Color(VColor::MainColor)); + DrawLine(m_axisLine, axis, Color(VColor::SupportColor), Qt::DashLine); QPointF p; @@ -105,10 +111,13 @@ void VisToolLineIntersectAxis::RefreshGeometry() DrawPoint(m_point, p, Color(VColor::MainColor)); ShowIntersection(axis_line, base_line); - SetToolTip(tr("Intersection line and axis: angle = %1°; %2 - " - "sticking angle, %3 - finish creation") - .arg(AngleToUser(this->line().angle()), VModifierKey::Shift(), - VModifierKey::EnterKey())); + if (GetMode() == Mode::Creation) + { + SetToolTip(tr("Intersection line and axis: angle = %1°; %2 - " + "sticking angle, %3 - finish creation") + .arg(AngleToUser(this->line().angle()), VModifierKey::Shift(), + VModifierKey::EnterKey())); + } } } } diff --git a/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp b/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp index fe07929b2..b4fc89ab9 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofcontact.cpp @@ -50,7 +50,8 @@ VisToolPointOfContact::VisToolPointOfContact(const VContainer *data, QGraphicsIt m_arcPoint = InitPoint(Color(VColor::SupportColor), this); m_lineP1 = InitPoint(Color(VColor::SupportColor), this); m_lineP2 = InitPoint(Color(VColor::SupportColor), this); - m_circle = InitItem(Color(VColor::SupportColor), this); + m_circle = InitItem(Color(VColor::SupportColor), this); + m_circle->SetPointMode(false); m_point = InitPoint(Color(VColor::MainColor), this); } diff --git a/src/libs/vtools/visualization/line/vistoolpointofcontact.h b/src/libs/vtools/visualization/line/vistoolpointofcontact.h index 1379a1dd8..cf1438ac3 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofcontact.h +++ b/src/libs/vtools/visualization/line/vistoolpointofcontact.h @@ -66,7 +66,7 @@ private: VScaledEllipse *m_lineP1{nullptr}; VScaledEllipse *m_lineP2{nullptr}; VScaledEllipse *m_arcPoint{nullptr}; - QGraphicsEllipseItem *m_circle{nullptr}; + VScaledEllipse *m_circle{nullptr}; qreal m_radius{0}; }; diff --git a/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp b/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp index 261237bf3..842183756 100644 --- a/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/visualization/line/vistoolpointofintersectioncircles.cpp @@ -113,7 +113,7 @@ void VisToolPointOfIntersectionCircles::RefreshGeometry() } } } - else if (GetMode() == Mode::Creation) + else if (GetMode() == Mode::Creation && VAbstractValApplication::VApp()->Settings()->IsInteractiveTools()) { QLineF radiusLine (static_cast(*first), ScenePos()); const qreal length = radiusLine.length();