From 57dd27cec0b04de8df1bc65f75a2d056d555eb4f Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 23 Jul 2022 10:47:52 +0300 Subject: [PATCH] Fix updating dimension labels in Valentina app. --- ChangeLog.txt | 1 + src/app/tape/tmainwindow.cpp | 23 +++------- src/app/valentina/mainwindow.cpp | 76 ++++++++++++++++++++++---------- 3 files changed, 58 insertions(+), 42 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 7eb956719..959f22802 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -11,6 +11,7 @@ - Tape app. "Export from existing ..." now supports multisize measurements. - Fix main path validation. False positive double curve. - Fix Setup multisize measurements dialog. Improved handling Height dimension. +- Fix updating dimension labels in Valentina app. # Valentina 0.7.51 April 18, 2022 - Z value change for a layout piece. diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 58964e2d9..addd3378e 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -2815,11 +2815,12 @@ void TMainWindow::InitDimensionGradation(int index, const MeasurementDimension_p } else { - control->addItem(QString("%1 %2").arg(base).arg(unit), base); + control->addItem(QStringLiteral("%1 %2").arg(base).arg(unit), base); } } } - else if (dimension->Type() == MeasurementDimension::Y) + else if (dimension->Type() == MeasurementDimension::Y || dimension->Type() == MeasurementDimension::W || + dimension->Type() == MeasurementDimension::Z) { for(auto base : bases) { @@ -2831,7 +2832,7 @@ void TMainWindow::InitDimensionGradation(int index, const MeasurementDimension_p { if (dimension->IsBodyMeasurement()) { - control->addItem(QString("%1 %2").arg(fc ? base*2 : base).arg(unit), base); + control->addItem(QStringLiteral("%1 %2").arg(fc ? base*2 : base).arg(unit), base); } else { @@ -2840,20 +2841,6 @@ void TMainWindow::InitDimensionGradation(int index, const MeasurementDimension_p } } } - else if (dimension->Type() == MeasurementDimension::W || dimension->Type() == MeasurementDimension::Z) - { - for(auto base : bases) - { - if (labels.contains(base) && not labels.value(base).isEmpty()) - { - control->addItem(labels.value(base), base); - } - else - { - control->addItem(QString("%1 %2").arg(fc ? base*2 : base).arg(unit), base); - } - } - } // after initialization the current index is 0. The signal for changing the index will not be triggered if not make // it invalid first @@ -2878,7 +2865,7 @@ void TMainWindow::InitDimensionControls() const QList dimensions = m->Dimensions().values(); const QString unit = UnitsToStr(m->Units(), true); - auto InitControl = [this, dimensions, unit](int index, QLabel *&name, QComboBox *&control) + auto InitControl = [this, dimensions](int index, QLabel *&name, QComboBox *&control) { if (dimensions.size() > index) { diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 45fe3db8e..c8c2a4399 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -592,7 +592,8 @@ bool MainWindow::UpdateMeasurements(const QString &path, qreal baseA, qreal base } //--------------------------------------------------------------------------------------------------------------------- -bool MainWindow::UpdateMeasurements(const QSharedPointer &mFile, qreal baseA, qreal baseB, qreal baseC) +auto MainWindow::UpdateMeasurements(const QSharedPointer &mFile, qreal baseA, qreal baseB, + qreal baseC) -> bool { m = mFile; @@ -606,7 +607,7 @@ bool MainWindow::UpdateMeasurements(const QSharedPointer &mFile, qCCritical(vMainWindow, "%s", qUtf8Printable(tr("Measurement files types have not match."))); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_DATAERR); + QCoreApplication::exit(V_EX_DATAERR); } return false; } @@ -617,8 +618,50 @@ bool MainWindow::UpdateMeasurements(const QSharedPointer &mFile, if (not m->Dimensions().isEmpty()) { - InitDimensionGradation(0, m->Dimensions().values().at(0), dimensionA); - DimensionABaseChanged(); + const QList dimensions = m->Dimensions().values(); + + auto InitDimensionLabel = [this, dimensions](const MeasurementDimension_p& dimension, + QPointer &name, QPointer &control) + { + if (dimension.isNull()) + { + return; + } + + if (name == nullptr) + { + name = new QLabel(dimension->Name()+QChar(':')); + } + else + { + name->setText(dimension->Name()+QChar(':')); + } + name->setToolTip(VAbstartMeasurementDimension::DimensionToolTip(dimension, m->IsFullCircumference())); + + if (control == nullptr) + { + control = new QComboBox; + control->setSizeAdjustPolicy(QComboBox::AdjustToContents); + } + }; + + MeasurementDimension_p dimension = dimensions.at(0); + InitDimensionLabel(dimension, dimensionALabel, dimensionA); + InitDimensionGradation(0, dimension, dimensionA); + + if (dimensions.size() > 1) + { + dimension = dimensions.at(1); + InitDimensionLabel(dimension, dimensionBLabel, dimensionB); + InitDimensionGradation(1, dimension, dimensionB); + + if (dimensions.size() > 2) + { + dimension = dimensions.at(2); + InitDimensionLabel(dimension, dimensionCLabel, dimensionC); + InitDimensionGradation(2, dimension, dimensionC); + } + } } m->StoreNames(false); @@ -636,13 +679,11 @@ bool MainWindow::UpdateMeasurements(const QSharedPointer &mFile, qUtf8Printable(e.ErrorMessage()), qUtf8Printable(e.DetailedInformation())); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + QCoreApplication::exit(V_EX_NOINPUT); } return false; } - - return true; } @@ -4600,11 +4641,12 @@ void MainWindow::InitDimensionGradation(int index, const MeasurementDimension_p } else { - control->addItem(QString("%1 %2").arg(base).arg(unit), base); + control->addItem(QStringLiteral("%1 %2").arg(base).arg(unit), base); } } } - else if (dimension->Type() == MeasurementDimension::Y) + else if (dimension->Type() == MeasurementDimension::Y || dimension->Type() == MeasurementDimension::W || + dimension->Type() == MeasurementDimension::Z) { for(auto base : bases) { @@ -4616,7 +4658,7 @@ void MainWindow::InitDimensionGradation(int index, const MeasurementDimension_p { if (dimension->IsBodyMeasurement()) { - control->addItem(QString("%1 %2").arg(fc ? base*2 : base).arg(unit), base); + control->addItem(QStringLiteral("%1 %2").arg(fc ? base*2 : base).arg(unit), base); } else { @@ -4625,20 +4667,6 @@ void MainWindow::InitDimensionGradation(int index, const MeasurementDimension_p } } } - else if (dimension->Type() == MeasurementDimension::W || dimension->Type() == MeasurementDimension::Z) - { - for(auto base : bases) - { - if (labels.contains(base) && not labels.value(base).isEmpty()) - { - control->addItem(labels.value(base), base); - } - else - { - control->addItem(QString("%1 %2").arg(fc ? base*2 : base).arg(unit), base); - } - } - } // after initialization the current index is 0. The signal for changing the index will not be triggered if not make // it invalid first