diff --git a/ChangeLog.txt b/ChangeLog.txt
index 5d50e0011..17ec21477 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -41,6 +41,7 @@
- New option: Use Tool Groups.
- Redesign notch context menu to allow quick selection of the notch type.
- Redesign standard path system.
+- New option: Translate formula
# Valentina 0.7.52 September 12, 2022
- Fix crash when default locale is ru.
diff --git a/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.cpp b/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.cpp
index 5db773f2f..44ffdc7ca 100644
--- a/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.cpp
+++ b/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.cpp
@@ -97,6 +97,8 @@ TapePreferencesConfigurationPage::TapePreferencesConfigurationPage(QWidget *pare
connect(ui->resetWarningsButton, &QPushButton::released, this,
[]() { MApplication::VApp()->TapeSettings()->SetConfirmFormatRewriting(true); });
+ ui->checkBoxTranslateFormula->setChecked(settings->IsTranslateFormula());
+
//----------------------- Toolbar
ui->toolBarStyleCheck->setChecked(settings->GetToolBarStyle());
@@ -148,6 +150,8 @@ auto TapePreferencesConfigurationPage::Apply() -> QStringList
QGuiApplication::restoreOverrideCursor();
}
+ settings->SetTranslateFormula(ui->checkBoxTranslateFormula->isChecked());
+
if (settings->IsDontUseNativeDialog() != ui->checkBoxDontUseNativeDialog->isChecked())
{
settings->SetDontUseNativeDialog(ui->checkBoxDontUseNativeDialog->isChecked());
diff --git a/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.ui b/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.ui
index 5f063158a..4e147bbf9 100644
--- a/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.ui
+++ b/src/app/tape/dialogs/configpages/tapepreferencesconfigurationpage.ui
@@ -34,8 +34,8 @@
0
0
- 522
- 617
+ 508
+ 646
@@ -140,6 +140,16 @@
Measurements editing
+ -
+
+
+ Enable to translate formula according to locale
+
+
+ Translate formula
+
+
+
-
diff --git a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp
index 41b302074..4842cdbe5 100644
--- a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp
+++ b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.cpp
@@ -130,6 +130,7 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent)
ui->checkBoxFreeCurve->setChecked(settings->IsFreeCurveMode());
ui->checkBoxZoomFitBestCurrentPP->setChecked(settings->IsDoubleClickZoomFitBestCurrentPP());
ui->checkBoxInteractiveTools->setChecked(settings->IsInteractiveTools());
+ ui->checkBoxTranslateFormula->setChecked(settings->IsTranslateFormula());
//----------------------- Toolbar
ui->toolBarStyleCheck->setChecked(settings->GetToolBarStyle());
@@ -250,6 +251,7 @@ auto PreferencesConfigurationPage::Apply() -> QStringList
settings->SetFreeCurveMode(ui->checkBoxFreeCurve->isChecked());
settings->SetDoubleClickZoomFitBestCurrentPP(ui->checkBoxZoomFitBestCurrentPP->isChecked());
settings->SetInteractiveTools(ui->checkBoxInteractiveTools->isChecked());
+ settings->SetTranslateFormula(ui->checkBoxTranslateFormula->isChecked());
if (m_pieceLabelLangChanged)
{
diff --git a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui
index 5df39a579..c516f2c90 100644
--- a/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui
+++ b/src/app/valentina/dialogs/configpages/preferencesconfigurationpage.ui
@@ -33,9 +33,9 @@
0
- -134
+ -163
624
- 966
+ 995
@@ -265,6 +265,19 @@
+ -
+
+
+ Enable to translate formula according to locale
+
+
+ Translate formula
+
+
+ true
+
+
+
diff --git a/src/libs/vmisc/vcommonsettings.cpp b/src/libs/vmisc/vcommonsettings.cpp
index fb91fbd4d..ed54f2ac4 100644
--- a/src/libs/vmisc/vcommonsettings.cpp
+++ b/src/libs/vmisc/vcommonsettings.cpp
@@ -177,6 +177,8 @@ Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternShowAccuracyRadius,
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUseOpenGLRender, (QLatin1String("pattern/useOpenGLRender")))
// NOLINTNEXTLINE
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternGraphicalOutput, (QLatin1String("pattern/graphicalOutput")))
+// NOLINTNEXTLINE
+Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingsPatternTranslateFormula, (QLatin1String("pattern/translateFormula")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralRecentFileList, (QLatin1String("recentFileList"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralRestoreFileList, (QLatin1String("restoreFileList"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralGeometry, (QLatin1String("geometry"))) // NOLINT
@@ -1631,3 +1633,18 @@ void VCommonSettings::SetClientID(const QString &clientID)
settings.setValue(*settingsStatistictClientID, clientID);
settings.sync();
}
+
+//---------------------------------------------------------------------------------------------------------------------
+auto VCommonSettings::IsTranslateFormula() const -> bool
+{
+ QSettings settings(this->format(), this->scope(), this->organizationName(), *commonIniFilename);
+ return settings.value(*settingsPatternTranslateFormula, 1).toBool();
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void VCommonSettings::SetTranslateFormula(bool value)
+{
+ QSettings settings(this->format(), this->scope(), this->organizationName(), *commonIniFilename);
+ settings.setValue(*settingsPatternTranslateFormula, value);
+ settings.sync();
+}
diff --git a/src/libs/vmisc/vcommonsettings.h b/src/libs/vmisc/vcommonsettings.h
index b536bf1ba..448cb9082 100644
--- a/src/libs/vmisc/vcommonsettings.h
+++ b/src/libs/vmisc/vcommonsettings.h
@@ -329,6 +329,9 @@ public:
auto GetClientID() const -> QString;
void SetClientID(const QString &clientID);
+ auto IsTranslateFormula() const -> bool;
+ void SetTranslateFormula(bool value);
+
signals:
void SVGFontsPathChanged(const QString &oldPath, const QString &newPath);
diff --git a/src/libs/vpatterndb/vtranslatevars.cpp b/src/libs/vpatterndb/vtranslatevars.cpp
index 3d08e9753..85204bd54 100644
--- a/src/libs/vpatterndb/vtranslatevars.cpp
+++ b/src/libs/vpatterndb/vtranslatevars.cpp
@@ -968,6 +968,12 @@ auto VTranslateVars::VariablesToUser(QString &newFormula, vsizetype position, co
//---------------------------------------------------------------------------------------------------------------------
auto VTranslateVars::InternalVarToUser(const QString &var) const -> QString
{
+ VCommonSettings *settings = VAbstractApplication::VApp()->Settings();
+ if (!settings->IsTranslateFormula())
+ {
+ return var;
+ }
+
QString newVar = var;
vsizetype bias = 0;
if (VariablesToUser(newVar, 0, var, bias))
@@ -987,6 +993,12 @@ auto VTranslateVars::VarToUser(const QString &var) const -> QString
return var; // We do not support translation of variables for these locales
}
+ VCommonSettings *settings = VAbstractApplication::VApp()->Settings();
+ if (!settings->IsTranslateFormula())
+ {
+ return var;
+ }
+
if (measurements.contains(var))
{
return measurements.value(var).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
@@ -1009,6 +1021,12 @@ auto VTranslateVars::VarFromUser(const QString &var) const -> QString
return var; // We do not support translation of variables for Chinese
}
+ VCommonSettings *settings = VAbstractApplication::VApp()->Settings();
+ if (!settings->IsTranslateFormula())
+ {
+ return var;
+ }
+
QString newVar = var;
vsizetype bias = 0;
if (MeasurementsFromUser(newVar, 0, var, bias))
@@ -1061,6 +1079,12 @@ auto VTranslateVars::FormulaFromUser(const QString &formula, bool osSeparator) c
return formula;
}
+ VCommonSettings *settings = VAbstractApplication::VApp()->Settings();
+ if (!settings->IsTranslateFormula())
+ {
+ return formula;
+ }
+
// Eval formula
QScopedPointer cal(
new qmu::QmuTokenParser(formula, osSeparator, true, GetTranslatedFunctions()));
@@ -1105,6 +1129,12 @@ auto VTranslateVars::FormulaToUser(const QString &formula, bool osSeparator) con
return formula;
}
+ VCommonSettings *settings = VAbstractApplication::VApp()->Settings();
+ if (!settings->IsTranslateFormula())
+ {
+ return formula;
+ }
+
QString newFormula = formula; // Local copy for making changes
QMap tokens;
diff --git a/src/libs/vpatterndb/vtranslatevars.h b/src/libs/vpatterndb/vtranslatevars.h
index 7a3e0974c..2e25ca3c1 100644
--- a/src/libs/vpatterndb/vtranslatevars.h
+++ b/src/libs/vpatterndb/vtranslatevars.h
@@ -40,12 +40,6 @@ public:
explicit VTranslateVars();
~VTranslateVars() override = default;
- auto VariablesFromUser(QString &newFormula, vsizetype position, const QString &token, vsizetype &bias) const
- -> bool;
- auto FunctionsFromUser(QString &newFormula, vsizetype position, const QString &token, vsizetype &bias) const
- -> bool;
- auto VariablesToUser(QString &newFormula, vsizetype position, const QString &token, vsizetype &bias) const -> bool;
-
auto InternalVarToUser(const QString &var) const -> QString;
auto VarToUser(const QString &var) const -> QString;
@@ -87,6 +81,12 @@ private:
void InitVariables();
void InitFunctions();
+ auto VariablesFromUser(QString &newFormula, vsizetype position, const QString &token, vsizetype &bias) const
+ -> bool;
+ auto FunctionsFromUser(QString &newFormula, vsizetype position, const QString &token, vsizetype &bias) const
+ -> bool;
+ auto VariablesToUser(QString &newFormula, vsizetype position, const QString &token, vsizetype &bias) const -> bool;
+
void PrepareFunctionTranslations();
void InitSystem(const QString &code, const qmu::QmuTranslation &name, const qmu::QmuTranslation &author,
diff --git a/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp b/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp
index b55ea48a3..efc335a4a 100644
--- a/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp
+++ b/src/libs/vtools/dialogs/support/dialogeditwrongformula.cpp
@@ -727,6 +727,7 @@ void DialogEditWrongFormula::ShowFunctions()
ui->tableWidget->setColumnHidden(ColumnFullName, true);
ui->labelDescription->setText(QString());
+ VCommonSettings *settings = VAbstractApplication::VApp()->Settings();
const VTranslateVars *trVars = VAbstractApplication::VApp()->TrVars();
const QMap functionsDescriptions = trVars->GetFunctionsDescriptions();
const QMap functions = trVars->GetFunctions();
@@ -734,16 +735,30 @@ void DialogEditWrongFormula::ShowFunctions()
while (i != functions.constEnd())
{
ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
- auto *item = new QTableWidgetItem(i.value().translate(VAbstractApplication::VApp()->Settings()->GetLocale()));
+
+ QString name = (!settings->IsTranslateFormula()
+ ? i.value().getMsourceText()
+ : i.value().translate(VAbstractApplication::VApp()->Settings()->GetLocale()));
+
+ auto *item = new QTableWidgetItem(name);
item->setData(Qt::UserRole, i.key());
QFont font = item->font();
font.setBold(true);
item->setFont(font);
ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, ColumnName, item);
- functionsDescriptions.contains(i.key()) ? item->setToolTip(functionsDescriptions.value(i.key()).translate(
- VAbstractApplication::VApp()->Settings()->GetLocale()))
- : item->setToolTip(i.value().getMdisambiguation());
+ if (functionsDescriptions.contains(i.key()))
+ {
+ QString description =
+ (!settings->IsTranslateFormula() ? functionsDescriptions.value(i.key()).getMsourceText()
+ : functionsDescriptions.value(i.key()).translate(
+ VAbstractApplication::VApp()->Settings()->GetLocale()));
+ item->setToolTip(description);
+ }
+ else
+ {
+ item->setToolTip(i.value().getMdisambiguation());
+ }
++i;
}
@@ -800,7 +815,8 @@ void DialogEditWrongFormula::FilterVariablesEdited(const QString &filter)
const QList items = ui->tableWidget->findItems(filter, Qt::MatchContains);
for (auto *item : items)
{
- // If filter is empty findItems() for unknown reason returns nullptr items.
+ // If filter is empty findItems() for unknown reason returns nullptr
+ // items.
if (item)
{
ui->tableWidget->showRow(item->row());