diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 9c5b119f0..56a42c01d 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -1007,8 +1007,7 @@ void TMainWindow::Fx() DialogEditWrongFormula *dialog = new DialogEditWrongFormula(meash->GetData(), NULL_ID, this); dialog->setWindowTitle(tr("Edit measurement")); - QString text = ui->plainTextEditFormula->toPlainText(); - text.replace("\n", " "); + QString text = ui->plainTextEditFormula->toPlainText().replace("\n", " "); try { text = qApp->TrVars()->FormulaFromUser(text, true); diff --git a/src/libs/vtools/dialogs/tools/dialogarc.cpp b/src/libs/vtools/dialogs/tools/dialogarc.cpp index 58a520b8b..1bd0368b8 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarc.cpp @@ -272,7 +272,8 @@ void DialogArc::RadiusChanged() { labelEditFormula = ui->labelEditRadius; labelResultCalculation = ui->labelResultRadius; - ValFormulaChanged(flagRadius, ui->plainTextEditFormula, timerRadius); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagRadius, ui->plainTextEditFormula, timerRadius, postfix); } //--------------------------------------------------------------------------------------------------------------------- @@ -283,7 +284,7 @@ void DialogArc::F1Changed() { labelEditFormula = ui->labelEditF1; labelResultCalculation = ui->labelResultF1; - ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1); + ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- @@ -294,7 +295,7 @@ void DialogArc::F2Changed() { labelEditFormula = ui->labelEditF2; labelResultCalculation = ui->labelResultF2; - ValFormulaChanged(flagF2, ui->plainTextEditF2, timerF2); + ValFormulaChanged(flagF2, ui->plainTextEditF2, timerF2, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp index cd8cd700e..efab4b8d6 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp @@ -231,7 +231,8 @@ void DialogArcWithLength::RadiusChanged() { labelEditFormula = ui->labelEditRadius; labelResultCalculation = ui->labelResultRadius; - ValFormulaChanged(flagRadius, ui->plainTextEditRadius, timerRadius); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagRadius, ui->plainTextEditRadius, timerRadius, postfix); } //--------------------------------------------------------------------------------------------------------------------- @@ -239,7 +240,7 @@ void DialogArcWithLength::F1Changed() { labelEditFormula = ui->labelEditF1; labelResultCalculation = ui->labelResultF1; - ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1); + ValFormulaChanged(flagF1, ui->plainTextEditF1, timerF1, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- @@ -247,7 +248,8 @@ void DialogArcWithLength::LengthChanged() { labelEditFormula = ui->labelEditLength; labelResultCalculation = ui->labelResultLength; - ValFormulaChanged(flagLength, ui->plainTextEditLength, timerLength); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagLength, ui->plainTextEditLength, timerLength, postfix); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index f0d690266..5d7db2d6f 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -248,7 +248,7 @@ void DialogCurveIntersectAxis::EvalAngle() //--------------------------------------------------------------------------------------------------------------------- void DialogCurveIntersectAxis::AngleTextChanged() { - ValFormulaChanged(flagError, ui->plainTextEditFormula, timerFormula); + ValFormulaChanged(flagError, ui->plainTextEditFormula, timerFormula, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index 6f6f3df63..2599928bc 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -108,7 +108,7 @@ void DialogEndLine::FormulaTextChanged() void DialogEndLine::AngleTextChanged() { labelEditFormula = ui->labelEditAngle; - ValFormulaChanged(flagError, ui->plainTextEditAngle, timerFormula); + ValFormulaChanged(flagError, ui->plainTextEditAngle, timerFormula, degreeSymbol); labelEditFormula = ui->labelEditFormula; } diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index 95600550e..273c05c4f 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -291,7 +291,7 @@ void DialogLineIntersectAxis::EvalAngle() //--------------------------------------------------------------------------------------------------------------------- void DialogLineIntersectAxis::AngleTextChanged() { - ValFormulaChanged(flagError, ui->plainTextEditFormula, timerFormula); + ValFormulaChanged(flagError, ui->plainTextEditFormula, timerFormula, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp index 7a7925867..dcdbd81e9 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp @@ -246,7 +246,8 @@ void DialogPointFromCircleAndTangent::CircleRadiusChanged() { labelEditFormula = ui->labelEditRadius; labelResultCalculation = ui->labelResultCircleRadius; - ValFormulaChanged(flagCircleRadius, ui->plainTextEditRadius, timerCircleRadius); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagCircleRadius, ui->plainTextEditRadius, timerCircleRadius, postfix); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp index 6f799d6d2..3a0d9019d 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp @@ -293,7 +293,8 @@ void DialogPointOfIntersectionCircles::Circle1RadiusChanged() { labelEditFormula = ui->labelEditCircle1Radius; labelResultCalculation = ui->labelResultCircle1Radius; - ValFormulaChanged(flagCircle1Radius, ui->plainTextEditCircle1Radius, timerCircle1Radius); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagCircle1Radius, ui->plainTextEditCircle1Radius, timerCircle1Radius, postfix); } //--------------------------------------------------------------------------------------------------------------------- @@ -301,7 +302,8 @@ void DialogPointOfIntersectionCircles::Circle2RadiusChanged() { labelEditFormula = ui->labelEditCircle2Radius; labelResultCalculation = ui->labelResultCircle2Radius; - ValFormulaChanged(flagCircle2Radius, ui->plainTextEditCircle2Radius, timerCircle2Radius); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagCircle2Radius, ui->plainTextEditCircle2Radius, timerCircle2Radius, postfix); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogspline.cpp b/src/libs/vtools/dialogs/tools/dialogspline.cpp index 340f26c45..cb6555313 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogspline.cpp @@ -233,7 +233,7 @@ void DialogSpline::Angle1Changed() { labelEditFormula = ui->labelEditAngle1; labelResultCalculation = ui->labelResultAngle1; - ValFormulaChanged(flagAngle1, ui->plainTextEditAngle1F, timerAngle1); + ValFormulaChanged(flagAngle1, ui->plainTextEditAngle1F, timerAngle1, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- @@ -241,7 +241,7 @@ void DialogSpline::Angle2Changed() { labelEditFormula = ui->labelEditAngle2; labelResultCalculation = ui->labelResultAngle2; - ValFormulaChanged(flagAngle2, ui->plainTextEditAngle2F, timerAngle2); + ValFormulaChanged(flagAngle2, ui->plainTextEditAngle2F, timerAngle2, degreeSymbol); } //--------------------------------------------------------------------------------------------------------------------- @@ -249,7 +249,8 @@ void DialogSpline::Length1Changed() { labelEditFormula = ui->labelEditLength1; labelResultCalculation = ui->labelResultLength1; - ValFormulaChanged(flagLength1, ui->plainTextEditLength1F, timerLength1); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagLength1, ui->plainTextEditLength1F, timerLength1, postfix); } //--------------------------------------------------------------------------------------------------------------------- @@ -257,7 +258,8 @@ void DialogSpline::Length2Changed() { labelEditFormula = ui->labelEditLength2; labelResultCalculation = ui->labelResultLength2; - ValFormulaChanged(flagLength2, ui->plainTextEditLength2F, timerLength2); + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagLength2, ui->plainTextEditLength2F, timerLength2, postfix); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp index b96271ff7..593fb5afa 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp @@ -32,6 +32,7 @@ #include "../vpatterndb/vcontainer.h" #include "../../visualization/vistoolsplinepath.h" #include "../support/dialogeditwrongformula.h" +#include "../qmuparser/qmuparsererror.h" #include @@ -222,7 +223,7 @@ void DialogSplinePath::CheckState() { SCASSERT(bOk != nullptr); - bool fAngle1 = false, fAngle2 = false, fLength1 = false, fLength2 = false; + bool fAngle1 = true, fAngle2 = true, fLength1 = true, fLength2 = true; for (qint32 i = 0; i < ui->listWidget->count(); ++i) { @@ -283,26 +284,41 @@ void DialogSplinePath::Angle1Changed() return; } - labelEditFormula = ui->labelEditAngle1; - labelResultCalculation = ui->labelResultAngle1; - ValFormulaChanged(flagAngle1[row], ui->plainTextEditAngle1F, timerAngle1); + if (row != 0) + { + labelEditFormula = ui->labelEditAngle1; + labelResultCalculation = ui->labelResultAngle1; + ValFormulaChanged(flagAngle1[row], ui->plainTextEditAngle1F, timerAngle1, degreeSymbol); - QListWidgetItem *item = ui->listWidget->item(row); - SCASSERT(item != nullptr); - VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); + QListWidgetItem *item = ui->listWidget->item(row); + SCASSERT(item != nullptr); + VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); - const QString angle1F = ui->plainTextEditAngle1F->toPlainText().replace("\n", " "); - const qreal angle1 = Visualization::FindVal(angle1F, data->PlainVariables()); - p.SetAngle1(angle1, qApp->TrVars()->FormulaFromUser(angle1F, qApp->Settings()->GetOsSeparator())); + const QString angle1F = ui->plainTextEditAngle1F->toPlainText().replace("\n", " "); + const qreal angle1 = Visualization::FindVal(angle1F, data->PlainVariables()); - item->setData(Qt::UserRole, QVariant::fromValue(p)); + try + { + p.SetAngle1(angle1, qApp->TrVars()->FormulaFromUser(angle1F, qApp->Settings()->GetOsSeparator())); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + p.SetAngle1(angle1, angle1F); + } - ShowPointIssue(p.P().name()); + item->setData(Qt::UserRole, QVariant::fromValue(p)); - ui->plainTextEditAngle2F->blockSignals(true); - ui->plainTextEditAngle2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle2Formula())); - EvalAngle2(); - ui->plainTextEditAngle2F->blockSignals(false); + ShowPointIssue(p.P().name()); + + if (row != ui->listWidget->count()-1) + { + ui->plainTextEditAngle2F->blockSignals(true); + ui->plainTextEditAngle2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle2Formula())); + EvalAngle2(); + ui->plainTextEditAngle2F->blockSignals(false); + } + } } //--------------------------------------------------------------------------------------------------------------------- @@ -314,26 +330,41 @@ void DialogSplinePath::Angle2Changed() return; } - labelEditFormula = ui->labelEditAngle2; - labelResultCalculation = ui->labelResultAngle2; - ValFormulaChanged(flagAngle2[row], ui->plainTextEditAngle2F, timerAngle2); + if (row != ui->listWidget->count()-1) + { + labelEditFormula = ui->labelEditAngle2; + labelResultCalculation = ui->labelResultAngle2; + ValFormulaChanged(flagAngle2[row], ui->plainTextEditAngle2F, timerAngle2, degreeSymbol); - QListWidgetItem *item = ui->listWidget->item(row); - SCASSERT(item != nullptr); - VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); + QListWidgetItem *item = ui->listWidget->item(row); + SCASSERT(item != nullptr); + VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); - const QString angle2F = ui->plainTextEditAngle2F->toPlainText().replace("\n", " "); - const qreal angle2 = Visualization::FindVal(angle2F, data->PlainVariables()); - p.SetAngle2(angle2, qApp->TrVars()->FormulaFromUser(angle2F, qApp->Settings()->GetOsSeparator())); + const QString angle2F = ui->plainTextEditAngle2F->toPlainText().replace("\n", " "); + const qreal angle2 = Visualization::FindVal(angle2F, data->PlainVariables()); - item->setData(Qt::UserRole, QVariant::fromValue(p)); + try + { + p.SetAngle2(angle2, qApp->TrVars()->FormulaFromUser(angle2F, qApp->Settings()->GetOsSeparator())); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + p.SetAngle2(angle2, angle2F); + } - ShowPointIssue(p.P().name()); + item->setData(Qt::UserRole, QVariant::fromValue(p)); - ui->plainTextEditAngle1F->blockSignals(true); - ui->plainTextEditAngle1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle1Formula())); - EvalAngle1(); - ui->plainTextEditAngle1F->blockSignals(false); + ShowPointIssue(p.P().name()); + + if (row != 0) + { + ui->plainTextEditAngle1F->blockSignals(true); + ui->plainTextEditAngle1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle1Formula())); + EvalAngle1(); + ui->plainTextEditAngle1F->blockSignals(false); + } + } } //--------------------------------------------------------------------------------------------------------------------- @@ -345,21 +376,34 @@ void DialogSplinePath::Length1Changed() return; } - labelEditFormula = ui->labelEditLength1; - labelResultCalculation = ui->labelResultLength1; - ValFormulaChanged(flagLength1[row], ui->plainTextEditLength1F, timerLength1); + if (row != 0) + { + labelEditFormula = ui->labelEditLength1; + labelResultCalculation = ui->labelResultLength1; + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagLength1[row], ui->plainTextEditLength1F, timerLength1, postfix); - QListWidgetItem *item = ui->listWidget->item(row); - SCASSERT(item != nullptr); - VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); + QListWidgetItem *item = ui->listWidget->item(row); + SCASSERT(item != nullptr); + VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); - const QString length1F = ui->plainTextEditLength1F->toPlainText().replace("\n", " "); - const qreal length1 = Visualization::FindLength(length1F, data->PlainVariables()); - p.SetLength1(length1, qApp->TrVars()->FormulaFromUser(length1F, qApp->Settings()->GetOsSeparator())); + const QString length1F = ui->plainTextEditLength1F->toPlainText().replace("\n", " "); + const qreal length1 = Visualization::FindLength(length1F, data->PlainVariables()); - item->setData(Qt::UserRole, QVariant::fromValue(p)); + try + { + p.SetLength1(length1, qApp->TrVars()->FormulaFromUser(length1F, qApp->Settings()->GetOsSeparator())); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + p.SetLength1(length1, length1F); + } - ShowPointIssue(p.P().name()); + item->setData(Qt::UserRole, QVariant::fromValue(p)); + + ShowPointIssue(p.P().name()); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -371,21 +415,34 @@ void DialogSplinePath::Length2Changed() return; } - labelEditFormula = ui->labelEditLength2; - labelResultCalculation = ui->labelResultLength2; - ValFormulaChanged(flagLength2[row], ui->plainTextEditLength2F, timerLength2); + if (row != ui->listWidget->count()-1) + { + labelEditFormula = ui->labelEditLength2; + labelResultCalculation = ui->labelResultLength2; + const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); + ValFormulaChanged(flagLength2[row], ui->plainTextEditLength2F, timerLength2, postfix); - QListWidgetItem *item = ui->listWidget->item(row); - SCASSERT(item != nullptr); - VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); + QListWidgetItem *item = ui->listWidget->item(row); + SCASSERT(item != nullptr); + VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); - const QString length2F = ui->plainTextEditLength2F->toPlainText().replace("\n", " "); - const qreal length2 = Visualization::FindLength(length2F, data->PlainVariables()); - p.SetLength2(length2, qApp->TrVars()->FormulaFromUser(length2F, qApp->Settings()->GetOsSeparator())); + const QString length2F = ui->plainTextEditLength2F->toPlainText().replace("\n", " "); + const qreal length2 = Visualization::FindLength(length2F, data->PlainVariables()); - item->setData(Qt::UserRole, QVariant::fromValue(p)); + try + { + p.SetLength2(length2, qApp->TrVars()->FormulaFromUser(length2F, qApp->Settings()->GetOsSeparator())); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + p.SetLength2(length2, length2F); + } - ShowPointIssue(p.P().name()); + item->setData(Qt::UserRole, QVariant::fromValue(p)); + + ShowPointIssue(p.P().name()); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -393,8 +450,19 @@ void DialogSplinePath::FXAngle1() { auto dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit first control point angle")); - QString angle1F = qApp->TrVars()->FormulaFromUser(ui->plainTextEditAngle1F->toPlainText(), - qApp->Settings()->GetOsSeparator()); + + const QString formula = ui->plainTextEditAngle1F->toPlainText().replace("\n", " "); + QString angle1F; + try + { + angle1F = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + angle1F = formula; + } + dialog->SetFormula(angle1F); dialog->setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit(), true)); if (dialog->exec() == QDialog::Accepted) @@ -416,8 +484,19 @@ void DialogSplinePath::FXAngle2() { auto dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit second control point angle")); - QString angle2F = qApp->TrVars()->FormulaFromUser(ui->plainTextEditAngle2F->toPlainText(), - qApp->Settings()->GetOsSeparator()); + + const QString formula = ui->plainTextEditAngle2F->toPlainText().replace("\n", " "); + QString angle2F; + try + { + angle2F = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + angle2F = formula; + } + dialog->SetFormula(angle2F); dialog->setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit(), true)); if (dialog->exec() == QDialog::Accepted) @@ -439,8 +518,19 @@ void DialogSplinePath::FXLength1() { auto dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit first control point length")); - QString length1F = qApp->TrVars()->FormulaFromUser(ui->plainTextEditLength1F->toPlainText(), - qApp->Settings()->GetOsSeparator()); + + const QString formula = ui->plainTextEditLength1F->toPlainText().replace("\n", " "); + QString length1F; + try + { + length1F = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + length1F = formula; + } + dialog->SetFormula(length1F); dialog->setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit(), true)); if (dialog->exec() == QDialog::Accepted) @@ -462,8 +552,19 @@ void DialogSplinePath::FXLength2() { auto dialog = new DialogEditWrongFormula(data, toolId, this); dialog->setWindowTitle(tr("Edit second control point length")); - QString length2F = qApp->TrVars()->FormulaFromUser(ui->plainTextEditLength2F->toPlainText(), - qApp->Settings()->GetOsSeparator()); + + const QString formula = ui->plainTextEditLength2F->toPlainText().replace("\n", " "); + QString length2F; + try + { + length2F = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator()); + } + catch (qmu::QmuParserError &e) + { + Q_UNUSED(e) + length2F = formula; + } + dialog->SetFormula(length2F); dialog->setPostfix(VDomDocument::UnitsToStr(qApp->patternUnit(), true)); if (dialog->exec() == QDialog::Accepted) @@ -591,8 +692,9 @@ void DialogSplinePath::PointChanged(int row) { return; } - DataPoint(qvariant_cast(ui->listWidget->item(row)->data(Qt::UserRole))); - EnableFields(); + + const auto p = qvariant_cast(ui->listWidget->item(row)->data(Qt::UserRole)); + DataPoint(p); } //--------------------------------------------------------------------------------------------------------------------- @@ -605,10 +707,9 @@ void DialogSplinePath::currentPointChanged(int index) const quint32 id = qvariant_cast(ui->comboBoxPoint->itemData(index)); QListWidgetItem *item = ui->listWidget->item( ui->listWidget->currentRow() ); VSplinePoint p = qvariant_cast(item->data(Qt::UserRole)); - const QSharedPointer point = data->GeometricObject(id); + const auto point = data->GeometricObject(id); p.SetP(*point); DataPoint(p); - EnableFields(); item->setData(Qt::UserRole, QVariant::fromValue(p)); ShowPointIssue(p.P().name()); @@ -693,11 +794,6 @@ void DialogSplinePath::NewItem(const VSplinePoint &point) item->setFont(QFont("Times", 12, QFont::Bold)); item->setData(Qt::UserRole, QVariant::fromValue(point)); - flagAngle1.append(false); - flagAngle2.append(false); - flagLength1.append(false); - flagLength2.append(false); - ui->listWidget->addItem(item); ui->listWidget->setCurrentItem(item); if (ui->listWidget->count() >= 2) @@ -706,16 +802,12 @@ void DialogSplinePath::NewItem(const VSplinePoint &point) bOk->setEnabled(true); } - ui->comboBoxPoint->blockSignals(true); - ChangeCurrentData(ui->comboBoxPoint, point.P().id()); - ui->comboBoxPoint->blockSignals(false); + flagAngle1.append(true); + flagLength1.append(true); + flagAngle2.append(true); + flagLength2.append(true); - ui->plainTextEditAngle1F->setPlainText(qApp->TrVars()->FormulaToUser(point.Angle1Formula())); - ui->plainTextEditAngle2F->setPlainText(qApp->TrVars()->FormulaToUser(point.Angle2Formula())); - ui->plainTextEditLength1F->setPlainText(qApp->TrVars()->FormulaToUser(point.Length1Formula())); - ui->plainTextEditLength2F->setPlainText(qApp->TrVars()->FormulaToUser(point.Length2Formula())); - - EnableFields(); + DataPoint(point); } //--------------------------------------------------------------------------------------------------------------------- @@ -729,68 +821,111 @@ void DialogSplinePath::DataPoint(const VSplinePoint &p) ChangeCurrentData(ui->comboBoxPoint, p.P().id()); ui->comboBoxPoint->blockSignals(false); - ui->plainTextEditAngle1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle1Formula())); - ui->plainTextEditAngle2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle2Formula())); - ui->plainTextEditLength1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Length1Formula())); - ui->plainTextEditLength2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Length2Formula())); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief EnableFields enable or disable fields - */ -void DialogSplinePath::EnableFields() -{ - - const qint32 row = ui->listWidget->currentRow(); - if (row == -1) - { - ui->plainTextEditAngle1F->setEnabled(false); - ui->plainTextEditAngle2F->setEnabled(false); - ui->plainTextEditLength1F->setEnabled(false); - ui->plainTextEditLength2F->setEnabled(false); - - const QString error = tr("Error"); - - ui->plainTextEditAngle1F->setPlainText(error); - ui->plainTextEditAngle2F->setPlainText(error); - ui->plainTextEditLength1F->setPlainText(error); - ui->plainTextEditLength2F->setPlainText(error); - return; - } - else - { - ui->plainTextEditAngle1F->setEnabled(true); - ui->plainTextEditAngle2F->setEnabled(true); - ui->plainTextEditLength1F->setEnabled(true); - ui->plainTextEditLength2F->setEnabled(true); - } - + int row = ui->listWidget->currentRow(); const QString field = tr("Not used"); + const QString emptyRes = QString("_"); if (row == 0) { + ui->toolButtonExprAngle1->setEnabled(false); + ui->labelResultAngle1->setText(emptyRes); + ui->labelResultAngle1->setToolTip(tr("Value")); + ChangeColor(ui->labelEditAngle1, okColor); ui->plainTextEditAngle1F->blockSignals(true); ui->plainTextEditAngle1F->setPlainText(field); ui->plainTextEditAngle1F->setEnabled(false); ui->plainTextEditAngle1F->blockSignals(false); + ui->toolButtonExprLength1->setEnabled(false); + ui->labelResultLength1->setText(emptyRes); + ui->labelResultLength1->setToolTip(tr("Value")); + ChangeColor(ui->labelEditLength1, okColor); ui->plainTextEditLength1F->blockSignals(true); ui->plainTextEditLength1F->setPlainText(field); ui->plainTextEditLength1F->setEnabled(false); ui->plainTextEditLength1F->blockSignals(false); + + ui->plainTextEditAngle2F->setEnabled(true); + ui->plainTextEditLength2F->setEnabled(true); + + ui->toolButtonExprAngle2->setEnabled(true); + ui->toolButtonExprLength2->setEnabled(true); + + ui->plainTextEditAngle2F->blockSignals(true); + ui->plainTextEditLength2F->blockSignals(true); + ui->plainTextEditAngle2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle2Formula())); + EvalAngle2(); + ui->plainTextEditLength2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Length2Formula())); + EvalLength2(); + ui->plainTextEditAngle2F->blockSignals(false); + ui->plainTextEditLength2F->blockSignals(false); } else if (row == ui->listWidget->count()-1) { + ui->toolButtonExprAngle2->setEnabled(false); + ui->labelResultAngle2->setText(emptyRes); + ui->labelResultAngle2->setToolTip(tr("Value")); + ChangeColor(ui->labelEditAngle2, okColor); ui->plainTextEditAngle2F->blockSignals(true); ui->plainTextEditAngle2F->setPlainText(field); ui->plainTextEditAngle2F->setEnabled(false); ui->plainTextEditAngle2F->blockSignals(false); + ui->toolButtonExprLength2->setEnabled(false); + ui->labelResultLength2->setText(emptyRes); + ui->labelResultLength2->setToolTip(tr("Value")); + ChangeColor(ui->labelEditLength2, okColor); ui->plainTextEditLength2F->blockSignals(true); ui->plainTextEditLength2F->setPlainText(field); ui->plainTextEditLength2F->setEnabled(false); ui->plainTextEditLength2F->blockSignals(false); + + ui->plainTextEditAngle1F->setEnabled(true); + ui->plainTextEditLength1F->setEnabled(true); + + ui->toolButtonExprAngle1->setEnabled(true); + ui->toolButtonExprLength1->setEnabled(true); + + ui->plainTextEditAngle1F->blockSignals(true); + ui->plainTextEditLength1F->blockSignals(true); + ui->plainTextEditAngle1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle1Formula())); + EvalAngle1(); + ui->plainTextEditLength1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Length1Formula())); + EvalLength1(); + ui->plainTextEditAngle1F->blockSignals(false); + ui->plainTextEditLength1F->blockSignals(false); + } + else + { + ui->toolButtonExprAngle1->setEnabled(true); + ui->toolButtonExprLength1->setEnabled(true); + ui->toolButtonExprAngle2->setEnabled(true); + ui->toolButtonExprLength2->setEnabled(true); + + ui->plainTextEditAngle1F->setEnabled(true); + ui->plainTextEditLength1F->setEnabled(true); + ui->plainTextEditAngle2F->setEnabled(true); + ui->plainTextEditLength2F->setEnabled(true); + + ui->plainTextEditAngle1F->blockSignals(true); + ui->plainTextEditLength1F->blockSignals(true); + ui->plainTextEditAngle2F->blockSignals(true); + ui->plainTextEditLength2F->blockSignals(true); + + ui->plainTextEditAngle1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle1Formula())); + ui->plainTextEditAngle2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Angle2Formula())); + ui->plainTextEditLength1F->setPlainText(qApp->TrVars()->FormulaToUser(p.Length1Formula())); + ui->plainTextEditLength2F->setPlainText(qApp->TrVars()->FormulaToUser(p.Length2Formula())); + + EvalAngle1(); + EvalLength1(); + EvalAngle2(); + EvalLength2(); + + ui->plainTextEditAngle1F->blockSignals(false); + ui->plainTextEditLength1F->blockSignals(false); + ui->plainTextEditAngle2F->blockSignals(false); + ui->plainTextEditLength2F->blockSignals(false); } } diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.h b/src/libs/vtools/dialogs/tools/dialogsplinepath.h index 8ed56859b..903aa4e7a 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.h +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.h @@ -115,7 +115,6 @@ private: void NewItem(const VSplinePoint &point); void DataPoint(const VSplinePoint &p); - void EnableFields(); void SavePath(); QSet AllIds() const; bool IsPathValid() const; diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index 4bb4a1262..c7b762bfe 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -332,7 +332,7 @@ quint32 DialogTool::DNumber(const QString &baseName) const * @param edit LineEdit * @param timer timer of formula */ -void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer) +void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer, const QString& postfix) { SCASSERT(edit != nullptr); SCASSERT(timer != nullptr); @@ -343,14 +343,21 @@ void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer) flag = false; CheckState(); ChangeColor(labelEditFormula, Qt::red); - labelResultCalculation->setText(tr("Error")); + 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) +void DialogTool::ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer *timer, const QString& postfix) { SCASSERT(edit != nullptr); SCASSERT(timer != nullptr); @@ -361,7 +368,15 @@ void DialogTool::ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer *tim flag = false; CheckState(); ChangeColor(labelEditFormula, Qt::red); - labelResultCalculation->setText(tr("Error")); + if (postfix.isEmpty()) + { + labelResultCalculation->setText(tr("Error")); + } + else + { + labelResultCalculation->setText(tr("Error") + " (" + postfix + ")"); + } + labelResultCalculation->setToolTip(tr("Empty field")); return; } diff --git a/src/libs/vtools/dialogs/tools/dialogtool.h b/src/libs/vtools/dialogs/tools/dialogtool.h index a715bb1f0..1b35bf530 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.h +++ b/src/libs/vtools/dialogs/tools/dialogtool.h @@ -202,8 +202,9 @@ protected: virtual void CheckState(); QString GetComboBoxCurrentData(const QComboBox *box)const; void ChangeCurrentData(QComboBox *box, const QVariant &value) const; - void ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer * timer); - void ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer * timer); + 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);