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());