From 51a420bbdda475423492339f26cd86a18590e0c8 Mon Sep 17 00:00:00 2001 From: dismine Date: Mon, 26 May 2014 16:18:48 +0300 Subject: [PATCH] Show language independent formula in dialog. --HG-- branch : feature --- src/app/container/calculator.cpp | 8 +++ src/app/dialogs/tools/dialogendline.ui | 36 ++++++++++++++ src/app/dialogs/tools/dialogtool.cpp | 15 +++--- src/app/widgets/vapplication.cpp | 68 +++++++++++++++++++++----- src/app/widgets/vapplication.h | 13 ++--- 5 files changed, 116 insertions(+), 24 deletions(-) diff --git a/src/app/container/calculator.cpp b/src/app/container/calculator.cpp index 350fb5b1d..5dd5666b3 100644 --- a/src/app/container/calculator.cpp +++ b/src/app/container/calculator.cpp @@ -78,6 +78,14 @@ Calculator::Calculator(const QString &formula, bool fromUser) } SetExpr(formula); + try + { + Eval();//Need run for making tokens + } + catch(qmu::QmuParserError &e) + { + return;//Ignore all warnings + } } Calculator::~Calculator() diff --git a/src/app/dialogs/tools/dialogendline.ui b/src/app/dialogs/tools/dialogendline.ui index 33a79de61..377942edb 100644 --- a/src/app/dialogs/tools/dialogendline.ui +++ b/src/app/dialogs/tools/dialogendline.ui @@ -471,6 +471,12 @@ + + + 0 + 0 + + Size and height @@ -481,6 +487,12 @@ + + + 0 + 0 + + Standard table @@ -488,6 +500,12 @@ + + + 0 + 0 + + Increments @@ -498,6 +516,12 @@ true + + + 0 + 0 + + Length of lines @@ -508,6 +532,12 @@ true + + + 0 + 0 + + Length of arcs @@ -518,6 +548,12 @@ true + + + 0 + 0 + + Length of curves diff --git a/src/app/dialogs/tools/dialogtool.cpp b/src/app/dialogs/tools/dialogtool.cpp index a2a4364e4..e49c4933b 100644 --- a/src/app/dialogs/tools/dialogtool.cpp +++ b/src/app/dialogs/tools/dialogtool.cpp @@ -671,8 +671,9 @@ void DialogTool::ValChenged(int row) } if (radioButtonStandardTable->isChecked()) { - VMeasurement stable = data->GetMeasurement(item->text()); - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetValueStandardTableRow(item->text())) + QString name = qApp->VarFromUser(item->text()); + VMeasurement stable = data->GetMeasurement(name); + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetValueStandardTableRow(name)) .arg(stable.GetDescription()); labelDescription->setText(desc); return; @@ -687,22 +688,22 @@ void DialogTool::ValChenged(int row) } if (radioButtonLengthLine->isChecked()) { - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLine(item->text())) + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLine(qApp->VarFromUser(item->text()))) .arg(tr("Line length")); labelDescription->setText(desc); return; } if (radioButtonLengthArc->isChecked()) { - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLengthArc(item->text())) + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLengthArc(qApp->VarFromUser(item->text()))) .arg(tr("Arc length")); labelDescription->setText(desc); return; } if (radioButtonLengthCurve->isChecked()) { - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLengthSpline(item->text())) - .arg(tr("Curve length")); + QString desc = QString("%1(%2) - %3").arg(item->text()) + .arg(data->GetLengthSpline(qApp->VarFromUser(item->text()))).arg(tr("Curve length")); labelDescription->setText(desc); return; } @@ -757,7 +758,7 @@ void DialogTool::ShowVariable(const QHash *var) while (i.hasNext()) { i.next(); - map.insert(i.key(), i.value()); + map.insert(qApp->VarToUser(i.key()), i.value()); } QMapIterator iMap(map); diff --git a/src/app/widgets/vapplication.cpp b/src/app/widgets/vapplication.cpp index 663fc6452..132fa6835 100644 --- a/src/app/widgets/vapplication.cpp +++ b/src/app/widgets/vapplication.cpp @@ -1505,7 +1505,7 @@ void VApplication::InitPostfixOperators() } //--------------------------------------------------------------------------------------------------------------------- -bool VApplication::Measurements(QString &newFormula, int position, const QString &token) +bool VApplication::MeasurementsFromUser(QString &newFormula, int position, const QString &token) const { QMap::const_iterator i = measurements.constBegin(); while (i != measurements.constEnd()) @@ -1521,7 +1521,7 @@ bool VApplication::Measurements(QString &newFormula, int position, const QString } //--------------------------------------------------------------------------------------------------------------------- -bool VApplication::VariablesFromUser(QString &newFormula, int position, const QString &token) +bool VApplication::VariablesFromUser(QString &newFormula, int position, const QString &token) const { QMap::const_iterator i = variables.constBegin(); while (i != variables.constEnd()) @@ -1537,7 +1537,7 @@ bool VApplication::VariablesFromUser(QString &newFormula, int position, const QS } //--------------------------------------------------------------------------------------------------------------------- -bool VApplication::PostfixOperators(QString &newFormula, int position, const QString &token) +bool VApplication::PostfixOperatorsFromUser(QString &newFormula, int position, const QString &token) const { QMap::const_iterator i = postfixOperators.constBegin(); while (i != postfixOperators.constEnd()) @@ -1553,7 +1553,7 @@ bool VApplication::PostfixOperators(QString &newFormula, int position, const QSt } //--------------------------------------------------------------------------------------------------------------------- -bool VApplication::Functions(QString &newFormula, int position, const QString &token) +bool VApplication::FunctionsFromUser(QString &newFormula, int position, const QString &token) const { QMap::const_iterator i = functions.constBegin(); while (i != functions.constEnd()) @@ -1569,14 +1569,14 @@ bool VApplication::Functions(QString &newFormula, int position, const QString &t } //--------------------------------------------------------------------------------------------------------------------- -bool VApplication::VariablesToUser(QString &newFormula, int position, const QString &token) +bool VApplication::VariablesToUser(QString &newFormula, int position, const QString &token) const { QMap::const_iterator i = variables.constBegin(); while (i != variables.constEnd()) { if(token.indexOf( i.key() ) == 0) { - newFormula.replace(position, variables.value(i.key()).translate().length(), i.value().translate()); + newFormula.replace(position, i.key().length(), i.value().translate()); return true; } ++i; @@ -1592,9 +1592,55 @@ void VApplication::setPatternUnit(const Valentina::Units &patternUnit) } //--------------------------------------------------------------------------------------------------------------------- -QString VApplication::Measurement(const QString &measurement) const +QString VApplication::VarToUser(const QString &var) const { - return measurements.value(measurement).translate(); + if (measurements.contains(var)) + { + return measurements.value(var).translate(); + } + + if (functions.contains(var)) + { + return functions.value(var).translate(); + } + + if (postfixOperators.contains(var)) + { + return postfixOperators.value(var).translate(); + } + + QString newVar = var; + if(VariablesToUser(newVar, 0, var)) + { + return newVar; + } + return newVar; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VApplication::VarFromUser(const QString &var) const +{ + QString newVar = var; + if(MeasurementsFromUser(newVar, 0, var)) + { + return newVar; + } + + if(VariablesFromUser(newVar, 0, var)) + { + return newVar; + } + + if(PostfixOperatorsFromUser(newVar, 0, var)) + { + return newVar; + } + + if(FunctionsFromUser(newVar, 0, var)) + { + return newVar; + } + return newVar; } //--------------------------------------------------------------------------------------------------------------------- @@ -1653,7 +1699,7 @@ QString VApplication::FormulaFromUser(const QString &formula) QMap::const_iterator i = tokens.constBegin(); while (i != tokens.constEnd()) { - if(Measurements(newFormula, i.key(), i.value())) + if(MeasurementsFromUser(newFormula, i.key(), i.value())) { ++i; continue; @@ -1665,13 +1711,13 @@ QString VApplication::FormulaFromUser(const QString &formula) continue; } - if(PostfixOperators(newFormula, i.key(), i.value())) + if(PostfixOperatorsFromUser(newFormula, i.key(), i.value())) { ++i; continue; } - if(Functions(newFormula, i.key(), i.value())) + if(FunctionsFromUser(newFormula, i.key(), i.value())) { ++i; continue; diff --git a/src/app/widgets/vapplication.h b/src/app/widgets/vapplication.h index 4df5493d1..944bd25bc 100644 --- a/src/app/widgets/vapplication.h +++ b/src/app/widgets/vapplication.h @@ -72,7 +72,8 @@ public: QString pathToTables() const; qreal widthMainLine() const; qreal widthHairLine() const; - QString Measurement(const QString &measurement) const; + QString VarToUser(const QString &var) const; + QString VarFromUser(const QString &var) const; QString GuiText(const QString &measurement) const; QString Description(const QString &measurement) const; QString Variable(const QString &name) const; @@ -96,11 +97,11 @@ private: void InitVariables(); void InitFunctions(); void InitPostfixOperators(); - bool Measurements(QString &newFormula, int position, const QString &token); - bool VariablesFromUser(QString &newFormula, int position, const QString &token); - bool PostfixOperators(QString &newFormula, int position, const QString &token); - bool Functions(QString &newFormula, int position, const QString &token); - bool VariablesToUser(QString &newFormula, int position, const QString &token); + bool MeasurementsFromUser(QString &newFormula, int position, const QString &token) const; + bool VariablesFromUser(QString &newFormula, int position, const QString &token) const; + bool PostfixOperatorsFromUser(QString &newFormula, int position, const QString &token) const; + bool FunctionsFromUser(QString &newFormula, int position, const QString &token) const; + bool VariablesToUser(QString &newFormula, int position, const QString &token) const; }; inline Valentina::Units VApplication::patternUnit() const