From 8b6ee824ae438b3605c3d6a02df06bfd05c1b6a7 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 19 Jan 2024 10:34:43 +0200 Subject: [PATCH] Better control over known measurement image size in description. --- src/app/tape/dialogs/dialogmdatabase.cpp | 17 ++++- src/app/tape/tkmmainwindow.cpp | 33 +++++++++ src/app/tape/tkmmainwindow.h | 1 + src/app/tape/tkmmainwindow.ui | 68 ++++++++++++------- .../ifc/schema/known_measurements/v1.0.0.xsd | 7 ++ src/libs/ifc/xml/vpatternimage.cpp | 12 ++++ src/libs/ifc/xml/vpatternimage.h | 4 ++ .../vknownmeasurementsdocument.cpp | 20 +++++- .../vknownmeasurementsdocument.h | 1 + 9 files changed, 133 insertions(+), 30 deletions(-) diff --git a/src/app/tape/dialogs/dialogmdatabase.cpp b/src/app/tape/dialogs/dialogmdatabase.cpp index 359da3175..21784850c 100644 --- a/src/app/tape/dialogs/dialogmdatabase.cpp +++ b/src/app/tape/dialogs/dialogmdatabase.cpp @@ -31,6 +31,7 @@ #include "../vformat/knownmeasurements/vknownmeasurement.h" #include "../vformat/knownmeasurements/vknownmeasurements.h" #include "../vformat/knownmeasurements/vknownmeasurementsdatabase.h" +#include "../vmisc/def.h" #include "ui_dialogmdatabase.h" #include @@ -105,11 +106,21 @@ auto DialogMDataBase::ImgTag(const VPatternImage &image) -> QString { if (!image.IsValid()) { - return QStringLiteral(""); // In case of error + return QStringLiteral(R"()"); // In case of error } - return QStringLiteral("") - .arg(image.ContentType(), QString(image.ContentData())); + QString size; + + if (!VFuzzyComparePossibleNulls(image.GetSizeScale(), 100.0)) + { + QSizeF const imaheSize = image.Size(); + size = QStringLiteral(R"(width="%1" height="%2")") + .arg(imaheSize.width() * image.GetSizeScale() / 100) + .arg(imaheSize.height() * image.GetSizeScale() / 100); + } + + return QStringLiteral(R"()") + .arg(image.ContentType(), QString(image.ContentData()), size); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/tape/tkmmainwindow.cpp b/src/app/tape/tkmmainwindow.cpp index 8e33c10a1..6eb37253a 100644 --- a/src/app/tape/tkmmainwindow.cpp +++ b/src/app/tape/tkmmainwindow.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -1213,6 +1214,10 @@ void TKMMainWindow::ShowImageData() disconnect(ui->lineEditImageTitle, &QLineEdit::editingFinished, this, &TKMMainWindow::SaveImageTitle); ui->lineEditImageTitle->setText(image.Title()); connect(ui->lineEditImageTitle, &QLineEdit::editingFinished, this, &TKMMainWindow::SaveImageTitle); + + ui->doubleSpinBoxImageSize->blockSignals(true); + ui->doubleSpinBoxImageSize->setValue(image.GetSizeScale()); + ui->doubleSpinBoxImageSize->blockSignals(false); } //--------------------------------------------------------------------------------------------------------------------- @@ -1466,6 +1471,31 @@ void TKMMainWindow::SaveImageTitle() ShowMData(); } +//--------------------------------------------------------------------------------------------------------------------- +void TKMMainWindow::SaveImageSizeScale() +{ + auto *item = ui->listWidget->currentItem(); + int row = ui->listWidget->currentRow(); + + if (item == nullptr) + { + return; + } + + m_m->SetImageSizeScale(item->data(Qt::UserRole).toUuid(), ui->doubleSpinBoxImageSize->value()); + + MeasurementsWereSaved(false); + + m_known = VKnownMeasurements(); + RefreshImages(); + + ui->listWidget->blockSignals(true); + ui->listWidget->setCurrentRow(row); + ui->listWidget->blockSignals(false); + + ShowMData(); +} + //--------------------------------------------------------------------------------------------------------------------- #if defined(Q_OS_MAC) //--------------------------------------------------------------------------------------------------------------------- @@ -1707,6 +1737,8 @@ void TKMMainWindow::InitWindow() connect(ui->listWidget, &QListWidget::itemSelectionChanged, this, &TKMMainWindow::ShowImageData); connect(ui->lineEditImageTitle, &QLineEdit::editingFinished, this, &TKMMainWindow::SaveImageTitle); + connect(ui->doubleSpinBoxImageSize, QOverload::of(&QDoubleSpinBox::valueChanged), this, + &TKMMainWindow::SaveImageSizeScale); // Tab info ui->plainTextEditKMDescription->setEnabled(true); @@ -2403,6 +2435,7 @@ void TKMMainWindow::ImageFields(bool enabled) ui->lineEditImageTitle->setEnabled(enabled); ui->toolButtonRemoveImage->setEnabled(enabled); ui->toolButtonSaveImage->setEnabled(enabled); + ui->doubleSpinBoxImageSize->setEnabled(enabled); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/tape/tkmmainwindow.h b/src/app/tape/tkmmainwindow.h index abf5e250e..353c6338e 100644 --- a/src/app/tape/tkmmainwindow.h +++ b/src/app/tape/tkmmainwindow.h @@ -115,6 +115,7 @@ private slots: void SaveMDiagram(); void SaveImageTitle(); + void SaveImageSizeScale(); void AskDefaultSettings(); diff --git a/src/app/tape/tkmmainwindow.ui b/src/app/tape/tkmmainwindow.ui index c0da44cb6..6a9faf4dd 100644 --- a/src/app/tape/tkmmainwindow.ui +++ b/src/app/tape/tkmmainwindow.ui @@ -365,8 +365,7 @@ - - .. + @@ -382,8 +381,7 @@ - - .. + @@ -399,8 +397,7 @@ - - .. + @@ -416,8 +413,7 @@ - - .. + @@ -446,8 +442,7 @@ - - .. + @@ -788,8 +783,7 @@ ... - - .. + @@ -812,6 +806,35 @@ + + + + Size: + + + + + + + false + + + % + + + 1 + + + 0.100000000000000 + + + 100.000000000000000 + + + 100.000000000000000 + + + @@ -820,8 +843,7 @@ - - .. + Information @@ -1035,8 +1057,7 @@ false - - .. + &Save @@ -1050,8 +1071,7 @@ false - - .. + Save &As … @@ -1062,8 +1082,7 @@ - - .. + &Quit @@ -1082,8 +1101,7 @@ - - .. + &About Tape @@ -1094,8 +1112,7 @@ - - .. + &New @@ -1132,8 +1149,7 @@ - - .. + &Open diff --git a/src/libs/ifc/schema/known_measurements/v1.0.0.xsd b/src/libs/ifc/schema/known_measurements/v1.0.0.xsd index e805d871c..c8fc0eebd 100644 --- a/src/libs/ifc/schema/known_measurements/v1.0.0.xsd +++ b/src/libs/ifc/schema/known_measurements/v1.0.0.xsd @@ -20,6 +20,7 @@ + @@ -78,4 +79,10 @@ + + + + + + diff --git a/src/libs/ifc/xml/vpatternimage.cpp b/src/libs/ifc/xml/vpatternimage.cpp index 7c50256e8..b7ef0a90f 100644 --- a/src/libs/ifc/xml/vpatternimage.cpp +++ b/src/libs/ifc/xml/vpatternimage.cpp @@ -227,3 +227,15 @@ void VPatternImage::SetTitle(const QString &newTitle) { m_title = newTitle; } + +//--------------------------------------------------------------------------------------------------------------------- +auto VPatternImage::GetSizeScale() const -> qreal +{ + return m_sizeScale; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternImage::SetSizeScale(qreal newSizeScale) +{ + m_sizeScale = qBound(0.1, newSizeScale, 100.0); +} diff --git a/src/libs/ifc/xml/vpatternimage.h b/src/libs/ifc/xml/vpatternimage.h index d46f234f8..1cecf75d4 100644 --- a/src/libs/ifc/xml/vpatternimage.h +++ b/src/libs/ifc/xml/vpatternimage.h @@ -64,11 +64,15 @@ public: auto Title() const -> QString; void SetTitle(const QString &newTitle); + qreal GetSizeScale() const; + void SetSizeScale(qreal newSizeScale); + private: QString m_contentType{}; QByteArray m_contentData{}; mutable QString m_errorString{}; QString m_title{}; + qreal m_sizeScale{100}; }; #endif // VPATTERNIMAGE_H diff --git a/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.cpp b/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.cpp index cdfcfa7cc..1209f5e9d 100644 --- a/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.cpp +++ b/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.cpp @@ -29,6 +29,7 @@ #include "../ifc/ifcdef.h" #include "../ifc/xml/vknownmeasurementsconverter.h" #include "../ifc/xml/vpatternimage.h" +#include "../vmisc/def.h" #include "../vmisc/literals.h" #include "../vmisc/projectversion.h" #include "vknownmeasurement.h" @@ -63,6 +64,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrName, ("name"_L1)) Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrContentType, ("contentType"_L1)) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrUId, ("uid"_L1)) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrTitle, ("title"_L1)) // NOLINT +Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrSize, ("size"_L1)) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrReadOnly, ("read-only"_L1)) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrDescription, ("description"_L1)) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, attrFullName, ("full_name"_L1)) // NOLINT @@ -487,6 +489,21 @@ void VKnownMeasurementsDocument::SetImageTitle(const QUuid &id, const QString &t } } +//--------------------------------------------------------------------------------------------------------------------- +void VKnownMeasurementsDocument::SetImageSizeScale(const QUuid &id, qreal scale) +{ + QDomElement node = FindImage(id); + if (not node.isNull()) + { + SetAttributeOrRemoveIf(node, *attrSize, scale, + [](qreal scale) noexcept { return VFuzzyComparePossibleNulls(scale, 100.0); }); + } + else + { + qWarning() << tr("Can't find image by id '%1'").arg(id.toString()); + } +} + //--------------------------------------------------------------------------------------------------------------------- void VKnownMeasurementsDocument::SetImageId(const QUuid &id, const QUuid &newId) { @@ -588,7 +605,7 @@ auto VKnownMeasurementsDocument::FindImage(const QUuid &id) const -> QDomElement //--------------------------------------------------------------------------------------------------------------------- void VKnownMeasurementsDocument::ReadImages(VKnownMeasurements &known) const { - QDomNodeList list = elementsByTagName(*tagImage); + QDomNodeList const list = elementsByTagName(*tagImage); for (int i = 0; i < list.size(); ++i) { @@ -601,6 +618,7 @@ void VKnownMeasurementsDocument::ReadImages(VKnownMeasurements &known) const VPatternImage image; image.SetContentData(domElement.text().toLatin1(), domElement.attribute(*attrContentType)); image.SetTitle(domElement.attribute(*attrTitle)); + image.SetSizeScale(GetParametrDouble(domElement, *attrSize, QStringLiteral("100.0"))); known.AddImage(QUuid(domElement.attribute(*attrUId)), image); } diff --git a/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.h b/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.h index 48391dfda..fef41f7a4 100644 --- a/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.h +++ b/src/libs/vformat/knownmeasurements/vknownmeasurementsdocument.h @@ -84,6 +84,7 @@ public: void SetImageContent(const QUuid &id, const VPatternImage &image); void SetImageTitle(const QUuid &id, const QString &text); + void SetImageSizeScale(const QUuid &id, qreal scale); void SetImageId(const QUuid &id, const QUuid &newId); private: