From 40363230dcd8cee15432bd97689297ebe98d3687 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 9 Jan 2020 15:14:05 +0200 Subject: [PATCH] Resolved issue #984. Issue with up to date list of unique names. --HG-- branch : develop --- ChangeLog.txt | 1 + src/app/valentina/mainwindow.cpp | 2 ++ src/app/valentina/xml/vpattern.cpp | 3 ++- src/libs/vformat/vmeasurements.cpp | 13 +++++++++++-- src/libs/vformat/vmeasurements.h | 5 +++++ src/libs/vpatterndb/vcontainer.cpp | 15 +++++++++++++++ src/libs/vpatterndb/vcontainer.h | 25 ++++++++++++++++++++++++- 7 files changed, 60 insertions(+), 4 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 883646946..23d29727f 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -36,6 +36,7 @@ - [#984] Special variable "CurrentLength" for tools Cut Arc, Cut Spline and Cut Spline Path. - Added a ruler at the bottom of a tiled PDF document. - Export tiled PDF with watermark. +- [#984] Issue with up to date list of unique names. # Version 0.6.2 (unreleased) - [#903] Bug in tool Cut Spline path. diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 42f49345d..0c038d78a 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -511,6 +511,7 @@ bool MainWindow::LoadMeasurements(const QString &path) } ToolBarOption(); pattern->ClearVariables(VarType::Measurement); + m->StoreNames(false); m->ReadMeasurements(height, size); } catch (VExceptionEmptyParameter &e) @@ -563,6 +564,7 @@ bool MainWindow::UpdateMeasurements(const QString &path, int size, int height) try { pattern->ClearVariables(VarType::Measurement); + m->StoreNames(false); m->ReadMeasurements(height, size); if (m->Type() == MeasurementsType::Individual) { diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index f4b7b3e08..adf8cc314 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -3932,7 +3932,7 @@ void VPattern::ParseIncrementsElement(const QDomNode &node, const Document &pars increment->SetFormula(value, formula, ok); increment->SetDescription(desc); increment->SetPreviewCalculation(node.toElement().tagName() == TagPreviewCalculations); - data->AddVariable(increment); + data->AddUniqueVariable(increment); } } } @@ -4433,6 +4433,7 @@ void VPattern::PrepareForParse(const Document &parse) } data->ClearVariables(types); + parse == Document::FullLiteParse ? data->ClearUniqueNames() : data->ClearExceptUniqueIncrementNames(); } } diff --git a/src/libs/vformat/vmeasurements.cpp b/src/libs/vformat/vmeasurements.cpp index 9e15a1050..b5a2ef89c 100644 --- a/src/libs/vformat/vmeasurements.cpp +++ b/src/libs/vformat/vmeasurements.cpp @@ -249,6 +249,12 @@ void VMeasurements::MoveBottom(const QString &name) } } +//--------------------------------------------------------------------------------------------------------------------- +void VMeasurements::StoreNames(bool store) +{ + m_keepNames = store; +} + //--------------------------------------------------------------------------------------------------------------------- void VMeasurements::ReadMeasurements(qreal height, qreal size) const { @@ -308,8 +314,11 @@ void VMeasurements::ReadMeasurements(qreal height, qreal size) const meash = QSharedPointer(new VMeasurement(data, static_cast(i), name, value, formula, ok, fullName, description)); } - tempData->AddVariable(tempMeash); - data->AddVariable(meash); + if (m_keepNames) + { + tempData->AddUniqueVariable(tempMeash); + data->AddUniqueVariable(meash); + } } } diff --git a/src/libs/vformat/vmeasurements.h b/src/libs/vformat/vmeasurements.h index c25084d27..5489316c6 100644 --- a/src/libs/vformat/vmeasurements.h +++ b/src/libs/vformat/vmeasurements.h @@ -63,6 +63,8 @@ public: void MoveDown(const QString &name); void MoveBottom(const QString &name); + void StoreNames(bool store); + void ReadMeasurements(qreal height, qreal size) const; void ClearForExport(); @@ -143,6 +145,9 @@ private: VContainer *data; MeasurementsType type; + /** @brief m_keepNames store names in container to check uniqueness. */ + bool m_keepNames{true}; + void CreateEmptyMultisizeFile(Unit unit, int baseSize, int baseHeight); void CreateEmptyIndividualFile(Unit unit); diff --git a/src/libs/vpatterndb/vcontainer.cpp b/src/libs/vpatterndb/vcontainer.cpp index f57063c61..d5a42f44b 100644 --- a/src/libs/vpatterndb/vcontainer.cpp +++ b/src/libs/vpatterndb/vcontainer.cpp @@ -719,6 +719,21 @@ void VContainer::ClearUniqueIncrementNames() const } } +//--------------------------------------------------------------------------------------------------------------------- +void VContainer::ClearExceptUniqueIncrementNames() const +{ + const QList list = uniqueNames.value(d->nspace).values(); + ClearUniqueNames(); + + for(auto &name : list) + { + if (name.startsWith('#')) + { + uniqueNames[d->nspace].insert(name); + } + } +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetSize set value of size diff --git a/src/libs/vpatterndb/vcontainer.h b/src/libs/vpatterndb/vcontainer.h index 24fa02160..ffd0b3eb4 100644 --- a/src/libs/vpatterndb/vcontainer.h +++ b/src/libs/vpatterndb/vcontainer.h @@ -162,6 +162,10 @@ public: void AddCurveWithSegments(const QSharedPointer &curve, const quint32 &id, quint32 parentId = NULL_ID); + template + void AddUniqueVariable(T *var); + template + void AddUniqueVariable(const QSharedPointer &var); template void AddVariable(T *var); template @@ -184,6 +188,7 @@ public: void ClearVariables(const QVector &types); void ClearUniqueNames() const; void ClearUniqueIncrementNames() const; + void ClearExceptUniqueIncrementNames() const; void SetSize(qreal size) const; void SetHeight(qreal height) const; @@ -307,6 +312,25 @@ QSharedPointer VContainer::GetVariable(const QString &name) const } } +//--------------------------------------------------------------------------------------------------------------------- +template +void VContainer::AddUniqueVariable(T *var) +{ + AddUniqueVariable(QSharedPointer(var)); +} + +//--------------------------------------------------------------------------------------------------------------------- +template +void VContainer::AddUniqueVariable(const QSharedPointer &var) +{ + AddVariable(var); + + if (d->variables.contains(var->GetName())) + { + uniqueNames[d->nspace].insert(var->GetName()); + } +} + //--------------------------------------------------------------------------------------------------------------------- template void VContainer::AddVariable(T *var) @@ -338,7 +362,6 @@ void VContainer::AddVariable(const QSharedPointer &var) else { d->variables.insert(var->GetName(), var); - uniqueNames[d->nspace].insert(var->GetName()); } }