From 0c3cce51227ec4b72c5c990b9ba7d92691774861 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 11 Feb 2019 13:25:27 +0200 Subject: [PATCH] Refactoring tool dialogs. --HG-- branch : develop --- src/app/valentina/dialogs/dialoghistory.h | 1 + src/app/valentina/dialogs/dialogincrements.h | 1 + src/libs/vtools/dialogs/dialogs.pri | 6 +- src/libs/vtools/dialogs/dialogtoolbox.cpp | 239 +++++++++++ src/libs/vtools/dialogs/dialogtoolbox.h | 77 ++++ .../support/dialogeditwrongformula.cpp | 51 ++- .../dialogs/support/dialogeditwrongformula.h | 15 +- .../vtools/dialogs/tools/dialogalongline.cpp | 71 +++- .../vtools/dialogs/tools/dialogalongline.h | 29 +- src/libs/vtools/dialogs/tools/dialogarc.cpp | 131 +++--- src/libs/vtools/dialogs/tools/dialogarc.h | 20 +- .../dialogs/tools/dialogarcwithlength.cpp | 142 +++---- .../dialogs/tools/dialogarcwithlength.h | 16 +- .../vtools/dialogs/tools/dialogbisector.cpp | 64 ++- .../vtools/dialogs/tools/dialogbisector.h | 25 +- .../dialogs/tools/dialogcubicbezier.cpp | 11 +- .../vtools/dialogs/tools/dialogcubicbezier.h | 11 +- .../dialogs/tools/dialogcubicbezierpath.cpp | 9 +- .../dialogs/tools/dialogcubicbezierpath.h | 11 +- .../tools/dialogcurveintersectaxis.cpp | 53 ++- .../dialogs/tools/dialogcurveintersectaxis.h | 22 +- .../vtools/dialogs/tools/dialogcutarc.cpp | 63 ++- src/libs/vtools/dialogs/tools/dialogcutarc.h | 26 +- .../vtools/dialogs/tools/dialogcutspline.cpp | 55 ++- .../vtools/dialogs/tools/dialogcutspline.h | 24 +- .../dialogs/tools/dialogcutsplinepath.cpp | 55 ++- .../dialogs/tools/dialogcutsplinepath.h | 21 +- .../dialogs/tools/dialogellipticalarc.cpp | 193 ++++----- .../dialogs/tools/dialogellipticalarc.h | 16 +- .../vtools/dialogs/tools/dialogendline.cpp | 78 ++-- src/libs/vtools/dialogs/tools/dialogendline.h | 40 +- .../dialogs/tools/dialogflippingbyaxis.cpp | 28 +- .../dialogs/tools/dialogflippingbyaxis.h | 13 +- .../dialogs/tools/dialogflippingbyline.cpp | 26 +- .../dialogs/tools/dialogflippingbyline.h | 13 +- src/libs/vtools/dialogs/tools/dialoggroup.cpp | 6 +- src/libs/vtools/dialogs/tools/dialoggroup.h | 12 +- .../vtools/dialogs/tools/dialogheight.cpp | 26 +- src/libs/vtools/dialogs/tools/dialogheight.h | 15 +- src/libs/vtools/dialogs/tools/dialogline.cpp | 14 +- src/libs/vtools/dialogs/tools/dialogline.h | 15 +- .../dialogs/tools/dialoglineintersect.cpp | 46 +- .../dialogs/tools/dialoglineintersect.h | 29 +- .../dialogs/tools/dialoglineintersectaxis.cpp | 58 ++- .../dialogs/tools/dialoglineintersectaxis.h | 25 +- src/libs/vtools/dialogs/tools/dialogmove.cpp | 121 +++--- src/libs/vtools/dialogs/tools/dialogmove.h | 23 +- .../vtools/dialogs/tools/dialognormal.cpp | 79 +++- src/libs/vtools/dialogs/tools/dialognormal.h | 35 +- .../tools/dialogpointfromarcandtangent.cpp | 28 +- .../tools/dialogpointfromarcandtangent.h | 21 +- .../tools/dialogpointfromcircleandtangent.cpp | 76 ++-- .../tools/dialogpointfromcircleandtangent.h | 23 +- .../dialogs/tools/dialogpointofcontact.cpp | 61 ++- .../dialogs/tools/dialogpointofcontact.h | 33 +- .../tools/dialogpointofintersection.cpp | 30 +- .../dialogs/tools/dialogpointofintersection.h | 19 +- .../tools/dialogpointofintersectionarcs.cpp | 33 +- .../tools/dialogpointofintersectionarcs.h | 21 +- .../dialogpointofintersectioncircles.cpp | 117 ++--- .../tools/dialogpointofintersectioncircles.h | 34 +- .../tools/dialogpointofintersectioncurves.cpp | 47 +-- .../tools/dialogpointofintersectioncurves.h | 24 +- .../vtools/dialogs/tools/dialogrotation.cpp | 62 ++- .../vtools/dialogs/tools/dialogrotation.h | 22 +- .../dialogs/tools/dialogshoulderpoint.cpp | 65 ++- .../dialogs/tools/dialogshoulderpoint.h | 27 +- .../dialogs/tools/dialogsinglepoint.cpp | 24 +- .../vtools/dialogs/tools/dialogsinglepoint.h | 17 +- .../vtools/dialogs/tools/dialogspline.cpp | 161 +++---- src/libs/vtools/dialogs/tools/dialogspline.h | 26 +- .../vtools/dialogs/tools/dialogsplinepath.cpp | 134 +++--- .../vtools/dialogs/tools/dialogsplinepath.h | 5 +- src/libs/vtools/dialogs/tools/dialogtool.cpp | 398 +----------------- src/libs/vtools/dialogs/tools/dialogtool.h | 115 +---- .../vtools/dialogs/tools/dialogtriangle.cpp | 28 +- .../vtools/dialogs/tools/dialogtriangle.h | 15 +- .../vtools/dialogs/tools/dialogtruedarts.cpp | 34 +- .../vtools/dialogs/tools/dialogtruedarts.h | 11 +- .../dialogs/tools/dialoguniondetails.cpp | 14 +- .../vtools/dialogs/tools/dialoguniondetails.h | 4 +- .../tools/piece/dialogduplicatedetail.cpp | 2 +- .../tools/piece/dialogduplicatedetail.h | 4 +- .../dialogs/tools/piece/dialoginsertnode.cpp | 22 +- .../dialogs/tools/piece/dialoginsertnode.h | 9 +- .../dialogs/tools/piece/dialogpiecepath.cpp | 161 +++---- .../dialogs/tools/piece/dialogpiecepath.h | 17 +- .../vtools/dialogs/tools/piece/dialogpin.cpp | 25 +- .../vtools/dialogs/tools/piece/dialogpin.h | 13 +- .../dialogs/tools/piece/dialogplacelabel.cpp | 163 ++++--- .../dialogs/tools/piece/dialogplacelabel.h | 25 +- .../tools/piece/dialogseamallowance.cpp | 228 +++++----- .../dialogs/tools/piece/dialogseamallowance.h | 25 +- .../toolsinglepoint/toolcut/vtoolcutarc.cpp | 7 +- .../toolcut/vtoolcutspline.cpp | 4 +- .../toolcut/vtoolcutsplinepath.cpp | 4 +- .../toollinepoint/vtoolalongline.cpp | 8 +- .../toollinepoint/vtoolbisector.cpp | 4 +- .../toollinepoint/vtoolcurveintersectaxis.cpp | 6 +- .../toollinepoint/vtoolcurveintersectaxis.h | 3 +- .../toollinepoint/vtoolendline.cpp | 4 +- .../toollinepoint/vtoolheight.cpp | 4 +- .../toollinepoint/vtoollineintersectaxis.cpp | 4 +- .../toollinepoint/vtoolnormal.cpp | 7 +- .../toollinepoint/vtoolnormal.h | 4 +- .../toollinepoint/vtoolshoulderpoint.cpp | 4 +- .../toolsinglepoint/vtoolbasepoint.cpp | 2 +- .../toolsinglepoint/vtoollineintersect.cpp | 4 +- .../vtoolpointfromarcandtangent.cpp | 6 +- .../vtoolpointfromarcandtangent.h | 2 +- .../vtoolpointfromcircleandtangent.cpp | 4 +- .../toolsinglepoint/vtoolpointofcontact.cpp | 12 +- .../vtoolpointofintersection.cpp | 4 +- .../vtoolpointofintersectionarcs.cpp | 4 +- .../vtoolpointofintersectioncircles.cpp | 4 +- .../vtoolpointofintersectioncurves.cpp | 8 +- .../vtoolpointofintersectioncurves.h | 4 +- .../toolsinglepoint/vtooltriangle.cpp | 4 +- src/libs/vtools/tools/vtoolseamallowance.cpp | 11 +- src/libs/vtools/tools/vtoolseamallowance.h | 2 +- 120 files changed, 2608 insertions(+), 2109 deletions(-) create mode 100644 src/libs/vtools/dialogs/dialogtoolbox.cpp create mode 100644 src/libs/vtools/dialogs/dialogtoolbox.h diff --git a/src/app/valentina/dialogs/dialoghistory.h b/src/app/valentina/dialogs/dialoghistory.h index af122a73d..b5037f34c 100644 --- a/src/app/valentina/dialogs/dialoghistory.h +++ b/src/app/valentina/dialogs/dialoghistory.h @@ -68,6 +68,7 @@ signals: protected: virtual void closeEvent ( QCloseEvent * event ) override; virtual void changeEvent(QEvent* event) override; + virtual bool IsValid() const final {return true;} private: Q_DISABLE_COPY(DialogHistory) diff --git a/src/app/valentina/dialogs/dialogincrements.h b/src/app/valentina/dialogs/dialogincrements.h index 56721fee8..28114b155 100644 --- a/src/app/valentina/dialogs/dialogincrements.h +++ b/src/app/valentina/dialogs/dialogincrements.h @@ -66,6 +66,7 @@ protected: virtual bool eventFilter(QObject *object, QEvent *event) override; virtual void showEvent( QShowEvent *event ) override; virtual void resizeEvent(QResizeEvent *event) override; + virtual bool IsValid() const final {return true;} private slots: void ShowIncrementDetails(); void AddIncrement(); diff --git a/src/libs/vtools/dialogs/dialogs.pri b/src/libs/vtools/dialogs/dialogs.pri index ddba6edce..7ae3f7d86 100644 --- a/src/libs/vtools/dialogs/dialogs.pri +++ b/src/libs/vtools/dialogs/dialogs.pri @@ -48,7 +48,8 @@ HEADERS += \ $$PWD/tools/piece/dialoginsertnode.h \ $$PWD/support/dialogeditlabel.h \ $$PWD/tools/piece/dialogplacelabel.h \ - $$PWD/tools/piece/dialogduplicatedetail.h + $$PWD/tools/piece/dialogduplicatedetail.h \ + $$PWD/dialogtoolbox.h SOURCES += \ $$PWD/tools/dialogalongline.cpp \ @@ -96,7 +97,8 @@ SOURCES += \ $$PWD/tools/piece/dialoginsertnode.cpp \ $$PWD/support/dialogeditlabel.cpp \ $$PWD/tools/piece/dialogplacelabel.cpp \ - $$PWD/tools/piece/dialogduplicatedetail.cpp + $$PWD/tools/piece/dialogduplicatedetail.cpp \ + $$PWD/dialogtoolbox.cpp FORMS += \ $$PWD/tools/dialogalongline.ui \ diff --git a/src/libs/vtools/dialogs/dialogtoolbox.cpp b/src/libs/vtools/dialogs/dialogtoolbox.cpp new file mode 100644 index 000000000..9b8a4416c --- /dev/null +++ b/src/libs/vtools/dialogs/dialogtoolbox.cpp @@ -0,0 +1,239 @@ +/************************************************************************ + ** + ** @file dialogtoolbox.cpp + ** @author Roman Telezhynskyi + ** @date 25 1, 2019 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2019 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 "dialogtoolbox.h" + +#include "../vmisc/def.h" +#include "../vmisc/vabstractapplication.h" +#include "../vpatterndb/calculator.h" +#include "../vpatterndb/vcontainer.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const QColor errorColor = Qt::red; + +namespace +{ + const int dialogMaxFormulaHeight = 80; +} + +//--------------------------------------------------------------------------------------------------------------------- +void MoveCursorToEnd(QPlainTextEdit *plainTextEdit) +{ + SCASSERT(plainTextEdit != nullptr) + QTextCursor cursor = plainTextEdit->textCursor(); + cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); + plainTextEdit->setTextCursor(cursor); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DeployFormula(QDialog *dialog, QPlainTextEdit *formula, QPushButton *buttonGrowLength, int formulaBaseHeight) +{ + SCASSERT(dialog != nullptr) + SCASSERT(formula != nullptr) + SCASSERT(buttonGrowLength != nullptr) + + const QTextCursor cursor = formula->textCursor(); + + //Before deploy ned to release dialog size + //I don't know why, but don't need to fixate again. + //A dialog will be lefted fixated. That's what we need. + dialog->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); + dialog->setMinimumSize(QSize(0, 0)); + + if (formula->height() < dialogMaxFormulaHeight) + { + formula->setFixedHeight(dialogMaxFormulaHeight); + //Set icon from theme (internal for Windows system) + buttonGrowLength->setIcon(QIcon::fromTheme(QStringLiteral("go-next"), + QIcon(":/icons/win.icon.theme/16x16/actions/go-next.png"))); + } + else + { + formula->setFixedHeight(formulaBaseHeight); + //Set icon from theme (internal for Windows system) + buttonGrowLength->setIcon(QIcon::fromTheme(QStringLiteral("go-down"), + QIcon(":/icons/win.icon.theme/16x16/actions/go-down.png"))); + } + + // I found that after change size of formula field, it was filed for angle formula, field for formula became black. + // This code prevent this. + dialog->setUpdatesEnabled(false); + dialog->repaint(); + dialog->setUpdatesEnabled(true); + + formula->setFocus(); + formula->setTextCursor(cursor); +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FilterObject(QObject *object, QEvent *event) +{ + if (QPlainTextEdit *plainTextEdit = qobject_cast(object)) + { + if (event->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = static_cast(event); + if ((keyEvent->key() == Qt::Key_Period) && (keyEvent->modifiers() & Qt::KeypadModifier)) + { + if (qApp->Settings()->GetOsSeparator()) + { + plainTextEdit->insertPlainText(QLocale().decimalPoint()); + } + else + { + plainTextEdit->insertPlainText(QLocale::c().decimalPoint()); + } + return true; + } + } + } + + return false; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal EvalToolFormula(QDialog *dialog, const FormulaData &data, bool &flag) +{ + SCASSERT(data.labelResult != nullptr) + SCASSERT(data.labelEditFormula != nullptr) + + qreal result = INT_MIN;//Value can be 0, so use max imposible value + + if (data.formula.isEmpty()) + { + flag = false; + ChangeColor(data.labelEditFormula, errorColor); + data.labelResult->setText(QObject::tr("Error") + " (" + data.postfix + ")"); + data.labelResult->setToolTip(QObject::tr("Empty formula")); + } + else + { + try + { + // Translate to internal look. + QString formula = qApp->TrVars()->FormulaFromUser(data.formula, qApp->Settings()->GetOsSeparator()); + QScopedPointer cal(new Calculator()); + result = cal->EvalFormula(data.variables, formula); + + if (qIsInf(result) || qIsNaN(result)) + { + flag = false; + ChangeColor(data.labelEditFormula, errorColor); + data.labelResult->setText(QObject::tr("Error") + " (" + data.postfix + ")"); + data.labelResult->setToolTip(QObject::tr("Invalid result. Value is infinite or NaN. Please, check " + "your calculations.")); + } + else + { + //if result equal 0 + if (data.checkZero && qFuzzyIsNull(result)) + { + flag = false; + ChangeColor(data.labelEditFormula, errorColor); + data.labelResult->setText(QObject::tr("Error") + " (" + data.postfix + ")"); + data.labelResult->setToolTip(QObject::tr("Value can't be 0")); + } + else if (data.checkLessThanZero && result < 0) + { + flag = false; + ChangeColor(data.labelEditFormula, errorColor); + data.labelResult->setText(QObject::tr("Error") + " (" + data.postfix + ")"); + data.labelResult->setToolTip(QObject::tr("Value can't be less than 0")); + } + else + { + data.labelResult->setText(qApp->LocaleToString(result) + QChar(QChar::Space) + data.postfix); + flag = true; + ChangeColor(data.labelEditFormula, OkColor(dialog)); + data.labelResult->setToolTip(QObject::tr("Value")); + } + } + } + catch (qmu::QmuParserError &e) + { + data.labelResult->setText(QObject::tr("Error") + " (" + data.postfix + ")"); + flag = false; + ChangeColor(data.labelEditFormula, errorColor); + data.labelResult->setToolTip(QObject::tr("Parser error: %1").arg(e.GetMsg())); + qDebug() << "\nMath parser error:\n" + << "--------------------------------------\n" + << "Message: " << e.GetMsg() << "\n" + << "Expression: " << e.GetExpr() << "\n" + << "--------------------------------------"; + } + } + return result; +} + +//--------------------------------------------------------------------------------------------------------------------- +void ChangeColor(QWidget *widget, const QColor &color) +{ + SCASSERT(widget != nullptr) + QPalette palette = widget->palette(); + palette.setColor(QPalette::Active, widget->foregroundRole(), color); + palette.setColor(QPalette::Inactive, widget->foregroundRole(), color); + widget->setPalette(palette); +} + +//--------------------------------------------------------------------------------------------------------------------- +QColor OkColor(QWidget *widget) +{ + SCASSERT(widget != nullptr); + return widget->palette().color(QPalette::Active, QPalette::WindowText); +} + +//--------------------------------------------------------------------------------------------------------------------- +void CheckPointLabel(QDialog *dialog, QLineEdit* edit, QLabel *labelEditNamePoint, const QString &pointName, + const VContainer *data, bool &flag) +{ + SCASSERT(dialog != nullptr) + SCASSERT(edit != nullptr) + SCASSERT(labelEditNamePoint != nullptr) + + QString name = edit->text(); + QRegularExpression rx(NameRegExp()); + if (name.isEmpty() || (not (pointName != name && data->IsUnique(name))) || not rx.match(name).hasMatch()) + { + flag = false; + ChangeColor(labelEditNamePoint, errorColor); + } + else + { + flag = true; + ChangeColor(labelEditNamePoint, OkColor(dialog)); + } +} diff --git a/src/libs/vtools/dialogs/dialogtoolbox.h b/src/libs/vtools/dialogs/dialogtoolbox.h new file mode 100644 index 000000000..e46bc3fa3 --- /dev/null +++ b/src/libs/vtools/dialogs/dialogtoolbox.h @@ -0,0 +1,77 @@ +/************************************************************************ + ** + ** @file dialogtoolbox.h + ** @author Roman Telezhynskyi + ** @date 25 1, 2019 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentina project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2019 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 DIALOGTOOLBOX_H +#define DIALOGTOOLBOX_H + +#include +#include +#include + +#include "../vpatterndb/variables/vinternalvariable.h" + +class QPlainTextEdit; +class QPushButton; +class QDialog; +class QObject; +class QEvent; +class QLabel; +class QWidget; +class QColor; +class QLineEdit; +class VContainer; + +constexpr int formulaTimerTimeout = 300; + +extern const QColor errorColor; + +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Weffc++") + +struct FormulaData +{ + QString formula; + const QHash > *variables{nullptr}; + QLabel *labelEditFormula{nullptr}; + QLabel *labelResult{nullptr}; + QString postfix; + bool checkZero{true}; + bool checkLessThanZero{false}; +}; + +QT_WARNING_POP + +void MoveCursorToEnd(QPlainTextEdit *plainTextEdit); +void DeployFormula(QDialog *dialog, QPlainTextEdit *formula, QPushButton *buttonGrowLength, int formulaBaseHeight); +bool FilterObject(QObject *object, QEvent *event); +qreal EvalToolFormula(QDialog *dialog, const FormulaData &data, bool &flag); +void ChangeColor(QWidget *widget, const QColor &color); +QColor OkColor(QWidget *widget); +void CheckPointLabel(QDialog *dialog, QLineEdit* edit, QLabel *labelEditNamePoint, const QString &pointName, + const VContainer *data, bool &flag); + +#endif // DIALOGTOOLBOX_H diff --git a/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp b/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp index 183fee2e2..2406529f1 100644 --- a/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp +++ b/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vtranslatevars.h" @@ -73,18 +74,28 @@ template class QSharedPointer; enum {ColumnName = 0, ColumnFullName}; //--------------------------------------------------------------------------------------------------------------------- -DialogEditWrongFormula::DialogEditWrongFormula(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogEditWrongFormula), formula(QString()), formulaBaseHeight(0), - checkZero(false), checkLessThanZero(false), postfix(QString()), restoreCursor(false) +DialogEditWrongFormula::DialogEditWrongFormula(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogEditWrongFormula), + formula(), + formulaBaseHeight(0), + checkZero(false), + checkLessThanZero(false), + postfix(), + restoreCursor(false), + timerFormula(new QTimer(this)), + flagFormula(false) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogEditWrongFormula::EvalFormula); + #if defined(Q_OS_MAC) setWindowFlags(Qt::Window); #endif InitVariables(); - InitFormulaUI(ui); this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); ui->filterFormulaInputs->setClearButtonEnabled(true); @@ -92,13 +103,14 @@ DialogEditWrongFormula::DialogEditWrongFormula(const VContainer *data, const qui connect(ui->filterFormulaInputs, &QLineEdit::textChanged, this, &DialogEditWrongFormula::FilterVariablesEdited); InitOkCancel(ui); - flagFormula = false; - CheckState(); connect(ui->toolButtonPutHere, &QPushButton::clicked, this, &DialogEditWrongFormula::PutHere); connect(ui->tableWidget, &QTableWidget::itemDoubleClicked, this, &DialogEditWrongFormula::PutVal); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogEditWrongFormula::FormulaChanged); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); //Disable Qt::WaitCursor #ifndef QT_NO_CURSOR @@ -146,11 +158,17 @@ void DialogEditWrongFormula::DialogRejected() //--------------------------------------------------------------------------------------------------------------------- void DialogEditWrongFormula::EvalFormula() -{ - SCASSERT(plainTextEditFormula != nullptr) - SCASSERT(labelResultCalculation != nullptr) - Eval(plainTextEditFormula->toPlainText(), flagFormula, labelResultCalculation, postfix, checkZero, - checkLessThanZero); +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = postfix; + formulaData.checkZero = checkZero; + formulaData.checkLessThanZero = checkLessThanZero; + + Eval(formulaData, flagFormula); } //--------------------------------------------------------------------------------------------------------------------- @@ -336,13 +354,6 @@ void DialogEditWrongFormula::Functions() ShowFunctions(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogEditWrongFormula::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagFormula); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogEditWrongFormula::closeEvent(QCloseEvent *event) { @@ -371,6 +382,8 @@ void DialogEditWrongFormula::showEvent(QShowEvent *event) resize(sz); } + CheckState(); + isInitialized = true;//first show windows are held } diff --git a/src/libs/vtools/dialogs/support/dialogeditwrongformula.h b/src/libs/vtools/dialogs/support/dialogeditwrongformula.h index 4144e7623..b0e7b2d89 100644 --- a/src/libs/vtools/dialogs/support/dialogeditwrongformula.h +++ b/src/libs/vtools/dialogs/support/dialogeditwrongformula.h @@ -59,7 +59,7 @@ class DialogEditWrongFormula : public DialogTool { Q_OBJECT public: - DialogEditWrongFormula(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogEditWrongFormula(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogEditWrongFormula() override; QString GetFormula() const; @@ -73,7 +73,7 @@ public: public slots: virtual void DialogAccepted() override; virtual void DialogRejected() override; - virtual void EvalFormula() override; + void EvalFormula(); void ValChanged(int row); void PutHere(); void PutVal(QTableWidgetItem * item); @@ -89,7 +89,7 @@ public slots: void PreviewCalculations(); void Functions(); protected: - virtual void CheckState() final; + virtual bool IsValid() const final; virtual void closeEvent(QCloseEvent *event) override; virtual void showEvent( QShowEvent *event ) override; virtual void resizeEvent(QResizeEvent *event) override; @@ -110,6 +110,10 @@ private: QString postfix; bool restoreCursor; + QTimer *timerFormula; + + bool flagFormula; + void InitVariables(); template @@ -121,5 +125,10 @@ private: void SetDescription(const QString &name, qreal value, const QString &unit, const QString &description); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogEditWrongFormula::IsValid() const +{ + return flagFormula; +} #endif // DIALOGEDITWRONGFORMULA_H diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.cpp b/src/libs/vtools/dialogs/tools/dialogalongline.cpp index 5c0d86404..50149f6c2 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogalongline.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -61,24 +62,31 @@ * @param data container with data * @param parent parent widget */ -DialogAlongLine::DialogAlongLine(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogAlongLine), - formula(QString()), formulaBaseHeight(0), buildMidpoint(false) +DialogAlongLine::DialogAlongLine(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogAlongLine), + formula(), + pointName(), + formulaBaseHeight(0), + buildMidpoint(false), + timerFormula(new QTimer(this)), + flagFormula(false), + flagError(true), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogAlongLine::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); @@ -86,8 +94,15 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, const quint32 &toolId, FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogAlongLine::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogAlongLine::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogAlongLine::FormulaTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogAlongLine::DeployFormulaTextEdit); connect(ui->comboBoxFirstPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogAlongLine::PointChanged); @@ -100,16 +115,10 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, const quint32 &toolId, SetTypeLine(TypeLineNone);//By default don't show line } -//--------------------------------------------------------------------------------------------------------------------- -void DialogAlongLine::FormulaTextChanged() -{ - this->FormulaChangedPlainText(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogAlongLine::PointChanged() { - QColor color = okColor; + QColor color; if (GetFirstPointId() == GetSecondPointId()) { flagError = false; @@ -118,7 +127,7 @@ void DialogAlongLine::PointChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } SetCurrentLength(); ChangeColor(ui->labelFirstPoint, color); @@ -140,6 +149,20 @@ void DialogAlongLine::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogAlongLine::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogAlongLine::ShowVisualization() { @@ -149,7 +172,7 @@ void DialogAlongLine::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogAlongLine::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -191,7 +214,7 @@ void DialogAlongLine::ChosenObject(quint32 id, const SceneObject &type) line->setObject2Id(id); if (buildMidpoint) { - SetFormula(currentLength + QLatin1String("/2")); + SetFormula(currentLength + QStringLiteral("/2")); } line->RefreshGeometry(); prepare = true; @@ -254,7 +277,7 @@ void DialogAlongLine::SetCurrentLength() * @brief SetSecondPointId set id second point of line * @param value id */ -void DialogAlongLine::SetSecondPointId(const quint32 &value) +void DialogAlongLine::SetSecondPointId(quint32 value) { setCurrentPointId(ui->comboBoxSecondPoint, value); @@ -280,7 +303,7 @@ void DialogAlongLine::Build(const Tool &type) * @brief SetFirstPointId set id first point of line * @param value id */ -void DialogAlongLine::SetFirstPointId(const quint32 &value) +void DialogAlongLine::SetFirstPointId(quint32 value) { setCurrentPointId(ui->comboBoxFirstPoint, value); @@ -334,6 +357,12 @@ void DialogAlongLine::SetLineColor(const QString &value) ChangeCurrentData(ui->comboBoxLineColor, value); } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogAlongLine::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetPointName set name of point diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.h b/src/libs/vtools/dialogs/tools/dialogalongline.h index 38c12dced..c51aea1de 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.h +++ b/src/libs/vtools/dialogs/tools/dialogalongline.h @@ -50,9 +50,10 @@ class DialogAlongLine : public DialogTool { Q_OBJECT public: - DialogAlongLine(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogAlongLine(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogAlongLine() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -65,10 +66,10 @@ public: void SetFormula(const QString &value); quint32 GetFirstPointId() const; - void SetFirstPointId(const quint32 &value); + void SetFirstPointId(quint32 value); quint32 GetSecondPointId() const; - void SetSecondPointId(const quint32 &value); + void SetSecondPointId(quint32 value); virtual void Build(const Tool &type) override; public slots: @@ -77,13 +78,10 @@ public slots: * @brief DeployFormulaTextEdit grow or shrink formula input */ void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); void PointChanged(); void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -91,6 +89,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogAlongLine) @@ -98,14 +97,28 @@ private: Ui::DialogAlongLine *ui; /** @brief formula formula */ - QString formula; + QString formula; + + QString pointName; /** @brief formulaBaseHeight base height defined by dialogui */ int formulaBaseHeight; bool buildMidpoint; + QTimer *timerFormula; + + bool flagFormula; + bool flagError; + bool flagName; + void SetCurrentLength(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogAlongLine::IsValid() const +{ + return flagName &&flagFormula && flagError; +} + #endif // DIALOGALONGLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialogarc.cpp b/src/libs/vtools/dialogs/tools/dialogarc.cpp index 91da37713..8aeef7758 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarc.cpp @@ -40,6 +40,7 @@ #include "../ifc/xml/vdomdocument.h" #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolarc.h" #include "../../visualization/visualization.h" #include "../support/dialogeditwrongformula.h" @@ -53,16 +54,28 @@ * @param data container with data * @param parent parent widget */ -DialogArc::DialogArc(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogArc), flagRadius(false), flagF1(false), flagF2(false), - timerRadius(nullptr), timerF1(nullptr), timerF2(nullptr), radius(QString()), f1(QString()), f2(QString()), - formulaBaseHeight(0), formulaBaseHeightF1(0), formulaBaseHeightF2(0), angleF1(INT_MIN), angleF2(INT_MIN) +DialogArc::DialogArc(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogArc), + flagRadius(false), + flagF1(false), + flagF2(false), + timerRadius(new QTimer(this)), + timerF1(new QTimer(this)), + timerF2(new QTimer(this)), + radius(), + f1(), + f2(), + formulaBaseHeight(0), + formulaBaseHeightF1(0), + formulaBaseHeightF2(0), + angleF1(INT_MIN), + angleF2(INT_MIN) { ui->setupUi(this); ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); - plainTextEditFormula = ui->plainTextEditFormula; this->formulaBaseHeight = ui->plainTextEditFormula->height(); this->formulaBaseHeightF1 = ui->plainTextEditF1->height(); this->formulaBaseHeightF2 = ui->plainTextEditF2->height(); @@ -71,13 +84,13 @@ DialogArc::DialogArc(const VContainer *data, const quint32 &toolId, QWidget *par ui->plainTextEditF1->installEventFilter(this); ui->plainTextEditF2->installEventFilter(this); - timerRadius = new QTimer(this); + timerRadius->setSingleShot(true); connect(timerRadius, &QTimer::timeout, this, &DialogArc::EvalRadius); - timerF1 = new QTimer(this); + timerF1->setSingleShot(true); connect(timerF1, &QTimer::timeout, this, &DialogArc::EvalF); - timerF2 = new QTimer(this); + timerF2->setSingleShot(true); connect(timerF2, &QTimer::timeout, this, &DialogArc::EvalF); InitOkCancelApply(ui); @@ -86,15 +99,24 @@ DialogArc::DialogArc(const VContainer *data, const quint32 &toolId, QWidget *par FillComboBoxLineColors(ui->comboBoxColor); FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); - CheckState(); - connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogArc::FXRadius); connect(ui->toolButtonExprF1, &QPushButton::clicked, this, &DialogArc::FXF1); connect(ui->toolButtonExprF2, &QPushButton::clicked, this, &DialogArc::FXF2); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogArc::RadiusChanged); - connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, &DialogArc::F1Changed); - connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, &DialogArc::F2Changed); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerRadius->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, [this]() + { + timerF1->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, [this]() + { + timerF2->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogArc::DeployFormulaTextEdit); connect(ui->pushButtonGrowLengthF1, &QPushButton::clicked, this, &DialogArc::DeployF1TextEdit); @@ -106,19 +128,19 @@ DialogArc::DialogArc(const VContainer *data, const quint32 &toolId, QWidget *par //--------------------------------------------------------------------------------------------------------------------- void DialogArc::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogArc::DeployF1TextEdit() { - DeployFormula(ui->plainTextEditF1, ui->pushButtonGrowLengthF1, formulaBaseHeightF1); + DeployFormula(this, ui->plainTextEditF1, ui->pushButtonGrowLengthF1, formulaBaseHeightF1); } //--------------------------------------------------------------------------------------------------------------------- void DialogArc::DeployF2TextEdit() { - DeployFormula(ui->plainTextEditF2, ui->pushButtonGrowLengthF2, formulaBaseHeightF2); + DeployFormula(this, ui->plainTextEditF2, ui->pushButtonGrowLengthF2, formulaBaseHeightF2); } //--------------------------------------------------------------------------------------------------------------------- @@ -300,40 +322,6 @@ void DialogArc::closeEvent(QCloseEvent *event) DialogTool::closeEvent(event); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief RadiusChanged after change formula of radius calculate value and show result - */ -void DialogArc::RadiusChanged() -{ - labelEditFormula = ui->labelEditRadius; - labelResultCalculation = ui->labelResultRadius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagRadius, ui->plainTextEditFormula, timerRadius, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief F1Changed after change formula of first angle calculate value and show result - */ -void DialogArc::F1Changed() -{ - labelEditFormula = ui->labelEditF1; - labelResultCalculation = ui->labelResultF1; - ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief F2Changed after change formula of second angle calculate value and show result - */ -void DialogArc::F2Changed() -{ - labelEditFormula = ui->labelEditF2; - labelResultCalculation = ui->labelResultF2; - ValFormulaChanged(flagF2, ui->plainTextEditF2, timerF2, degreeSymbol); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogArc::FXRadius() { @@ -376,32 +364,25 @@ void DialogArc::FXF2() delete dialog; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief CheckState if all is right enable button ok - */ -void DialogArc::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagRadius && flagF1 && flagF2); - SCASSERT(bApply != nullptr) - bApply->setEnabled(flagRadius && flagF1 && flagF2); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief EvalRadius calculate value of radius */ void DialogArc::EvalRadius() { - labelEditFormula = ui->labelEditRadius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal radius = Eval(ui->plainTextEditFormula->toPlainText(), flagRadius, ui->labelResultRadius, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditRadius; + formulaData.labelResult = ui->labelResultRadius; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + const qreal radius = Eval(formulaData, flagRadius); if (radius < 0) { flagRadius = false; - ChangeColor(labelEditFormula, Qt::red); + ChangeColor(ui->labelEditRadius, errorColor); ui->labelResultRadius->setText(tr("Error")); ui->labelResultRadius->setToolTip(tr("Radius can't be negative")); @@ -415,11 +396,21 @@ void DialogArc::EvalRadius() */ void DialogArc::EvalF() { - labelEditFormula = ui->labelEditF1; - angleF1 = Eval(ui->plainTextEditF1->toPlainText(), flagF1, ui->labelResultF1, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditF1->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditF1; + formulaData.labelResult = ui->labelResultF1; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; - labelEditFormula = ui->labelEditF2; - angleF2 = Eval(ui->plainTextEditF2->toPlainText(), flagF2, ui->labelResultF2, degreeSymbol, false); + angleF1 = Eval(formulaData, flagF1); + + formulaData.formula = ui->plainTextEditF2->toPlainText(); + formulaData.labelEditFormula = ui->labelEditF2; + formulaData.labelResult = ui->labelResultF2; + + angleF2 = Eval(formulaData, flagF2); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogarc.h b/src/libs/vtools/dialogs/tools/dialogarc.h index 5cbd4d8e0..fe319552b 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.h +++ b/src/libs/vtools/dialogs/tools/dialogarc.h @@ -50,7 +50,7 @@ class DialogArc : public DialogTool { Q_OBJECT public: - DialogArc(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogArc(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogArc() override; quint32 GetCenter() const; @@ -81,21 +81,19 @@ public slots: void DeployFormulaTextEdit(); void DeployF1TextEdit(); void DeployF2TextEdit(); - void RadiusChanged(); - void F1Changed(); - void F2Changed(); - void FXRadius(); - void FXF1(); - void FXF2(); + void FXRadius(); + void FXF1(); + void FXF2(); + protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogArc) @@ -141,4 +139,10 @@ private: void EvalF(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogArc::IsValid() const +{ + return flagRadius && flagF1 && flagF2; +} + #endif // DIALOGARC_H diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp index 9ca2df938..d8019551d 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp @@ -40,6 +40,7 @@ #include "../ifc/xml/vdomdocument.h" #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolarcwithlength.h" #include "../support/dialogeditwrongformula.h" #include "../vmisc/vabstractapplication.h" @@ -48,15 +49,25 @@ #include "ui_dialogarcwithlength.h" //--------------------------------------------------------------------------------------------------------------------- -DialogArcWithLength::DialogArcWithLength(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogArcWithLength), flagRadius(false), flagF1(false), - flagLength(false), timerRadius(nullptr), timerF1(nullptr), timerLength(nullptr), radius(QString()), f1(QString()), - length(QString()),formulaBaseHeightRadius(0), formulaBaseHeightF1(0), formulaBaseHeightLength(0), angleF1(INT_MIN) +DialogArcWithLength::DialogArcWithLength(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogArcWithLength), + flagRadius(false), + flagF1(false), + flagLength(false), + timerRadius(new QTimer(this)), + timerF1(new QTimer(this)), + timerLength(new QTimer(this)), + radius(), + f1(), + length(), + formulaBaseHeightRadius(0), + formulaBaseHeightF1(0), + formulaBaseHeightLength(0) { ui->setupUi(this); - plainTextEditFormula = ui->plainTextEditRadius; - this->formulaBaseHeightLength = ui->plainTextEditRadius->height(); + this->formulaBaseHeightRadius = ui->plainTextEditRadius->height(); this->formulaBaseHeightF1 = ui->plainTextEditF1->height(); this->formulaBaseHeightLength = ui->plainTextEditLength->height(); @@ -64,13 +75,13 @@ DialogArcWithLength::DialogArcWithLength(const VContainer *data, const quint32 & ui->plainTextEditF1->installEventFilter(this); ui->plainTextEditLength->installEventFilter(this); - timerRadius = new QTimer(this); + timerRadius->setSingleShot(true); connect(timerRadius, &QTimer::timeout, this, &DialogArcWithLength::Radius); - timerF1 = new QTimer(this); + timerF1->setSingleShot(true); connect(timerF1, &QTimer::timeout, this, &DialogArcWithLength::EvalF); - timerLength = new QTimer(this); + timerLength->setSingleShot(true); connect(timerLength, &QTimer::timeout, this, &DialogArcWithLength::Length); InitOkCancelApply(ui); @@ -81,15 +92,24 @@ DialogArcWithLength::DialogArcWithLength(const VContainer *data, const quint32 & ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); - CheckState(); - connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogArcWithLength::FXRadius); connect(ui->toolButtonExprF1, &QPushButton::clicked, this, &DialogArcWithLength::FXF1); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogArcWithLength::FXLength); - connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, &DialogArcWithLength::RadiusChanged); - connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, &DialogArcWithLength::F1Changed); - connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, &DialogArcWithLength::LengthChanged); + connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, [this]() + { + timerRadius->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, [this]() + { + timerF1->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, [this]() + { + timerLength->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLengthRadius, &QPushButton::clicked, this, &DialogArcWithLength::DeployRadiusTextEdit); connect(ui->pushButtonGrowLengthF1, &QPushButton::clicked, this, &DialogArcWithLength::DeployF1TextEdit); @@ -249,45 +269,19 @@ void DialogArcWithLength::ChosenObject(quint32 id, const SceneObject &type) //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::DeployRadiusTextEdit() { - DeployFormula(ui->plainTextEditRadius, ui->pushButtonGrowLengthArcLength, formulaBaseHeightRadius); + DeployFormula(this, ui->plainTextEditRadius, ui->pushButtonGrowLengthArcLength, formulaBaseHeightRadius); } //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::DeployF1TextEdit() { - DeployFormula(ui->plainTextEditF1, ui->pushButtonGrowLengthF1, formulaBaseHeightF1); + DeployFormula(this, ui->plainTextEditF1, ui->pushButtonGrowLengthF1, formulaBaseHeightF1); } //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::DeployLengthTextEdit() { - DeployFormula(ui->plainTextEditLength, ui->pushButtonGrowLengthArcLength, formulaBaseHeightLength); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogArcWithLength::RadiusChanged() -{ - labelEditFormula = ui->labelEditRadius; - labelResultCalculation = ui->labelResultRadius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagRadius, ui->plainTextEditRadius, timerRadius, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogArcWithLength::F1Changed() -{ - labelEditFormula = ui->labelEditF1; - labelResultCalculation = ui->labelResultF1; - ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogArcWithLength::LengthChanged() -{ - labelEditFormula = ui->labelEditLength; - labelResultCalculation = ui->labelResultLength; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagLength, ui->plainTextEditLength, timerLength, postfix); + DeployFormula(this, ui->plainTextEditLength, ui->pushButtonGrowLengthArcLength, formulaBaseHeightLength); } //--------------------------------------------------------------------------------------------------------------------- @@ -332,18 +326,6 @@ void DialogArcWithLength::FXLength() delete dialog; } -//--------------------------------------------------------------------------------------------------------------------- -void DialogArcWithLength::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagRadius && flagF1 && flagLength); - // In case dialog hasn't apply button - if ( bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} - //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::ShowVisualization() { @@ -380,42 +362,40 @@ void DialogArcWithLength::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::Radius() { - labelEditFormula = ui->labelEditRadius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal radius = Eval(ui->plainTextEditRadius->toPlainText(), flagRadius, ui->labelResultRadius, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditRadius->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditRadius; + formulaData.labelResult = ui->labelResultRadius; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkLessThanZero = true; - if (radius < 0) - { - flagRadius = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultRadius->setText(tr("Error")); - ui->labelResultRadius->setToolTip(tr("Radius can't be negative")); - - DialogArcWithLength::CheckState(); - } + Eval(formulaData, flagRadius); } //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::Length() { - labelEditFormula = ui->labelEditLength; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal length = Eval(ui->plainTextEditLength->toPlainText(), flagLength, ui->labelResultLength, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditLength->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditLength; + formulaData.labelResult = ui->labelResultLength; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); - if (qFuzzyIsNull(length)) - { - flagLength = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultLength->setText(tr("Error")); - ui->labelResultLength->setToolTip(tr("Length can't be equal 0")); - - DialogArcWithLength::CheckState(); - } + Eval(formulaData, flagLength); } //--------------------------------------------------------------------------------------------------------------------- void DialogArcWithLength::EvalF() { - labelEditFormula = ui->labelEditF1; - angleF1 = Eval(ui->plainTextEditF1->toPlainText(), flagF1, ui->labelResultF1, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditF1->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditF1; + formulaData.labelResult = ui->labelResultF1; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagF1); } diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h index 56fd39e13..5cdbe3ab7 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.h +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.h @@ -48,7 +48,7 @@ class DialogArcWithLength : public DialogTool Q_OBJECT public: - DialogArcWithLength(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogArcWithLength(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); ~DialogArcWithLength(); quint32 GetCenter() const; @@ -80,22 +80,18 @@ public slots: void DeployF1TextEdit(); void DeployLengthTextEdit(); - void RadiusChanged(); - void F1Changed(); - void LengthChanged(); - void FXRadius(); void FXF1(); void FXLength(); protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogArcWithLength) @@ -130,11 +126,15 @@ private: int formulaBaseHeightF1; int formulaBaseHeightLength; - qreal angleF1; - void Radius(); void Length(); void EvalF(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogArcWithLength::IsValid() const +{ + return flagRadius && flagF1 && flagLength; +} + #endif // DIALOGARCWITHLENGTH_H diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.cpp b/src/libs/vtools/dialogs/tools/dialogbisector.cpp index 6d5f1fdc7..90d696501 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.cpp +++ b/src/libs/vtools/dialogs/tools/dialogbisector.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include "../../visualization/line/vistoolbisector.h" @@ -47,6 +48,7 @@ #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "ui_dialogbisector.h" //--------------------------------------------------------------------------------------------------------------------- @@ -55,22 +57,29 @@ * @param data container with data * @param parent parent widget */ -DialogBisector::DialogBisector(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogBisector), formula(QString()), formulaBaseHeight(0) +DialogBisector::DialogBisector(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogBisector), + formula(), + pointName(), + formulaBaseHeight(0), + timerFormula(new QTimer(this)), + flagFormula(false), + flagError(true), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogBisector::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); @@ -79,8 +88,15 @@ DialogBisector::DialogBisector(const VContainer *data, const quint32 &toolId, QW FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogBisector::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogBisector::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogBisector::FormulaTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogBisector::DeployFormulaTextEdit); connect(ui->comboBoxFirstPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogBisector::PointNameChanged); @@ -92,12 +108,6 @@ DialogBisector::DialogBisector(const VContainer *data, const quint32 &toolId, QW vis = new VisToolBisector(data); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogBisector::FormulaTextChanged() -{ - this->FormulaChangedPlainText(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogBisector::PointNameChanged() { @@ -106,7 +116,7 @@ void DialogBisector::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxSecondPoint)); set.insert(getCurrentObjectId(ui->comboBoxThirdPoint)); - QColor color = okColor; + QColor color; if (set.size() != 3) { flagError = false; @@ -115,7 +125,7 @@ void DialogBisector::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); @@ -137,6 +147,20 @@ void DialogBisector::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogBisector::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogBisector::ShowVisualization() { @@ -146,7 +170,7 @@ void DialogBisector::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogBisector::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -155,6 +179,12 @@ DialogBisector::~DialogBisector() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogBisector::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save right data and ignore wrong. diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.h b/src/libs/vtools/dialogs/tools/dialogbisector.h index 038b3a1e9..b24339a49 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.h +++ b/src/libs/vtools/dialogs/tools/dialogbisector.h @@ -51,9 +51,10 @@ class DialogBisector : public DialogTool Q_OBJECT public: - DialogBisector(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogBisector(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogBisector() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -79,12 +80,10 @@ public slots: * @brief DeployFormulaTextEdit grow or shrink formula input */ void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); + virtual void PointNameChanged() override; void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -92,6 +91,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogBisector) @@ -99,10 +99,23 @@ private: Ui::DialogBisector *ui; /** @brief formula formula */ - QString formula; + QString formula; + QString pointName; /** @brief formulaBaseHeight base height defined by dialogui */ int formulaBaseHeight; + + QTimer *timerFormula; + + bool flagFormula; + bool flagError; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogBisector::IsValid() const +{ + return flagFormula && flagError && flagName; +} + #endif // DIALOGBISECTOR_H diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp index 92ba0574a..dcea78636 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp @@ -44,11 +44,12 @@ #include "ui_dialogcubicbezier.h" //--------------------------------------------------------------------------------------------------------------------- -DialogCubicBezier::DialogCubicBezier(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogCubicBezier::DialogCubicBezier(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogCubicBezier), spl(), - newDuplicate(-1) + newDuplicate(-1), + flagError(false) { ui->setupUi(this); InitOkCancelApply(ui); @@ -62,8 +63,6 @@ DialogCubicBezier::DialogCubicBezier(const VContainer *data, const quint32 &tool ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); - DialogTool::CheckState(); - connect(ui->comboBoxP1, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogCubicBezier::PointNameChanged); connect(ui->comboBoxP2, QOverload::of(&QComboBox::currentIndexChanged), @@ -174,7 +173,7 @@ void DialogCubicBezier::ChosenObject(quint32 id, const SceneObject &type) //--------------------------------------------------------------------------------------------------------------------- void DialogCubicBezier::PointNameChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxP1) == getCurrentObjectId(ui->comboBoxP4)) { flagError = false; @@ -185,7 +184,7 @@ void DialogCubicBezier::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); if (getCurrentObjectId(ui->comboBoxP1) == spl.GetP1().id() && getCurrentObjectId(ui->comboBoxP4) == spl.GetP4().id()) diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezier.h b/src/libs/vtools/dialogs/tools/dialogcubicbezier.h index a92680506..1d3b803ee 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezier.h +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezier.h @@ -52,7 +52,7 @@ class DialogCubicBezier : public DialogTool Q_OBJECT public: - explicit DialogCubicBezier(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogCubicBezier(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogCubicBezier(); VCubicBezier GetSpline() const; @@ -66,6 +66,7 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogCubicBezier) Ui::DialogCubicBezier *ui; @@ -75,10 +76,18 @@ private: qint32 newDuplicate; + bool flagError; + const QSharedPointer GetP1() const; const QSharedPointer GetP2() const; const QSharedPointer GetP3() const; const QSharedPointer GetP4() const; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogCubicBezier::IsValid() const +{ + return flagError; +} + #endif // DIALOGCUBICBEZIER_H diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp index 8ed9a04b7..4e9b3834a 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp @@ -58,11 +58,12 @@ class QWidget; //--------------------------------------------------------------------------------------------------------------------- -DialogCubicBezierPath::DialogCubicBezierPath(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogCubicBezierPath::DialogCubicBezierPath(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogCubicBezierPath), path(), - newDuplicate(-1) + newDuplicate(-1), + flagError(false) { ui->setupUi(this); @@ -223,7 +224,7 @@ void DialogCubicBezierPath::currentPointChanged(int index) DataPoint(*point); item->setData(Qt::UserRole, QVariant::fromValue(*point)); - QColor color = okColor; + QColor color; if (not IsPathValid()) { flagError = false; @@ -234,7 +235,7 @@ void DialogCubicBezierPath::currentPointChanged(int index) else { flagError = true; - color = okColor; + color = OkColor(this); auto first = qvariant_cast(ui->listWidget->item(0)->data(Qt::UserRole)); auto last = qvariant_cast(ui->listWidget->item(ui->listWidget->count()-1)->data(Qt::UserRole)); diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.h b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.h index b455fe442..5d9d236da 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.h +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.h @@ -51,7 +51,7 @@ class DialogCubicBezierPath : public DialogTool Q_OBJECT public: - explicit DialogCubicBezierPath(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogCubicBezierPath(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogCubicBezierPath(); VCubicBezierPath GetPath() const; @@ -62,6 +62,7 @@ public slots: protected: virtual void ShowVisualization() override; virtual void SaveData() override; + virtual bool IsValid() const final; private slots: void PointChanged(int row); void currentPointChanged(int index); @@ -75,6 +76,8 @@ private: qint32 newDuplicate; + bool flagError; + void NewItem(const VPointF &point); void DataPoint(const VPointF &p); void SavePath(); @@ -83,4 +86,10 @@ private: VCubicBezierPath ExtractPath() const; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogCubicBezierPath::IsValid() const +{ + return flagError; +} + #endif // DIALOGCUBICBEZIERPATH_H diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index cc5b9665c..e455ac0b0 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -54,26 +54,28 @@ #include "ui_dialogcurveintersectaxis.h" //--------------------------------------------------------------------------------------------------------------------- -DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogCurveIntersectAxis), formulaAngle(), formulaBaseHeightAngle(0), - m_firstRelease(false) + pointName(), + m_firstRelease(false), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; - this->formulaBaseHeightAngle = ui->plainTextEditFormula->height(); + formulaBaseHeightAngle = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxAxisPoint); FillComboBoxCurves(ui->comboBoxCurve); @@ -81,8 +83,15 @@ DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, const FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogCurveIntersectAxis::FXAngle); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCurveIntersectAxis::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogCurveIntersectAxis::AngleTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLengthAngle, &QPushButton::clicked, this, &DialogCurveIntersectAxis::DeployAngleTextEdit); connect(timerFormula, &QTimer::timeout, this, &DialogCurveIntersectAxis::EvalAngle); @@ -95,6 +104,12 @@ DialogCurveIntersectAxis::~DialogCurveIntersectAxis() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogCurveIntersectAxis::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::SetPointName(const QString &value) { @@ -147,7 +162,7 @@ quint32 DialogCurveIntersectAxis::GetBasePointId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogCurveIntersectAxis::SetBasePointId(const quint32 &value) +void DialogCurveIntersectAxis::SetBasePointId(quint32 value) { setCurrentPointId(ui->comboBoxAxisPoint, value); @@ -163,7 +178,7 @@ quint32 DialogCurveIntersectAxis::getCurveId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogCurveIntersectAxis::setCurveId(const quint32 &value) +void DialogCurveIntersectAxis::setCurveId(quint32 value) { setCurrentCurveId(ui->comboBoxCurve, value); @@ -269,19 +284,21 @@ void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::EvalAngle() { - Eval(ui->plainTextEditFormula->toPlainText(), flagError, ui->labelResultCalculation, degreeSymbol, false); -} + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; -//--------------------------------------------------------------------------------------------------------------------- -void DialogCurveIntersectAxis::AngleTextChanged() -{ - ValFormulaChanged(flagError, ui->plainTextEditFormula, timerFormula, degreeSymbol); + Eval(formulaData, flagFormula); } //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::DeployAngleTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLengthAngle, formulaBaseHeightAngle); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLengthAngle, formulaBaseHeightAngle); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h index e508e076b..c344f9800 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.h @@ -48,9 +48,10 @@ class DialogCurveIntersectAxis : public DialogTool Q_OBJECT public: - DialogCurveIntersectAxis(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogCurveIntersectAxis(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogCurveIntersectAxis() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -60,10 +61,10 @@ public: void SetAngle(const QString &value); quint32 GetBasePointId() const; - void SetBasePointId(const quint32 &value); + void SetBasePointId(quint32 value); quint32 getCurveId() const; - void setCurveId(const quint32 &value); + void setCurveId(quint32 value); QString GetLineColor() const; void SetLineColor(const QString &value); @@ -72,7 +73,6 @@ public: public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; void EvalAngle(); - void AngleTextChanged(); void DeployAngleTextEdit(); void FXAngle(); protected: @@ -82,6 +82,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogCurveIntersectAxis) Ui::DialogCurveIntersectAxis *ui; @@ -89,7 +90,20 @@ private: QString formulaAngle; int formulaBaseHeightAngle; + QString pointName; + bool m_firstRelease; + + QTimer *timerFormula; + + bool flagFormula; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogCurveIntersectAxis::IsValid() const +{ + return flagFormula && flagName; +} + #endif // DIALOGCURVEINTERSECTAXIS_H diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp index c187c5810..de8425240 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp @@ -33,9 +33,11 @@ #include #include #include +#include #include #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolcutarc.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" @@ -51,39 +53,46 @@ * @param data container with data * @param parent parent widget */ -DialogCutArc::DialogCutArc(const VContainer *data, const quint32 &toolId, QWidget *parent) - : DialogTool(data, toolId, parent), ui(new Ui::DialogCutArc), formula(QString()), formulaBaseHeight(0) +DialogCutArc::DialogCutArc(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCutArc), + formula(), + pointName(), + formulaBaseHeight(0), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogCutArc::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; - this->formulaBaseHeight = ui->plainTextEditFormula->height(); + formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxArcs(ui->comboBoxArc); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutArc::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCutArc::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogCutArc::FormulaTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogCutArc::DeployFormulaTextEdit); vis = new VisToolCutArc(data); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogCutArc::FormulaTextChanged() -{ - this->FormulaChangedPlainText(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogCutArc::FXLength() { @@ -98,6 +107,20 @@ void DialogCutArc::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutArc::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutArc::ShowVisualization() { @@ -107,7 +130,7 @@ void DialogCutArc::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogCutArc::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -116,6 +139,12 @@ DialogCutArc::~DialogCutArc() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogCutArc::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save right data and ignore wrong. @@ -165,7 +194,7 @@ void DialogCutArc::closeEvent(QCloseEvent *event) * @brief setArcId set id of arc * @param value id */ -void DialogCutArc::setArcId(const quint32 &value) +void DialogCutArc::setArcId(quint32 value) { setCurrentArcId(ui->comboBoxArc, value); diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.h b/src/libs/vtools/dialogs/tools/dialogcutarc.h index 3cede13dd..7bac72651 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.h +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.h @@ -51,27 +51,26 @@ class DialogCutArc : public DialogTool Q_OBJECT public: - DialogCutArc(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogCutArc(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogCutArc() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetFormula() const; void SetFormula(const QString &value); quint32 getArcId() const; - void setArcId(const quint32 &value); + void setArcId(quint32 value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; /** * @brief DeployFormulaTextEdit grow or shrink formula input */ void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); + void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -79,16 +78,29 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogCutArc) /** @brief ui keeps information about user interface */ Ui::DialogCutArc *ui; /** @brief formula string with formula */ - QString formula; + QString formula; + QString pointName; /** @brief formulaBaseHeight base height defined by dialogui */ int formulaBaseHeight; + + QTimer *timerFormula; + + bool flagFormula; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogCutArc::IsValid() const +{ + return flagFormula && flagName; +} + #endif // DIALOGCUTARC_H diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp index 43fa3295b..43819531b 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp @@ -33,9 +33,11 @@ #include #include #include +#include #include #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolcutspline.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" @@ -51,28 +53,41 @@ * @param data container with data * @param parent parent widget */ -DialogCutSpline::DialogCutSpline(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogCutSpline), formula(QString()), formulaBaseHeight(0) +DialogCutSpline::DialogCutSpline(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCutSpline), + formula(), + formulaBaseHeight(0), + pointName(), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogCutSpline::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxSplines(ui->comboBoxSpline); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutSpline::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCutSpline::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogCutSpline::FormulaChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogCutSpline::DeployFormulaTextEdit); vis = new VisToolCutSpline(data); @@ -84,6 +99,12 @@ DialogCutSpline::~DialogCutSpline() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogCutSpline::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetPointName set name of point @@ -123,7 +144,7 @@ void DialogCutSpline::SetFormula(const QString &value) * @brief setSplineId set id spline * @param value id */ -void DialogCutSpline::setSplineId(const quint32 &value) +void DialogCutSpline::setSplineId(quint32 value) { setCurrentSplineId(ui->comboBoxSpline, value); @@ -179,7 +200,7 @@ void DialogCutSpline::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogCutSpline::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -196,6 +217,20 @@ void DialogCutSpline::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSpline::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSpline::ShowVisualization() { diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.h b/src/libs/vtools/dialogs/tools/dialogcutspline.h index 342c88744..735a96c1b 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.h +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.h @@ -50,16 +50,17 @@ class DialogCutSpline : public DialogTool { Q_OBJECT public: - DialogCutSpline(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogCutSpline(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogCutSpline() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetFormula() const; void SetFormula(const QString &value); quint32 getSplineId() const; - void setSplineId(const quint32 &value); + void setSplineId(quint32 value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; /** @@ -67,6 +68,7 @@ public slots: */ void DeployFormulaTextEdit(); void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -74,6 +76,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogCutSpline) @@ -81,10 +84,23 @@ private: Ui::DialogCutSpline *ui; /** @brief formula string with formula */ - QString formula; + QString formula; /** @brief formulaBaseHeight base height defined by dialogui */ - int formulaBaseHeight; + int formulaBaseHeight; + + QString pointName; + + QTimer *timerFormula; + + bool flagFormula; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogCutSpline::IsValid() const +{ + return flagFormula && flagName; +} + #endif // DIALOGCUTSPLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp index 1981ef0b2..d7e57ffb6 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp @@ -33,9 +33,11 @@ #include #include #include +#include #include #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/path/vistoolcutsplinepath.h" #include "../../visualization/visualization.h" #include "../ifc/xml/vabstractpattern.h" @@ -51,28 +53,41 @@ * @param data container with data * @param parent parent widget */ -DialogCutSplinePath::DialogCutSplinePath(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogCutSplinePath), formula(QString()), formulaBaseHeight(0) +DialogCutSplinePath::DialogCutSplinePath(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogCutSplinePath), + formula(), + pointName(), + formulaBaseHeight(0), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogCutSplinePath::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxSplinesPath(ui->comboBoxSplinePath); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogCutSplinePath::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogCutSplinePath::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogCutSplinePath::FormulaChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogCutSplinePath::DeployFormulaTextEdit); vis = new VisToolCutSplinePath(data); @@ -84,6 +99,12 @@ DialogCutSplinePath::~DialogCutSplinePath() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogCutSplinePath::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetPointName set name of point @@ -123,7 +144,7 @@ void DialogCutSplinePath::SetFormula(const QString &value) * @brief setSplineId set id spline * @param value id */ -void DialogCutSplinePath::setSplinePathId(const quint32 &value) +void DialogCutSplinePath::setSplinePathId(quint32 value) { setCurrentSplinePathId(ui->comboBoxSplinePath, value); @@ -179,7 +200,7 @@ void DialogCutSplinePath::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogCutSplinePath::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -196,6 +217,20 @@ void DialogCutSplinePath::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogCutSplinePath::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogCutSplinePath::ShowVisualization() { diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h index b1dc2dc94..191e915aa 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.h @@ -50,16 +50,17 @@ class DialogCutSplinePath : public DialogTool { Q_OBJECT public: - DialogCutSplinePath(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogCutSplinePath(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogCutSplinePath() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetFormula() const; void SetFormula(const QString &value); quint32 getSplinePathId() const; - void setSplinePathId(const quint32 &value); + void setSplinePathId(quint32 value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; /** @@ -67,6 +68,7 @@ public slots: */ void DeployFormulaTextEdit(); void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -74,6 +76,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogCutSplinePath) @@ -81,10 +84,22 @@ private: Ui::DialogCutSplinePath *ui; /** @brief formula string with formula */ - QString formula; + QString formula; + QString pointName; /** @brief formulaBaseHeight base height defined by dialogui */ int formulaBaseHeight; + + QTimer *timerFormula; + + bool flagFormula; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogCutSplinePath::IsValid() const +{ + return flagFormula; +} + #endif // DIALOGCUTSPLINEPATH_H diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp b/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp index 35de3abb1..e27815581 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.cpp @@ -54,7 +54,7 @@ * @param data container with data * @param parent parent widget */ -DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogEllipticalArc), flagRadius1(false), @@ -62,11 +62,11 @@ DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, const quint32 & flagF1(false), flagF2(false), flagRotationAngle(false), - timerRadius1(nullptr), - timerRadius2(nullptr), - timerF1(nullptr), - timerF2(nullptr), - timerRotationAngle(nullptr), + timerRadius1(new QTimer(this)), + timerRadius2(new QTimer(this)), + timerF1(new QTimer(this)), + timerF2(new QTimer(this)), + timerRotationAngle(new QTimer(this)), radius1(), radius2(), f1(), @@ -95,19 +95,19 @@ DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, const quint32 & ui->plainTextEditF2->installEventFilter(this); ui->plainTextEditRotationAngle->installEventFilter(this); - timerRadius1 = new QTimer(this); + timerRadius1->setSingleShot(true); connect(timerRadius1, &QTimer::timeout, this, &DialogEllipticalArc::EvalRadiuses); - timerRadius2 = new QTimer(this); + timerRadius2->setSingleShot(true); connect(timerRadius2, &QTimer::timeout, this, &DialogEllipticalArc::EvalRadiuses); - timerF1 = new QTimer(this); + timerF1->setSingleShot(true); connect(timerF1, &QTimer::timeout, this, &DialogEllipticalArc::EvalAngles); - timerF2 = new QTimer(this); + timerF2->setSingleShot(true); connect(timerF2, &QTimer::timeout, this, &DialogEllipticalArc::EvalAngles); - timerRotationAngle = new QTimer(this); + timerRotationAngle->setSingleShot(true); connect(timerRotationAngle, &QTimer::timeout, this, &DialogEllipticalArc::EvalAngles); InitOkCancelApply(ui); @@ -116,20 +116,36 @@ DialogEllipticalArc::DialogEllipticalArc(const VContainer *data, const quint32 & FillComboBoxLineColors(ui->comboBoxColor); FillComboBoxTypeLine(ui->comboBoxPenStyle, CurvePenStylesPics()); - CheckState(); - connect(ui->toolButtonExprRadius1, &QPushButton::clicked, this, &DialogEllipticalArc::FXRadius1); connect(ui->toolButtonExprRadius2, &QPushButton::clicked, this, &DialogEllipticalArc::FXRadius2); connect(ui->toolButtonExprF1, &QPushButton::clicked, this, &DialogEllipticalArc::FXF1); connect(ui->toolButtonExprF2, &QPushButton::clicked, this, &DialogEllipticalArc::FXF2); connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogEllipticalArc::FXRotationAngle); - connect(ui->plainTextEditRadius1, &QPlainTextEdit::textChanged, this, &DialogEllipticalArc::Radius1Changed); - connect(ui->plainTextEditRadius2, &QPlainTextEdit::textChanged, this, &DialogEllipticalArc::Radius2Changed); - connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, &DialogEllipticalArc::F1Changed); - connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, &DialogEllipticalArc::F2Changed); - connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, - this, &DialogEllipticalArc::RotationAngleChanged); + connect(ui->plainTextEditRadius1, &QPlainTextEdit::textChanged, this, [this]() + { + timerRadius1->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditRadius2, &QPlainTextEdit::textChanged, this, [this]() + { + timerRadius2->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditF1, &QPlainTextEdit::textChanged, this, [this]() + { + timerF1->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditF2, &QPlainTextEdit::textChanged, this, [this]() + { + timerF2->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, [this]() + { + timerRotationAngle->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLengthRadius1, &QPushButton::clicked, this, &DialogEllipticalArc::DeployRadius1TextEdit); connect(ui->pushButtonGrowLengthRadius2, &QPushButton::clicked, this, &DialogEllipticalArc::DeployRadius2TextEdit); @@ -366,31 +382,21 @@ void DialogEllipticalArc::SetColor(const QString &value) */ void DialogEllipticalArc::EvalRadiuses() { - labelEditFormula = ui->labelEditRadius1; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal radius_1 = Eval(ui->plainTextEditRadius1->toPlainText(), flagRadius1, ui->labelResultRadius1, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditRadius1->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditRadius1; + formulaData.labelResult = ui->labelResultRadius1; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkLessThanZero = true; - if (radius_1 < 0) - { - flagRadius1 = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultRadius1->setText(tr("Error")); - ui->labelResultRadius1->setToolTip(tr("Radius can't be negative")); + Eval(formulaData, flagRadius1); - DialogEllipticalArc::CheckState(); - } + formulaData.formula = ui->plainTextEditRadius2->toPlainText(); + formulaData.labelEditFormula = ui->labelEditRadius2; + formulaData.labelResult = ui->labelResultRadius2; - labelEditFormula = ui->labelEditRadius2; - const qreal radius_2 = Eval(ui->plainTextEditRadius2->toPlainText(), flagRadius2, ui->labelResultRadius2, postfix); - if (radius_2 < 0) - { - flagRadius2 = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultRadius2->setText(tr("Error")); - ui->labelResultRadius2->setToolTip(tr("Radius can't be negative")); - - DialogEllipticalArc::CheckState(); - } + Eval(formulaData, flagRadius2); } //--------------------------------------------------------------------------------------------------------------------- @@ -399,15 +405,27 @@ void DialogEllipticalArc::EvalRadiuses() */ void DialogEllipticalArc::EvalAngles() { - labelEditFormula = ui->labelEditF1; - angleF1 = Eval(ui->plainTextEditF1->toPlainText(), flagF1, ui->labelResultF1, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditF1->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditF1; + formulaData.labelResult = ui->labelResultF1; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; - labelEditFormula = ui->labelEditF2; - angleF2 = Eval(ui->plainTextEditF2->toPlainText(), flagF2, ui->labelResultF2, degreeSymbol, false); + angleF1 = Eval(formulaData, flagF1); - labelEditFormula = ui->labelEditRotationAngle; - angleRotation = Eval(ui->plainTextEditRotationAngle->toPlainText(), flagRotationAngle, - ui->labelResultRotationAngle, degreeSymbol, false); + formulaData.formula = ui->plainTextEditF2->toPlainText(); + formulaData.labelEditFormula = ui->labelEditF2; + formulaData.labelResult = ui->labelResultF2; + + angleF2 = Eval(formulaData, flagF2); + + formulaData.formula = ui->plainTextEditRotationAngle->toPlainText(); + formulaData.labelEditFormula = ui->labelEditRotationAngle; + formulaData.labelResult = ui->labelResultRotationAngle; + + angleRotation = Eval(formulaData, flagRotationAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -480,91 +498,34 @@ void DialogEllipticalArc::FXRotationAngle() delete dialog; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief Radius1Changed after change formula of radius1 calculate value and show result - */ -void DialogEllipticalArc::Radius1Changed() -{ - labelEditFormula = ui->labelEditRadius1; - labelResultCalculation = ui->labelResultRadius1; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagRadius1, ui->plainTextEditRadius1, timerRadius1, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief Radius2Changed after change formula of radius2 calculate value and show result - */ -void DialogEllipticalArc::Radius2Changed() -{ - labelEditFormula = ui->labelEditRadius2; - labelResultCalculation = ui->labelResultRadius2; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagRadius2, ui->plainTextEditRadius2, timerRadius2, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief F1Changed after change formula of first angle calculate value and show result - */ -void DialogEllipticalArc::F1Changed() -{ - labelEditFormula = ui->labelEditF1; - labelResultCalculation = ui->labelResultF1; - ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief F2Changed after change formula of second angle calculate value and show result - */ -void DialogEllipticalArc::F2Changed() -{ - labelEditFormula = ui->labelEditF2; - labelResultCalculation = ui->labelResultF2; - ValFormulaChanged(flagF2, ui->plainTextEditF2, timerF2, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief RotationAngleChanged after change formula of rotation angle calculate value and show result - */ -void DialogEllipticalArc::RotationAngleChanged() -{ - labelEditFormula = ui->labelEditRotationAngle; - labelResultCalculation = ui->labelResultF2; - ValFormulaChanged(flagRotationAngle, ui->plainTextEditRotationAngle, timerRotationAngle, degreeSymbol); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::DeployRadius1TextEdit() { - DeployFormula(ui->plainTextEditRadius1, ui->pushButtonGrowLengthRadius1, formulaBaseHeightRadius1); + DeployFormula(this, ui->plainTextEditRadius1, ui->pushButtonGrowLengthRadius1, formulaBaseHeightRadius1); } //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::DeployRadius2TextEdit() { - DeployFormula(ui->plainTextEditRadius2, ui->pushButtonGrowLengthRadius2, formulaBaseHeightRadius2); + DeployFormula(this, ui->plainTextEditRadius2, ui->pushButtonGrowLengthRadius2, formulaBaseHeightRadius2); } //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::DeployF1TextEdit() { - DeployFormula(ui->plainTextEditF1, ui->pushButtonGrowLengthF1, formulaBaseHeightF1); + DeployFormula(this, ui->plainTextEditF1, ui->pushButtonGrowLengthF1, formulaBaseHeightF1); } //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::DeployF2TextEdit() { - DeployFormula(ui->plainTextEditF2, ui->pushButtonGrowLengthF2, formulaBaseHeightF2); + DeployFormula(this, ui->plainTextEditF2, ui->pushButtonGrowLengthF2, formulaBaseHeightF2); } //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::DeployRotationAngleTextEdit() { - DeployFormula(ui->plainTextEditRotationAngle, ui->pushButtonGrowLengthRotationAngle,formulaBaseHeightRotationAngle); + DeployFormula(this, ui->plainTextEditRotationAngle, ui->pushButtonGrowLengthRotationAngle,formulaBaseHeightRotationAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -590,18 +551,6 @@ void DialogEllipticalArc::ChosenObject(quint32 id, const SceneObject &type) } } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief CheckState if all is right enable button ok - */ -void DialogEllipticalArc::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagRadius1 && flagRadius2 && flagF1 && flagF2 && flagRotationAngle); - SCASSERT(bApply != nullptr) - bApply->setEnabled(flagRadius1 && flagRadius2 && flagF1 && flagF2 && flagRotationAngle); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogEllipticalArc::ShowVisualization() { diff --git a/src/libs/vtools/dialogs/tools/dialogellipticalarc.h b/src/libs/vtools/dialogs/tools/dialogellipticalarc.h index 3c1122b48..2a2998ddd 100644 --- a/src/libs/vtools/dialogs/tools/dialogellipticalarc.h +++ b/src/libs/vtools/dialogs/tools/dialogellipticalarc.h @@ -47,7 +47,7 @@ class DialogEllipticalArc : public DialogTool { Q_OBJECT public: - DialogEllipticalArc(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogEllipticalArc(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogEllipticalArc() override; quint32 GetCenter() const; @@ -85,12 +85,6 @@ public slots: void DeployF2TextEdit(); void DeployRotationAngleTextEdit(); - void Radius1Changed(); - void Radius2Changed(); - void F1Changed(); - void F2Changed(); - void RotationAngleChanged(); - void FXRadius1(); void FXRadius2(); void FXF1(); @@ -98,13 +92,13 @@ public slots: void FXRotationAngle(); protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogEllipticalArc) @@ -172,4 +166,10 @@ private: void EvalAngles(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogEllipticalArc::IsValid() const +{ + return flagRadius1 && flagRadius2 && flagF1 && flagF2 && flagRotationAngle; +} + #endif // DIALOGELLIPTICALARC_H diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index cc81496fb..ad5b6ecfd 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -61,22 +61,29 @@ * @param data container with data * @param parent parent widget */ -DialogEndLine::DialogEndLine(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogEndLine::DialogEndLine(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogEndLine), formulaLength(), formulaAngle(), formulaBaseHeight(0), formulaBaseHeightAngle(0), - m_firstRelease(false) + pointName(), + m_firstRelease(false), + timerFormulaLength(new QTimer(this)), + timerFormulaAngle(new QTimer(this)), + flagFormula(false), + flagError(false), + flagName(true) { ui->setupUi(this); + timerFormulaLength->setSingleShot(true); + timerFormulaAngle->setSingleShot(true); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); this->formulaBaseHeightAngle = ui->plainTextEditAngle->height(); @@ -85,7 +92,6 @@ DialogEndLine::DialogEndLine(const VContainer *data, const quint32 &toolId, QWid InitOkCancelApply(ui); flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxBasePoint); FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); @@ -94,15 +100,27 @@ DialogEndLine::DialogEndLine(const VContainer *data, const quint32 &toolId, QWid connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogEndLine::FXLength); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogEndLine::FXAngle); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogEndLine::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogEndLine::FormulaTextChanged); - connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, &DialogEndLine::AngleTextChanged); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormulaLength->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormulaAngle->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogEndLine::DeployFormulaTextEdit); connect(ui->pushButtonGrowLengthAngle, &QPushButton::clicked, this, &DialogEndLine::DeployAngleTextEdit); - connect(timerFormula, &QTimer::timeout, this, &DialogEndLine::EvalAngle); + connect(timerFormulaLength, &QTimer::timeout, this, &DialogEndLine::EvalLength); + connect(timerFormulaAngle, &QTimer::timeout, this, &DialogEndLine::EvalAngle); vis = new VisToolEndLine(data); } @@ -113,35 +131,41 @@ DialogEndLine::DialogEndLine(const VContainer *data, const quint32 &toolId, QWid */ void DialogEndLine::EvalAngle() { - labelEditFormula = ui->labelEditAngle; - Eval(ui->plainTextEditAngle->toPlainText(), flagError, ui->labelResultCalculationAngle, degreeSymbol, false); - labelEditFormula = ui->labelEditFormula; + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle; + formulaData.labelResult = ui->labelResultCalculationAngle; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagError); } //--------------------------------------------------------------------------------------------------------------------- -void DialogEndLine::FormulaTextChanged() +void DialogEndLine::EvalLength() { - this->FormulaChangedPlainText(); -} + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkLessThanZero = true; -//--------------------------------------------------------------------------------------------------------------------- -void DialogEndLine::AngleTextChanged() -{ - labelEditFormula = ui->labelEditAngle; - ValFormulaChanged(flagError, ui->plainTextEditAngle, timerFormula, degreeSymbol); - labelEditFormula = ui->labelEditFormula; + Eval(formulaData, flagFormula); } //--------------------------------------------------------------------------------------------------------------------- void DialogEndLine::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogEndLine::DeployAngleTextEdit() { - DeployFormula(ui->plainTextEditAngle, ui->pushButtonGrowLengthAngle, formulaBaseHeightAngle); + DeployFormula(this, ui->plainTextEditAngle, ui->pushButtonGrowLengthAngle, formulaBaseHeightAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -329,7 +353,7 @@ void DialogEndLine::ShowDialog(bool click) this->SetAngle(line->Angle());//Show in dialog angle what user choose this->SetFormula(line->Length()); emit ToolTip(QString()); - timerFormula->start(); + timerFormulaLength->start(); this->show(); } } @@ -371,6 +395,12 @@ DialogEndLine::~DialogEndLine() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogEndLine::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief GetTypeLine return type of line diff --git a/src/libs/vtools/dialogs/tools/dialogendline.h b/src/libs/vtools/dialogs/tools/dialogendline.h index 60e36f00b..3c1ca074b 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.h +++ b/src/libs/vtools/dialogs/tools/dialogendline.h @@ -50,9 +50,10 @@ class DialogEndLine : public DialogTool { Q_OBJECT public: - DialogEndLine(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogEndLine(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogEndLine() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -73,17 +74,12 @@ public: virtual void ShowDialog(bool click) override; public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; - /** - * @brief DeployFormulaTextEdit grow or shrink formula input - */ - void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); + void EvalLength(); void EvalAngle(); - void AngleTextChanged(); + + /** @brief DeployFormulaTextEdit grow or shrink formula input */ + void DeployFormulaTextEdit(); void DeployAngleTextEdit(); void FXAngle(); @@ -95,6 +91,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogEndLine) @@ -102,16 +99,31 @@ private: Ui::DialogEndLine *ui; /** @brief formula formula */ - QString formulaLength; + QString formulaLength; /** @brief angle angle of line */ - QString formulaAngle; + QString formulaAngle; /** @brief formulaBaseHeight base height defined by dialogui */ - int formulaBaseHeight; - int formulaBaseHeightAngle; + int formulaBaseHeight; + int formulaBaseHeightAngle; + + QString pointName; bool m_firstRelease; + + QTimer *timerFormulaLength; + QTimer *timerFormulaAngle; + + bool flagFormula; + bool flagError; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogEndLine::IsValid() const +{ + return flagFormula && flagError && flagName; +} + #endif // DIALOGENDLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp index ce8f593c0..302b9b656 100644 --- a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.cpp @@ -59,12 +59,14 @@ #include "ui_dialogflippingbyaxis.h" //--------------------------------------------------------------------------------------------------------------------- -DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogFlippingByAxis), objects(), stage1(true), - m_suffix() + m_suffix(), + flagName(false), + flagError(false) { ui->setupUi(this); @@ -75,9 +77,6 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, const quint32 FillComboBoxPoints(ui->comboBoxOriginPoint); FillComboBoxAxisType(ui->comboBoxAxisType); - flagName = true; - CheckState(); - connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByAxis::SuffixChanged); connect(ui->comboBoxOriginPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogFlippingByAxis::PointChanged); @@ -244,7 +243,7 @@ void DialogFlippingByAxis::SuffixChanged() if (suffix.isEmpty()) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -260,7 +259,7 @@ void DialogFlippingByAxis::SuffixChanged() if (not rx.match(name).hasMatch() || not data->IsUnique(name)) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -269,20 +268,11 @@ void DialogFlippingByAxis::SuffixChanged() } flagName = true; - ChangeColor(ui->labelSuffix, okColor); + ChangeColor(ui->labelSuffix, OkColor(this)); } CheckState(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogFlippingByAxis::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagError && flagName); - SCASSERT(bApply != nullptr) - bApply->setEnabled(bOk->isEnabled()); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByAxis::ShowVisualization() { @@ -306,7 +296,7 @@ void DialogFlippingByAxis::SaveData() //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByAxis::PointChanged() { - QColor color = okColor; + QColor color; if (objects.contains(getCurrentObjectId(ui->comboBoxOriginPoint))) { flagError = false; @@ -315,7 +305,7 @@ void DialogFlippingByAxis::PointChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelOriginPoint, color); CheckState(); diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.h b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.h index d35acd1ba..67e604a83 100644 --- a/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.h +++ b/src/libs/vtools/dialogs/tools/dialogflippingbyaxis.h @@ -51,7 +51,7 @@ class DialogFlippingByAxis : public DialogTool Q_OBJECT public: - explicit DialogFlippingByAxis(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogFlippingByAxis(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogFlippingByAxis(); quint32 GetOriginPointId() const; @@ -75,11 +75,11 @@ private slots: void SuffixChanged(); protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private slots: void PointChanged(); @@ -95,7 +95,16 @@ private: QString m_suffix; + bool flagName; + bool flagError; + static void FillComboBoxAxisType(QComboBox *box); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogFlippingByAxis::IsValid() const +{ + return flagError && flagName; +} + #endif // DIALOGFLIPPINGBYAXIS_H diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp b/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp index c7cdfeb27..de3c110de 100644 --- a/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogflippingbyline.cpp @@ -59,12 +59,14 @@ #include "ui_dialogflippingbyline.h" //--------------------------------------------------------------------------------------------------------------------- -DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogFlippingByLine), objects(), stage1(true), - m_suffix() + m_suffix(), + flagName(false), + flagError(false) { ui->setupUi(this); @@ -75,9 +77,6 @@ DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, const quint32 FillComboBoxPoints(ui->comboBoxFirstLinePoint); FillComboBoxPoints(ui->comboBoxSecondLinePoint); - flagName = true; - CheckState(); - connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByLine::SuffixChanged); connect(ui->comboBoxFirstLinePoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogFlippingByLine::PointChanged); @@ -271,7 +270,7 @@ void DialogFlippingByLine::SuffixChanged() if (suffix.isEmpty()) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -287,7 +286,7 @@ void DialogFlippingByLine::SuffixChanged() if (not rx.match(name).hasMatch() || not data->IsUnique(name)) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -296,20 +295,11 @@ void DialogFlippingByLine::SuffixChanged() } flagName = true; - ChangeColor(ui->labelSuffix, okColor); + ChangeColor(ui->labelSuffix, OkColor(this)); } CheckState(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogFlippingByLine::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagError && flagName); - SCASSERT(bApply != nullptr) - bApply->setEnabled(bOk->isEnabled()); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByLine::ShowVisualization() { @@ -333,7 +323,7 @@ void DialogFlippingByLine::SaveData() //--------------------------------------------------------------------------------------------------------------------- void DialogFlippingByLine::PointChanged() { - QColor color = okColor; + QColor color = OkColor(this); flagError = true; ChangeColor(ui->labelFirstLinePoint, color); ChangeColor(ui->labelSecondLinePoint, color); diff --git a/src/libs/vtools/dialogs/tools/dialogflippingbyline.h b/src/libs/vtools/dialogs/tools/dialogflippingbyline.h index 5e6197828..6740a41a8 100644 --- a/src/libs/vtools/dialogs/tools/dialogflippingbyline.h +++ b/src/libs/vtools/dialogs/tools/dialogflippingbyline.h @@ -51,7 +51,7 @@ class DialogFlippingByLine : public DialogTool Q_OBJECT public: - explicit DialogFlippingByLine(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogFlippingByLine(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogFlippingByLine(); quint32 GetFirstLinePointId() const; @@ -75,11 +75,11 @@ private slots: void SuffixChanged(); protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private slots: void PointChanged(); @@ -94,6 +94,15 @@ private: bool stage1; QString m_suffix; + + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogFlippingByLine::IsValid() const +{ + return flagError && flagName; +} + #endif // DIALOGFLIPPINGBYLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialoggroup.cpp b/src/libs/vtools/dialogs/tools/dialoggroup.cpp index f8af05761..775317fc6 100644 --- a/src/libs/vtools/dialogs/tools/dialoggroup.cpp +++ b/src/libs/vtools/dialogs/tools/dialoggroup.cpp @@ -33,14 +33,14 @@ #include "ui_dialoggroup.h" //--------------------------------------------------------------------------------------------------------------------- -DialogGroup::DialogGroup(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogGroup::DialogGroup(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogGroup), - group() + group(), + flagName(false) { ui->setupUi(this); InitOkCancel(ui); - DialogTool::CheckState(); connect(ui->lineEditName, &QLineEdit::textChanged, this, &DialogGroup::NameChanged); } diff --git a/src/libs/vtools/dialogs/tools/dialoggroup.h b/src/libs/vtools/dialogs/tools/dialoggroup.h index c81a9d3d7..cf17b5438 100644 --- a/src/libs/vtools/dialogs/tools/dialoggroup.h +++ b/src/libs/vtools/dialogs/tools/dialoggroup.h @@ -48,7 +48,7 @@ class DialogGroup : public DialogTool Q_OBJECT public: - explicit DialogGroup(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogGroup(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); ~DialogGroup(); void SetName(const QString &name); @@ -61,6 +61,9 @@ public: public slots: virtual void SelectedObject(bool selected, quint32 object, quint32 tool) override; +protected: + virtual bool IsValid() const final; + private slots: void NameChanged(); @@ -68,6 +71,13 @@ private: Q_DISABLE_COPY(DialogGroup) Ui::DialogGroup *ui; QMap group; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogGroup::IsValid() const +{ + return flagName; +} + #endif // DIALOGGROUP_H diff --git a/src/libs/vtools/dialogs/tools/dialogheight.cpp b/src/libs/vtools/dialogs/tools/dialogheight.cpp index efdff1411..c9d00a492 100644 --- a/src/libs/vtools/dialogs/tools/dialogheight.cpp +++ b/src/libs/vtools/dialogs/tools/dialogheight.cpp @@ -57,17 +57,19 @@ * @param data container with data * @param parent parent widget */ -DialogHeight::DialogHeight(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogHeight) +DialogHeight::DialogHeight(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogHeight), + pointName(), + flagError(true), + flagName(true) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; InitOkCancelApply(ui); - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxBasePoint); FillComboBoxPoints(ui->comboBoxP1Line); @@ -75,7 +77,11 @@ DialogHeight::DialogHeight(const VContainer *data, const quint32 &toolId, QWidge FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); FillComboBoxLineColors(ui->comboBoxLineColor); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogHeight::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxBasePoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogHeight::PointNameChanged); connect(ui->comboBoxP1Line, QOverload::of(&QComboBox::currentIndexChanged), @@ -92,6 +98,12 @@ DialogHeight::~DialogHeight() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogHeight::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetPointName set name of point @@ -260,7 +272,7 @@ void DialogHeight::PointNameChanged() const QPointF p1Line = static_cast(*data->GeometricObject(p1LineId)); const QPointF p2Line = static_cast(*data->GeometricObject(p2LineId)); - QColor color = okColor; + QColor color; if (set.size() != 3 || VGObject::ClosestPoint(QLineF(p1Line, p2Line), basePoint) == QPointF()) { flagError = false; @@ -269,7 +281,7 @@ void DialogHeight::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelBasePoint, color); ChangeColor(ui->labelFirstLinePoint, color); diff --git a/src/libs/vtools/dialogs/tools/dialogheight.h b/src/libs/vtools/dialogs/tools/dialogheight.h index 82460a9de..f2e739bd0 100644 --- a/src/libs/vtools/dialogs/tools/dialogheight.h +++ b/src/libs/vtools/dialogs/tools/dialogheight.h @@ -50,9 +50,10 @@ class DialogHeight : public DialogTool { Q_OBJECT public: - DialogHeight(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogHeight(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogHeight() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -78,11 +79,23 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogHeight) /** @brief ui keeps information about user interface */ Ui::DialogHeight *ui; + + QString pointName; + + bool flagError; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogHeight::IsValid() const +{ + return flagError && flagName; +} + #endif // DIALOGHEIGHT_H diff --git a/src/libs/vtools/dialogs/tools/dialogline.cpp b/src/libs/vtools/dialogs/tools/dialogline.cpp index b4baea835..5c5e9b112 100644 --- a/src/libs/vtools/dialogs/tools/dialogline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogline.cpp @@ -48,8 +48,10 @@ * @param data container with data * @param parent parent widget */ -DialogLine::DialogLine(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogLine) +DialogLine::DialogLine(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogLine), + flagError(true) { ui->setupUi(this); InitOkCancelApply(ui); @@ -83,7 +85,7 @@ DialogLine::~DialogLine() * @brief SetSecondPoint set id second point * @param value id */ -void DialogLine::SetSecondPoint(const quint32 &value) +void DialogLine::SetSecondPoint(quint32 value) { setCurrentPointId(ui->comboBoxSecondPoint, value); @@ -120,7 +122,7 @@ void DialogLine::SetLineColor(const QString &value) * @brief SetFirstPoint set id first point * @param value id */ -void DialogLine::SetFirstPoint(const quint32 &value) +void DialogLine::SetFirstPoint(quint32 value) { setCurrentPointId(ui->comboBoxFirstPoint, value); @@ -132,7 +134,7 @@ void DialogLine::SetFirstPoint(const quint32 &value) //--------------------------------------------------------------------------------------------------------------------- void DialogLine::PointNameChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxFirstPoint) == getCurrentObjectId(ui->comboBoxSecondPoint)) { flagError = false; @@ -141,7 +143,7 @@ void DialogLine::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); diff --git a/src/libs/vtools/dialogs/tools/dialogline.h b/src/libs/vtools/dialogs/tools/dialogline.h index 5c3403140..3d211e0d8 100644 --- a/src/libs/vtools/dialogs/tools/dialogline.h +++ b/src/libs/vtools/dialogs/tools/dialogline.h @@ -50,14 +50,14 @@ class DialogLine : public DialogTool { Q_OBJECT public: - DialogLine(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogLine(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogLine() override; quint32 GetFirstPoint() const; - void SetFirstPoint(const quint32 &value); + void SetFirstPoint(quint32 value); quint32 GetSecondPoint() const; - void SetSecondPoint(const quint32 &value); + void SetSecondPoint(quint32 value); QString GetTypeLine() const; void SetTypeLine(const QString &value); @@ -73,11 +73,20 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogLine) /** @brief ui keeps information about user interface */ Ui::DialogLine *ui; + + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogLine::IsValid() const +{ + return flagError; +} + #endif // DIALOGLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp index 06c1330e9..1caedcc8e 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp @@ -56,8 +56,13 @@ * @param data container with data * @param parent parent widget */ -DialogLineIntersect::DialogLineIntersect(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogLineIntersect), flagPoint(true) +DialogLineIntersect::DialogLineIntersect(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogLineIntersect), + pointName(), + flagError(true), + flagPoint(true), + flagName(true) { ui->setupUi(this); @@ -66,14 +71,17 @@ DialogLineIntersect::DialogLineIntersect(const VContainer *data, const quint32 & number = 0; InitOkCancelApply(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; FillComboBoxPoints(ui->comboBoxP1Line1); FillComboBoxPoints(ui->comboBoxP2Line1); FillComboBoxPoints(ui->comboBoxP1Line2); FillComboBoxPoints(ui->comboBoxP2Line2); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogLineIntersect::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxP1Line1, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogLineIntersect::PointNameChanged); connect(ui->comboBoxP2Line1, QOverload::of(&QComboBox::currentIndexChanged), @@ -229,7 +237,7 @@ void DialogLineIntersect::PointNameChanged() QPointF fPoint; QLineF::IntersectType intersect = line1.intersect(line2, &fPoint); - QColor color = okColor; + QColor color; if (set.size() < 3 || intersect == QLineF::NoIntersection) { flagError = false; @@ -238,7 +246,7 @@ void DialogLineIntersect::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelP1Line1, color); ChangeColor(ui->labelP2Line1, color); @@ -253,16 +261,6 @@ void DialogLineIntersect::ShowVisualization() AddVisualization(); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief CheckState check state of dialog. Enable or disable button ok. - */ -void DialogLineIntersect::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagName && flagPoint); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief CheckIntersecion check intersection of points @@ -294,13 +292,19 @@ bool DialogLineIntersect::CheckIntersecion() * @brief SetP2Line2 set id second point of second line * @param value id */ -void DialogLineIntersect::SetP2Line2(const quint32 &value) +void DialogLineIntersect::SetP2Line2(quint32 value) { setCurrentPointId(ui->comboBoxP2Line2, value); VisToolLineIntersect *line = qobject_cast(vis); SCASSERT(line != nullptr) - line->setLine2P2Id(value); + line->setLine2P2Id(value); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString DialogLineIntersect::GetPointName() const +{ + return pointName; } //--------------------------------------------------------------------------------------------------------------------- @@ -308,7 +312,7 @@ void DialogLineIntersect::SetP2Line2(const quint32 &value) * @brief SetP1Line2 set id first point of second line * @param value id */ -void DialogLineIntersect::SetP1Line2(const quint32 &value) +void DialogLineIntersect::SetP1Line2(quint32 value) { setCurrentPointId(ui->comboBoxP1Line2, value); @@ -322,7 +326,7 @@ void DialogLineIntersect::SetP1Line2(const quint32 &value) * @brief SetP2Line1 set id second point of first line * @param value id */ -void DialogLineIntersect::SetP2Line1(const quint32 &value) +void DialogLineIntersect::SetP2Line1(quint32 value) { setCurrentPointId(ui->comboBoxP2Line1, value); @@ -336,7 +340,7 @@ void DialogLineIntersect::SetP2Line1(const quint32 &value) * @brief SetP1Line1 set id first point of first line * @param value id */ -void DialogLineIntersect::SetP1Line1(const quint32 &value) +void DialogLineIntersect::SetP1Line1(quint32 value) { setCurrentPointId(ui->comboBoxP1Line1, value); diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersect.h b/src/libs/vtools/dialogs/tools/dialoglineintersect.h index ffb3d1a76..6a129c7be 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersect.h +++ b/src/libs/vtools/dialogs/tools/dialoglineintersect.h @@ -50,21 +50,22 @@ class DialogLineIntersect : public DialogTool { Q_OBJECT public: - DialogLineIntersect(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogLineIntersect(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogLineIntersect() override; quint32 GetP1Line1() const; - void SetP1Line1(const quint32 &value); + void SetP1Line1(quint32 value); quint32 GetP2Line1() const; - void SetP2Line1(const quint32 &value); + void SetP2Line1(quint32 value); quint32 GetP1Line2() const; - void SetP1Line2(const quint32 &value); + void SetP1Line2(quint32 value); quint32 GetP2Line2() const; - void SetP2Line2(const quint32 &value); + void SetP2Line2(quint32 value); + QString GetPointName() const; void SetPointName(const QString &value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; @@ -76,17 +77,29 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogLineIntersect) /** @brief ui keeps information about user interface */ Ui::DialogLineIntersect *ui; - /** @brief flagPoint keep state of point */ - bool flagPoint; + QString pointName; + + bool flagError; + + /** @brief flagPoint keep state of point */ + bool flagPoint; + + bool flagName; - virtual void CheckState() final; bool CheckIntersecion(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogLineIntersect::IsValid() const +{ + return flagName && flagError && flagPoint; +} + #endif // DIALOGLINEINTERSECT_H diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index 4534de50d..b00bfa76f 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -59,26 +59,29 @@ #include "ui_dialoglineintersectaxis.h" //--------------------------------------------------------------------------------------------------------------------- -DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogLineIntersectAxis), formulaAngle(), formulaBaseHeightAngle(0), - m_firstRelease(false) + pointName(), + m_firstRelease(false), + timerFormula(new QTimer(this)), + flagFormula(false), + flagError(true), + flagName(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeightAngle = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxAxisPoint); FillComboBoxPoints(ui->comboBoxFirstLinePoint); @@ -87,8 +90,15 @@ DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, const q FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogLineIntersectAxis::FXAngle); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogLineIntersectAxis::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogLineIntersectAxis::AngleTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLengthAngle, &QPushButton::clicked, this, &DialogLineIntersectAxis::DeployAngleTextEdit); connect(timerFormula, &QTimer::timeout, this, &DialogLineIntersectAxis::EvalAngle); connect(ui->comboBoxFirstLinePoint, QOverload::of(&QComboBox::currentIndexChanged), @@ -107,6 +117,12 @@ DialogLineIntersectAxis::~DialogLineIntersectAxis() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogLineIntersectAxis::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::SetPointName(const QString &value) { @@ -159,7 +175,7 @@ quint32 DialogLineIntersectAxis::GetBasePointId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogLineIntersectAxis::SetBasePointId(const quint32 &value) +void DialogLineIntersectAxis::SetBasePointId(quint32 value) { setCurrentPointId(ui->comboBoxAxisPoint, value); @@ -175,7 +191,7 @@ quint32 DialogLineIntersectAxis::GetFirstPointId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogLineIntersectAxis::SetFirstPointId(const quint32 &value) +void DialogLineIntersectAxis::SetFirstPointId(quint32 value) { setCurrentPointId(ui->comboBoxFirstLinePoint, value); @@ -191,7 +207,7 @@ quint32 DialogLineIntersectAxis::GetSecondPointId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogLineIntersectAxis::SetSecondPointId(const quint32 &value) +void DialogLineIntersectAxis::SetSecondPointId(quint32 value) { setCurrentPointId(ui->comboBoxSecondLinePoint, value); @@ -311,19 +327,21 @@ void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::EvalAngle() { - Eval(ui->plainTextEditFormula->toPlainText(), flagError, ui->labelResultCalculation, degreeSymbol, false); -} + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; -//--------------------------------------------------------------------------------------------------------------------- -void DialogLineIntersectAxis::AngleTextChanged() -{ - ValFormulaChanged(flagError, ui->plainTextEditFormula, timerFormula, degreeSymbol); + Eval(formulaData, flagFormula); } //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::DeployAngleTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLengthAngle, formulaBaseHeightAngle); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLengthAngle, formulaBaseHeightAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -334,7 +352,7 @@ void DialogLineIntersectAxis::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxSecondLinePoint)); set.insert(getCurrentObjectId(ui->comboBoxAxisPoint)); - QColor color = okColor; + QColor color; if (set.size() != 3) { flagError = false; @@ -343,7 +361,7 @@ void DialogLineIntersectAxis::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstLinePoint, color); ChangeColor(ui->labelSecondLinePoint, color); diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h index b2e660236..aef96cf43 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.h @@ -48,9 +48,10 @@ class DialogLineIntersectAxis : public DialogTool Q_OBJECT public: - DialogLineIntersectAxis(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogLineIntersectAxis(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogLineIntersectAxis() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -60,13 +61,13 @@ public: void SetAngle(const QString &value); quint32 GetBasePointId() const; - void SetBasePointId(const quint32 &value); + void SetBasePointId(quint32 value); quint32 GetFirstPointId() const; - void SetFirstPointId(const quint32 &value); + void SetFirstPointId(quint32 value); quint32 GetSecondPointId() const; - void SetSecondPointId(const quint32 &value); + void SetSecondPointId(quint32 value); QString GetLineColor() const; void SetLineColor(const QString &value); @@ -75,7 +76,6 @@ public: public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; void EvalAngle(); - void AngleTextChanged(); void DeployAngleTextEdit(); virtual void PointNameChanged() override; void FXAngle(); @@ -86,6 +86,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogLineIntersectAxis) Ui::DialogLineIntersectAxis *ui; @@ -93,7 +94,21 @@ private: QString formulaAngle; int formulaBaseHeightAngle; + QString pointName; + bool m_firstRelease; + + QTimer *timerFormula; + + bool flagFormula; + bool flagError; + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogLineIntersectAxis::IsValid() const +{ + return flagFormula && flagName; +} + #endif // DIALOGLINEINTERSECTAXIS_H diff --git a/src/libs/vtools/dialogs/tools/dialogmove.cpp b/src/libs/vtools/dialogs/tools/dialogmove.cpp index 69f4a911d..5d25201a6 100644 --- a/src/libs/vtools/dialogs/tools/dialogmove.cpp +++ b/src/libs/vtools/dialogs/tools/dialogmove.cpp @@ -67,12 +67,9 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogMove), - flagAngle(false), - flagRotationAngle(false), - flagLength(false), - timerAngle(nullptr), - timerRotationAngle(nullptr), - timerLength(nullptr), + timerAngle(new QTimer(this)), + timerRotationAngle(new QTimer(this)), + timerLength(new QTimer(this)), formulaAngle(), formulaRotationAngle(), formulaLength(), @@ -83,7 +80,11 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) stage1(true), stage2(false), m_suffix(), - optionalRotationOrigin(false) + optionalRotationOrigin(false), + flagAngle(false), + flagRotationAngle(false), + flagLength(false), + flagName(false) { ui->setupUi(this); @@ -98,13 +99,13 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) ui->lineEditSuffix->setText(qApp->getCurrentDocument()->GenerateSuffix()); - timerAngle = new QTimer(this); + timerAngle->setSingleShot(true); connect(timerAngle, &QTimer::timeout, this, &DialogMove::EvalAngle); - timerRotationAngle = new QTimer(this); + timerRotationAngle->setSingleShot(true); connect(timerRotationAngle, &QTimer::timeout, this, &DialogMove::EvalRotationAngle); - timerLength = new QTimer(this); + timerLength->setSingleShot(true); connect(timerLength, &QTimer::timeout, this, &DialogMove::EvalLength); InitOkCancelApply(ui); @@ -115,16 +116,25 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent) ui->comboBoxRotationOriginPoint->addItem(tr("Center point"), NULL_ID); ui->comboBoxRotationOriginPoint->blockSignals(false); - flagName = true; - CheckState(); - connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogMove::SuffixChanged); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogMove::FXAngle); connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogMove::FXRotationAngle); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogMove::FXLength); - connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, &DialogMove::AngleChanged); - connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, &DialogMove::RotationAngleChanged); - connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, &DialogMove::LengthChanged); + connect(ui->plainTextEditAngle, &QPlainTextEdit::textChanged, this, [this]() + { + timerAngle->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditRotationAngle, &QPlainTextEdit::textChanged, this, [this]() + { + timerRotationAngle->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditLength, &QPlainTextEdit::textChanged, this, [this]() + { + timerLength->start(formulaTimerTimeout); + }); + connect(ui->pushButtonGrowAngle, &QPushButton::clicked, this, &DialogMove::DeployAngleTextEdit); connect(ui->pushButtonGrowRotationAngle, &QPushButton::clicked, this, &DialogMove::DeployRotationAngleTextEdit); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogMove::DeployLengthTextEdit); @@ -373,43 +383,19 @@ void DialogMove::SelectedObject(bool selected, quint32 object, quint32 tool) //--------------------------------------------------------------------------------------------------------------------- void DialogMove::DeployAngleTextEdit() { - DeployFormula(ui->plainTextEditAngle, ui->pushButtonGrowAngle, formulaBaseHeightAngle); + DeployFormula(this, ui->plainTextEditAngle, ui->pushButtonGrowAngle, formulaBaseHeightAngle); } //--------------------------------------------------------------------------------------------------------------------- void DialogMove::DeployRotationAngleTextEdit() { - DeployFormula(ui->plainTextEditRotationAngle, ui->pushButtonGrowRotationAngle, formulaBaseHeightRotationAngle); + DeployFormula(this, ui->plainTextEditRotationAngle, ui->pushButtonGrowRotationAngle, formulaBaseHeightRotationAngle); } //--------------------------------------------------------------------------------------------------------------------- void DialogMove::DeployLengthTextEdit() { - DeployFormula(ui->plainTextEditLength, ui->pushButtonGrowLength, formulaBaseHeightLength); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogMove::AngleChanged() -{ - labelEditFormula = ui->labelEditAngle; - labelResultCalculation = ui->labelResultAngle; - ValFormulaChanged(flagAngle, ui->plainTextEditAngle, timerAngle, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogMove::RotationAngleChanged() -{ - labelEditFormula = ui->labelEditRotationAngle; - labelResultCalculation = ui->labelResultRotationAngle; - ValFormulaChanged(flagRotationAngle, ui->plainTextEditRotationAngle, timerRotationAngle, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogMove::LengthChanged() -{ - labelEditFormula = ui->labelEditLength; - labelResultCalculation = ui->labelResultLength; - ValFormulaChanged(flagLength, ui->plainTextEditLength, timerLength, degreeSymbol); + DeployFormula(this, ui->plainTextEditLength, ui->pushButtonGrowLength, formulaBaseHeightLength); } //--------------------------------------------------------------------------------------------------------------------- @@ -464,7 +450,7 @@ void DialogMove::SuffixChanged() if (suffix.isEmpty()) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -480,7 +466,7 @@ void DialogMove::SuffixChanged() if (not rx.match(name).hasMatch() || not data->IsUnique(name)) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -489,20 +475,11 @@ void DialogMove::SuffixChanged() } flagName = true; - ChangeColor(ui->labelSuffix, okColor); + ChangeColor(ui->labelSuffix, OkColor(this)); } CheckState(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogMove::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagAngle && flagRotationAngle && flagLength && flagName); - SCASSERT(bApply != nullptr) - bApply->setEnabled(bOk->isEnabled()); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogMove::ShowVisualization() { @@ -540,22 +517,40 @@ void DialogMove::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogMove::EvalAngle() { - labelEditFormula = ui->labelEditAngle; - Eval(ui->plainTextEditAngle->toPlainText(), flagAngle, ui->labelResultAngle, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle; + formulaData.labelResult = ui->labelResultAngle; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagAngle); } //--------------------------------------------------------------------------------------------------------------------- void DialogMove::EvalRotationAngle() { - labelEditFormula = ui->labelEditRotationAngle; - Eval(ui->plainTextEditRotationAngle->toPlainText(), flagRotationAngle, ui->labelResultRotationAngle, degreeSymbol, - false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditRotationAngle->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditRotationAngle; + formulaData.labelResult = ui->labelResultRotationAngle; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagRotationAngle); } //--------------------------------------------------------------------------------------------------------------------- void DialogMove::EvalLength() { - labelEditFormula = ui->labelEditLength; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - Eval(ui->plainTextEditLength->toPlainText(), flagLength, ui->labelResultLength, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditLength->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditLength; + formulaData.labelResult = ui->labelResultLength; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + Eval(formulaData, flagLength); } diff --git a/src/libs/vtools/dialogs/tools/dialogmove.h b/src/libs/vtools/dialogs/tools/dialogmove.h index c25520181..5c83841c8 100644 --- a/src/libs/vtools/dialogs/tools/dialogmove.h +++ b/src/libs/vtools/dialogs/tools/dialogmove.h @@ -82,10 +82,6 @@ private slots: void DeployRotationAngleTextEdit(); void DeployLengthTextEdit(); - void AngleChanged(); - void RotationAngleChanged(); - void LengthChanged(); - void FXAngle(); void FXRotationAngle(); void FXLength(); @@ -93,22 +89,17 @@ private slots: void SuffixChanged(); protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogMove) Ui::DialogMove *ui; - /** @brief flagAngle true if value of angle is correct */ - bool flagAngle; - bool flagRotationAngle; - bool flagLength; - /** @brief timerAngle timer of check formula of angle */ QTimer *timerAngle; QTimer *timerRotationAngle; @@ -133,9 +124,21 @@ private: bool optionalRotationOrigin; + /** @brief flagAngle true if value of angle is correct */ + bool flagAngle; + bool flagRotationAngle; + bool flagLength; + bool flagName; + void EvalAngle(); void EvalRotationAngle(); void EvalLength(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogMove::IsValid() const +{ + return flagAngle && flagRotationAngle && flagLength && flagName; +} + #endif // DIALOGMOVING_H diff --git a/src/libs/vtools/dialogs/tools/dialognormal.cpp b/src/libs/vtools/dialogs/tools/dialognormal.cpp index 14bcf0f5b..4fccea9a7 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.cpp +++ b/src/libs/vtools/dialogs/tools/dialognormal.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include "../vpatterndb/vtranslatevars.h" @@ -56,33 +57,56 @@ * @param data container with data * @param parent parent widget */ -DialogNormal::DialogNormal(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogNormal), formula(QString()), angle(0), formulaBaseHeight(0) +DialogNormal::DialogNormal(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogNormal), + formula(), + angle(0), + formulaBaseHeight(0), + pointName(), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true), + flagError(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogNormal::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); FillComboBoxLineColors(ui->comboBoxLineColor); - InitArrow(ui); + connect(ui->toolButtonArrowDown, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(270);}); + connect(ui->toolButtonArrowUp, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(90);}); + connect(ui->toolButtonArrowLeft, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(180);}); + connect(ui->toolButtonArrowRight, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(0);}); + connect(ui->toolButtonArrowLeftUp, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(135);}); + connect(ui->toolButtonArrowLeftDown, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(225);}); + connect(ui->toolButtonArrowRightUp, &QPushButton::clicked, this, [this](){ui->doubleSpinBoxAngle->setValue(45);}); + connect(ui->toolButtonArrowRightDown, &QPushButton::clicked, this, + [this](){ui->doubleSpinBoxAngle->setValue(315);}); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogNormal::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogNormal::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogNormal::FormulaTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogNormal::DeployFormulaTextEdit); connect(ui->comboBoxFirstPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogNormal::PointNameChanged); @@ -92,16 +116,10 @@ DialogNormal::DialogNormal(const VContainer *data, const quint32 &toolId, QWidge vis = new VisToolNormal(data); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogNormal::FormulaTextChanged() -{ - this->FormulaChangedPlainText(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogNormal::PointNameChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxFirstPoint) == getCurrentObjectId(ui->comboBoxSecondPoint)) { flagError = false; @@ -110,7 +128,7 @@ void DialogNormal::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); @@ -131,6 +149,19 @@ void DialogNormal::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogNormal::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogNormal::ShowVisualization() { @@ -140,7 +171,7 @@ void DialogNormal::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogNormal::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -149,6 +180,12 @@ DialogNormal::~DialogNormal() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogNormal::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save right data and ignore wrong. @@ -223,7 +260,7 @@ void DialogNormal::closeEvent(QCloseEvent *event) * @brief SetSecondPointId set id of second point * @param value id */ -void DialogNormal::SetSecondPointId(const quint32 &value) +void DialogNormal::SetSecondPointId(quint32 value) { setCurrentPointId(ui->comboBoxSecondPoint, value); @@ -249,7 +286,7 @@ void DialogNormal::SetLineColor(const QString &value) * @brief SetFirstPointId set id of first point * @param value id */ -void DialogNormal::SetFirstPointId(const quint32 &value) +void DialogNormal::SetFirstPointId(quint32 value) { setCurrentPointId(ui->comboBoxFirstPoint, value); @@ -263,7 +300,7 @@ void DialogNormal::SetFirstPointId(const quint32 &value) * @brief SetAngle set aditional angle of normal * @param value angle in degree */ -void DialogNormal::SetAngle(const qreal &value) +void DialogNormal::SetAngle(qreal value) { angle = value; ui->doubleSpinBoxAngle->setValue(angle); diff --git a/src/libs/vtools/dialogs/tools/dialognormal.h b/src/libs/vtools/dialogs/tools/dialognormal.h index 6b2bc04c4..f4cb1a7e3 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.h +++ b/src/libs/vtools/dialogs/tools/dialognormal.h @@ -50,9 +50,10 @@ class DialogNormal : public DialogTool { Q_OBJECT public: - DialogNormal(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogNormal(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogNormal() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -62,13 +63,13 @@ public: void SetFormula(const QString &value); qreal GetAngle() const; - void SetAngle(const qreal &value); + void SetAngle(qreal value); quint32 GetFirstPointId() const; - void SetFirstPointId(const quint32 &value); + void SetFirstPointId(quint32 value); quint32 GetSecondPointId() const; - void SetSecondPointId(const quint32 &value); + void SetSecondPointId(quint32 value); QString GetLineColor() const; void SetLineColor(const QString &value); @@ -78,12 +79,9 @@ public slots: * @brief DeployFormulaTextEdit grow or shrink formula input */ void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); virtual void PointNameChanged() override; void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -91,6 +89,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogNormal) @@ -98,13 +97,27 @@ private: Ui::DialogNormal *ui; /** @brief formula formula */ - QString formula; + QString formula; /** @brief angle aditional angle of normal */ - qreal angle; + qreal angle; /** @brief formulaBaseHeight base height defined by dialogui */ - int formulaBaseHeight; + int formulaBaseHeight; + + QString pointName; + + QTimer *timerFormula; + + bool flagFormula; + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogNormal::IsValid() const +{ + return flagFormula && flagName && flagError; +} + #endif // DIALOGNORMAL_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp index 0288c2abc..14126d0b5 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp @@ -39,25 +39,29 @@ #include "ui_dialogpointfromarcandtangent.h" //--------------------------------------------------------------------------------------------------------------------- -DialogPointFromArcAndTangent::DialogPointFromArcAndTangent(const VContainer *data, const quint32 &toolId, - QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogPointFromArcAndTangent) +DialogPointFromArcAndTangent::DialogPointFromArcAndTangent(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointFromArcAndTangent), + pointName(), + flagName(true) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; InitOkCancelApply(ui); - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxTangentPoint); FillComboBoxArcs(ui->comboBoxArc); FillComboBoxCrossCirclesPoints(ui->comboBoxResult); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointFromArcAndTangent::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); vis = new VisToolPointFromArcAndTangent(data); } @@ -68,6 +72,12 @@ DialogPointFromArcAndTangent::~DialogPointFromArcAndTangent() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogPointFromArcAndTangent::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromArcAndTangent::SetPointName(const QString &value) { @@ -82,7 +92,7 @@ quint32 DialogPointFromArcAndTangent::GetArcId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointFromArcAndTangent::SetArcId(const quint32 &value) +void DialogPointFromArcAndTangent::SetArcId(quint32 value) { setCurrentArcId(ui->comboBoxArc, value); @@ -98,7 +108,7 @@ quint32 DialogPointFromArcAndTangent::GetTangentPointId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointFromArcAndTangent::SetTangentPointId(const quint32 &value) +void DialogPointFromArcAndTangent::SetTangentPointId(quint32 value) { setCurrentPointId(ui->comboBoxTangentPoint, value); @@ -114,7 +124,7 @@ CrossCirclesPoint DialogPointFromArcAndTangent::GetCrossCirclesPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointFromArcAndTangent::SetCrossCirclesPoint(const CrossCirclesPoint &p) +void DialogPointFromArcAndTangent::SetCrossCirclesPoint(CrossCirclesPoint p) { const qint32 index = ui->comboBoxResult->findData(static_cast(p)); if (index != -1) diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.h b/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.h index 30b3aeb13..24470ab09 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.h +++ b/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.h @@ -49,20 +49,20 @@ class DialogPointFromArcAndTangent : public DialogTool Q_OBJECT public: - DialogPointFromArcAndTangent(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogPointFromArcAndTangent(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); ~DialogPointFromArcAndTangent(); - + QString GetPointName() const; void SetPointName(const QString &value); quint32 GetArcId() const; - void SetArcId(const quint32 &value); + void SetArcId(quint32 value); quint32 GetTangentPointId() const; - void SetTangentPointId(const quint32 &value); + void SetTangentPointId(quint32 value); CrossCirclesPoint GetCrossCirclesPoint() const; - void SetCrossCirclesPoint(const CrossCirclesPoint &p); + void SetCrossCirclesPoint(CrossCirclesPoint p); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; @@ -73,11 +73,22 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPointFromArcAndTangent) Ui::DialogPointFromArcAndTangent *ui; + + QString pointName; + + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointFromArcAndTangent::IsValid() const +{ + return flagName; +} + #endif // DIALOGPOINTFROMARCANDTANGENT_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp index 003067653..916686bcd 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp @@ -42,6 +42,7 @@ #include #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/visualization.h" #include "../../visualization/line/vistoolpointfromcircleandtangent.h" #include "../ifc/xml/vdomdocument.h" @@ -51,19 +52,24 @@ #include "ui_dialogpointfromcircleandtangent.h" //--------------------------------------------------------------------------------------------------------------------- -DialogPointFromCircleAndTangent::DialogPointFromCircleAndTangent(const VContainer *data, const quint32 &toolId, +DialogPointFromCircleAndTangent::DialogPointFromCircleAndTangent(const VContainer *data, quint32 toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogPointFromCircleAndTangent), flagCircleRadius(false), - timerCircleRadius(nullptr), circleRadius(), formulaBaseHeightCircleRadius(0) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointFromCircleAndTangent), + timerCircleRadius(nullptr), + circleRadius(), + formulaBaseHeightCircleRadius(0), + pointName(), + flagCircleRadius(false), + flagName(true), + flagError(true) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; - plainTextEditFormula = ui->plainTextEditRadius; this->formulaBaseHeightCircleRadius = ui->plainTextEditRadius->height(); ui->plainTextEditRadius->installEventFilter(this); @@ -72,21 +78,26 @@ DialogPointFromCircleAndTangent::DialogPointFromCircleAndTangent(const VContaine connect(timerCircleRadius, &QTimer::timeout, this, &DialogPointFromCircleAndTangent::EvalCircleRadius); InitOkCancelApply(ui); - CheckState(); FillComboBoxPoints(ui->comboBoxCircleCenter); FillComboBoxPoints(ui->comboBoxTangentPoint); FillComboBoxCrossCirclesPoints(ui->comboBoxResult); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointFromCircleAndTangent::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxCircleCenter, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogPointFromCircleAndTangent::PointChanged); connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogPointFromCircleAndTangent::FXCircleRadius); - connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, - &DialogPointFromCircleAndTangent::CircleRadiusChanged); + connect(ui->plainTextEditRadius, &QPlainTextEdit::textChanged, this, [this]() + { + timerCircleRadius->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowRadius, &QPushButton::clicked, this, &DialogPointFromCircleAndTangent::DeployCircleRadiusTextEdit); @@ -100,6 +111,12 @@ DialogPointFromCircleAndTangent::~DialogPointFromCircleAndTangent() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogPointFromCircleAndTangent::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::SetPointName(const QString &value) { @@ -227,7 +244,7 @@ void DialogPointFromCircleAndTangent::ChosenObject(quint32 id, const SceneObject //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::PointChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxCircleCenter) == getCurrentObjectId(ui->comboBoxTangentPoint)) { flagError = false; @@ -236,7 +253,7 @@ void DialogPointFromCircleAndTangent::PointChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelCircleCenter, color); ChangeColor(ui->labelTangentPoint, color); @@ -246,16 +263,7 @@ void DialogPointFromCircleAndTangent::PointChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::DeployCircleRadiusTextEdit() { - DeployFormula(ui->plainTextEditRadius, ui->pushButtonGrowRadius, formulaBaseHeightCircleRadius); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPointFromCircleAndTangent::CircleRadiusChanged() -{ - labelEditFormula = ui->labelEditRadius; - labelResultCalculation = ui->labelResultCircleRadius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagCircleRadius, ui->plainTextEditRadius, timerCircleRadius, postfix); + DeployFormula(this, ui->plainTextEditRadius, ui->pushButtonGrowRadius, formulaBaseHeightCircleRadius); } //--------------------------------------------------------------------------------------------------------------------- @@ -275,15 +283,19 @@ void DialogPointFromCircleAndTangent::FXCircleRadius() //--------------------------------------------------------------------------------------------------------------------- void DialogPointFromCircleAndTangent::EvalCircleRadius() { - labelEditFormula = ui->labelEditRadius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal radius = Eval(ui->plainTextEditRadius->toPlainText(), flagCircleRadius, - ui->labelResultCircleRadius, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditRadius->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditRadius; + formulaData.labelResult = ui->labelResultCircleRadius; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + const qreal radius = Eval(formulaData, flagCircleRadius); if (radius < 0) { flagCircleRadius = false; - ChangeColor(labelEditFormula, Qt::red); + ChangeColor(ui->labelEditRadius, errorColor); ui->labelResultCircleRadius->setText(tr("Error")); ui->labelResultCircleRadius->setToolTip(tr("Radius can't be negative")); @@ -318,15 +330,3 @@ void DialogPointFromCircleAndTangent::closeEvent(QCloseEvent *event) ui->plainTextEditRadius->blockSignals(true); DialogTool::closeEvent(event); } - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPointFromCircleAndTangent::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagFormula && flagName && flagError && flagCircleRadius); - // In case dialog hasn't apply button - if ( bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h index 52b2a302c..990ceef4e 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.h @@ -49,9 +49,10 @@ class DialogPointFromCircleAndTangent : public DialogTool Q_OBJECT public: - DialogPointFromCircleAndTangent(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogPointFromCircleAndTangent(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); ~DialogPointFromCircleAndTangent(); + QString GetPointName() const; void SetPointName(const QString &value); quint32 GetCircleCenterId() const; @@ -71,7 +72,6 @@ public slots: void PointChanged(); void DeployCircleRadiusTextEdit(); - void CircleRadiusChanged(); void FXCircleRadius(); void EvalCircleRadius(); @@ -82,17 +82,26 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; - virtual void CheckState() final; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPointFromCircleAndTangent) Ui::DialogPointFromCircleAndTangent *ui; - bool flagCircleRadius; - QTimer *timerCircleRadius; - QString circleRadius; - int formulaBaseHeightCircleRadius; + QTimer* timerCircleRadius; + QString circleRadius; + int formulaBaseHeightCircleRadius; + QString pointName; + bool flagCircleRadius; + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointFromCircleAndTangent::IsValid() const +{ + return flagCircleRadius && flagName && flagError; +} + #endif // DIALOGPOINTFROMCIRCLEANDTANGENT_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp index c48f75373..8a0eab1e2 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp @@ -37,9 +37,11 @@ #include #include #include +#include #include #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/visualization.h" #include "../../visualization/line/vistoolpointofcontact.h" #include "../ifc/xml/vabstractpattern.h" @@ -55,30 +57,44 @@ * @param data container with data * @param parent parent widget */ -DialogPointOfContact::DialogPointOfContact(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogPointOfContact), radius(QString()), formulaBaseHeight(0) +DialogPointOfContact::DialogPointOfContact(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfContact), + radius(), + formulaBaseHeight(0), + pointName(), + timerFormula(new QTimer(this)), + flagFormula(false), + flagName(true), + flagError(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogPointOfContact::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; this->formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); FillComboBoxPoints(ui->comboBoxCenter); connect(ui->toolButtonExprRadius, &QPushButton::clicked, this, &DialogPointOfContact::FXRadius); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfContact::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogPointOfContact::FormulaTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogPointOfContact::DeployFormulaTextEdit); connect(ui->comboBoxFirstPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogPointOfContact::PointNameChanged); @@ -97,9 +113,9 @@ DialogPointOfContact::~DialogPointOfContact() } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfContact::FormulaTextChanged() +QString DialogPointOfContact::GetPointName() const { - this->FormulaChangedPlainText(); + return pointName; } //--------------------------------------------------------------------------------------------------------------------- @@ -110,7 +126,7 @@ void DialogPointOfContact::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxSecondPoint)); set.insert(getCurrentObjectId(ui->comboBoxCenter)); - QColor color = okColor; + QColor color; if (set.size() != 3) { flagError = false; @@ -119,7 +135,7 @@ void DialogPointOfContact::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); @@ -141,6 +157,19 @@ void DialogPointOfContact::FXRadius() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogPointOfContact::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfContact::ShowVisualization() { @@ -150,7 +179,7 @@ void DialogPointOfContact::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfContact::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -243,7 +272,7 @@ void DialogPointOfContact::closeEvent(QCloseEvent *event) * @brief SetSecondPoint set id second point * @param value id */ -void DialogPointOfContact::SetSecondPoint(const quint32 &value) +void DialogPointOfContact::SetSecondPoint(quint32 value) { setCurrentPointId(ui->comboBoxSecondPoint, value); @@ -257,7 +286,7 @@ void DialogPointOfContact::SetSecondPoint(const quint32 &value) * @brief SetFirstPoint set id first point * @param value id */ -void DialogPointOfContact::SetFirstPoint(const quint32 &value) +void DialogPointOfContact::SetFirstPoint(quint32 value) { setCurrentPointId(ui->comboBoxFirstPoint, value); @@ -271,7 +300,7 @@ void DialogPointOfContact::SetFirstPoint(const quint32 &value) * @brief SetCenter set id of center point * @param value id */ -void DialogPointOfContact::setCenter(const quint32 &value) +void DialogPointOfContact::setCenter(quint32 value) { setCurrentPointId(ui->comboBoxCenter, value); diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.h b/src/libs/vtools/dialogs/tools/dialogpointofcontact.h index 46664f548..84b6b71cc 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.h @@ -51,34 +51,32 @@ class DialogPointOfContact : public DialogTool { Q_OBJECT public: - DialogPointOfContact(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogPointOfContact(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogPointOfContact() override; + QString GetPointName() const; void SetPointName(const QString &value); QString getRadius() const; void setRadius(const QString &value); quint32 getCenter() const; - void setCenter(const quint32 &value); + void setCenter(quint32 value); quint32 GetFirstPoint() const; - void SetFirstPoint(const quint32 &value); + void SetFirstPoint(quint32 value); quint32 GetSecondPoint() const; - void SetSecondPoint(const quint32 &value); + void SetSecondPoint(quint32 value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; /** * @brief DeployFormulaTextEdit grow or shrink formula input */ void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); virtual void PointNameChanged() override; void FXRadius(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -86,6 +84,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPointOfContact) @@ -93,10 +92,24 @@ private: Ui::DialogPointOfContact *ui; /** @brief radius radius of arc */ - QString radius; + QString radius; /** @brief formulaBaseHeight base height defined by dialogui */ - int formulaBaseHeight; + int formulaBaseHeight; + + QString pointName; + + QTimer *timerFormula; + + bool flagFormula; + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointOfContact::IsValid() const +{ + return flagFormula && flagName && flagError; +} + #endif // DIALOGPOINTOFCONTACT_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp index 585d6c64e..31ce0e6ef 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp @@ -48,23 +48,29 @@ * @param data container with data * @param parent parent widget */ -DialogPointOfIntersection::DialogPointOfIntersection(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogPointOfIntersection) +DialogPointOfIntersection::DialogPointOfIntersection(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfIntersection), + pointName(), + flagName(true), + flagError(true) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; InitOkCancelApply(ui); - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfIntersection::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxFirstPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogPointOfIntersection::PointNameChanged); connect(ui->comboBoxSecondPoint, QOverload::of(&QComboBox::currentIndexChanged), @@ -80,12 +86,18 @@ DialogPointOfIntersection::~DialogPointOfIntersection() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogPointOfIntersection::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSecondPointId set id of second point * @param value id */ -void DialogPointOfIntersection::SetSecondPointId(const quint32 &value) +void DialogPointOfIntersection::SetSecondPointId(quint32 value) { setCurrentPointId(ui->comboBoxSecondPoint, value); @@ -154,7 +166,7 @@ void DialogPointOfIntersection::SaveData() //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersection::PointNameChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxFirstPoint) == getCurrentObjectId(ui->comboBoxSecondPoint)) { flagError = false; @@ -163,7 +175,7 @@ void DialogPointOfIntersection::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); @@ -181,7 +193,7 @@ void DialogPointOfIntersection::ShowVisualization() * @brief SetFirstPointId set id of first point * @param value id */ -void DialogPointOfIntersection::SetFirstPointId(const quint32 &value) +void DialogPointOfIntersection::SetFirstPointId(quint32 value) { setCurrentPointId(ui->comboBoxFirstPoint, value); diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersection.h b/src/libs/vtools/dialogs/tools/dialogpointofintersection.h index 8fec35c11..4f68d602b 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersection.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersection.h @@ -50,16 +50,17 @@ class DialogPointOfIntersection : public DialogTool { Q_OBJECT public: - DialogPointOfIntersection(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogPointOfIntersection(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogPointOfIntersection() override; + QString GetPointName() const; void SetPointName(const QString &value); quint32 GetFirstPointId() const; - void SetFirstPointId(const quint32 &value); + void SetFirstPointId(quint32 value); quint32 GetSecondPointId() const; - void SetSecondPointId(const quint32 &value); + void SetSecondPointId(quint32 value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; virtual void PointNameChanged() override; @@ -69,11 +70,23 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPointOfIntersection) /** @brief ui keeps information about user interface */ Ui::DialogPointOfIntersection *ui; + + QString pointName; + + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointOfIntersection::IsValid() const +{ + return flagName && flagError; +} + #endif // DIALOGPOINTOFINTERSECTION_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp index c7f067fc9..756d89b50 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp @@ -41,25 +41,30 @@ #include "ui_dialogpointofintersectionarcs.h" //--------------------------------------------------------------------------------------------------------------------- -DialogPointOfIntersectionArcs::DialogPointOfIntersectionArcs(const VContainer *data, const quint32 &toolId, - QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogPointOfIntersectionArcs) +DialogPointOfIntersectionArcs::DialogPointOfIntersectionArcs(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfIntersectionArcs), + pointName(), + flagName(true), + flagError(true) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; InitOkCancelApply(ui); - DialogTool::CheckState(); FillComboBoxArcs(ui->comboBoxArc1); FillComboBoxArcs(ui->comboBoxArc2); FillComboBoxCrossCirclesPoints(ui->comboBoxResult); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfIntersectionArcs::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxArc1, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogPointOfIntersectionArcs::ArcChanged); connect(ui->comboBoxArc1, QOverload::of(&QComboBox::currentIndexChanged), @@ -74,6 +79,12 @@ DialogPointOfIntersectionArcs::~DialogPointOfIntersectionArcs() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogPointOfIntersectionArcs::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionArcs::SetPointName(const QString &value) { @@ -88,7 +99,7 @@ quint32 DialogPointOfIntersectionArcs::GetFirstArcId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionArcs::SetFirstArcId(const quint32 &value) +void DialogPointOfIntersectionArcs::SetFirstArcId(quint32 value) { setCurrentArcId(ui->comboBoxArc1, value); @@ -104,7 +115,7 @@ quint32 DialogPointOfIntersectionArcs::GetSecondArcId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionArcs::SetSecondArcId(const quint32 &value) +void DialogPointOfIntersectionArcs::SetSecondArcId(quint32 value) { setCurrentArcId(ui->comboBoxArc2, value); @@ -120,7 +131,7 @@ CrossCirclesPoint DialogPointOfIntersectionArcs::GetCrossArcPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionArcs::SetCrossArcPoint(const CrossCirclesPoint &p) +void DialogPointOfIntersectionArcs::SetCrossArcPoint(CrossCirclesPoint p) { const qint32 index = ui->comboBoxResult->findData(static_cast(p)); if (index != -1) @@ -175,7 +186,7 @@ void DialogPointOfIntersectionArcs::ChosenObject(quint32 id, const SceneObject & //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionArcs::ArcChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxArc1) == getCurrentObjectId(ui->comboBoxArc2)) { flagError = false; @@ -184,7 +195,7 @@ void DialogPointOfIntersectionArcs::ArcChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelArc1, color); ChangeColor(ui->labelArc2, color); diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.h b/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.h index 0b799913f..b506f5998 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.h @@ -49,19 +49,20 @@ class DialogPointOfIntersectionArcs : public DialogTool Q_OBJECT public: - DialogPointOfIntersectionArcs(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogPointOfIntersectionArcs(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogPointOfIntersectionArcs() override; + QString GetPointName() const; void SetPointName(const QString &value); quint32 GetFirstArcId() const; - void SetFirstArcId(const quint32 &value); + void SetFirstArcId(quint32 value); quint32 GetSecondArcId() const; - void SetSecondArcId(const quint32 &value); + void SetSecondArcId(quint32 value); CrossCirclesPoint GetCrossArcPoint() const; - void SetCrossArcPoint(const CrossCirclesPoint &p); + void SetCrossArcPoint(CrossCirclesPoint p); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; @@ -73,11 +74,23 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPointOfIntersectionArcs) Ui::DialogPointOfIntersectionArcs *ui; + + QString pointName; + + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointOfIntersectionArcs::IsValid() const +{ + return flagName && flagError; +} + #endif // DIALOGPOINTOFINTERSECTIONARCS_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp index d04f06a4a..590c985ee 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp @@ -42,6 +42,7 @@ #include #include "../vpatterndb/vtranslatevars.h" +#include "../vpatterndb/vcontainer.h" #include "../../visualization/visualization.h" #include "../../visualization/line/vistoolpointofintersectioncircles.h" #include "../ifc/xml/vdomdocument.h" @@ -51,40 +52,51 @@ #include "ui_dialogpointofintersectioncircles.h" //--------------------------------------------------------------------------------------------------------------------- -DialogPointOfIntersectionCircles::DialogPointOfIntersectionCircles(const VContainer *data, const quint32 &toolId, +DialogPointOfIntersectionCircles::DialogPointOfIntersectionCircles(const VContainer *data, quint32 toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogPointOfIntersectionCircles), flagCircle1Radius(false), - flagCircle2Radius(false), timerCircle1Radius(nullptr), timerCircle2Radius(nullptr), circle1Radius(), - circle2Radius(), formulaBaseHeightCircle1Radius(0), formulaBaseHeightCircle2Radius(0) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfIntersectionCircles), + timerCircle1Radius(new QTimer(this)), + timerCircle2Radius(new QTimer(this)), + circle1Radius(), + circle2Radius(), + formulaBaseHeightCircle1Radius(0), + formulaBaseHeightCircle2Radius(0), + pointName(), + flagCircle1Radius(false), + flagCircle2Radius(false), + flagName(true), + flagError(true) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; - plainTextEditFormula = ui->plainTextEditCircle1Radius; this->formulaBaseHeightCircle1Radius = ui->plainTextEditCircle1Radius->height(); this->formulaBaseHeightCircle2Radius = ui->plainTextEditCircle2Radius->height(); ui->plainTextEditCircle1Radius->installEventFilter(this); ui->plainTextEditCircle2Radius->installEventFilter(this); - timerCircle1Radius = new QTimer(this); + timerCircle1Radius->setSingleShot(true); connect(timerCircle1Radius, &QTimer::timeout, this, &DialogPointOfIntersectionCircles::EvalCircle1Radius); - timerCircle2Radius = new QTimer(this); + timerCircle2Radius->setSingleShot(true); connect(timerCircle2Radius, &QTimer::timeout, this, &DialogPointOfIntersectionCircles::EvalCircle2Radius); InitOkCancelApply(ui); - CheckState(); FillComboBoxPoints(ui->comboBoxCircle1Center); FillComboBoxPoints(ui->comboBoxCircle2Center); FillComboBoxCrossCirclesPoints(ui->comboBoxResult); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfIntersectionCircles::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxCircle1Center, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogPointOfIntersectionCircles::PointChanged); connect(ui->comboBoxCircle2Center, QOverload::of(&QComboBox::currentIndexChanged), @@ -95,10 +107,15 @@ DialogPointOfIntersectionCircles::DialogPointOfIntersectionCircles(const VContai connect(ui->toolButtonExprCircle2Radius, &QPushButton::clicked, this, &DialogPointOfIntersectionCircles::FXCircle2Radius); - connect(ui->plainTextEditCircle1Radius, &QPlainTextEdit::textChanged, this, - &DialogPointOfIntersectionCircles::Circle1RadiusChanged); - connect(ui->plainTextEditCircle2Radius, &QPlainTextEdit::textChanged, this, - &DialogPointOfIntersectionCircles::Circle2RadiusChanged); + connect(ui->plainTextEditCircle1Radius, &QPlainTextEdit::textChanged, this, [this]() + { + timerCircle1Radius->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditCircle2Radius, &QPlainTextEdit::textChanged, this, [this]() + { + timerCircle2Radius->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowCircle1Radius, &QPushButton::clicked, this, &DialogPointOfIntersectionCircles::DeployCircle1RadiusTextEdit); @@ -114,6 +131,12 @@ DialogPointOfIntersectionCircles::~DialogPointOfIntersectionCircles() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogPointOfIntersectionCircles::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::SetPointName(const QString &value) { @@ -266,7 +289,7 @@ void DialogPointOfIntersectionCircles::ChosenObject(quint32 id, const SceneObjec //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::PointChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxCircle1Center) == getCurrentObjectId(ui->comboBoxCircle2Center)) { flagError = false; @@ -275,7 +298,7 @@ void DialogPointOfIntersectionCircles::PointChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelCircle1Center, color); ChangeColor(ui->labelCircle1Center, color); @@ -285,31 +308,13 @@ void DialogPointOfIntersectionCircles::PointChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::DeployCircle1RadiusTextEdit() { - DeployFormula(ui->plainTextEditCircle1Radius, ui->pushButtonGrowCircle1Radius, formulaBaseHeightCircle1Radius); + DeployFormula(this, ui->plainTextEditCircle1Radius, ui->pushButtonGrowCircle1Radius, formulaBaseHeightCircle1Radius); } //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::DeployCircle2RadiusTextEdit() { - DeployFormula(ui->plainTextEditCircle2Radius, ui->pushButtonGrowCircle2Radius, formulaBaseHeightCircle2Radius); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCircles::Circle1RadiusChanged() -{ - labelEditFormula = ui->labelEditCircle1Radius; - labelResultCalculation = ui->labelResultCircle1Radius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagCircle1Radius, ui->plainTextEditCircle1Radius, timerCircle1Radius, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCircles::Circle2RadiusChanged() -{ - labelEditFormula = ui->labelEditCircle2Radius; - labelResultCalculation = ui->labelResultCircle2Radius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagCircle2Radius, ui->plainTextEditCircle2Radius, timerCircle2Radius, postfix); + DeployFormula(this, ui->plainTextEditCircle2Radius, ui->pushButtonGrowCircle2Radius, formulaBaseHeightCircle2Radius); } //--------------------------------------------------------------------------------------------------------------------- @@ -343,15 +348,19 @@ void DialogPointOfIntersectionCircles::FXCircle2Radius() //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::EvalCircle1Radius() { - labelEditFormula = ui->labelEditCircle1Radius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal radius = Eval(ui->plainTextEditCircle1Radius->toPlainText(), flagCircle1Radius, - ui->labelResultCircle1Radius, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditCircle1Radius->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditCircle1Radius; + formulaData.labelResult = ui->labelResultCircle1Radius; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + const qreal radius = Eval(formulaData, flagCircle1Radius); if (radius < 0) { flagCircle2Radius = false; - ChangeColor(labelEditFormula, Qt::red); + ChangeColor(ui->labelEditCircle1Radius, errorColor); ui->labelResultCircle1Radius->setText(tr("Error")); ui->labelResultCircle1Radius->setToolTip(tr("Radius can't be negative")); @@ -362,15 +371,19 @@ void DialogPointOfIntersectionCircles::EvalCircle1Radius() //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCircles::EvalCircle2Radius() { - labelEditFormula = ui->labelEditCircle2Radius; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal radius = Eval(ui->plainTextEditCircle2Radius->toPlainText(), flagCircle2Radius, - ui->labelResultCircle2Radius, postfix); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditCircle2Radius->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditCircle2Radius; + formulaData.labelResult = ui->labelResultCircle1Radius; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + const qreal radius = Eval(formulaData, flagCircle2Radius); if (radius < 0) { flagCircle2Radius = false; - ChangeColor(labelEditFormula, Qt::red); + ChangeColor(ui->labelEditCircle2Radius, errorColor); ui->labelResultCircle2Radius->setText(tr("Error")); ui->labelResultCircle2Radius->setToolTip(tr("Radius can't be negative")); @@ -407,15 +420,3 @@ void DialogPointOfIntersectionCircles::closeEvent(QCloseEvent *event) ui->plainTextEditCircle2Radius->blockSignals(true); DialogTool::closeEvent(event); } - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCircles::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagFormula && flagName && flagError && flagCircle1Radius && flagCircle2Radius); - // In case dialog hasn't apply button - if ( bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h index 4ff0a0c72..bf15d40a1 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.h @@ -49,9 +49,10 @@ class DialogPointOfIntersectionCircles : public DialogTool Q_OBJECT public: - DialogPointOfIntersectionCircles(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogPointOfIntersectionCircles(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogPointOfIntersectionCircles() override; + QString GetPointName() const; void SetPointName(const QString &value); quint32 GetFirstCircleCenterId() const; @@ -76,9 +77,6 @@ public slots: void DeployCircle1RadiusTextEdit(); void DeployCircle2RadiusTextEdit(); - void Circle1RadiusChanged(); - void Circle2RadiusChanged(); - void FXCircle1Radius(); void FXCircle2Radius(); @@ -92,24 +90,34 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; - virtual void CheckState() final; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPointOfIntersectionCircles) Ui::DialogPointOfIntersectionCircles *ui; - bool flagCircle1Radius; - bool flagCircle2Radius; + QTimer *timerCircle1Radius; + QTimer *timerCircle2Radius; - QTimer *timerCircle1Radius; - QTimer *timerCircle2Radius; + QString circle1Radius; + QString circle2Radius; - QString circle1Radius; - QString circle2Radius; + int formulaBaseHeightCircle1Radius; + int formulaBaseHeightCircle2Radius; - int formulaBaseHeightCircle1Radius; - int formulaBaseHeightCircle2Radius; + QString pointName; + + bool flagCircle1Radius; + bool flagCircle2Radius; + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointOfIntersectionCircles::IsValid() const +{ + return flagCircle1Radius && flagCircle2Radius && flagName && flagError; +} + #endif // DIALOGPOINTOFINTERSECTIONCIRCLES_H diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp index f3f400cac..33c94990f 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp @@ -42,27 +42,32 @@ #include "ui_dialogpointofintersectioncurves.h" //--------------------------------------------------------------------------------------------------------------------- -DialogPointOfIntersectionCurves::DialogPointOfIntersectionCurves(const VContainer *data, const quint32 &toolId, +DialogPointOfIntersectionCurves::DialogPointOfIntersectionCurves(const VContainer *data, quint32 toolId, QWidget *parent) - :DialogTool(data, toolId, parent), - ui(new Ui::DialogPointOfIntersectionCurves) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogPointOfIntersectionCurves), + pointName(), + flagName(false), + flagError(false) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; InitOkCancelApply(ui); - CheckState(); FillComboBoxCurves(ui->comboBoxCurve1); FillComboBoxCurves(ui->comboBoxCurve2); FillComboBoxVCrossCurvesPoint(ui->comboBoxVCorrection); FillComboBoxHCrossCurvesPoint(ui->comboBoxHCorrection); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfIntersectionCurves::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxCurve1, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogPointOfIntersectionCurves::CurveChanged); connect(ui->comboBoxCurve2, QOverload::of(&QComboBox::currentIndexChanged), @@ -77,6 +82,12 @@ DialogPointOfIntersectionCurves::~DialogPointOfIntersectionCurves() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogPointOfIntersectionCurves::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCurves::SetPointName(const QString &value) { @@ -91,7 +102,7 @@ quint32 DialogPointOfIntersectionCurves::GetFirstCurveId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCurves::SetFirstCurveId(const quint32 &value) +void DialogPointOfIntersectionCurves::SetFirstCurveId(quint32 value) { setCurrentCurveId(ui->comboBoxCurve1, value); @@ -107,7 +118,7 @@ quint32 DialogPointOfIntersectionCurves::GetSecondCurveId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCurves::SetSecondCurveId(const quint32 &value) +void DialogPointOfIntersectionCurves::SetSecondCurveId(quint32 value) { setCurrentCurveId(ui->comboBoxCurve2, value); @@ -123,7 +134,7 @@ VCrossCurvesPoint DialogPointOfIntersectionCurves::GetVCrossPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCurves::SetVCrossPoint(const VCrossCurvesPoint &vP) +void DialogPointOfIntersectionCurves::SetVCrossPoint(VCrossCurvesPoint vP) { auto index = ui->comboBoxVCorrection->findData(static_cast(vP)); if (index != -1) @@ -143,7 +154,7 @@ HCrossCurvesPoint DialogPointOfIntersectionCurves::GetHCrossPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCurves::SetHCrossPoint(const HCrossCurvesPoint &hP) +void DialogPointOfIntersectionCurves::SetHCrossPoint(HCrossCurvesPoint hP) { auto index = ui->comboBoxHCorrection->findData(static_cast(hP)); if (index != -1) @@ -219,22 +230,10 @@ void DialogPointOfIntersectionCurves::SaveData() point->RefreshGeometry(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogPointOfIntersectionCurves::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagName && flagError); - // In case dialog hasn't apply button - if ( bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} - //--------------------------------------------------------------------------------------------------------------------- void DialogPointOfIntersectionCurves::CurveChanged() { - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxCurve1) == getCurrentObjectId(ui->comboBoxCurve2)) { flagError = false; @@ -243,7 +242,7 @@ void DialogPointOfIntersectionCurves::CurveChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelCurve1, color); ChangeColor(ui->labelCurve2, color); diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.h b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.h index b34174876..cc24e2a07 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.h +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.h @@ -48,22 +48,23 @@ class DialogPointOfIntersectionCurves : public DialogTool Q_OBJECT public: - explicit DialogPointOfIntersectionCurves(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogPointOfIntersectionCurves(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogPointOfIntersectionCurves() override; + QString GetPointName() const; void SetPointName(const QString &value); quint32 GetFirstCurveId() const; - void SetFirstCurveId(const quint32 &value); + void SetFirstCurveId(quint32 value); quint32 GetSecondCurveId() const; - void SetSecondCurveId(const quint32 &value); + void SetSecondCurveId(quint32 value); VCrossCurvesPoint GetVCrossPoint() const; - void SetVCrossPoint(const VCrossCurvesPoint &vP); + void SetVCrossPoint(VCrossCurvesPoint vP); HCrossCurvesPoint GetHCrossPoint() const; - void SetHCrossPoint(const HCrossCurvesPoint &hP); + void SetHCrossPoint(HCrossCurvesPoint hP); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; @@ -75,7 +76,7 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; - virtual void CheckState() final; + virtual bool IsValid() const final; private slots: void CurveChanged(); @@ -84,6 +85,17 @@ private: Q_DISABLE_COPY(DialogPointOfIntersectionCurves) Ui::DialogPointOfIntersectionCurves *ui; + + QString pointName; + + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPointOfIntersectionCurves::IsValid() const +{ + return flagName && flagError; +} + #endif // DIALOGPOINTOFINTERSECTIONCURVES_H diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 018f7ad21..4ee6f49cf 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -64,17 +64,19 @@ #include "ui_dialogrotation.h" //--------------------------------------------------------------------------------------------------------------------- -DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogRotation), - flagAngle(false), - timerAngle(nullptr), + timerAngle(new QTimer(this)), formulaAngle(), formulaBaseHeightAngle(0), objects(), stage1(true), m_suffix(), - m_firstRelease(false) + m_firstRelease(false), + flagAngle(false), + flagName(false), + flagError(false) { ui->setupUi(this); @@ -83,19 +85,19 @@ DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QW ui->lineEditSuffix->setText(qApp->getCurrentDocument()->GenerateSuffix()); - timerAngle = new QTimer(this); + timerAngle->setSingleShot(true); connect(timerAngle, &QTimer::timeout, this, &DialogRotation::EvalAngle); InitOkCancelApply(ui); FillComboBoxPoints(ui->comboBoxOriginPoint); - flagName = true; - CheckState(); - connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogRotation::SuffixChanged); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogRotation::FXAngle); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogRotation::AngleChanged); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerAngle->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogRotation::DeployAngleTextEdit); connect(ui->comboBoxOriginPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogRotation::PointChanged); @@ -116,7 +118,7 @@ quint32 DialogRotation::GetOrigPointId() const } //--------------------------------------------------------------------------------------------------------------------- -void DialogRotation::SetOrigPointId(const quint32 &value) +void DialogRotation::SetOrigPointId(quint32 value) { ChangeCurrentData(ui->comboBoxOriginPoint, value); VisToolRotation *operation = qobject_cast(vis); @@ -291,15 +293,7 @@ void DialogRotation::SelectedObject(bool selected, quint32 object, quint32 tool) //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::DeployAngleTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeightAngle); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogRotation::AngleChanged() -{ - labelEditFormula = ui->labelEditAngle; - labelResultCalculation = ui->labelResultAngle; - ValFormulaChanged(flagAngle, ui->plainTextEditFormula, timerAngle, degreeSymbol); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeightAngle); } //--------------------------------------------------------------------------------------------------------------------- @@ -326,7 +320,7 @@ void DialogRotation::SuffixChanged() if (suffix.isEmpty()) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -342,7 +336,7 @@ void DialogRotation::SuffixChanged() if (not rx.match(name).hasMatch() || not data->IsUnique(name)) { flagName = false; - ChangeColor(ui->labelSuffix, Qt::red); + ChangeColor(ui->labelSuffix, errorColor); CheckState(); return; } @@ -351,20 +345,11 @@ void DialogRotation::SuffixChanged() } flagName = true; - ChangeColor(ui->labelSuffix, okColor); + ChangeColor(ui->labelSuffix, OkColor(this)); } CheckState(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogRotation::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagAngle && flagName && flagError); - SCASSERT(bApply != nullptr) - bApply->setEnabled(bOk->isEnabled()); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::ShowVisualization() { @@ -396,7 +381,7 @@ void DialogRotation::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::PointChanged() { - QColor color = okColor; + QColor color; if (objects.contains(getCurrentObjectId(ui->comboBoxOriginPoint))) { flagError = false; @@ -405,7 +390,7 @@ void DialogRotation::PointChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelOriginPoint, color); CheckState(); @@ -414,6 +399,13 @@ void DialogRotation::PointChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogRotation::EvalAngle() { - labelEditFormula = ui->labelEditAngle; - Eval(ui->plainTextEditFormula->toPlainText(), flagAngle, ui->labelResultAngle, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle; + formulaData.labelResult = ui->labelResultAngle; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagAngle); } diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.h b/src/libs/vtools/dialogs/tools/dialogrotation.h index b45f74227..2a4c57e98 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.h +++ b/src/libs/vtools/dialogs/tools/dialogrotation.h @@ -49,11 +49,11 @@ class DialogRotation : public DialogTool { Q_OBJECT public: - explicit DialogRotation(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogRotation(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogRotation(); quint32 GetOrigPointId() const; - void SetOrigPointId(const quint32 &value); + void SetOrigPointId(quint32 value); QString GetAngle() const; void SetAngle(const QString &value); @@ -72,17 +72,17 @@ public slots: private slots: /** @brief DeployAngleTextEdit grow or shrink formula input */ void DeployAngleTextEdit(); - void AngleChanged(); void FXAngle(); void SuffixChanged(); + void EvalAngle(); protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private slots: void PointChanged(); @@ -91,9 +91,6 @@ private: Q_DISABLE_COPY(DialogRotation) Ui::DialogRotation *ui; - /** @brief flagAngle true if value of angle is correct */ - bool flagAngle; - /** @brief timerAngle timer of check formula of angle */ QTimer *timerAngle; @@ -111,7 +108,16 @@ private: bool m_firstRelease; - void EvalAngle(); + /** @brief flagAngle true if value of angle is correct */ + bool flagAngle; + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogRotation::IsValid() const +{ + return flagAngle && flagName && flagError; +} + #endif // DIALOGROTATION_H diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp index 448240dbe..d424fa5cc 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include "../vpatterndb/vtranslatevars.h" @@ -56,23 +57,29 @@ * @param data container with data * @param parent parent widget */ -DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogShoulderPoint), formula(QString()), - formulaBaseHeight(0) +DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogShoulderPoint), + formula(), + formulaBaseHeight(0), + timerFormula(new QTimer(this)), + pointName(), + flagFormula(false), + flagName(true), + flagError(true) { ui->setupUi(this); + timerFormula->setSingleShot(true); + connect(timerFormula, &QTimer::timeout, this, &DialogShoulderPoint::EvalFormula); + ui->lineEditNamePoint->setClearButtonEnabled(true); - InitFormulaUI(ui); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; - this->formulaBaseHeight = ui->plainTextEditFormula->height(); + formulaBaseHeight = ui->plainTextEditFormula->height(); ui->plainTextEditFormula->installEventFilter(this); InitOkCancelApply(ui); - flagFormula = false; - DialogTool::CheckState(); FillComboBoxTypeLine(ui->comboBoxLineType, LineStylesPics()); FillComboBoxPoints(ui->comboBoxP1Line); @@ -81,8 +88,15 @@ DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, const quint32 & FillComboBoxLineColors(ui->comboBoxLineColor); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogShoulderPoint::FXLength); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogShoulderPoint::NamePointChanged); - connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogShoulderPoint::FormulaTextChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() + { + timerFormula->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogShoulderPoint::DeployFormulaTextEdit); connect(ui->comboBoxP1Line, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogShoulderPoint::PointNameChanged); @@ -94,12 +108,6 @@ DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, const quint32 & vis = new VisToolShoulderPoint(data); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogShoulderPoint::FormulaTextChanged() -{ - this->FormulaChangedPlainText(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogShoulderPoint::PointNameChanged() { @@ -108,7 +116,7 @@ void DialogShoulderPoint::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxP2Line)); set.insert(getCurrentObjectId(ui->comboBoxP3)); - QColor color = okColor; + QColor color; if (set.size() != 3) { flagError = false; @@ -117,7 +125,7 @@ void DialogShoulderPoint::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); @@ -139,6 +147,19 @@ void DialogShoulderPoint::FXLength() delete dialog; } +//--------------------------------------------------------------------------------------------------------------------- +void DialogShoulderPoint::EvalFormula() +{ + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormula->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormula; + formulaData.labelResult = ui->labelResultCalculation; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + + Eval(formulaData, flagFormula); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogShoulderPoint::ShowVisualization() { @@ -148,7 +169,7 @@ void DialogShoulderPoint::ShowVisualization() //--------------------------------------------------------------------------------------------------------------------- void DialogShoulderPoint::DeployFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); + DeployFormula(this, ui->plainTextEditFormula, ui->pushButtonGrowLength, formulaBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -157,6 +178,12 @@ DialogShoulderPoint::~DialogShoulderPoint() delete ui; } +//--------------------------------------------------------------------------------------------------------------------- +QString DialogShoulderPoint::GetPointName() const +{ + return pointName; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ChoosedObject gets id and type of selected object. Save right data and ignore wrong. diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h index acd8296ea..687a28fa0 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.h @@ -50,9 +50,10 @@ class DialogShoulderPoint : public DialogTool { Q_OBJECT public: - DialogShoulderPoint(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogShoulderPoint(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogShoulderPoint() override; + QString GetPointName() const; void SetPointName(const QString &value); QString GetTypeLine() const; @@ -78,12 +79,9 @@ public slots: * @brief DeployFormulaTextEdit grow or shrink formula input */ void DeployFormulaTextEdit(); - /** - * @brief FormulaTextChanged when formula text changes for validation and calc - */ - void FormulaTextChanged(); virtual void PointNameChanged() override; void FXLength(); + void EvalFormula(); protected: virtual void ShowVisualization() override; /** @@ -91,6 +89,7 @@ protected: */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogShoulderPoint) @@ -98,10 +97,24 @@ private: Ui::DialogShoulderPoint *ui; /** @brief formula formula */ - QString formula; + QString formula; /** @brief formulaBaseHeight base height defined by dialogui */ - int formulaBaseHeight; + int formulaBaseHeight; + + QTimer *timerFormula; + + QString pointName; + + bool flagFormula; + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogShoulderPoint::IsValid() const +{ + return flagFormula && flagName && flagError; +} + #endif // DIALOGSHOULDERPOINT_H diff --git a/src/libs/vtools/dialogs/tools/dialogsinglepoint.cpp b/src/libs/vtools/dialogs/tools/dialogsinglepoint.cpp index 12740208b..a18646e4c 100644 --- a/src/libs/vtools/dialogs/tools/dialogsinglepoint.cpp +++ b/src/libs/vtools/dialogs/tools/dialogsinglepoint.cpp @@ -42,8 +42,12 @@ * @param data container with data * @param parent parent widget */ -DialogSinglePoint::DialogSinglePoint(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogSinglePoint), point(QPointF()) +DialogSinglePoint::DialogSinglePoint(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogSinglePoint), + point(), + pointName(), + flagName(true) { ui->setupUi(this); @@ -51,13 +55,13 @@ DialogSinglePoint::DialogSinglePoint(const VContainer *data, const quint32 &tool ui->doubleSpinBoxX->setRange(0, qApp->fromPixel(SceneSize)); ui->doubleSpinBoxY->setRange(0, qApp->fromPixel(SceneSize)); - labelEditNamePoint = ui->labelEditName; InitOkCancel(ui); - flagName = true; - DialogTool::CheckState(); - - connect(ui->lineEditName, &QLineEdit::textChanged, this, &DialogTool::NamePointChanged); + connect(ui->lineEditName, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditName, ui->labelEditName, pointName, this->data, flagName); + CheckState(); + }); } //--------------------------------------------------------------------------------------------------------------------- @@ -118,3 +122,9 @@ QPointF DialogSinglePoint::GetPoint() const { return point; } + +//--------------------------------------------------------------------------------------------------------------------- +QString DialogSinglePoint::GetPointName() const +{ + return pointName; +} diff --git a/src/libs/vtools/dialogs/tools/dialogsinglepoint.h b/src/libs/vtools/dialogs/tools/dialogsinglepoint.h index a2ffa6f67..15231dc32 100644 --- a/src/libs/vtools/dialogs/tools/dialogsinglepoint.h +++ b/src/libs/vtools/dialogs/tools/dialogsinglepoint.h @@ -50,12 +50,14 @@ class DialogSinglePoint : public DialogTool { Q_OBJECT public: - DialogSinglePoint(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogSinglePoint(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogSinglePoint() override; void SetData(const QString &name, const QPointF &point); QPointF GetPoint()const; + QString GetPointName() const; + public slots: void mousePress(const QPointF &scenePos); protected: @@ -63,6 +65,7 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogSinglePoint) @@ -70,7 +73,17 @@ private: Ui::DialogSinglePoint *ui; /** @brief point data of point */ - QPointF point; + QPointF point; + + QString pointName; + + bool flagName; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogSinglePoint::IsValid() const +{ + return flagName; +} + #endif // DIALOGSINGLEPOINT_H diff --git a/src/libs/vtools/dialogs/tools/dialogspline.cpp b/src/libs/vtools/dialogs/tools/dialogspline.cpp index d0e645b7f..c5ad3bbfc 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogspline.cpp @@ -63,7 +63,7 @@ * @param data container with data * @param parent parent widget */ -DialogSpline::DialogSpline(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogSpline::DialogSpline(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogSpline), spl(), @@ -79,12 +79,11 @@ DialogSpline::DialogSpline(const VContainer *data, const quint32 &toolId, QWidge flagAngle1(false), flagAngle2(false), flagLength1(false), - flagLength2(false) + flagLength2(false), + flagError(false) { ui->setupUi(this); - plainTextEditFormula = ui->plainTextEditAngle1F; - formulaBaseHeightAngle1 = ui->plainTextEditAngle1F->height(); formulaBaseHeightAngle2 = ui->plainTextEditAngle2F->height(); formulaBaseHeightLength1 = ui->plainTextEditLength1F->height(); @@ -95,6 +94,11 @@ DialogSpline::DialogSpline(const VContainer *data, const quint32 &toolId, QWidge ui->plainTextEditLength1F->installEventFilter(this); ui->plainTextEditLength2F->installEventFilter(this); + timerAngle1->setSingleShot(true); + timerAngle2->setSingleShot(true); + timerLength1->setSingleShot(true); + timerLength2->setSingleShot(true); + connect(timerAngle1, &QTimer::timeout, this, &DialogSpline::EvalAngle1); connect(timerAngle2, &QTimer::timeout, this, &DialogSpline::EvalAngle2); connect(timerLength1, &QTimer::timeout, this, &DialogSpline::EvalLength1); @@ -109,8 +113,6 @@ DialogSpline::DialogSpline(const VContainer *data, const quint32 &toolId, QWidge ui->doubleSpinBoxApproximationScale->setMaximum(maxCurveApproximationScale); - CheckState(); - connect(ui->comboBoxP1, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogSpline::PointNameChanged); connect(ui->comboBoxP4, QOverload::of(&QComboBox::currentIndexChanged), @@ -121,10 +123,25 @@ DialogSpline::DialogSpline(const VContainer *data, const quint32 &toolId, QWidge connect(ui->toolButtonExprLength1, &QPushButton::clicked, this, &DialogSpline::FXLength1); connect(ui->toolButtonExprLength2, &QPushButton::clicked, this, &DialogSpline::FXLength2); - connect(ui->plainTextEditAngle1F, &QPlainTextEdit::textChanged, this, &DialogSpline::Angle1Changed); - connect(ui->plainTextEditAngle2F, &QPlainTextEdit::textChanged, this, &DialogSpline::Angle2Changed); - connect(ui->plainTextEditLength1F, &QPlainTextEdit::textChanged, this, &DialogSpline::Length1Changed); - connect(ui->plainTextEditLength2F, &QPlainTextEdit::textChanged, this, &DialogSpline::Length2Changed); + connect(ui->plainTextEditAngle1F, &QPlainTextEdit::textChanged, this, [this]() + { + timerAngle1->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditAngle2F, &QPlainTextEdit::textChanged, this, [this]() + { + timerAngle2->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditLength1F, &QPlainTextEdit::textChanged, this, [this]() + { + timerLength1->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditLength2F, &QPlainTextEdit::textChanged, this, [this]() + { + timerLength2->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowAngle1, &QPushButton::clicked, this, &DialogSpline::DeployAngle1TextEdit); connect(ui->pushButtonGrowAngle2, &QPushButton::clicked, this, &DialogSpline::DeployAngle2TextEdit); @@ -229,59 +246,25 @@ void DialogSpline::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::DeployAngle1TextEdit() { - DeployFormula(ui->plainTextEditAngle1F, ui->pushButtonGrowAngle1, formulaBaseHeightAngle1); + DeployFormula(this, ui->plainTextEditAngle1F, ui->pushButtonGrowAngle1, formulaBaseHeightAngle1); } //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::DeployAngle2TextEdit() { - DeployFormula(ui->plainTextEditAngle2F, ui->pushButtonGrowAngle2, formulaBaseHeightAngle2); + DeployFormula(this, ui->plainTextEditAngle2F, ui->pushButtonGrowAngle2, formulaBaseHeightAngle2); } //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::DeployLength1TextEdit() { - DeployFormula(ui->plainTextEditLength1F, ui->pushButtonGrowLength1, formulaBaseHeightLength1); + DeployFormula(this, ui->plainTextEditLength1F, ui->pushButtonGrowLength1, formulaBaseHeightLength1); } //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::DeployLength2TextEdit() { - DeployFormula(ui->plainTextEditLength2F, ui->pushButtonGrowLength2, formulaBaseHeightLength2); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSpline::Angle1Changed() -{ - labelEditFormula = ui->labelEditAngle1; - labelResultCalculation = ui->labelResultAngle1; - ValFormulaChanged(flagAngle1, ui->plainTextEditAngle1F, timerAngle1, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSpline::Angle2Changed() -{ - labelEditFormula = ui->labelEditAngle2; - labelResultCalculation = ui->labelResultAngle2; - ValFormulaChanged(flagAngle2, ui->plainTextEditAngle2F, timerAngle2, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSpline::Length1Changed() -{ - labelEditFormula = ui->labelEditLength1; - labelResultCalculation = ui->labelResultLength1; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagLength1, ui->plainTextEditLength1F, timerLength1, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSpline::Length2Changed() -{ - labelEditFormula = ui->labelEditLength2; - labelResultCalculation = ui->labelResultLength2; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagLength2, ui->plainTextEditLength2F, timerLength2, postfix); + DeployFormula(this, ui->plainTextEditLength2F, ui->pushButtonGrowLength2, formulaBaseHeightLength2); } //--------------------------------------------------------------------------------------------------------------------- @@ -391,53 +374,59 @@ const QSharedPointer DialogSpline::GetP4() const //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::EvalAngle1() { - labelEditFormula = ui->labelEditAngle1; - Eval(ui->plainTextEditAngle1F->toPlainText(), flagAngle1, ui->labelResultAngle1, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle1F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle1; + formulaData.labelResult = ui->labelResultAngle1; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagAngle1); } //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::EvalAngle2() { - labelEditFormula = ui->labelEditAngle2; - Eval(ui->plainTextEditAngle2F->toPlainText(), flagAngle2, ui->labelResultAngle2, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle2F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle2; + formulaData.labelResult = ui->labelResultAngle2; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagAngle2); } //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::EvalLength1() { - labelEditFormula = ui->labelEditLength1; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal length1 = Eval(ui->plainTextEditLength1F->toPlainText(), flagLength1, ui->labelResultLength1, postfix, - false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditLength1F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditLength1; + formulaData.labelResult = ui->labelResultLength1; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; - if (length1 < 0) - { - flagLength1 = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultLength1->setText(tr("Error") + " (" + postfix + ")"); - ui->labelResultLength1->setToolTip(tr("Length can't be negative")); - - DialogSpline::CheckState(); - } + Eval(formulaData, flagLength1); } //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::EvalLength2() { - labelEditFormula = ui->labelEditLength2; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal length2 = Eval(ui->plainTextEditLength2F->toPlainText(), flagLength2, ui->labelResultLength2, postfix, - false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditLength2F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditLength2; + formulaData.labelResult = ui->labelResultLength2; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; - if (length2 < 0) - { - flagLength2 = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultLength2->setText(tr("Error") + " (" + postfix + ")"); - ui->labelResultLength2->setToolTip(tr("Length can't be negative")); - - DialogSpline::CheckState(); - } + Eval(formulaData, flagLength2); } //--------------------------------------------------------------------------------------------------------------------- @@ -477,7 +466,7 @@ void DialogSpline::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxP1)); set.insert(getCurrentObjectId(ui->comboBoxP4)); - QColor color = okColor; + QColor color; if (getCurrentObjectId(ui->comboBoxP1) == getCurrentObjectId(ui->comboBoxP4)) { flagError = false; @@ -488,7 +477,7 @@ void DialogSpline::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); if (getCurrentObjectId(ui->comboBoxP1) == spl.GetP1().id() && getCurrentObjectId(ui->comboBoxP4) == spl.GetP4().id()) @@ -548,18 +537,6 @@ void DialogSpline::ShowDialog(bool click) } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogSpline::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagAngle1 && flagAngle2 && flagLength1 && flagLength2 && flagError); - // In case dialog hasn't apply button - if ( bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} - //--------------------------------------------------------------------------------------------------------------------- void DialogSpline::ShowVisualization() { diff --git a/src/libs/vtools/dialogs/tools/dialogspline.h b/src/libs/vtools/dialogs/tools/dialogspline.h index fbf7e1bdb..ef48f30d9 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.h +++ b/src/libs/vtools/dialogs/tools/dialogspline.h @@ -54,7 +54,7 @@ class DialogSpline : public DialogTool { Q_OBJECT public: - DialogSpline(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogSpline(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogSpline() override; VSpline GetSpline() const; @@ -65,28 +65,28 @@ public slots: virtual void PointNameChanged() override; virtual void ShowDialog(bool click) override; protected: - virtual void CheckState() final; virtual void ShowVisualization() override; /** * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private slots: void DeployAngle1TextEdit(); void DeployAngle2TextEdit(); void DeployLength1TextEdit(); void DeployLength2TextEdit(); - void Angle1Changed(); - void Angle2Changed(); - void Length1Changed(); - void Length2Changed(); - void FXAngle1(); void FXAngle2(); void FXLength1(); void FXLength2(); + + void EvalAngle1(); + void EvalAngle2(); + void EvalLength1(); + void EvalLength2(); private: Q_DISABLE_COPY(DialogSpline) @@ -115,16 +115,18 @@ private: bool flagAngle2; bool flagLength1; bool flagLength2; + bool flagError; const QSharedPointer GetP1() const; const QSharedPointer GetP4() const; - void EvalAngle1(); - void EvalAngle2(); - void EvalLength1(); - void EvalLength2(); - VSpline CurrentSpline() const; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogSpline::IsValid() const +{ + return flagAngle1 && flagAngle2 && flagLength1 && flagLength2 && flagError; +} + #endif // DIALOGSPLINE_H diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp index c7d302ed5..583554e9e 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp @@ -70,7 +70,7 @@ * @param data container with data * @param parent parent widget */ -DialogSplinePath::DialogSplinePath(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogSplinePath::DialogSplinePath(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogSplinePath), path(), @@ -82,12 +82,11 @@ DialogSplinePath::DialogSplinePath(const VContainer *data, const quint32 &toolId flagAngle1(), flagAngle2(), flagLength1(), - flagLength2() + flagLength2(), + flagError(false) { ui->setupUi(this); - plainTextEditFormula = ui->plainTextEditAngle1F; - formulaBaseHeightAngle1 = ui->plainTextEditAngle1F->height(); formulaBaseHeightAngle2 = ui->plainTextEditAngle2F->height(); formulaBaseHeightLength1 = ui->plainTextEditLength1F->height(); @@ -172,6 +171,8 @@ void DialogSplinePath::SetPath(const VSplinePath &value) SCASSERT(visPath != nullptr) visPath->setPath(path); ui->listWidget->blockSignals(false); + + flagError = IsPathValid(); } //--------------------------------------------------------------------------------------------------------------------- @@ -234,29 +235,6 @@ void DialogSplinePath::SaveData() visPath->RefreshGeometry(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogSplinePath::CheckState() -{ - SCASSERT(bOk != nullptr) - - bool fAngle1 = true, fAngle2 = true, fLength1 = true, fLength2 = true; - - for (qint32 i = 0; i < ui->listWidget->count(); ++i) - { - fAngle1 = fAngle1 && flagAngle1.at(i); - fAngle2 = fAngle2 && flagAngle2.at(i); - fLength1 = fLength1 && flagLength1.at(i); - fLength2 = fLength2 && flagLength2.at(i); - } - - bOk->setEnabled(fAngle1 && fAngle2 && fLength1 && fLength2 && flagError); - // In case dialog hasn't apply button - if (bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} - //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::closeEvent(QCloseEvent *event) { @@ -270,25 +248,25 @@ void DialogSplinePath::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::DeployAngle1TextEdit() { - DeployFormula(ui->plainTextEditAngle1F, ui->pushButtonGrowAngle1, formulaBaseHeightAngle1); + DeployFormula(this, ui->plainTextEditAngle1F, ui->pushButtonGrowAngle1, formulaBaseHeightAngle1); } //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::DeployAngle2TextEdit() { - DeployFormula(ui->plainTextEditAngle2F, ui->pushButtonGrowAngle2, formulaBaseHeightAngle2); + DeployFormula(this, ui->plainTextEditAngle2F, ui->pushButtonGrowAngle2, formulaBaseHeightAngle2); } //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::DeployLength1TextEdit() { - DeployFormula(ui->plainTextEditLength1F, ui->pushButtonGrowLength1, formulaBaseHeightLength1); + DeployFormula(this, ui->plainTextEditLength1F, ui->pushButtonGrowLength1, formulaBaseHeightLength1); } //--------------------------------------------------------------------------------------------------------------------- void DialogSplinePath::DeployLength2TextEdit() { - DeployFormula(ui->plainTextEditLength2F, ui->pushButtonGrowLength2, formulaBaseHeightLength2); + DeployFormula(this, ui->plainTextEditLength2F, ui->pushButtonGrowLength2, formulaBaseHeightLength2); } //--------------------------------------------------------------------------------------------------------------------- @@ -518,8 +496,15 @@ void DialogSplinePath::EvalAngle1() return; } - labelEditFormula = ui->labelEditAngle1; - Eval(ui->plainTextEditAngle1F->toPlainText(), flagAngle1[row], ui->labelResultAngle1, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle1F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle1; + formulaData.labelResult = ui->labelResultAngle1; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagAngle1[row]); QListWidgetItem *item = ui->listWidget->item(row); SCASSERT(item != nullptr) @@ -537,8 +522,15 @@ void DialogSplinePath::EvalAngle2() return; } - labelEditFormula = ui->labelEditAngle2; - Eval(ui->plainTextEditAngle2F->toPlainText(), flagAngle2[row], ui->labelResultAngle2, degreeSymbol, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditAngle2F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAngle2; + formulaData.labelResult = ui->labelResultAngle2; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, flagAngle2[row]); QListWidgetItem *item = ui->listWidget->item(row); SCASSERT(item != nullptr) @@ -556,20 +548,16 @@ void DialogSplinePath::EvalLength1() return; } - labelEditFormula = ui->labelEditLength1; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal length1 = Eval(ui->plainTextEditLength1F->toPlainText(), flagLength1[row], ui->labelResultLength1, - postfix, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditLength1F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditLength1; + formulaData.labelResult = ui->labelResultLength1; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; - if (length1 < 0) - { - flagLength1[row] = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultLength1->setText(tr("Error") + QLatin1String(" (") + postfix + QLatin1String(")")); - ui->labelResultLength1->setToolTip(tr("Length can't be negative")); - - CheckState(); - } + Eval(formulaData, flagLength1[row]); QListWidgetItem *item = ui->listWidget->item(row); SCASSERT(item != nullptr) @@ -587,20 +575,16 @@ void DialogSplinePath::EvalLength2() return; } - labelEditFormula = ui->labelEditLength2; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const qreal length2 = Eval(ui->plainTextEditLength2F->toPlainText(), flagLength2[row], ui->labelResultLength2, - postfix, false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditLength2F->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditLength2; + formulaData.labelResult = ui->labelResultLength2; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; - if (length2 < 0) - { - flagLength2[row] = false; - ChangeColor(labelEditFormula, Qt::red); - ui->labelResultLength2->setText(tr("Error") + QLatin1String(" (") + postfix + QLatin1String(")")); - ui->labelResultLength2->setToolTip(tr("Length can't be negative")); - - CheckState(); - } + Eval(formulaData, flagLength2[row]); QListWidgetItem *item = ui->listWidget->item(row); SCASSERT(item != nullptr) @@ -641,7 +625,7 @@ void DialogSplinePath::currentPointChanged(int index) item->setData(Qt::UserRole, QVariant::fromValue(p)); ShowPointIssue(p.P().name()); - QColor color = okColor; + QColor color; if (not IsPathValid()) { flagError = false; @@ -652,7 +636,7 @@ void DialogSplinePath::currentPointChanged(int index) else { flagError = true; - color = okColor; + color = OkColor(this); auto first = qvariant_cast(ui->listWidget->item(0)->data(Qt::UserRole)); auto last = qvariant_cast(ui->listWidget->item(ui->listWidget->count()-1)->data(Qt::UserRole)); @@ -758,7 +742,7 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->toolButtonExprAngle1->setEnabled(false); ui->labelResultAngle1->setText(emptyRes); ui->labelResultAngle1->setToolTip(tr("Value")); - ChangeColor(ui->labelEditAngle1, okColor); + ChangeColor(ui->labelEditAngle1, OkColor(this)); ui->plainTextEditAngle1F->blockSignals(true); ui->plainTextEditAngle1F->setPlainText(field); ui->plainTextEditAngle1F->setEnabled(false); @@ -767,7 +751,7 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->toolButtonExprLength1->setEnabled(false); ui->labelResultLength1->setText(emptyRes); ui->labelResultLength1->setToolTip(tr("Value")); - ChangeColor(ui->labelEditLength1, okColor); + ChangeColor(ui->labelEditLength1, OkColor(this)); ui->plainTextEditLength1F->blockSignals(true); ui->plainTextEditLength1F->setPlainText(field); ui->plainTextEditLength1F->setEnabled(false); @@ -795,7 +779,7 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->toolButtonExprAngle2->setEnabled(false); ui->labelResultAngle2->setText(emptyRes); ui->labelResultAngle2->setToolTip(tr("Value")); - ChangeColor(ui->labelEditAngle2, okColor); + ChangeColor(ui->labelEditAngle2, OkColor(this)); ui->plainTextEditAngle2F->blockSignals(true); ui->plainTextEditAngle2F->setPlainText(field); ui->plainTextEditAngle2F->setEnabled(false); @@ -804,7 +788,7 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ui->toolButtonExprLength2->setEnabled(false); ui->labelResultLength2->setText(emptyRes); ui->labelResultLength2->setToolTip(tr("Value")); - ChangeColor(ui->labelEditLength2, okColor); + ChangeColor(ui->labelEditLength2, OkColor(this)); ui->plainTextEditLength2F->blockSignals(true); ui->plainTextEditLength2F->setPlainText(field); ui->plainTextEditLength2F->setEnabled(false); @@ -930,3 +914,19 @@ void DialogSplinePath::ShowPointIssue(const QString &pName) item->setText(pName + QLatin1String("(!)")); } } + +//--------------------------------------------------------------------------------------------------------------------- +bool DialogSplinePath::IsValid() const +{ + bool fAngle1 = true, fAngle2 = true, fLength1 = true, fLength2 = true; + + for (qint32 i = 0; i < ui->listWidget->count(); ++i) + { + fAngle1 = fAngle1 && flagAngle1.at(i); + fAngle2 = fAngle2 && flagAngle2.at(i); + fLength1 = fLength1 && flagLength1.at(i); + fLength2 = fLength2 && flagLength2.at(i); + } + + return fAngle1 && fAngle2 && fLength1 && fLength2 && flagError; +} diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.h b/src/libs/vtools/dialogs/tools/dialogsplinepath.h index 133fed1a3..7aab46d74 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.h @@ -53,7 +53,7 @@ class DialogSplinePath : public DialogTool { Q_OBJECT public: - DialogSplinePath(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogSplinePath(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogSplinePath() override; VSplinePath GetPath() const; @@ -65,8 +65,8 @@ public slots: protected: virtual void ShowVisualization() override; virtual void SaveData() override; - virtual void CheckState() final; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private slots: void PointChanged(int row); void currentPointChanged(int index); @@ -107,6 +107,7 @@ private: QVector flagAngle2; QVector flagLength1; QVector flagLength2; + bool flagError; void EvalAngle1(); void EvalAngle2(); diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index 05d2e3885..030fa8253 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -77,8 +77,6 @@ template class QSharedPointer; Q_LOGGING_CATEGORY(vDialog, "v.dialog") -#define DIALOG_MAX_FORMULA_HEIGHT 80 - namespace { //--------------------------------------------------------------------------------------------------------------------- @@ -153,32 +151,19 @@ bool DoubleCurve(const VPieceNode &firstNode, const VPieceNode &secondNode, cons * @param data container with data * @param parent parent widget */ -DialogTool::DialogTool(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogTool::DialogTool(const VContainer *data, quint32 toolId, QWidget *parent) : QDialog(parent), data(data), isInitialized(false), - flagName(true), - flagFormula(true), - flagError(true), - timerFormula(new QTimer(this)), bOk(nullptr), bApply(nullptr), - spinBoxAngle(nullptr), - plainTextEditFormula(nullptr), - labelResultCalculation(nullptr), - labelEditNamePoint(nullptr), - labelEditFormula(nullptr), - okColor(this->palette().color(QPalette::Active, QPalette::WindowText)), - errorColor(Qt::red), associatedTool(nullptr), toolId(toolId), prepare(false), - pointName(), number(0), vis(nullptr) { - SCASSERT(data != nullptr) - connect(timerFormula, &QTimer::timeout, this, &DialogTool::EvalFormula); + SCASSERT(data != nullptr) } //--------------------------------------------------------------------------------------------------------------------- @@ -226,6 +211,8 @@ void DialogTool::showEvent(QShowEvent *event) isInitialized = true;//first show windows are held ShowVisualization(); + + CheckState(); } //--------------------------------------------------------------------------------------------------------------------- @@ -261,13 +248,13 @@ void DialogTool::FillComboBoxPiecesList(QComboBox *box, const QVector & * @brief FillComboBoxPoints fill comboBox list of points * @param box comboBox */ -void DialogTool::FillComboBoxPoints(QComboBox *box, FillComboBox rule, const quint32 &ch1, const quint32 &ch2) const +void DialogTool::FillComboBoxPoints(QComboBox *box, FillComboBox rule, quint32 ch1, quint32 ch2) const { FillCombo(box, GOType::Point, rule, ch1, ch2); } //--------------------------------------------------------------------------------------------------------------------- -void DialogTool::FillComboBoxArcs(QComboBox *box, FillComboBox rule, const quint32 &ch1, const quint32 &ch2) const +void DialogTool::FillComboBoxArcs(QComboBox *box, FillComboBox rule, quint32 ch1, quint32 ch2) const { FillCombo(box, GOType::Arc, rule, ch1, ch2); } @@ -448,43 +435,16 @@ void DialogTool::ChangeCurrentData(QComboBox *box, const QVariant &value) const } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogTool::MoveCursorToEnd(QPlainTextEdit *plainTextEdit) const -{ - SCASSERT(plainTextEdit != nullptr) - QTextCursor cursor = plainTextEdit->textCursor(); - cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); - plainTextEdit->setTextCursor(cursor); -} - //--------------------------------------------------------------------------------------------------------------------- bool DialogTool::eventFilter(QObject *object, QEvent *event) { - if (QPlainTextEdit *plainTextEdit = qobject_cast(object)) + const bool fitered = FilterObject(object, event); + if (fitered) { - if (event->type() == QEvent::KeyPress) - { - QKeyEvent *keyEvent = static_cast(event); - if ((keyEvent->key() == Qt::Key_Period) && (keyEvent->modifiers() & Qt::KeypadModifier)) - { - if (qApp->Settings()->GetOsSeparator()) - { - plainTextEdit->insertPlainText(QLocale().decimalPoint()); - } - else - { - plainTextEdit->insertPlainText(QLocale::c().decimalPoint()); - } - return true; - } - } + return fitered; } - else - { - // pass the event on to the parent class - return QDialog::eventFilter(object, event); - } - return false;// pass the event to the widget + + return QDialog::eventFilter(object, event); } //--------------------------------------------------------------------------------------------------------------------- @@ -831,146 +791,14 @@ bool DialogTool::IsSplinePath(const QSharedPointer &obj) const return obj->getType() == GOType::SplinePath || obj->getType() == GOType::CubicBezierPath; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ValFormulaChanged handle change formula - * @param flag flag state of formula - * @param edit LineEdit - * @param timer timer of formula - */ -void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer, const QString& postfix) -{ - SCASSERT(edit != nullptr) - SCASSERT(timer != nullptr) - SCASSERT(labelEditFormula != nullptr) - SCASSERT(labelResultCalculation != nullptr) - if (edit->text().isEmpty()) - { - flag = false; - CheckState(); - ChangeColor(labelEditFormula, Qt::red); - if (postfix.isEmpty()) - { - labelResultCalculation->setText(tr("Error")); - } - else - { - labelResultCalculation->setText(tr("Error") + " (" + postfix + ")"); - } - labelResultCalculation->setToolTip(tr("Empty field")); - return; - } - timer->start(1000); -} -//--------------------------------------------------------------------------------------------------------------------- -void DialogTool::ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer *timer, const QString& postfix) -{ - SCASSERT(edit != nullptr) - SCASSERT(timer != nullptr) - SCASSERT(labelEditFormula != nullptr) - SCASSERT(labelResultCalculation != nullptr) - if (edit->toPlainText().isEmpty()) - { - flag = false; - CheckState(); - ChangeColor(labelEditFormula, Qt::red); - if (postfix.isEmpty()) - { - labelResultCalculation->setText(tr("Error")); - } - else - { - labelResultCalculation->setText(tr("Error") + " (" + postfix + ")"); - } - - labelResultCalculation->setToolTip(tr("Empty field")); - return; - } - timer->setSingleShot(true); - timer->start(300); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief Eval evaluate formula and show result - * @param text expresion that we parse - * @param flag flag state of eval formula - * @param label label for signal error - * @param postfix unit name - * @param checkZero true - if formula can't be equal zero + * @param formulaData options to control parsing */ -qreal DialogTool::Eval(const QString &text, bool &flag, QLabel *label, const QString& postfix, bool checkZero, - bool checkLessThanZero) +qreal DialogTool::Eval(const FormulaData &formulaData, bool &flag) { - SCASSERT(label != nullptr) - SCASSERT(labelEditFormula != nullptr) - - qreal result = INT_MIN;//Value can be 0, so use max imposible value - - if (text.isEmpty()) - { - flag = false; - ChangeColor(labelEditFormula, Qt::red); - label->setText(tr("Error") + " (" + postfix + ")"); - label->setToolTip(tr("Empty field")); - } - else - { - try - { - // Translate to internal look. - QString formula = qApp->TrVars()->FormulaFromUser(text, qApp->Settings()->GetOsSeparator()); - QScopedPointer cal(new Calculator()); - result = cal->EvalFormula(data->DataVariables(), formula); - - if (qIsInf(result) || qIsNaN(result)) - { - flag = false; - ChangeColor(labelEditFormula, Qt::red); - label->setText(tr("Error") + " (" + postfix + ")"); - label->setToolTip(tr("Invalid result. Value is infinite or NaN. Please, check your calculations.")); - } - else - { - //if result equal 0 - if (checkZero && qFuzzyIsNull(result)) - { - flag = false; - ChangeColor(labelEditFormula, Qt::red); - label->setText(tr("Error") + " (" + postfix + ")"); - label->setToolTip(tr("Value can't be 0")); - } - else if (checkLessThanZero && result < 0) - { - flag = false; - ChangeColor(labelEditFormula, Qt::red); - label->setText(tr("Error") + " (" + postfix + ")"); - label->setToolTip(tr("Value can't be less than 0")); - } - else - { - label->setText(qApp->LocaleToString(result) + QChar(QChar::Space) +postfix); - flag = true; - ChangeColor(labelEditFormula, okColor); - label->setToolTip(tr("Value")); - emit ToolTip(QString()); - } - } - } - catch (qmu::QmuParserError &e) - { - label->setText(tr("Error") + " (" + postfix + ")"); - flag = false; - ChangeColor(labelEditFormula, Qt::red); - emit ToolTip(tr("Parser error: %1").arg(e.GetMsg())); - label->setToolTip(tr("Parser error: %1").arg(e.GetMsg())); - qDebug() << "\nMath parser error:\n" - << "--------------------------------------\n" - << "Message: " << e.GetMsg() << "\n" - << "Expression: " << e.GetExpr() << "\n" - << "--------------------------------------"; - } - } + const qreal result = EvalToolFormula(this, formulaData, flag); CheckState(); // Disable Ok and Apply buttons if something wrong. return result; } @@ -1071,45 +899,6 @@ bool DialogTool::SetObject(const quint32 &id, QComboBox *box, const QString &too return false; } -//--------------------------------------------------------------------------------------------------------------------- -void DialogTool::DeployFormula(QPlainTextEdit *formula, QPushButton *buttonGrowLength, int formulaBaseHeight) -{ - SCASSERT(formula != nullptr) - SCASSERT(buttonGrowLength != nullptr) - - const QTextCursor cursor = formula->textCursor(); - - //Before deploy ned to release dialog size - //I don't know why, but don't need to fixate again. - //A dialog will be lefted fixated. That's what we need. - setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); - setMinimumSize(QSize(0, 0)); - - if (formula->height() < DIALOG_MAX_FORMULA_HEIGHT) - { - formula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT); - //Set icon from theme (internal for Windows system) - buttonGrowLength->setIcon(QIcon::fromTheme("go-next", - QIcon(":/icons/win.icon.theme/16x16/actions/go-next.png"))); - } - else - { - formula->setFixedHeight(formulaBaseHeight); - //Set icon from theme (internal for Windows system) - buttonGrowLength->setIcon(QIcon::fromTheme("go-down", - QIcon(":/icons/win.icon.theme/16x16/actions/go-down.png"))); - } - - // I found that after change size of formula field, it was filed for angle formula, field for formula became black. - // This code prevent this. - setUpdatesEnabled(false); - repaint(); - setUpdatesEnabled(true); - - formula->setFocus(); - formula->setTextCursor(cursor); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief FillList fill combobox list @@ -1161,7 +950,7 @@ bool DialogTool::IsSpline(const QSharedPointer &obj) const void DialogTool::CheckState() { SCASSERT(bOk != nullptr) - bOk->setEnabled(flagFormula && flagName && flagError); + bOk->setEnabled(IsValid()); // In case dialog hasn't apply button if ( bApply != nullptr) { @@ -1189,43 +978,6 @@ void DialogTool::SelectedObject(bool selected, quint32 object, quint32 tool) Q_UNUSED(tool) } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief NamePointChanged check name of point - */ -void DialogTool::NamePointChanged() -{ - SCASSERT(labelEditNamePoint != nullptr) - QLineEdit* edit = qobject_cast(sender()); - if (edit) - { - QString name = edit->text(); - QRegularExpression rx(NameRegExp()); - if (name.isEmpty() || (pointName != name && data->IsUnique(name) == false) || - rx.match(name).hasMatch() == false) - { - flagName = false; - ChangeColor(labelEditNamePoint, Qt::red); - } - else - { - flagName = true; - ChangeColor(labelEditNamePoint, okColor); - } - } - CheckState(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogTool::ChangeColor(QWidget *widget, const QColor &color) -{ - SCASSERT(widget != nullptr) - QPalette palette = widget->palette(); - palette.setColor(QPalette::Active, widget->foregroundRole(), color); - palette.setColor(QPalette::Inactive, widget->foregroundRole(), color); - widget->setPalette(palette); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief DialogAccepted save data and emit signal about closed dialog. @@ -1252,120 +1004,6 @@ void DialogTool::DialogRejected() emit DialogClosed(QDialog::Rejected); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief formula check formula - */ -void DialogTool::FormulaChanged() -{ - QPlainTextEdit* edit = qobject_cast(sender()); - if (edit) - { - ValFormulaChanged(flagFormula, edit, timerFormula); - } -} -//--------------------------------------------------------------------------------------------------------------------- -void DialogTool::FormulaChangedPlainText() //-V524 -{ - QPlainTextEdit* edit = qobject_cast(sender()); - if (edit) - { - ValFormulaChanged(flagFormula, edit, timerFormula); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowUp set angle value 90 degree - */ -void DialogTool::ArrowUp() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(90); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowDown set angle value 270 degree - */ -void DialogTool::ArrowDown() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(270); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowLeft set angle value 180 degree - */ -void DialogTool::ArrowLeft() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(180); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowRight set angle value 0 degree - */ -void DialogTool::ArrowRight() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(0); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowLeftUp set angle value 135 degree - */ -void DialogTool::ArrowLeftUp() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(135); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowLeftDown set angle value 225 degree - */ -void DialogTool::ArrowLeftDown() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(225); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowRightUp set angle value 45 degree - */ -void DialogTool::ArrowRightUp() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(45); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ArrowRightDown set angle value 315 degree - */ -void DialogTool::ArrowRightDown() -{ - SCASSERT(spinBoxAngle != nullptr) - spinBoxAngle->setValue(315); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief EvalFormula evaluate formula - */ -void DialogTool::EvalFormula() -{ - SCASSERT(plainTextEditFormula != nullptr) - SCASSERT(labelResultCalculation != nullptr) - const QString postfix = UnitsToStr(qApp->patternUnit());//Show unit in dialog lable (cm, mm or inch) - Eval(plainTextEditFormula->toPlainText(), flagFormula, labelResultCalculation, postfix, false); -} - //--------------------------------------------------------------------------------------------------------------------- // cppcheck-suppress unusedFunction quint32 DialogTool::GetToolId() const @@ -1379,12 +1017,6 @@ void DialogTool::SetToolId(const quint32 &value) toolId = value; } -//--------------------------------------------------------------------------------------------------------------------- -QString DialogTool::getPointName() const -{ - return pointName; -} - //--------------------------------------------------------------------------------------------------------------------- void DialogTool::ShowDialog(bool click) { diff --git a/src/libs/vtools/dialogs/tools/dialogtool.h b/src/libs/vtools/dialogs/tools/dialogtool.h index f1ff47c50..12513a8eb 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.h +++ b/src/libs/vtools/dialogs/tools/dialogtool.h @@ -58,6 +58,7 @@ #include "../vmisc/vabstractapplication.h" #include "../vmisc/vcommonsettings.h" #include "../vwidgets/vmaingraphicsscene.h" +#include "../dialogtoolbox.h" template class QSharedPointer; @@ -77,7 +78,7 @@ class DialogTool : public QDialog { Q_OBJECT public: - DialogTool(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogTool(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogTool() override; VAbstractTool* GetAssociatedTool(); @@ -90,8 +91,6 @@ public: quint32 GetToolId() const; void SetToolId(const quint32 &value); - QString getPointName() const; - static void MoveListRowTop(QListWidget *list); static void MoveListRowUp(QListWidget *list); static void MoveListRowDown(QListWidget *list); @@ -114,32 +113,14 @@ signals: public slots: virtual void ChosenObject(quint32 id, const SceneObject &type); virtual void SelectedObject(bool selected, quint32 object, quint32 tool); - void NamePointChanged(); virtual void DialogAccepted(); /** * @brief DialogApply save data and emit signal DialogApplied. */ virtual void DialogApply(); virtual void DialogRejected(); - void FormulaChanged(); - /** - * @brief FormulaChangedPlainText check formula (plain text editor editor) - */ - void FormulaChangedPlainText(); - void ArrowUp(); - void ArrowDown(); - void ArrowLeft(); - void ArrowRight(); - void ArrowLeftUp(); - void ArrowLeftDown(); - void ArrowRightUp(); - void ArrowRightDown(); - virtual void EvalFormula(); - virtual void PointNameChanged() {} protected: - Q_DISABLE_COPY(DialogTool) - /** @brief data container with data */ // cppcheck-suppress duplInheritedMember const VContainer *data; @@ -147,45 +128,12 @@ protected: /** @brief isInitialized true if window is initialized */ bool isInitialized; - /** @brief flagName true if name is correct */ - bool flagName; - - /** @brief flagFormula true if formula correct */ - bool flagFormula; - - /** @brief flagError use this flag if for you do not enought @see flagName and @see flagFormula. - * - * In many cases you will need more flags fore checking if all data are valid. - * By default this flag is true. - */ - bool flagError; - - /** @brief timerFormula timer for check formula */ - QTimer *timerFormula; - /** @brief bOk button ok */ QPushButton *bOk; /** @brief bApply button apply */ QPushButton *bApply; - /** @brief spinBoxAngle spinbox for angle */ - QDoubleSpinBox *spinBoxAngle; - - /** @brief plainTextEditFormula formula */ - QPlainTextEdit *plainTextEditFormula; - - /** @brief labelResultCalculation label with result of calculation */ - QLabel *labelResultCalculation; - - /** @brief labelEditNamePoint label used when need show wrong name of point */ - QLabel *labelEditNamePoint; - - /** @brief labelEditFormula label used when need show wrong formula */ - QLabel *labelEditFormula; - - const QColor okColor; - const QColor errorColor; /** * @brief associatedTool vdrawtool associated with opened dialog. */ @@ -195,9 +143,6 @@ protected: /** @brief prepare show if we prepare. Show dialog after finish working with visual part of tool*/ bool prepare; - /** @brief pointName name of point */ - QString pointName; - /** @brief number number of handled objects */ qint32 number; @@ -206,12 +151,16 @@ protected: virtual void closeEvent ( QCloseEvent * event ) override; virtual void showEvent( QShowEvent *event ) override; virtual void keyPressEvent(QKeyEvent *event) override; + virtual bool eventFilter(QObject *object, QEvent *event) override; + + virtual bool IsValid() const =0; + virtual void CheckState(); void FillComboBoxPiecesList(QComboBox *box, const QVector &list); void FillComboBoxPoints(QComboBox *box, FillComboBox rule = FillComboBox::Whole, - const quint32 &ch1 = NULL_ID, const quint32 &ch2 = NULL_ID)const; + quint32 ch1 = NULL_ID, quint32 ch2 = NULL_ID) const; void FillComboBoxArcs(QComboBox *box, FillComboBox rule = FillComboBox::Whole, - const quint32 &ch1 = NULL_ID, const quint32 &ch2 = NULL_ID)const; + quint32 ch1 = NULL_ID, quint32 ch2 = NULL_ID) const; void FillComboBoxSplines(QComboBox *box)const; void FillComboBoxSplinesPath(QComboBox *box)const; void FillComboBoxCurves(QComboBox *box)const; @@ -221,14 +170,10 @@ protected: void FillComboBoxVCrossCurvesPoint(QComboBox *box) const; void FillComboBoxHCrossCurvesPoint(QComboBox *box) const; - virtual void CheckState(); + QString GetComboBoxCurrentData(const QComboBox *box, const QString &def)const; void ChangeCurrentData(QComboBox *box, const QVariant &value) const; - void ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer * timer, const QString &postfix = QString()); - void ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer * timer, - const QString &postfix = QString()); - qreal Eval(const QString &text, bool &flag, QLabel *label, const QString &postfix, - bool checkZero = true, bool checkLessThanZero = false); + qreal Eval(const FormulaData &formulaData, bool &flag); void setCurrentPointId(QComboBox *box, const quint32 &value, FillComboBox rule = FillComboBox::NoChildren, @@ -246,10 +191,6 @@ protected: T getCurrentCrossPoint(QComboBox *box) const; bool SetObject(const quint32 &id, QComboBox *box, const QString &toolTip); - void DeployFormula(QPlainTextEdit *formula, QPushButton *buttonGrowLength, int formulaBaseHeight); - - template - void InitArrow(T *ui); template void InitOkCancelApply(T *ui); @@ -257,23 +198,17 @@ protected: template void InitOkCancel(T *ui); - template - void InitFormulaUI(T *ui); - template void AddVisualization(); template QVector GetListInternals(const QListWidget *list) const; - void ChangeColor(QWidget *widget, const QColor &color); virtual void ShowVisualization() {} /** * @brief SaveData Put dialog data in local variables */ virtual void SaveData() {} - void MoveCursorToEnd(QPlainTextEdit *plainTextEdit) const; - virtual bool eventFilter(QObject *object, QEvent *event) override; quint32 DNumber(const QString &baseName) const; static int FindNotExcludedNodeDown(QListWidget *listWidget, int candidate); @@ -290,6 +225,7 @@ protected: void InitNodeAngles(QComboBox *box); private: + Q_DISABLE_COPY(DialogTool) void FillList(QComboBox *box, const QMap &list)const; template @@ -325,22 +261,6 @@ inline VAbstractTool *DialogTool::GetAssociatedTool() return this->associatedTool; } -//--------------------------------------------------------------------------------------------------------------------- -template -inline void DialogTool::InitArrow(T *ui) -{ - SCASSERT(ui != nullptr) - spinBoxAngle = ui->doubleSpinBoxAngle; - connect(ui->toolButtonArrowDown, &QPushButton::clicked, this, &DialogTool::ArrowDown); - connect(ui->toolButtonArrowUp, &QPushButton::clicked, this, &DialogTool::ArrowUp); - connect(ui->toolButtonArrowLeft, &QPushButton::clicked, this, &DialogTool::ArrowLeft); - connect(ui->toolButtonArrowRight, &QPushButton::clicked, this, &DialogTool::ArrowRight); - connect(ui->toolButtonArrowLeftUp, &QPushButton::clicked, this, &DialogTool::ArrowLeftUp); - connect(ui->toolButtonArrowLeftDown, &QPushButton::clicked, this, &DialogTool::ArrowLeftDown); - connect(ui->toolButtonArrowRightUp, &QPushButton::clicked, this, &DialogTool::ArrowRightUp); - connect(ui->toolButtonArrowRightDown, &QPushButton::clicked, this, &DialogTool::ArrowRightDown); -} - //--------------------------------------------------------------------------------------------------------------------- template /** @@ -374,19 +294,6 @@ inline void DialogTool::InitOkCancel(T *ui) qApp->Settings()->GetOsSeparator() ? setLocale(QLocale()) : setLocale(QLocale::c()); } -//--------------------------------------------------------------------------------------------------------------------- -template -/** - * @brief InitFormulaUI initialise ui object for formula fild - * @param ui Dialog container - */ -inline void DialogTool::InitFormulaUI(T *ui) -{ - labelResultCalculation = ui->labelResultCalculation; - plainTextEditFormula = ui->plainTextEditFormula; - labelEditFormula = ui->labelEditFormula; -} - //--------------------------------------------------------------------------------------------------------------------- template inline void DialogTool::AddVisualization() diff --git a/src/libs/vtools/dialogs/tools/dialogtriangle.cpp b/src/libs/vtools/dialogs/tools/dialogtriangle.cpp index f047bad44..1b5284570 100644 --- a/src/libs/vtools/dialogs/tools/dialogtriangle.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtriangle.cpp @@ -48,25 +48,31 @@ * @param data container with data * @param parent parent widget */ -DialogTriangle::DialogTriangle(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogTriangle) +DialogTriangle::DialogTriangle(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogTriangle), + pointName(), + flagName(false), + flagError(false) { ui->setupUi(this); ui->lineEditNamePoint->setClearButtonEnabled(true); ui->lineEditNamePoint->setText(qApp->getCurrentDocument()->GenerateLabel(LabelType::NewLabel)); - labelEditNamePoint = ui->labelEditNamePoint; InitOkCancelApply(ui); - DialogTool::CheckState(); FillComboBoxPoints(ui->comboBoxAxisP1); FillComboBoxPoints(ui->comboBoxAxisP2); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); - connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogTriangle::NamePointChanged); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, [this]() + { + CheckPointLabel(this, ui->lineEditNamePoint, ui->labelEditNamePoint, pointName, this->data, flagName); + CheckState(); + }); connect(ui->comboBoxFirstPoint, QOverload::of(&QComboBox::currentIndexChanged), this, &DialogTriangle::PointNameChanged); connect(ui->comboBoxSecondPoint, QOverload::of(&QComboBox::currentIndexChanged), @@ -189,7 +195,7 @@ void DialogTriangle::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxAxisP1)); set.insert(getCurrentObjectId(ui->comboBoxAxisP2)); - QColor color = okColor; + QColor color; if (set.size() < 3)//Need tree or more unique points for creation triangle { flagError = false; @@ -198,7 +204,7 @@ void DialogTriangle::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstPoint, color); ChangeColor(ui->labelSecondPoint, color); @@ -235,7 +241,13 @@ void DialogTriangle::SetSecondPointId(const quint32 &value) VisToolTriangle *line = qobject_cast(vis); SCASSERT(line != nullptr) - line->setHypotenuseP2Id(value); + line->setHypotenuseP2Id(value); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString DialogTriangle::GetPointName() const +{ + return pointName; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogtriangle.h b/src/libs/vtools/dialogs/tools/dialogtriangle.h index e262d0848..64d3b723c 100644 --- a/src/libs/vtools/dialogs/tools/dialogtriangle.h +++ b/src/libs/vtools/dialogs/tools/dialogtriangle.h @@ -50,7 +50,7 @@ class DialogTriangle : public DialogTool { Q_OBJECT public: - DialogTriangle(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogTriangle(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogTriangle() override; quint32 GetAxisP1Id() const; @@ -65,6 +65,7 @@ public: quint32 GetSecondPointId() const; void SetSecondPointId(const quint32 &value); + QString GetPointName() const; void SetPointName(const QString &value); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; @@ -75,11 +76,23 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogTriangle) /** @brief ui keeps information about user interface */ Ui::DialogTriangle *ui; + + QString pointName; + + bool flagName; + bool flagError; }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogTriangle::IsValid() const +{ + return flagName && flagError; +} + #endif // DIALOGTRIANGLE_H diff --git a/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp b/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp index d04c70a92..cbd7b2e09 100644 --- a/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp @@ -50,9 +50,16 @@ #include "ui_dialogtruedarts.h" //--------------------------------------------------------------------------------------------------------------------- -DialogTrueDarts::DialogTrueDarts(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogTrueDarts), d1PointName(), d2PointName(), ch1(NULL_ID), - ch2(NULL_ID), flagName1(true), flagName2(true) +DialogTrueDarts::DialogTrueDarts(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogTrueDarts), + d1PointName(), + d2PointName(), + ch1(NULL_ID), + ch2(NULL_ID), + flagName1(true), + flagName2(true), + flagError(false) { ui->setupUi(this); @@ -65,7 +72,6 @@ DialogTrueDarts::DialogTrueDarts(const VContainer *data, const quint32 &toolId, ui->lineEditSecondNewDartPoint->setText(name2); InitOkCancelApply(ui); - CheckState(); FillComboBoxs(ch1, ch2); @@ -317,7 +323,7 @@ void DialogTrueDarts::PointNameChanged() set.insert(getCurrentObjectId(ui->comboBoxSecondDartPoint)); set.insert(getCurrentObjectId(ui->comboBoxThirdDartPoint)); - QColor color = okColor; + QColor color; if (set.size() != 5) { flagError = false; @@ -326,7 +332,7 @@ void DialogTrueDarts::PointNameChanged() else { flagError = true; - color = okColor; + color = OkColor(this); } ChangeColor(ui->labelFirstBasePoint, color); ChangeColor(ui->labelSecondBasePoint, color); @@ -371,18 +377,6 @@ void DialogTrueDarts::SaveData() points->RefreshGeometry(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogTrueDarts::CheckState() -{ - SCASSERT(bOk != nullptr) - bOk->setEnabled(flagName1 && flagName2 && flagError); - // In case dialog hasn't apply button - if ( bApply != nullptr) - { - bApply->setEnabled(bOk->isEnabled()); - } -} - //--------------------------------------------------------------------------------------------------------------------- void DialogTrueDarts::NameChanged(QLabel *labelEditNamePoint, const QString &pointD1Name, const QString &pointD2Name, QLineEdit* secondPointName, bool &flagName) @@ -424,11 +418,11 @@ void DialogTrueDarts::CheckName(QLineEdit *edit, QLabel *labelEditNamePoint, con || rx.match(name).hasMatch() == false) { flagName = false; - ChangeColor(labelEditNamePoint, Qt::red); + ChangeColor(labelEditNamePoint, errorColor); } else { flagName = true; - ChangeColor(labelEditNamePoint, okColor); + ChangeColor(labelEditNamePoint, OkColor(this)); } } diff --git a/src/libs/vtools/dialogs/tools/dialogtruedarts.h b/src/libs/vtools/dialogs/tools/dialogtruedarts.h index 062c910f2..373764438 100644 --- a/src/libs/vtools/dialogs/tools/dialogtruedarts.h +++ b/src/libs/vtools/dialogs/tools/dialogtruedarts.h @@ -48,7 +48,7 @@ class DialogTrueDarts : public DialogTool Q_OBJECT public: - DialogTrueDarts(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogTrueDarts(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); ~DialogTrueDarts(); QString GetFirstNewDartPointName(); @@ -82,7 +82,7 @@ protected: * @brief SaveData Put dialog data in local variables */ virtual void SaveData() override; - virtual void CheckState() final; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogTrueDarts) @@ -96,6 +96,7 @@ private: bool flagName1; bool flagName2; + bool flagError; void NameChanged(QLabel *labelEditNamePoint, const QString &pointD1Name, const QString &pointD2Name, QLineEdit *secondPointName, bool &flagName); @@ -106,4 +107,10 @@ private: QLineEdit *secondPointName, bool &flagName); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogTrueDarts::IsValid() const +{ + return flagName1 && flagName2 && flagError; +} + #endif // DIALOGTRUEDARTS_H diff --git a/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp b/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp index ee10f103e..db9a57c57 100644 --- a/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp +++ b/src/libs/vtools/dialogs/tools/dialoguniondetails.cpp @@ -44,9 +44,17 @@ * @param data container with data * @param parent parent widget */ -DialogUnionDetails::DialogUnionDetails(const VContainer *data, const quint32 &toolId, QWidget *parent) - :DialogTool(data, toolId, parent), ui(new Ui::DialogUnionDetails), indexD1(0), indexD2(0), d1(NULL_ID), d2(NULL_ID), - numberD(0), numberP(0), p1(NULL_ID), p2(NULL_ID) +DialogUnionDetails::DialogUnionDetails(const VContainer *data, quint32 toolId, QWidget *parent) + : DialogTool(data, toolId, parent), + ui(new Ui::DialogUnionDetails), + indexD1(0), + indexD2(0), + d1(NULL_ID), + d2(NULL_ID), + numberD(0), + numberP(0), + p1(NULL_ID), + p2(NULL_ID) { ui->setupUi(this); InitOkCancel(ui); diff --git a/src/libs/vtools/dialogs/tools/dialoguniondetails.h b/src/libs/vtools/dialogs/tools/dialoguniondetails.h index 432747c1c..97cd74488 100644 --- a/src/libs/vtools/dialogs/tools/dialoguniondetails.h +++ b/src/libs/vtools/dialogs/tools/dialoguniondetails.h @@ -50,7 +50,7 @@ class DialogUnionDetails : public DialogTool { Q_OBJECT public: - DialogUnionDetails(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogUnionDetails(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogUnionDetails() override; quint32 getD1() const; @@ -61,6 +61,8 @@ public: bool RetainPieces() const; public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; +protected: + virtual bool IsValid() const final {return true;} private: Q_DISABLE_COPY(DialogUnionDetails) diff --git a/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.cpp b/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.cpp index e5283aea2..a35fc233d 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.cpp @@ -31,7 +31,7 @@ #include "../../../visualization/path/vistoolduplicatedetail.h" //--------------------------------------------------------------------------------------------------------------------- -DialogDuplicateDetail::DialogDuplicateDetail(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogDuplicateDetail::DialogDuplicateDetail(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogDuplicateDetail), m_idDetail(NULL_ID), diff --git a/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.h b/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.h index 406c524a5..c3fb10c40 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogduplicatedetail.h @@ -40,7 +40,7 @@ class DialogDuplicateDetail : public DialogTool Q_OBJECT public: - explicit DialogDuplicateDetail(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + explicit DialogDuplicateDetail(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogDuplicateDetail(); quint32 Duplicate() const; @@ -50,6 +50,8 @@ public: virtual void ShowDialog(bool click) override; public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; +protected: + virtual bool IsValid() const final {return true;} private: Q_DISABLE_COPY(DialogDuplicateDetail) Ui::DialogDuplicateDetail *ui; diff --git a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp index ca5328cd2..4dd6d8df3 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp @@ -35,7 +35,8 @@ DialogInsertNode::DialogInsertNode(const VContainer *data, quint32 toolId, QWidg : DialogTool(data, toolId, parent), ui(new Ui::DialogInsertNode), m_node(), - m_flagItem(false) + m_flagItem(false), + m_flagError(false) { ui->setupUi(this); InitOkCancel(ui); @@ -162,26 +163,19 @@ void DialogInsertNode::ChosenObject(quint32 id, const SceneObject &type) } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogInsertNode::CheckState() -{ - SCASSERT(bOk != nullptr); - bOk->setEnabled(m_flagItem && flagError); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogInsertNode::CheckPieces() { - QColor color = okColor; + QColor color; if (ui->comboBoxPiece->count() <= 0 || ui->comboBoxPiece->currentIndex() == -1) { - flagError = false; + m_flagError = false; color = errorColor; } else { - flagError = true; - color = okColor; + m_flagError = true; + color = OkColor(this); } ChangeColor(ui->labelPiece, color); CheckState(); @@ -190,8 +184,8 @@ void DialogInsertNode::CheckPieces() //--------------------------------------------------------------------------------------------------------------------- void DialogInsertNode::CheckItem() { - QColor color = okColor; - m_flagItem ? color = okColor : color = errorColor; + QColor color; + m_flagItem ? color = OkColor(this) : color = errorColor; ChangeColor(ui->labelItem, color); CheckState(); } diff --git a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h index 8231e683d..591f53639 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h +++ b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h @@ -57,7 +57,7 @@ public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; protected: - virtual void CheckState() final; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogInsertNode) @@ -65,9 +65,16 @@ private: VPieceNode m_node; bool m_flagItem; + bool m_flagError; void CheckPieces(); void CheckItem(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogInsertNode::IsValid() const +{ + return m_flagItem && m_flagError; +} + #endif // DIALOGINSERTNODE_H diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp index 81af79c6e..36a7a0a32 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp @@ -68,7 +68,10 @@ DialogPiecePath::DialogPiecePath(const VContainer *data, quint32 toolId, QWidget m_formulaBaseVisible(0), m_flagFormulaBefore(true), m_flagFormulaAfter(true), - m_flagFormulaVisible(true) + m_flagFormulaVisible(true), + m_flagName(true),//We have default name of piece. + m_flagError(false), + m_flagFormula(false) { ui->setupUi(this); InitOkCancel(ui); @@ -80,9 +83,7 @@ DialogPiecePath::DialogPiecePath(const VContainer *data, quint32 toolId, QWidget EvalVisible(); - flagName = true;//We have default name of piece. - flagError = PathIsValid(); - CheckState(); + m_flagError = PathIsValid(); vis = new VisToolPiecePath(data); @@ -219,7 +220,7 @@ void DialogPiecePath::CheckState() SCASSERT(bOk != nullptr); if (GetType() == PiecePathType::InternalPath) { - flagFormula = true; + m_flagFormula = true; m_flagFormulaBefore = true; m_flagFormulaAfter = true; } @@ -228,17 +229,16 @@ void DialogPiecePath::CheckState() m_flagFormulaVisible = true; // Works only for internal paths if (not m_showMode) { - flagFormula = true; + m_flagFormula = true; m_flagFormulaBefore = true; m_flagFormulaAfter = true; } } - bOk->setEnabled(flagName && flagError && flagFormula && m_flagFormulaBefore && m_flagFormulaAfter - && m_flagFormulaVisible); + bOk->setEnabled(IsValid()); const int tabSeamAllowanceIndex = ui->tabWidget->indexOf(ui->tabSeamAllowance); - if (flagFormula && m_flagFormulaBefore && m_flagFormulaAfter) + if (m_flagFormula && m_flagFormulaBefore && m_flagFormulaAfter) { ui->tabWidget->setTabIcon(tabSeamAllowanceIndex, QIcon()); } @@ -391,13 +391,13 @@ void DialogPiecePath::NameChanged() { if (ui->lineEditName->text().isEmpty()) { - flagName = false; - ChangeColor(ui->labelName, Qt::red); + m_flagName = false; + ChangeColor(ui->labelName, errorColor); } else { - flagName = true; - ChangeColor(ui->labelName, okColor); + m_flagName = true; + ChangeColor(ui->labelName, OkColor(this)); } CheckState(); } @@ -736,10 +736,16 @@ void DialogPiecePath::PassmarkShowSecondChanged(int state) //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::EvalWidth() { - labelEditFormula = ui->labelEditWidth; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const QString formula = ui->plainTextEditFormulaWidth->toPlainText(); - m_saWidth = Eval(formula, flagFormula, ui->labelResultWidth, postfix, false, true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaWidth->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditWidth; + formulaData.labelResult = ui->labelResultWidth; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; + + m_saWidth = Eval(formulaData, m_flagFormula); if (m_saWidth >= 0) { @@ -759,14 +765,18 @@ void DialogPiecePath::EvalWidth() //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::EvalWidthBefore() { - labelEditFormula = ui->labelEditBefore; if (ui->comboBoxNodes->count() > 0) { - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - QString formula = ui->plainTextEditFormulaWidthBefore->toPlainText(); - Eval(formula, m_flagFormulaBefore, ui->labelResultBefore, postfix, false, true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaWidthBefore->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditBefore; + formulaData.labelResult = ui->labelResultBefore; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; - formula = GetFormulaSAWidthBefore(); + const QString formula = GetFormulaSAWidthBefore(); if (formula != currentSeamAllowance) { ui->pushButtonDefBefore->setEnabled(true); @@ -776,7 +786,7 @@ void DialogPiecePath::EvalWidthBefore() } else { - ChangeColor(labelEditFormula, okColor); + ChangeColor(ui->labelEditBefore, OkColor(this)); ui->labelResultBefore->setText(tr("")); m_flagFormulaBefore = true; } @@ -785,14 +795,18 @@ void DialogPiecePath::EvalWidthBefore() //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::EvalWidthAfter() { - labelEditFormula = ui->labelEditAfter; if (ui->comboBoxNodes->count() > 0) { - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - QString formula = ui->plainTextEditFormulaWidthAfter->toPlainText(); - Eval(formula, m_flagFormulaAfter, ui->labelResultAfter, postfix, false, true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaWidthAfter->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditAfter; + formulaData.labelResult = ui->labelResultAfter; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; - formula = GetFormulaSAWidthAfter(); + const QString formula = GetFormulaSAWidthAfter(); if (formula != currentSeamAllowance) { ui->pushButtonDefAfter->setEnabled(true); @@ -802,7 +816,7 @@ void DialogPiecePath::EvalWidthAfter() } else { - ChangeColor(labelEditFormula, okColor); + ChangeColor(ui->labelEditAfter, OkColor(this)); ui->labelResultAfter->setText(tr("")); m_flagFormulaAfter = true; } @@ -811,9 +825,16 @@ void DialogPiecePath::EvalWidthAfter() //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::EvalVisible() { - labelEditFormula = ui->labelEditVisible; - QString formula = ui->plainTextEditFormulaVisible->toPlainText(); - Eval(formula, m_flagFormulaVisible, ui->labelResultVisible, QString(), false, true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaVisible->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditVisible; + formulaData.labelResult = ui->labelResultVisible; + formulaData.postfix = QString(); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; + + Eval(formulaData, m_flagFormulaVisible); } //--------------------------------------------------------------------------------------------------------------------- @@ -870,63 +891,28 @@ void DialogPiecePath::FXVisible() } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogPiecePath::WidthChanged() -{ - labelEditFormula = ui->labelEditWidth; - labelResultCalculation = ui->labelResultWidth; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagFormula, ui->plainTextEditFormulaWidth, m_timerWidth, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPiecePath::WidthBeforeChanged() -{ - labelEditFormula = ui->labelEditBefore; - labelResultCalculation = ui->labelResultBefore; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(m_flagFormulaBefore, ui->plainTextEditFormulaWidthBefore, m_timerWidthBefore, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPiecePath::WidthAfterChanged() -{ - labelEditFormula = ui->labelEditAfter; - labelResultCalculation = ui->labelResultAfter; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(m_flagFormulaAfter, ui->plainTextEditFormulaWidthAfter, m_timerWidthAfter, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPiecePath::VisibleChanged() -{ - labelEditFormula = ui->labelEditVisible; - labelResultCalculation = ui->labelResultVisible; - ValFormulaChanged(m_flagFormulaVisible, ui->plainTextEditFormulaVisible, m_timerVisible, QString()); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::DeployWidthFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormulaWidth, ui->pushButtonGrowWidth, m_formulaBaseWidth); + DeployFormula(this, ui->plainTextEditFormulaWidth, ui->pushButtonGrowWidth, m_formulaBaseWidth); } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::DeployWidthBeforeFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormulaWidthBefore, ui->pushButtonGrowWidthBefore, m_formulaBaseWidthBefore); + DeployFormula(this, ui->plainTextEditFormulaWidthBefore, ui->pushButtonGrowWidthBefore, m_formulaBaseWidthBefore); } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::DeployWidthAfterFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormulaWidthAfter, ui->pushButtonGrowWidthAfter, m_formulaBaseWidthAfter); + DeployFormula(this, ui->plainTextEditFormulaWidthAfter, ui->pushButtonGrowWidthAfter, m_formulaBaseWidthAfter); } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::DeployVisibleFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormulaVisible, ui->pushButtonGrowVisible, m_formulaBaseVisible); + DeployFormula(this, ui->plainTextEditFormulaVisible, ui->pushButtonGrowVisible, m_formulaBaseVisible); } //--------------------------------------------------------------------------------------------------------------------- @@ -994,7 +980,6 @@ void DialogPiecePath::InitPathTab() //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::InitSeamAllowanceTab() { - plainTextEditFormula = ui->plainTextEditFormulaWidth; this->m_formulaBaseWidth = ui->plainTextEditFormulaWidth->height(); this->m_formulaBaseWidthBefore = ui->plainTextEditFormulaWidthBefore->height(); this->m_formulaBaseWidthAfter = ui->plainTextEditFormulaWidthAfter->height(); @@ -1003,6 +988,10 @@ void DialogPiecePath::InitSeamAllowanceTab() ui->plainTextEditFormulaWidthBefore->installEventFilter(this); ui->plainTextEditFormulaWidthAfter->installEventFilter(this); + m_timerWidth->setSingleShot(true); + m_timerWidthBefore->setSingleShot(true); + m_timerWidthAfter->setSingleShot(true); + connect(m_timerWidth, &QTimer::timeout, this, &DialogPiecePath::EvalWidth); connect(m_timerWidthBefore, &QTimer::timeout, this, &DialogPiecePath::EvalWidthBefore); connect(m_timerWidthAfter, &QTimer::timeout, this, &DialogPiecePath::EvalWidthAfter); @@ -1026,11 +1015,20 @@ void DialogPiecePath::InitSeamAllowanceTab() connect(ui->toolButtonExprBefore, &QPushButton::clicked, this, &DialogPiecePath::FXWidthBefore); connect(ui->toolButtonExprAfter, &QPushButton::clicked, this, &DialogPiecePath::FXWidthAfter); - connect(ui->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, &DialogPiecePath::WidthChanged); - connect(ui->plainTextEditFormulaWidthBefore, &QPlainTextEdit::textChanged, this, - &DialogPiecePath::WidthBeforeChanged); - connect(ui->plainTextEditFormulaWidthAfter, &QPlainTextEdit::textChanged, this, - &DialogPiecePath::WidthAfterChanged); + connect(ui->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerWidth->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditFormulaWidthBefore, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerWidthBefore->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditFormulaWidthAfter, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerWidthAfter->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowWidth, &QPushButton::clicked, this, &DialogPiecePath::DeployWidthFormulaTextEdit); connect(ui->pushButtonGrowWidthBefore, &QPushButton::clicked, @@ -1061,9 +1059,14 @@ void DialogPiecePath::InitControlTab() ui->plainTextEditFormulaVisible->installEventFilter(this); + m_timerVisible->setSingleShot(true); + connect(m_timerVisible, &QTimer::timeout, this, &DialogPiecePath::EvalVisible); connect(ui->toolButtonExprVisible, &QPushButton::clicked, this, &DialogPiecePath::FXVisible); - connect(ui->plainTextEditFormulaVisible, &QPlainTextEdit::textChanged, this, &DialogPiecePath::VisibleChanged); + connect(ui->plainTextEditFormulaVisible, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerVisible->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowVisible, &QPushButton::clicked, this, &DialogPiecePath::DeployVisibleFormulaTextEdit); } @@ -1492,7 +1495,7 @@ bool DialogPiecePath::PathIsValid() const //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ValidObjects(bool value) { - flagError = value; + m_flagError = value; CheckState(); } diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h index 3f3510aea..c05ea3ace 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.h @@ -65,6 +65,7 @@ protected: virtual void CheckState() final; virtual void ShowVisualization() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private slots: void ShowContextMenu(const QPoint &pos); @@ -88,11 +89,6 @@ private slots: void FXWidthAfter(); void FXVisible(); - void WidthChanged(); - void WidthBeforeChanged(); - void WidthAfterChanged(); - void VisibleChanged(); - void DeployWidthFormulaTextEdit(); void DeployWidthBeforeFormulaTextEdit(); void DeployWidthAfterFormulaTextEdit(); @@ -119,6 +115,9 @@ private: bool m_flagFormulaBefore; bool m_flagFormulaAfter; bool m_flagFormulaVisible; + bool m_flagName; + bool m_flagError; + bool m_flagFormula; void InitPathTab(); void InitSeamAllowanceTab(); @@ -165,6 +164,14 @@ private: void RefreshPathList(const VPiecePath &path); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPiecePath::IsValid() const +{ + return m_flagName && m_flagError && m_flagFormula && m_flagFormulaBefore && m_flagFormulaAfter + && m_flagFormulaVisible; +} + +//--------------------------------------------------------------------------------------------------------------------- inline bool DialogPiecePath::IsShowNotch() const { return m_showMode && GetType() == PiecePathType::CustomSeamAllowance; diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpin.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpin.cpp index f5f3ca625..87885a7d3 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpin.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogpin.cpp @@ -36,16 +36,14 @@ DialogPin::DialogPin(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogPin), m_showMode(false), - m_flagPoint(false) + m_flagPoint(false), + m_flagError(false) { ui->setupUi(this); InitOkCancel(ui); FillComboBoxPoints(ui->comboBoxPoint); - flagError = false; - CheckState(); - connect(ui->comboBoxPiece, QOverload::of(&QComboBox::currentIndexChanged), this, [this]() { CheckPieces(); @@ -143,13 +141,6 @@ void DialogPin::ChosenObject(quint32 id, const SceneObject &type) } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogPin::CheckState() -{ - SCASSERT(bOk != nullptr); - bOk->setEnabled(m_flagPoint && flagError); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogPin::ShowVisualization() { @@ -161,16 +152,16 @@ void DialogPin::CheckPieces() { if (not m_showMode) { - QColor color = okColor; + QColor color; if (ui->comboBoxPiece->count() <= 0 || ui->comboBoxPiece->currentIndex() == -1) { - flagError = false; + m_flagError = false; color = errorColor; } else { - flagError = true; - color = okColor; + m_flagError = true; + color = OkColor(this); } ChangeColor(ui->labelPiece, color); CheckState(); @@ -180,11 +171,11 @@ void DialogPin::CheckPieces() //--------------------------------------------------------------------------------------------------------------------- void DialogPin::CheckPoint() { - QColor color = okColor; + QColor color; if (ui->comboBoxPoint->currentIndex() != -1) { m_flagPoint = true; - color = okColor; + color = OkColor(this); } else { diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpin.h b/src/libs/vtools/dialogs/tools/piece/dialogpin.h index f47738ca3..04c4e90aa 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpin.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogpin.h @@ -57,17 +57,24 @@ public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; protected: - virtual void CheckState() final; virtual void ShowVisualization() override; + virtual bool IsValid() const final; private: Q_DISABLE_COPY(DialogPin) Ui::DialogPin *ui; - bool m_showMode; - bool m_flagPoint; + bool m_showMode; + bool m_flagPoint; + bool m_flagError; void CheckPieces(); void CheckPoint(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPin::IsValid() const +{ + return m_flagPoint && m_flagError; +} + #endif // DIALOGPIN_H diff --git a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp index 318931283..bb1c4cc6d 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.cpp @@ -41,11 +41,6 @@ DialogPlaceLabel::DialogPlaceLabel(const VContainer *data, quint32 toolId, QWidg : DialogTool(data, toolId, parent), ui(new Ui::DialogPlaceLabel), m_showMode(false), - m_flagPoint(false), - m_flagWidth(false), - m_flagHeight(false), - m_flagAngle(false), - m_flagFormulaVisible(false), m_formulaBaseHeightWidth(0), m_formulaBaseHeightHeight(0), m_formulaBaseHeightAngle(0), @@ -53,7 +48,13 @@ DialogPlaceLabel::DialogPlaceLabel(const VContainer *data, quint32 toolId, QWidg timerAngle(new QTimer(this)), timerWidth(new QTimer(this)), timerHeight(new QTimer(this)), - m_timerVisible(new QTimer(this)) + m_timerVisible(new QTimer(this)), + m_flagPoint(false), + m_flagWidth(false), + m_flagHeight(false), + m_flagAngle(false), + m_flagFormulaVisible(false), + m_flagError(false) { ui->setupUi(this); InitOkCancel(ui); @@ -63,9 +64,6 @@ DialogPlaceLabel::DialogPlaceLabel(const VContainer *data, quint32 toolId, QWidg EvalVisible(); - flagError = false; - CheckState(); - connect(ui->comboBoxPiece, QOverload::of(&QComboBox::currentIndexChanged), this, [this]() { CheckPieces(); @@ -255,9 +253,9 @@ void DialogPlaceLabel::ChosenObject(quint32 id, const SceneObject &type) CheckPoint(); prepare = true; - FormulaWidthChanged(); - FormulaHeightChanged(); - FormulaAngleChanged(); + timerWidth->setSingleShot(formulaTimerTimeout); + timerHeight->setSingleShot(formulaTimerTimeout); + timerAngle->setSingleShot(formulaTimerTimeout); this->setModal(true); this->show(); @@ -266,13 +264,6 @@ void DialogPlaceLabel::ChosenObject(quint32 id, const SceneObject &type) } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogPlaceLabel::CheckState() -{ - SCASSERT(bOk != nullptr); - bOk->setEnabled(m_flagPoint && flagError && m_flagWidth && m_flagHeight && m_flagAngle && m_flagFormulaVisible); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::ShowVisualization() { @@ -295,93 +286,82 @@ void DialogPlaceLabel::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::DeployFormulaWidthEdit() { - DeployFormula(ui->plainTextEditFormulaWidth, ui->pushButtonGrowWidth, m_formulaBaseHeightWidth); + DeployFormula(this, ui->plainTextEditFormulaWidth, ui->pushButtonGrowWidth, m_formulaBaseHeightWidth); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::DeployFormulaHeightEdit() { - DeployFormula(ui->plainTextEditFormulaHeight, ui->pushButtonGrowHeight, m_formulaBaseHeightHeight); + DeployFormula(this, ui->plainTextEditFormulaHeight, ui->pushButtonGrowHeight, m_formulaBaseHeightHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::DeployFormulaAngleEdit() { - DeployFormula(ui->plainTextEditFormulaAngle, ui->pushButtonGrowAngle, m_formulaBaseHeightAngle); + DeployFormula(this, ui->plainTextEditFormulaAngle, ui->pushButtonGrowAngle, m_formulaBaseHeightAngle); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::DeployVisibleFormulaTextEdit() { - DeployFormula(ui->plainTextEditFormulaVisible, ui->pushButtonGrowVisible, m_formulaBaseVisible); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPlaceLabel::FormulaWidthChanged() -{ - labelEditFormula = ui->labelEditFormulaWidth; - labelResultCalculation = ui->labelResultCalculationWidth; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(m_flagWidth, ui->plainTextEditFormulaWidth, timerWidth, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPlaceLabel::FormulaHeightChanged() -{ - labelEditFormula = ui->labelEditFormulaHeight; - labelResultCalculation = ui->labelResultCalculationHeight; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(m_flagHeight, ui->plainTextEditFormulaHeight, timerHeight, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPlaceLabel::FormulaAngleChanged() -{ - labelEditFormula = ui->labelEditFormulaAngle; - labelResultCalculation = ui->labelResultCalculationAngle; - ValFormulaChanged(m_flagAngle, ui->plainTextEditFormulaAngle, timerAngle, degreeSymbol); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPlaceLabel::VisibleChanged() -{ - labelEditFormula = ui->labelEditVisible; - labelResultCalculation = ui->labelResultVisible; - ValFormulaChanged(m_flagFormulaVisible, ui->plainTextEditFormulaVisible, m_timerVisible, QString()); + DeployFormula(this, ui->plainTextEditFormulaVisible, ui->pushButtonGrowVisible, m_formulaBaseVisible); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::EvalWidth() { - labelEditFormula = ui->labelEditFormulaWidth; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - Eval(ui->plainTextEditFormulaWidth->toPlainText(), m_flagWidth, ui->labelResultCalculationWidth, postfix, true, - true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaWidth->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormulaWidth; + formulaData.labelResult = ui->labelResultCalculationWidth; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkLessThanZero = true; + + Eval(formulaData, m_flagWidth); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::EvalHeight() { - labelEditFormula = ui->labelEditFormulaHeight; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - Eval(ui->plainTextEditFormulaHeight->toPlainText(), m_flagHeight, ui->labelResultCalculationHeight, postfix, true, - true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaHeight->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormulaHeight; + formulaData.labelResult = ui->labelResultCalculationHeight; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkLessThanZero = true; + + Eval(formulaData, m_flagHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::EvalAngle() { - labelEditFormula = ui->labelEditFormulaAngle; - Eval(ui->plainTextEditFormulaAngle->toPlainText(), m_flagAngle, ui->labelResultCalculationAngle, degreeSymbol, - false); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaAngle->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditFormulaAngle; + formulaData.labelResult = ui->labelResultCalculationAngle; + formulaData.postfix = degreeSymbol; + formulaData.checkZero = false; + + Eval(formulaData, m_flagAngle); } //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::EvalVisible() { - labelEditFormula = ui->labelEditVisible; - QString formula = ui->plainTextEditFormulaVisible->toPlainText(); - Eval(formula, m_flagFormulaVisible, ui->labelResultVisible, QString(), false, true); + FormulaData formulaData; + formulaData.formula = ui->plainTextEditFormulaVisible->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = ui->labelEditVisible; + formulaData.labelResult = ui->labelResultVisible; + formulaData.postfix = QString(); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; + + Eval(formulaData, m_flagFormulaVisible); } //--------------------------------------------------------------------------------------------------------------------- @@ -456,15 +436,29 @@ void DialogPlaceLabel::InitPlaceLabelTab() connect(ui->toolButtonExprHeight, &QPushButton::clicked, this, &DialogPlaceLabel::FXHeight); connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogPlaceLabel::FXAngle); - connect(ui->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, &DialogPlaceLabel::FormulaWidthChanged); - connect(ui->plainTextEditFormulaHeight, &QPlainTextEdit::textChanged, this, - &DialogPlaceLabel::FormulaHeightChanged); - connect(ui->plainTextEditFormulaAngle, &QPlainTextEdit::textChanged, this, &DialogPlaceLabel::FormulaAngleChanged); + connect(ui->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, [this]() + { + timerWidth->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditFormulaHeight, &QPlainTextEdit::textChanged, this, [this]() + { + timerHeight->start(formulaTimerTimeout); + }); + + connect(ui->plainTextEditFormulaAngle, &QPlainTextEdit::textChanged, this, [this]() + { + timerAngle->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowWidth, &QPushButton::clicked, this, &DialogPlaceLabel::DeployFormulaWidthEdit); connect(ui->pushButtonGrowHeight, &QPushButton::clicked, this, &DialogPlaceLabel::DeployFormulaHeightEdit); connect(ui->pushButtonGrowAngle, &QPushButton::clicked, this, &DialogPlaceLabel::DeployFormulaAngleEdit); + timerWidth->setSingleShot(true); + timerHeight->setSingleShot(true); + timerAngle->setSingleShot(true); + connect(timerWidth, &QTimer::timeout, this, &DialogPlaceLabel::EvalWidth); connect(timerHeight, &QTimer::timeout, this, &DialogPlaceLabel::EvalHeight); connect(timerAngle, &QTimer::timeout, this, &DialogPlaceLabel::EvalAngle); @@ -477,9 +471,14 @@ void DialogPlaceLabel::InitControlTab() ui->plainTextEditFormulaVisible->installEventFilter(this); + m_timerVisible->setSingleShot(true); + connect(m_timerVisible, &QTimer::timeout, this, &DialogPlaceLabel::EvalVisible); connect(ui->toolButtonExprVisible, &QPushButton::clicked, this, &DialogPlaceLabel::FXVisible); - connect(ui->plainTextEditFormulaVisible, &QPlainTextEdit::textChanged, this, &DialogPlaceLabel::VisibleChanged); + connect(ui->plainTextEditFormulaVisible, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerVisible->start(formulaTimerTimeout); + }); connect(ui->pushButtonGrowVisible, &QPushButton::clicked, this, &DialogPlaceLabel::DeployVisibleFormulaTextEdit); } @@ -503,16 +502,16 @@ void DialogPlaceLabel::CheckPieces() { if (not m_showMode) { - QColor color = okColor; + QColor color; if (ui->comboBoxPiece->count() <= 0 || ui->comboBoxPiece->currentIndex() == -1) { - flagError = false; + m_flagError = false; color = errorColor; } else { - flagError = true; - color = okColor; + m_flagError = true; + color = OkColor(this); } ChangeColor(ui->labelPiece, color); CheckState(); @@ -522,11 +521,11 @@ void DialogPlaceLabel::CheckPieces() //--------------------------------------------------------------------------------------------------------------------- void DialogPlaceLabel::CheckPoint() { - QColor color = okColor; + QColor color; if (ui->comboBoxPoint->currentIndex() != -1) { m_flagPoint = true; - color = okColor; + color = OkColor(this); } else { diff --git a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h index 8cdfbffe7..5874710c9 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogplacelabel.h @@ -74,9 +74,9 @@ public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; protected: - virtual void CheckState() final; virtual void ShowVisualization() override; virtual void closeEvent(QCloseEvent *event) override; + virtual bool IsValid() const final; private slots: void DeployFormulaWidthEdit(); @@ -84,11 +84,6 @@ private slots: void DeployFormulaAngleEdit(); void DeployVisibleFormulaTextEdit(); - void FormulaWidthChanged(); - void FormulaHeightChanged(); - void FormulaAngleChanged(); - void VisibleChanged(); - void EvalWidth(); void EvalHeight(); void EvalAngle(); @@ -103,11 +98,6 @@ private: Q_DISABLE_COPY(DialogPlaceLabel) Ui::DialogPlaceLabel *ui; bool m_showMode; - bool m_flagPoint; - bool m_flagWidth; - bool m_flagHeight; - bool m_flagAngle; - bool m_flagFormulaVisible; /** @brief formulaBaseHeight base height defined by dialogui */ int m_formulaBaseHeightWidth; @@ -120,6 +110,13 @@ private: QTimer *timerHeight; QTimer *m_timerVisible; + bool m_flagPoint; + bool m_flagWidth; + bool m_flagHeight; + bool m_flagAngle; + bool m_flagFormulaVisible; + bool m_flagError; + void InitPlaceLabelTab(); void InitControlTab(); @@ -129,4 +126,10 @@ private: void CheckPoint(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogPlaceLabel::IsValid() const +{ + return m_flagPoint && m_flagError && m_flagWidth && m_flagHeight && m_flagAngle && m_flagFormulaVisible; +} + #endif // DIALOGPLACELABEL_H diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp index 460261495..c47af9ecf 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp @@ -48,6 +48,7 @@ #include "../../support/dialogeditlabel.h" #include "../../../tools/vtoolseamallowance.h" #include "../vgeometry/vplacelabelitem.h" +#include "../../dialogtoolbox.h" #include #include @@ -77,7 +78,7 @@ QString GetFormulaFromUser(QPlainTextEdit *textEdit) } //--------------------------------------------------------------------------------------------------------------------- -DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const VAbstractPattern *doc, const quint32 &toolId, +DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const VAbstractPattern *doc, quint32 toolId, QWidget *parent) : DialogSeamAllowance(data, toolId, parent) { @@ -86,7 +87,7 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const VAbstract } //--------------------------------------------------------------------------------------------------------------------- -DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 &toolId, QWidget *parent) +DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogSeamAllowance), uiTabPaths(new Ui::TabPaths), @@ -114,6 +115,8 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 & flagFormulaBefore(true), flagFormulaAfter(true), flagMainPathIsValid(true), + flagName(true), //We have default name of piece. + flagFormula(false), m_bAddMode(true), m_dialog(), m_visSpecialPoints(), @@ -128,9 +131,9 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 & m_formulaBaseWidth(0), m_formulaBaseWidthBefore(0), m_formulaBaseWidthAfter(0), - m_timerWidth(nullptr), - m_timerWidthBefore(nullptr), - m_timerWidthAfter(nullptr), + m_timerWidth(new QTimer(this)), + m_timerWidthBefore(new QTimer(this)), + m_timerWidthAfter(new QTimer(this)), m_saWidth(0), m_templateLines(), m_undoStack(), @@ -153,10 +156,8 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 & InitPassmarksTab(); InitPlaceLabelsTab(); - flagName = true;//We have default name of piece. - ChangeColor(uiTabPaths->labelEditName, okColor); + ChangeColor(uiTabPaths->labelEditName, OkColor(this)); flagMainPathIsValid = MainPathIsValid(); - CheckState(); m_ftb->SetCurrentIndex(TabOrder::Paths);// Show always first tab active on start. } @@ -177,6 +178,14 @@ DialogSeamAllowance::~DialogSeamAllowance() delete uiTabLabels; delete uiTabPaths; delete ui; + + for (auto &command : m_undoStack) + { + if (not command.isNull()) + { + delete command; + } + } } //--------------------------------------------------------------------------------------------------------------------- @@ -308,8 +317,8 @@ void DialogSeamAllowance::SetPiece(const VPiece &piece) uiTabPaths->checkBoxBuiltIn->setChecked(piece.IsSeamAllowanceBuiltIn()); uiTabPaths->lineEditName->setText(piece.GetName()); - const QString width = qApp->TrVars()->FormulaToUser(piece.GetFormulaSAWidth(), qApp->Settings()->GetOsSeparator()); - uiTabPaths->plainTextEditFormulaWidth->setPlainText(width); + uiTabPaths->plainTextEditFormulaWidth->setPlainText( + qApp->TrVars()->FormulaToUser(piece.GetFormulaSAWidth(), qApp->Settings()->GetOsSeparator())); m_saWidth = piece.GetSAWidth(); const VPieceLabelData &ppData = piece.GetPatternPieceData(); @@ -471,9 +480,7 @@ void DialogSeamAllowance::SaveData() void DialogSeamAllowance::CheckState() { SCASSERT(bOk != nullptr); - bOk->setEnabled(flagName && flagMainPathIsValid && flagFormula && flagFormulaBefore && flagFormulaAfter - && (flagGFormulas || flagGPin) && flagDLAngle && (flagDLFormulas || flagDPin) && flagPLAngle - && (flagPLFormulas || flagPPin)); + bOk->setEnabled(IsValid()); // In case dialog hasn't apply button if ( bApply != nullptr && applyAllowed) { @@ -581,12 +588,12 @@ void DialogSeamAllowance::NameDetailChanged() if (edit->text().isEmpty()) { flagName = false; - ChangeColor(uiTabPaths->labelEditName, Qt::red); + ChangeColor(uiTabPaths->labelEditName, errorColor); } else { flagName = true; - ChangeColor(uiTabPaths->labelEditName, okColor); + ChangeColor(uiTabPaths->labelEditName, OkColor(this)); } } CheckState(); @@ -811,9 +818,9 @@ void DialogSeamAllowance::ShowPlaceLabelsContextMenu(const QPoint &pos) newLabel.SetLabelType(type); m_newPlaceLabels.insert(labelId, newLabel); - SavePlaceLabelOptions *saveCommand = new SavePlaceLabelOptions(toolId, currentLabel, newLabel, - qApp->getCurrentDocument(), - const_cast(data), labelId); + QPointer saveCommand = + new SavePlaceLabelOptions(toolId, currentLabel, newLabel, qApp->getCurrentDocument(), + const_cast(data), labelId); m_undoStack.append(saveCommand); UpdateCurrentPlaceLabelRecords(); }; @@ -1270,10 +1277,9 @@ void DialogSeamAllowance::PathDialogClosed(int result) VPiecePath newPath = dialogTool->GetPiecePath(); m_newPaths.insert(dialogTool->GetToolId(), newPath); - SavePiecePathOptions *saveCommand = new SavePiecePathOptions(toolId, currentPath, newPath, - qApp->getCurrentDocument(), - const_cast(data), - dialogTool->GetToolId()); + QPointer saveCommand = + new SavePiecePathOptions(toolId, currentPath, newPath, qApp->getCurrentDocument(), + const_cast(data), dialogTool->GetToolId()); m_undoStack.append(saveCommand); UpdateCurrentCustomSARecord(); UpdateCurrentInternalPathRecord(); @@ -1323,10 +1329,9 @@ void DialogSeamAllowance::PlaceLabelDialogClosed(int result) m_newPlaceLabels.insert(dialogTool->GetToolId(), newLabel); - SavePlaceLabelOptions *saveCommand = new SavePlaceLabelOptions(toolId, currentLabel, newLabel, - qApp->getCurrentDocument(), - const_cast(data), - dialogTool->GetToolId()); + QPointer saveCommand = + new SavePlaceLabelOptions(toolId, currentLabel, newLabel, qApp->getCurrentDocument(), + const_cast(data), dialogTool->GetToolId()); m_undoStack.append(saveCommand); UpdateCurrentPlaceLabelRecords(); } @@ -1576,13 +1581,13 @@ void DialogSeamAllowance::UpdateGrainlineValues() else { qsVal.setNum(dVal, 'f', 2); - ChangeColor(plbText, okColor); + ChangeColor(plbText, OkColor(this)); } } catch (qmu::QmuParserError &e) { qsVal = tr("Error"); - not flagGPin ? ChangeColor(plbText, Qt::red) : ChangeColor(plbText, okColor); + not flagGPin ? ChangeColor(plbText, errorColor) : ChangeColor(plbText, OkColor(this)); bFormulasOK[i] = false; plbVal->setToolTip(tr("Parser error: %1").arg(e.GetMsg())); } @@ -1658,13 +1663,13 @@ void DialogSeamAllowance::UpdateDetailLabelValues() else { qsVal.setNum(dVal, 'f', 2); - ChangeColor(plbText, okColor); + ChangeColor(plbText, OkColor(this)); } } catch (qmu::QmuParserError &e) { qsVal = tr("Error"); - not flagDPin ? ChangeColor(plbText, Qt::red) : ChangeColor(plbText, okColor); + not flagDPin ? ChangeColor(plbText, errorColor) : ChangeColor(plbText, OkColor(this)); bFormulasOK[i] = false; plbVal->setToolTip(tr("Parser error: %1").arg(e.GetMsg())); } @@ -1743,13 +1748,13 @@ void DialogSeamAllowance::UpdatePatternLabelValues() else { qsVal.setNum(dVal, 'f', 2); - ChangeColor(plbText, okColor); + ChangeColor(plbText, OkColor(this)); } } catch (qmu::QmuParserError &e) { qsVal = tr("Error"); - not flagPPin ? ChangeColor(plbText, Qt::red) : ChangeColor(plbText, okColor); + not flagPPin ? ChangeColor(plbText, errorColor) : ChangeColor(plbText, OkColor(this)); bFormulasOK[i] = false; plbVal->setToolTip(tr("Parser error: %1").arg(e.GetMsg())); } @@ -1997,49 +2002,51 @@ void DialogSeamAllowance::EditPLFormula() //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployGrainlineRotation() { - DeployFormula(uiTabGrainline->lineEditRotFormula, uiTabGrainline->pushButtonShowRot, m_iRotBaseHeight); + DeployFormula(this, uiTabGrainline->lineEditRotFormula, uiTabGrainline->pushButtonShowRot, m_iRotBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployGrainlineLength() { - DeployFormula(uiTabGrainline->lineEditLenFormula, uiTabGrainline->pushButtonShowLen, m_iLenBaseHeight); + DeployFormula(this,uiTabGrainline->lineEditLenFormula, uiTabGrainline->pushButtonShowLen, m_iLenBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployDLWidth() { - DeployFormula(uiTabLabels->lineEditDLWidthFormula, uiTabLabels->pushButtonShowDLWidth, m_DLWidthBaseHeight); + DeployFormula(this, uiTabLabels->lineEditDLWidthFormula, uiTabLabels->pushButtonShowDLWidth, m_DLWidthBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployDLHeight() { - DeployFormula(uiTabLabels->lineEditDLHeightFormula, uiTabLabels->pushButtonShowDLHeight, m_DLHeightBaseHeight); + DeployFormula(this, uiTabLabels->lineEditDLHeightFormula, uiTabLabels->pushButtonShowDLHeight, + m_DLHeightBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployDLAngle() { - DeployFormula(uiTabLabels->lineEditDLAngleFormula, uiTabLabels->pushButtonShowDLAngle, m_DLAngleBaseHeight); + DeployFormula(this, uiTabLabels->lineEditDLAngleFormula, uiTabLabels->pushButtonShowDLAngle, m_DLAngleBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployPLWidth() { - DeployFormula(uiTabLabels->lineEditPLWidthFormula, uiTabLabels->pushButtonShowPLWidth, m_PLWidthBaseHeight); + DeployFormula(this, uiTabLabels->lineEditPLWidthFormula, uiTabLabels->pushButtonShowPLWidth, m_PLWidthBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployPLHeight() { - DeployFormula(uiTabLabels->lineEditPLHeightFormula, uiTabLabels->pushButtonShowPLHeight, m_PLHeightBaseHeight); + DeployFormula(this, uiTabLabels->lineEditPLHeightFormula, uiTabLabels->pushButtonShowPLHeight, + m_PLHeightBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployPLAngle() { - DeployFormula(uiTabLabels->lineEditPLAngleFormula, uiTabLabels->pushButtonShowPLAngle, m_PLAngleBaseHeight); + DeployFormula(this, uiTabLabels->lineEditPLAngleFormula, uiTabLabels->pushButtonShowPLAngle, m_PLAngleBaseHeight); } //--------------------------------------------------------------------------------------------------------------------- @@ -2064,10 +2071,16 @@ void DialogSeamAllowance::ResetLabelsWarning() //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::EvalWidth() { - labelEditFormula = uiTabPaths->labelEditWidth; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const QString formula = uiTabPaths->plainTextEditFormulaWidth->toPlainText(); - m_saWidth = Eval(formula, flagFormula, uiTabPaths->labelResultWidth, postfix, false, true); + FormulaData formulaData; + formulaData.formula = uiTabPaths->plainTextEditFormulaWidth->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = uiTabPaths->labelEditWidth; + formulaData.labelResult = uiTabPaths->labelResultWidth; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; + + m_saWidth = Eval(formulaData, flagFormula); if (m_saWidth >= 0) { @@ -2089,12 +2102,18 @@ void DialogSeamAllowance::EvalWidthBefore() { if (uiTabPaths->checkBoxSeams->isChecked()) { - labelEditFormula = uiTabPaths->labelEditBefore; if (uiTabPaths->comboBoxNodes->count() > 0) { - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const QString formula = uiTabPaths->plainTextEditFormulaWidthBefore->toPlainText(); - Eval(formula, flagFormulaBefore, uiTabPaths->labelResultBefore, postfix, false, true); + FormulaData formulaData; + formulaData.formula = uiTabPaths->plainTextEditFormulaWidthBefore->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = uiTabPaths->labelEditBefore; + formulaData.labelResult = uiTabPaths->labelResultBefore; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; + + Eval(formulaData, flagFormulaBefore); const QString formulaSABefore = GetFormulaFromUser(uiTabPaths->plainTextEditFormulaWidthBefore); UpdateNodeSABefore(formulaSABefore); @@ -2102,7 +2121,7 @@ void DialogSeamAllowance::EvalWidthBefore() } else { - ChangeColor(labelEditFormula, okColor); + ChangeColor(uiTabPaths->labelEditBefore, OkColor(this)); uiTabPaths->labelResultBefore->setText(tr("")); flagFormulaBefore = true; } @@ -2114,12 +2133,18 @@ void DialogSeamAllowance::EvalWidthAfter() { if (uiTabPaths->checkBoxSeams->isChecked()) { - labelEditFormula = uiTabPaths->labelEditAfter; if (uiTabPaths->comboBoxNodes->count() > 0) { - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - const QString formula = uiTabPaths->plainTextEditFormulaWidthAfter->toPlainText(); - Eval(formula, flagFormulaAfter, uiTabPaths->labelResultAfter, postfix, false, true); + FormulaData formulaData; + formulaData.formula = uiTabPaths->plainTextEditFormulaWidthAfter->toPlainText(); + formulaData.variables = data->DataVariables(); + formulaData.labelEditFormula = uiTabPaths->labelEditAfter; + formulaData.labelResult = uiTabPaths->labelResultAfter; + formulaData.postfix = UnitsToStr(qApp->patternUnit(), true); + formulaData.checkZero = false; + formulaData.checkLessThanZero = true; + + Eval(formulaData, flagFormulaAfter); const QString formulaSAAfter = GetFormulaFromUser(uiTabPaths->plainTextEditFormulaWidthAfter); UpdateNodeSAAfter(formulaSAAfter); @@ -2127,7 +2152,7 @@ void DialogSeamAllowance::EvalWidthAfter() } else { - ChangeColor(labelEditFormula, okColor); + ChangeColor(uiTabPaths->labelEditAfter, OkColor(this)); uiTabPaths->labelResultAfter->setText(tr("")); flagFormulaAfter = true; } @@ -2137,7 +2162,7 @@ void DialogSeamAllowance::EvalWidthAfter() //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::FXWidth() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + QScopedPointer dialog(new DialogEditWrongFormula(data, toolId, this)); dialog->setWindowTitle(tr("Edit seam allowance width")); dialog->SetFormula(GetFormulaSAWidth()); dialog->setCheckLessThanZero(true); @@ -2146,13 +2171,12 @@ void DialogSeamAllowance::FXWidth() { SetFormulaSAWidth(dialog->GetFormula()); } - delete dialog; } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::FXWidthBefore() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + QScopedPointer dialog(new DialogEditWrongFormula(data, toolId, this)); dialog->setWindowTitle(tr("Edit seam allowance width before")); dialog->SetFormula(GetFormulaFromUser(uiTabPaths->plainTextEditFormulaWidthBefore)); dialog->setCheckLessThanZero(true); @@ -2161,13 +2185,12 @@ void DialogSeamAllowance::FXWidthBefore() { SetCurrentSABefore(dialog->GetFormula()); } - delete dialog; } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::FXWidthAfter() { - DialogEditWrongFormula *dialog = new DialogEditWrongFormula(data, toolId, this); + QScopedPointer dialog(new DialogEditWrongFormula(data, toolId, this)); dialog->setWindowTitle(tr("Edit seam allowance width after")); dialog->SetFormula(GetFormulaFromUser(uiTabPaths->plainTextEditFormulaWidthAfter)); dialog->setCheckLessThanZero(true); @@ -2176,79 +2199,45 @@ void DialogSeamAllowance::FXWidthAfter() { SetCurrentSAAfter(dialog->GetFormula()); } - delete dialog; -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSeamAllowance::WidthChanged() -{ - labelEditFormula = uiTabPaths->labelEditWidth; - labelResultCalculation = uiTabPaths->labelResultWidth; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagFormula, uiTabPaths->plainTextEditFormulaWidth, m_timerWidth, postfix); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSeamAllowance::WidthBeforeChanged() -{ - if (uiTabPaths->checkBoxSeams->isChecked()) - { - labelEditFormula = uiTabPaths->labelEditBefore; - labelResultCalculation = uiTabPaths->labelResultBefore; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagFormulaBefore, uiTabPaths->plainTextEditFormulaWidthBefore, m_timerWidthBefore, postfix); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSeamAllowance::WidthAfterChanged() -{ - if (uiTabPaths->checkBoxSeams->isChecked()) - { - labelEditFormula = uiTabPaths->labelEditAfter; - labelResultCalculation = uiTabPaths->labelResultAfter; - const QString postfix = UnitsToStr(qApp->patternUnit(), true); - ValFormulaChanged(flagFormulaAfter, uiTabPaths->plainTextEditFormulaWidthAfter, m_timerWidthAfter, postfix); - } } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployWidthFormulaTextEdit() { - DeployFormula(uiTabPaths->plainTextEditFormulaWidth, uiTabPaths->pushButtonGrowWidth, m_formulaBaseWidth); + DeployFormula(this, uiTabPaths->plainTextEditFormulaWidth, uiTabPaths->pushButtonGrowWidth, m_formulaBaseWidth); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployWidthBeforeFormulaTextEdit() { - DeployFormula(uiTabPaths->plainTextEditFormulaWidthBefore, uiTabPaths->pushButtonGrowWidthBefore, + DeployFormula(this, uiTabPaths->plainTextEditFormulaWidthBefore, uiTabPaths->pushButtonGrowWidthBefore, m_formulaBaseWidthBefore); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DeployWidthAfterFormulaTextEdit() { - DeployFormula(uiTabPaths->plainTextEditFormulaWidthAfter, uiTabPaths->pushButtonGrowWidthAfter, + DeployFormula(this, uiTabPaths->plainTextEditFormulaWidthAfter, uiTabPaths->pushButtonGrowWidthAfter, m_formulaBaseWidthAfter); } //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::GrainlinePinPointChanged() { - QColor color = okColor; + QColor color; const quint32 topPinId = getCurrentObjectId(uiTabGrainline->comboBoxGrainlineTopPin); const quint32 bottomPinId = getCurrentObjectId(uiTabGrainline->comboBoxGrainlineBottomPin); if (topPinId != NULL_ID && bottomPinId != NULL_ID && topPinId != bottomPinId) { flagGPin = true; - color = okColor; + color = OkColor(this); ResetGrainlineWarning(); } else { flagGPin = false; - topPinId == NULL_ID && bottomPinId == NULL_ID ? color = okColor : color = errorColor; + topPinId == NULL_ID && bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor; if (not flagGFormulas && not flagGPin) { @@ -2265,13 +2254,13 @@ void DialogSeamAllowance::GrainlinePinPointChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::DetailPinPointChanged() { - QColor color = okColor; + QColor color; const quint32 topPinId = getCurrentObjectId(uiTabLabels->comboBoxDLTopLeftPin); const quint32 bottomPinId = getCurrentObjectId(uiTabLabels->comboBoxDLBottomRightPin); if (topPinId != NULL_ID && bottomPinId != NULL_ID && topPinId != bottomPinId) { flagDPin = true; - color = okColor; + color = OkColor(this); if (flagPPin) { @@ -2282,7 +2271,7 @@ void DialogSeamAllowance::DetailPinPointChanged() else { flagDPin = false; - topPinId == NULL_ID && bottomPinId == NULL_ID ? color = okColor : color = errorColor; + topPinId == NULL_ID && bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor; m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*'); const QIcon icon = QIcon::fromTheme("dialog-warning", @@ -2299,13 +2288,13 @@ void DialogSeamAllowance::DetailPinPointChanged() //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::PatternPinPointChanged() { - QColor color = okColor; + QColor color; const quint32 topPinId = getCurrentObjectId(uiTabLabels->comboBoxPLTopLeftPin); const quint32 bottomPinId = getCurrentObjectId(uiTabLabels->comboBoxPLBottomRightPin); if (topPinId != NULL_ID && bottomPinId != NULL_ID && topPinId != bottomPinId) { flagPPin = true; - color = okColor; + color = OkColor(this); if (flagDPin) { @@ -2316,7 +2305,7 @@ void DialogSeamAllowance::PatternPinPointChanged() else { flagPPin = false; - topPinId == NULL_ID && bottomPinId == NULL_ID ? color = okColor : color = errorColor; + topPinId == NULL_ID && bottomPinId == NULL_ID ? color = OkColor(this) : color = errorColor; m_ftb->SetTabText(TabOrder::Labels, tr("Labels") + '*'); const QIcon icon = QIcon::fromTheme("dialog-warning", @@ -2765,7 +2754,6 @@ void DialogSeamAllowance::InitMainPathTab() //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::InitSeamAllowanceTab() { - plainTextEditFormula = uiTabPaths->plainTextEditFormulaWidth; this->m_formulaBaseWidth = uiTabPaths->plainTextEditFormulaWidth->height(); this->m_formulaBaseWidthBefore = uiTabPaths->plainTextEditFormulaWidthBefore->height(); this->m_formulaBaseWidthAfter = uiTabPaths->plainTextEditFormulaWidthAfter->height(); @@ -2774,13 +2762,13 @@ void DialogSeamAllowance::InitSeamAllowanceTab() uiTabPaths->plainTextEditFormulaWidthBefore->installEventFilter(this); uiTabPaths->plainTextEditFormulaWidthAfter->installEventFilter(this); - m_timerWidth = new QTimer(this); + m_timerWidth->setSingleShot(true); connect(m_timerWidth, &QTimer::timeout, this, &DialogSeamAllowance::EvalWidth); - m_timerWidthBefore = new QTimer(this); + m_timerWidthBefore->setSingleShot(true); connect(m_timerWidthBefore, &QTimer::timeout, this, &DialogSeamAllowance::EvalWidthBefore); - m_timerWidthAfter = new QTimer(this); + m_timerWidthAfter->setSingleShot(true); connect(m_timerWidthAfter, &QTimer::timeout, this, &DialogSeamAllowance::EvalWidthAfter); connect(uiTabPaths->checkBoxSeams, &QCheckBox::toggled, this, &DialogSeamAllowance::EnableSeamAllowance); @@ -2818,12 +2806,20 @@ void DialogSeamAllowance::InitSeamAllowanceTab() connect(uiTabPaths->toolButtonExprBefore, &QPushButton::clicked, this, &DialogSeamAllowance::FXWidthBefore); connect(uiTabPaths->toolButtonExprAfter, &QPushButton::clicked, this, &DialogSeamAllowance::FXWidthAfter); - connect(uiTabPaths->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, - &DialogSeamAllowance::WidthChanged); - connect(uiTabPaths->plainTextEditFormulaWidthBefore, &QPlainTextEdit::textChanged, this, - &DialogSeamAllowance::WidthBeforeChanged); - connect(uiTabPaths->plainTextEditFormulaWidthAfter, &QPlainTextEdit::textChanged, this, - &DialogSeamAllowance::WidthAfterChanged); + connect(uiTabPaths->plainTextEditFormulaWidth, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerWidth->start(formulaTimerTimeout); + }); + + connect(uiTabPaths->plainTextEditFormulaWidthBefore, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerWidthBefore->start(formulaTimerTimeout); + }); + + connect(uiTabPaths->plainTextEditFormulaWidthAfter, &QPlainTextEdit::textChanged, this, [this]() + { + m_timerWidthAfter->start(formulaTimerTimeout); + }); connect(uiTabPaths->pushButtonGrowWidth, &QPushButton::clicked, this, &DialogSeamAllowance::DeployWidthFormulaTextEdit); @@ -3077,7 +3073,7 @@ QString DialogSeamAllowance::GetFormulaSAWidth() const } //--------------------------------------------------------------------------------------------------------------------- -QVector &DialogSeamAllowance::UndoStack() +QVector> &DialogSeamAllowance::UndoStack() { return m_undoStack; } diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h index bc91471a2..b110ef3bb 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.h @@ -49,16 +49,16 @@ namespace Ui class VisPieceSpecialPoints; class FancyTabBar; class VPlaceLabelItem; -class QUndoCommand; +class VUndoCommand; class DialogSeamAllowance : public DialogTool { Q_OBJECT public: - DialogSeamAllowance(const VContainer *data, const VAbstractPattern *doc, const quint32 &toolId, + DialogSeamAllowance(const VContainer *data, const VAbstractPattern *doc, quint32 toolId, QWidget *parent = nullptr); - DialogSeamAllowance(const VContainer *data, const quint32 &toolId, QWidget *parent = nullptr); + DialogSeamAllowance(const VContainer *data, quint32 toolId, QWidget *parent = nullptr); virtual ~DialogSeamAllowance(); void EnableApply(bool enable); @@ -68,7 +68,7 @@ public: QString GetFormulaSAWidth() const; - QVector &UndoStack(); + QVector > &UndoStack(); public slots: virtual void ChosenObject(quint32 id, const SceneObject &type) override; @@ -81,6 +81,7 @@ protected: virtual void closeEvent(QCloseEvent *event) override; virtual void showEvent( QShowEvent *event ) override; virtual void resizeEvent(QResizeEvent *event) override; + virtual bool IsValid() const final; private slots: void NameDetailChanged(); @@ -143,10 +144,6 @@ private slots: void FXWidthBefore(); void FXWidthAfter(); - void WidthChanged(); - void WidthBeforeChanged(); - void WidthAfterChanged(); - void DeployWidthFormulaTextEdit(); void DeployWidthBeforeFormulaTextEdit(); void DeployWidthAfterFormulaTextEdit(); @@ -190,6 +187,8 @@ private: bool flagFormulaBefore; bool flagFormulaAfter; bool flagMainPathIsValid; + bool flagName; + bool flagFormula; bool m_bAddMode; QPointer m_dialog; @@ -214,7 +213,7 @@ private: QVector m_templateLines; - QVector m_undoStack; + QVector> m_undoStack; QHash m_newPlaceLabels; QHash m_newPaths; @@ -282,4 +281,12 @@ private: void EnablePatternLabelFormulaControls(bool enable); }; +//--------------------------------------------------------------------------------------------------------------------- +inline bool DialogSeamAllowance::IsValid() const +{ + return flagName && flagMainPathIsValid && flagFormula && flagFormulaBefore && flagFormulaAfter + && (flagGFormulas || flagGPin) && flagDLAngle && (flagDLFormulas || flagDPin) && flagPLAngle + && (flagPLFormulas || flagPPin); +} + #endif // DIALOGSEAMALLOWANCE_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp index 3091a56d6..e9d25fab7 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutarc.cpp @@ -101,7 +101,7 @@ VToolCutArc* VToolCutArc::Create(const QPointer &dialog, VMainGraphi VToolCutArcInitData initData; initData.formula = dialogTool->GetFormula(); initData.arcId = dialogTool->getArcId(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -205,7 +205,7 @@ void VToolCutArc::SaveDialog(QDomElement &domElement, QList &oldDepende AddDependence(oldDependencies, curveCutId); AddDependence(newDependencies, dialogTool->getArcId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); doc->SetAttribute(domElement, AttrArc, QString().setNum(dialogTool->getArcId())); } @@ -283,5 +283,6 @@ QString VToolCutArc::MakeToolTip() const return toolTip; }; - return ArcToolTip(ArcToolTip("", ar1, QChar('1')), ar2, QChar('2')) + QLatin1String("
"); + return ArcToolTip(ArcToolTip(QStringLiteral(""), ar1, QChar('1')), ar2, QChar('2')) + + QStringLiteral("
"); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp index f059e46a4..089aca1dc 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutspline.cpp @@ -104,7 +104,7 @@ VToolCutSpline* VToolCutSpline::Create(const QPointer &dialog, VMain VToolCutSplineInitData initData; initData.formula = dialogTool->GetFormula(); initData.splineId = dialogTool->getSplineId(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -204,7 +204,7 @@ void VToolCutSpline::SaveDialog(QDomElement &domElement, QList &oldDepe AddDependence(oldDependencies, curveCutId); AddDependence(newDependencies, dialogTool->getSplineId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); doc->SetAttribute(domElement, AttrSpline, QString().setNum(dialogTool->getSplineId())); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp index f383c5098..0f4bc4aeb 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toolcut/vtoolcutsplinepath.cpp @@ -107,7 +107,7 @@ VToolCutSplinePath* VToolCutSplinePath::Create(const QPointer &dialo VToolCutSplinePathInitData initData; initData.formula = dialogTool->GetFormula(); initData.splinePathId = dialogTool->getSplinePathId(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -295,7 +295,7 @@ void VToolCutSplinePath::SaveDialog(QDomElement &domElement, QList &old AddDependence(oldDependencies, curveCutId); AddDependence(newDependencies, dialogTool->getSplinePathId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); doc->SetAttribute(domElement, AttrSplinePath, QString().setNum(dialogTool->getSplinePathId())); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp index 7872375e7..b57bd1fd6 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolalongline.cpp @@ -99,7 +99,7 @@ void VToolAlongLine::SaveDialog(QDomElement &domElement, QList &oldDepe AddDependence(newDependencies, dialogTool->GetFirstPointId()); AddDependence(newDependencies, dialogTool->GetSecondPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); @@ -164,8 +164,8 @@ QString VToolAlongLine::MakeToolTip() const .arg(qApp->fromPixel(curLine.length())) .arg(UnitsToStr(qApp->patternUnit(), true), tr("Angle")) .arg(curLine.angle()) - .arg(QString("%1->%2").arg(basePoint->name(), current->name()), - QString("%1->%2").arg(current->name(), secondPoint->name())) + .arg(QStringLiteral("%1->%2").arg(basePoint->name(), current->name()), + QStringLiteral("%1->%2").arg(current->name(), secondPoint->name())) .arg(qApp->fromPixel(curToSecond.length())) .arg(tr("Label"), current->name()); return toolTip; @@ -230,7 +230,7 @@ VToolAlongLine* VToolAlongLine::Create(const QPointer &dialog, VMain initData.secondPointId = dialogTool->GetSecondPointId(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp index 82658683b..6d5d57a1d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolbisector.cpp @@ -146,7 +146,7 @@ VToolBisector* VToolBisector::Create(const QPointer &dialog, VMainGr initData.thirdPointId = dialogTool->GetThirdPointId(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -254,7 +254,7 @@ void VToolBisector::SaveDialog(QDomElement &domElement, QList &oldDepen AddDependence(newDependencies, dialogTool->GetSecondPointId()); AddDependence(newDependencies, dialogTool->GetThirdPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp index 34abae584..a76c22fae 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp @@ -112,7 +112,7 @@ VToolCurveIntersectAxis *VToolCurveIntersectAxis::Create(const QPointergetCurveId(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -255,7 +255,7 @@ void VToolCurveIntersectAxis::SaveDialog(QDomElement &domElement, QList AddDependence(newDependencies, dialogTool->GetBasePointId()); AddDependence(newDependencies, dialogTool->getCurveId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle()); @@ -346,7 +346,7 @@ void VToolCurveIntersectAxis::InitArc(VContainer *data, qreal segLength, const V //--------------------------------------------------------------------------------------------------------------------- QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wswitch-default") -void VToolCurveIntersectAxis::InitSegments(const GOType &curveType, qreal segLength, const VPointF *p, quint32 curveId, +void VToolCurveIntersectAxis::InitSegments(GOType curveType, qreal segLength, const VPointF *p, quint32 curveId, VContainer *data) { switch(curveType) diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h index 60a914501..f10e9eddf 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.h @@ -101,8 +101,7 @@ private: template static void InitArc(VContainer *data, qreal segLength, const VPointF *p, quint32 curveId); - static void InitSegments(const GOType &curveType, qreal segLength, const VPointF *p, quint32 curveId, - VContainer *data); + static void InitSegments(GOType curveType, qreal segLength, const VPointF *p, quint32 curveId, VContainer *data); }; #endif // VTOOLCURVEINTERSECTAXIS_H diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp index f423e9347..a611ad1d7 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolendline.cpp @@ -111,7 +111,7 @@ VToolEndLine* VToolEndLine::Create(const QPointer &dialog, VMainGrap initData.basePointId = dialogTool->GetBasePointId(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -184,7 +184,7 @@ void VToolEndLine::SaveDialog(QDomElement &domElement, QList &oldDepend AddDependence(oldDependencies, basePointId); AddDependence(newDependencies, dialogTool->GetBasePointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp index f40db8918..243008483 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolheight.cpp @@ -107,7 +107,7 @@ VToolHeight* VToolHeight::Create(const QPointer &dialog, VMainGraphi initData.p2LineId = dialogTool->GetP2LineId(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -215,7 +215,7 @@ void VToolHeight::SaveDialog(QDomElement &domElement, QList &oldDepende AddDependence(newDependencies, dialogTool->GetP1LineId()); AddDependence(newDependencies, dialogTool->GetP2LineId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrBasePoint, QString().setNum(dialogTool->GetBasePointId())); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp index d83ddb585..729a096cd 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp @@ -99,7 +99,7 @@ VToolLineIntersectAxis *VToolLineIntersectAxis::Create(const QPointerGetSecondPointId(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -269,7 +269,7 @@ void VToolLineIntersectAxis::SaveDialog(QDomElement &domElement, QList AddDependence(newDependencies, dialogTool->GetFirstPointId()); AddDependence(newDependencies, dialogTool->GetSecondPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp index 7164f5d79..398f50540 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.cpp @@ -111,7 +111,7 @@ VToolNormal* VToolNormal::Create(const QPointer &dialog, VMainGraphi initData.angle = dialogTool->GetAngle(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -182,8 +182,7 @@ VToolNormal* VToolNormal::Create(VToolNormalInitData initData) * @param angle additional angle. * @return normal point. */ -QPointF VToolNormal::FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, const qreal &length, - const qreal &angle) +QPointF VToolNormal::FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, qreal length, qreal angle) { QLineF line(firstPoint, secondPoint); QLineF normal = line.normalVector(); @@ -225,7 +224,7 @@ void VToolNormal::SaveDialog(QDomElement &domElement, QList &oldDepende AddDependence(newDependencies, dialogTool->GetFirstPointId()); AddDependence(newDependencies, dialogTool->GetSecondPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h index e2e68532a..b2a9db97c 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolnormal.h @@ -71,8 +71,8 @@ public: static VToolNormal* Create(const QPointer &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data); static VToolNormal* Create(VToolNormalInitData initData); - static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, const qreal &length, - const qreal &angle = 0); + static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, qreal length, + qreal angle = 0); static const QString ToolType; virtual int type() const override {return Type;} enum { Type = UserType + static_cast(Tool::Normal)}; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp index 942cc6185..4ae19d4ca 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolshoulderpoint.cpp @@ -160,7 +160,7 @@ VToolShoulderPoint* VToolShoulderPoint::Create(const QPointer &dialo initData.pShoulder = dialogTool->GetP3(); initData.typeLine = dialogTool->GetTypeLine(); initData.lineColor = dialogTool->GetLineColor(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -272,7 +272,7 @@ void VToolShoulderPoint::SaveDialog(QDomElement &domElement, QList &old AddDependence(newDependencies, dialogTool->GetP2Line()); AddDependence(newDependencies, dialogTool->GetP3()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrTypeLine, dialogTool->GetTypeLine()); doc->SetAttribute(domElement, AttrLineColor, dialogTool->GetLineColor()); doc->SetAttribute(domElement, AttrLength, dialogTool->GetFormula()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp index 813ae62de..02cae6eb5 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp @@ -298,7 +298,7 @@ void VToolBasePoint::SaveDialog(QDomElement &domElement, QList &oldDepe Q_UNUSED(newDependencies) const QPointF p = dialogTool->GetPoint(); - const QString name = dialogTool->getPointName(); + const QString name = dialogTool->GetPointName(); doc->SetAttribute(domElement, AttrName, name); doc->SetAttribute(domElement, AttrX, QString().setNum(qApp->fromPixel(p.x()))); doc->SetAttribute(domElement, AttrY, QString().setNum(qApp->fromPixel(p.y()))); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp index 3723baac8..38bd499e6 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp @@ -109,7 +109,7 @@ VToolLineIntersect* VToolLineIntersect::Create(const QPointer &dialo initData.p2Line1Id = dialogTool->GetP2Line1(); initData.p1Line2Id = dialogTool->GetP1Line2(); initData.p2Line2Id = dialogTool->GetP2Line2(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -248,7 +248,7 @@ void VToolLineIntersect::SaveDialog(QDomElement &domElement, QList &old AddDependence(newDependencies, dialogTool->GetP1Line2()); AddDependence(newDependencies, dialogTool->GetP2Line2()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrP1Line1, QString().setNum(dialogTool->GetP1Line1())); doc->SetAttribute(domElement, AttrP2Line1, QString().setNum(dialogTool->GetP2Line1())); doc->SetAttribute(domElement, AttrP1Line2, QString().setNum(dialogTool->GetP1Line2())); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp index 07f90ad12..657b95f0b 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp @@ -92,7 +92,7 @@ VToolPointFromArcAndTangent *VToolPointFromArcAndTangent::Create(const QPointer< initData.arcId = dialogTool->GetArcId(); initData.tangentPointId = dialogTool->GetTangentPointId(); initData.crossPoint = dialogTool->GetCrossCirclesPoint(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -241,7 +241,7 @@ CrossCirclesPoint VToolPointFromArcAndTangent::GetCrossCirclesPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void VToolPointFromArcAndTangent::SetCrossCirclesPoint(const CrossCirclesPoint &value) +void VToolPointFromArcAndTangent::SetCrossCirclesPoint(CrossCirclesPoint value) { crossPoint = value; @@ -292,7 +292,7 @@ void VToolPointFromArcAndTangent::SaveDialog(QDomElement &domElement, QListGetArcId()); AddDependence(newDependencies, dialogTool->GetTangentPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrArc, QString().setNum(dialogTool->GetArcId())); doc->SetAttribute(domElement, AttrTangent, QString().setNum(dialogTool->GetTangentPointId())); doc->SetAttribute(domElement, AttrCrossPoint, diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h index 10ba8aa59..23d00e023 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.h @@ -75,7 +75,7 @@ public: QString ArcName() const; CrossCirclesPoint GetCrossCirclesPoint() const; - void SetCrossCirclesPoint(const CrossCirclesPoint &value); + void SetCrossCirclesPoint(CrossCirclesPoint value); virtual void ShowVisualization(bool show) override; protected slots: diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp index 3e1c811b8..69683c465 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp @@ -98,7 +98,7 @@ VToolPointFromCircleAndTangent *VToolPointFromCircleAndTangent::Create(const QPo initData.circleRadius = dialogTool->GetCircleRadius(); initData.tangentPointId = dialogTool->GetTangentPointId(); initData.crossPoint = dialogTool->GetCrossCirclesPoint(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -283,7 +283,7 @@ void VToolPointFromCircleAndTangent::SaveDialog(QDomElement &domElement, QListGetTangentPointId()); AddDependence(newDependencies, dialogTool->GetCircleCenterId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrCCenter, QString().setNum(dialogTool->GetCircleCenterId())); doc->SetAttribute(domElement, AttrTangent, QString().setNum(dialogTool->GetTangentPointId())); doc->SetAttribute(domElement, AttrCRadius, dialogTool->GetCircleRadius()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp index 77a2c8905..65ed8efd8 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp @@ -178,7 +178,7 @@ VToolPointOfContact* VToolPointOfContact::Create(const QPointer &dia initData.center = dialogTool->getCenter(); initData.firstPointId = dialogTool->GetFirstPoint(); initData.secondPointId = dialogTool->GetSecondPoint(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -307,7 +307,7 @@ void VToolPointOfContact::SaveDialog(QDomElement &domElement, QList &ol AddDependence(newDependencies, dialogTool->GetFirstPoint()); AddDependence(newDependencies, dialogTool->GetSecondPoint()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrRadius, dialogTool->getRadius()); doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->getCenter())); doc->SetAttribute(domElement, AttrFirstPoint, QString().setNum(dialogTool->GetFirstPoint())); @@ -370,13 +370,13 @@ QString VToolPointOfContact::MakeToolTip() const " %6: %7 %3 " " %8: %9° " "") - .arg(QString("%1->%2").arg(p1->name(), current->name())) + .arg(QStringLiteral("%1->%2").arg(p1->name(), current->name())) .arg(qApp->fromPixel(p1ToCur.length())) - .arg(UnitsToStr(qApp->patternUnit(), true), QString("%1->%2").arg(p2->name(), current->name())) + .arg(UnitsToStr(qApp->patternUnit(), true), QStringLiteral("%1->%2").arg(p2->name(), current->name())) .arg(qApp->fromPixel(p2ToCur.length())) - .arg(QString("%1 %2->%3").arg(tr("Length"), centerP->name(), current->name())) + .arg(QStringLiteral("%1 %2->%3").arg(tr("Length"), centerP->name(), current->name())) .arg(qApp->fromPixel(centerToCur.length())) - .arg(QString("%1 %2->%3").arg(tr("Angle"), centerP->name(), current->name())) + .arg(QStringLiteral("%1 %2->%3").arg(tr("Angle"), centerP->name(), current->name())) .arg(centerToCur.angle()) .arg(tr("Label"), current->name()); return toolTip; diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.cpp index b681d0f2d..78a84f456 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersection.cpp @@ -103,7 +103,7 @@ VToolPointOfIntersection *VToolPointOfIntersection::Create(const QPointerGetFirstPointId(); initData.secondPointId = dialogTool->GetSecondPointId(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -202,7 +202,7 @@ void VToolPointOfIntersection::SaveDialog(QDomElement &domElement, QListGetFirstPointId()); AddDependence(newDependencies, dialogTool->GetSecondPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrFirstPoint, QString().setNum(dialogTool->GetFirstPointId())); doc->SetAttribute(domElement, AttrSecondPoint, QString().setNum(dialogTool->GetSecondPointId())); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp index a4bfa2dd9..1c2dc5202 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp @@ -92,7 +92,7 @@ VToolPointOfIntersectionArcs *VToolPointOfIntersectionArcs::Create(const QPointe initData.firstArcId = dialogTool->GetFirstArcId(); initData.secondArcId = dialogTool->GetSecondArcId(); initData.pType = dialogTool->GetCrossArcPoint(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -314,7 +314,7 @@ void VToolPointOfIntersectionArcs::SaveDialog(QDomElement &domElement, QListGetFirstArcId()); AddDependence(newDependencies, dialogTool->GetSecondArcId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrFirstArc, QString().setNum(dialogTool->GetFirstArcId())); doc->SetAttribute(domElement, AttrSecondArc, QString().setNum(dialogTool->GetSecondArcId())); doc->SetAttribute(domElement, AttrCrossPoint, QString().setNum(static_cast(dialogTool->GetCrossArcPoint()))); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp index 3387a4b58..16648085d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp @@ -101,7 +101,7 @@ VToolPointOfIntersectionCircles *VToolPointOfIntersectionCircles::Create(const Q initData.firstCircleRadius = dialogTool->GetFirstCircleRadius(); initData.secondCircleRadius = dialogTool->GetSecondCircleRadius(); initData.crossPoint = dialogTool->GetCrossCirclesPoint(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -321,7 +321,7 @@ void VToolPointOfIntersectionCircles::SaveDialog(QDomElement &domElement, QList< AddDependence(newDependencies, dialogTool->GetFirstCircleCenterId()); AddDependence(newDependencies, dialogTool->GetSecondCircleCenterId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrC1Center, QString().setNum(dialogTool->GetFirstCircleCenterId())); doc->SetAttribute(domElement, AttrC2Center, QString().setNum(dialogTool->GetSecondCircleCenterId())); doc->SetAttribute(domElement, AttrC1Radius, dialogTool->GetFirstCircleRadius()); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp index 76d04bb93..6baa677f5 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp @@ -96,7 +96,7 @@ VToolPointOfIntersectionCurves *VToolPointOfIntersectionCurves::Create(const QPo initData.secondCurveId = dialogTool->GetSecondCurveId(); initData.vCrossPoint = dialogTool->GetVCrossPoint(); initData.hCrossPoint = dialogTool->GetHCrossPoint(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -296,7 +296,7 @@ VCrossCurvesPoint VToolPointOfIntersectionCurves::GetVCrossPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void VToolPointOfIntersectionCurves::SetVCrossPoint(const VCrossCurvesPoint &value) +void VToolPointOfIntersectionCurves::SetVCrossPoint(VCrossCurvesPoint value) { vCrossPoint = value; @@ -311,7 +311,7 @@ HCrossCurvesPoint VToolPointOfIntersectionCurves::GetHCrossPoint() const } //--------------------------------------------------------------------------------------------------------------------- -void VToolPointOfIntersectionCurves::SetHCrossPoint(const HCrossCurvesPoint &value) +void VToolPointOfIntersectionCurves::SetHCrossPoint(HCrossCurvesPoint value) { hCrossPoint = value; @@ -362,7 +362,7 @@ void VToolPointOfIntersectionCurves::SaveDialog(QDomElement &domElement, QListGetFirstCurveId()); AddDependence(newDependencies, dialogTool->GetSecondCurveId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrCurve1, QString().setNum(dialogTool->GetFirstCurveId())); doc->SetAttribute(domElement, AttrCurve2, QString().setNum(dialogTool->GetSecondCurveId())); doc->SetAttribute(domElement, AttrVCrossPoint, QString().setNum(static_cast(dialogTool->GetVCrossPoint()))); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h index 14e6395d9..c3d32c6ec 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.h @@ -79,10 +79,10 @@ public: QString SecondCurveName() const; VCrossCurvesPoint GetVCrossPoint() const; - void SetVCrossPoint(const VCrossCurvesPoint &value); + void SetVCrossPoint(VCrossCurvesPoint value); HCrossCurvesPoint GetHCrossPoint() const; - void SetHCrossPoint(const HCrossCurvesPoint &value); + void SetHCrossPoint(HCrossCurvesPoint value); virtual void ShowVisualization(bool show) override; protected slots: diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp index c6ff4ae86..925022b42 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp @@ -110,7 +110,7 @@ VToolTriangle* VToolTriangle::Create(const QPointer &dialog, VMainGr initData.axisP2Id = dialogTool->GetAxisP2Id(); initData.firstPointId = dialogTool->GetFirstPointId(); initData.secondPointId = dialogTool->GetSecondPointId(); - initData.name = dialogTool->getPointName(); + initData.name = dialogTool->GetPointName(); initData.scene = scene; initData.doc = doc; initData.data = data; @@ -294,7 +294,7 @@ void VToolTriangle::SaveDialog(QDomElement &domElement, QList &oldDepen AddDependence(newDependencies, dialogTool->GetFirstPointId()); AddDependence(newDependencies, dialogTool->GetSecondPointId()); - doc->SetAttribute(domElement, AttrName, dialogTool->getPointName()); + doc->SetAttribute(domElement, AttrName, dialogTool->GetPointName()); doc->SetAttribute(domElement, AttrAxisP1, QString().setNum(dialogTool->GetAxisP1Id())); doc->SetAttribute(domElement, AttrAxisP2, QString().setNum(dialogTool->GetAxisP2Id())); doc->SetAttribute(domElement, AttrFirstPoint, QString().setNum(dialogTool->GetFirstPointId())); diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 6c53f0c04..52f788253 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -291,7 +291,7 @@ void VToolSeamAllowance::AddAttributes(VAbstractPattern *doc, QDomElement &domEl } //--------------------------------------------------------------------------------------------------------------------- -void VToolSeamAllowance::AddCSARecord(VAbstractPattern *doc, QDomElement &domElement, const CustomSARecord &record) +void VToolSeamAllowance::AddCSARecord(VAbstractPattern *doc, QDomElement &domElement, CustomSARecord record) { QDomElement recordNode = doc->createElement(VToolSeamAllowance::TagRecord); @@ -1190,7 +1190,7 @@ void VToolSeamAllowance::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) } QMenu menu; - QAction *actionOption = menu.addAction(QIcon::fromTheme("preferences-other"), tr("Options")); + QAction *actionOption = menu.addAction(QIcon::fromTheme(QStringLiteral("preferences-other")), tr("Options")); const VPiece detail = VAbstractTool::data.GetPiece(m_id); @@ -1206,7 +1206,7 @@ void VToolSeamAllowance::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) forceFlippingOption->setCheckable(true); forceFlippingOption->setChecked(detail.IsForceFlipping()); - QAction *actionRemove = menu.addAction(QIcon::fromTheme("edit-delete"), tr("Delete")); + QAction *actionRemove = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete")); _referens > 1 ? actionRemove->setEnabled(false) : actionRemove->setEnabled(true); QAction *selectedAction = menu.exec(event->screenPos()); @@ -1441,7 +1441,7 @@ void VToolSeamAllowance::SaveDialogChange(const QString &undoText) const VPiece newDet = dialogTool->GetPiece(); const VPiece oldDet = VAbstractTool::data.GetPiece(m_id); - QVector &undocommands = dialogTool->UndoStack(); + QVector> &undocommands = dialogTool->UndoStack(); const bool groupChange = not undocommands.isEmpty(); SavePieceOptions *saveCommand = new SavePieceOptions(oldDet, newDet, doc, m_id); @@ -1457,6 +1457,7 @@ void VToolSeamAllowance::SaveDialogChange(const QString &undoText) for (auto command : undocommands) { qApp->getUndoStack()->push(command); + command.clear(); // To prevent double free memory } undocommands.clear(); } @@ -1874,7 +1875,7 @@ void VToolSeamAllowance::DeleteToolWithConfirm(bool ask) qApp->getUndoStack()->push(delDet.take()); // Throw exception, this will help prevent case when we forget to immediately quit function. - VExceptionToolWasDeleted e("Tool was used after deleting."); + VExceptionToolWasDeleted e(tr("Tool was used after deleting.")); throw e; } diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index bd2944373..85d0bfb00 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -94,7 +94,7 @@ public: VAbstractPattern *doc); static void AddAttributes(VAbstractPattern *doc, QDomElement &domElement, quint32 id, const VPiece &piece); - static void AddCSARecord(VAbstractPattern *doc, QDomElement &domElement, const CustomSARecord &record); + static void AddCSARecord(VAbstractPattern *doc, QDomElement &domElement, CustomSARecord record); static void AddCSARecords(VAbstractPattern *doc, QDomElement &domElement, const QVector &records); static void AddInternalPaths(VAbstractPattern *doc, QDomElement &domElement, const QVector &paths); static void AddPins(VAbstractPattern *doc, QDomElement &domElement, const QVector &pins);