From 5156e0cf255c4f90cbca32710c3b35379213115d Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 28 Nov 2016 14:52:31 +0200 Subject: [PATCH] Read/write piece path include type. --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 3 + src/libs/ifc/schema/pattern/v0.4.0.xsd | 9 ++- src/libs/vmisc/def.h | 10 ++- .../dialogs/tools/dialogseamallowance.cpp | 63 ++++++++++++++++--- .../dialogs/tools/dialogseamallowance.h | 2 + .../dialogs/tools/dialogseamallowance.ui | 12 +++- src/libs/vtools/tools/vtoolseamallowance.cpp | 2 + src/libs/vtools/tools/vtoolseamallowance.h | 1 + 8 files changed, 91 insertions(+), 11 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index a5f58cf22..338021003 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -846,6 +846,9 @@ void VPattern::ParseDetailCSARecords(const QDomElement &domElement, VPiece &deta record.path = GetParametrUInt(element, VToolSeamAllowance::AttrPath, NULL_ID_STR); record.endPoint = GetParametrUInt(element, VToolSeamAllowance::AttrEnd, NULL_ID_STR); record.reverse = GetParametrBool(element, VAbstractPattern::AttrNodeReverse, falseStr); + record.includeType = static_cast(GetParametrUInt(element, + VToolSeamAllowance::AttrIncludeAs, + "1")); records.append(record); } } diff --git a/src/libs/ifc/schema/pattern/v0.4.0.xsd b/src/libs/ifc/schema/pattern/v0.4.0.xsd index 225ce799c..29e40d580 100644 --- a/src/libs/ifc/schema/pattern/v0.4.0.xsd +++ b/src/libs/ifc/schema/pattern/v0.4.0.xsd @@ -414,7 +414,7 @@ - + @@ -442,6 +442,7 @@ + @@ -693,4 +694,10 @@ + + + + + + diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index c90dd6c78..63d489d2f 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -74,6 +74,12 @@ enum class PieceNodeAngle : unsigned char BySecondEdgeRightAngle }; +enum class PiecePathIncludeType : unsigned char +{ + AsMainPath = 0, + AsCustomSA +}; + enum class PiecePathType : unsigned char {PiecePath = 0, CustomSeamAllowance = 1, InternalPath = 2, Unknown = 3}; typedef unsigned char ToolVisHolderType; @@ -686,13 +692,15 @@ struct CustomSARecord : startPoint(0), path(0), endPoint(0), - reverse(false) + reverse(false), + includeType(PiecePathIncludeType::AsCustomSA) {} quint32 startPoint; quint32 path; quint32 endPoint; bool reverse; + PiecePathIncludeType includeType; }; Q_DECLARE_METATYPE(CustomSARecord) diff --git a/src/libs/vtools/dialogs/tools/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/dialogseamallowance.cpp index 5b07f2e24..a6d79f25d 100644 --- a/src/libs/vtools/dialogs/tools/dialogseamallowance.cpp +++ b/src/libs/vtools/dialogs/tools/dialogseamallowance.cpp @@ -103,6 +103,8 @@ DialogSeamAllowance::DialogSeamAllowance(const VContainer *data, const quint32 & &DialogSeamAllowance::CSAStartPointChanged); connect(ui->comboBoxEndPoint, static_cast(&QComboBox::currentIndexChanged), this, &DialogSeamAllowance::CSAEndPointChanged); + connect(ui->comboBoxIncludeType, static_cast(&QComboBox::currentIndexChanged), this, + &DialogSeamAllowance::CSAIncludeTypeChanged); if (not applyAllowed) { @@ -352,6 +354,10 @@ void DialogSeamAllowance::ShowCustomSAContextMenu(const QPoint &pos) auto *dialog = new DialogPiecePath(data, record.path, this); dialog->SetPiecePath(data->GetPiecePath(record.path)); dialog->SetPieceId(toolId); + if (record.includeType == PiecePathIncludeType::AsMainPath) + { + dialog->SetSAWidth(ui->doubleSpinBoxSeams->value()); + } dialog->EnbleShowMode(true); m_dialog = dialog; m_dialog->setModal(true); @@ -502,6 +508,29 @@ void DialogSeamAllowance::CSAEndPointChanged(int index) rowItem->setData(Qt::UserRole, QVariant::fromValue(record)); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogSeamAllowance::CSAIncludeTypeChanged(int index) +{ + const int row = ui->listWidgetCustomSA->currentRow(); + if (ui->listWidgetCustomSA->count() == 0 || row == -1 || row >= ui->listWidgetCustomSA->count()) + { + return; + } + +#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) + const PiecePathIncludeType type = static_cast(ui->comboBoxEndPoint->itemData(index).toUInt()); +#else + Q_UNUSED(index); + const PiecePathIncludeType type = static_cast(ui->comboBoxEndPoint->currentData().toUInt()); +#endif + + QListWidgetItem *rowItem = ui->listWidgetCustomSA->item(row); + SCASSERT(rowItem != nullptr); + CustomSARecord record = qvariant_cast(rowItem->data(Qt::UserRole)); + record.includeType = type; + rowItem->setData(Qt::UserRole, QVariant::fromValue(record)); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogSeamAllowance::NodeAngleChanged(int index) { @@ -564,16 +593,12 @@ void DialogSeamAllowance::CustomSAChanged(int row) return; } - ui->comboBoxStartPoint->blockSignals(true); - ui->comboBoxEndPoint->blockSignals(true); - - InitCSAPoint(ui->comboBoxStartPoint); - InitCSAPoint(ui->comboBoxEndPoint); - const QListWidgetItem *item = ui->listWidgetCustomSA->item( row ); SCASSERT(item != nullptr); const CustomSARecord record = qvariant_cast(item->data(Qt::UserRole)); + ui->comboBoxStartPoint->blockSignals(true); + InitCSAPoint(ui->comboBoxStartPoint); { const int index = ui->comboBoxStartPoint->findData(record.startPoint); if (index != -1) @@ -581,7 +606,10 @@ void DialogSeamAllowance::CustomSAChanged(int row) ui->comboBoxStartPoint->setCurrentIndex(index); } } + ui->comboBoxStartPoint->blockSignals(false); + ui->comboBoxEndPoint->blockSignals(true); + InitCSAPoint(ui->comboBoxEndPoint); { const int index = ui->comboBoxEndPoint->findData(record.endPoint); if (index != -1) @@ -589,9 +617,18 @@ void DialogSeamAllowance::CustomSAChanged(int row) ui->comboBoxEndPoint->setCurrentIndex(index); } } - - ui->comboBoxStartPoint->blockSignals(false); ui->comboBoxEndPoint->blockSignals(false); + + ui->comboBoxIncludeType->blockSignals(true); + InitSAIncludeType(); + { + const int index = ui->comboBoxIncludeType->findData(static_cast(record.includeType)); + if (index != -1) + { + ui->comboBoxIncludeType->setCurrentIndex(index); + } + } + ui->comboBoxIncludeType->blockSignals(false); } //--------------------------------------------------------------------------------------------------------------------- @@ -853,3 +890,13 @@ void DialogSeamAllowance::InitCSAPoint(QComboBox *box) } } } + +//--------------------------------------------------------------------------------------------------------------------- +void DialogSeamAllowance::InitSAIncludeType() +{ + ui->comboBoxIncludeType->clear(); + + ui->comboBoxIncludeType->addItem(tr("main path"), static_cast(PiecePathIncludeType::AsMainPath)); + ui->comboBoxIncludeType->addItem(tr("custom seam allowance"), + static_cast(PiecePathIncludeType::AsCustomSA)); +} diff --git a/src/libs/vtools/dialogs/tools/dialogseamallowance.h b/src/libs/vtools/dialogs/tools/dialogseamallowance.h index 4675c0939..cd53f8da2 100644 --- a/src/libs/vtools/dialogs/tools/dialogseamallowance.h +++ b/src/libs/vtools/dialogs/tools/dialogseamallowance.h @@ -67,6 +67,7 @@ private slots: void NodeChanged(int index); void CSAStartPointChanged(int index); void CSAEndPointChanged(int index); + void CSAIncludeTypeChanged(int index); void NodeAngleChanged(int index); void ReturnDefBefore(); void ReturnDefAfter(); @@ -95,6 +96,7 @@ private: bool MainPathIsClockwise() const; void InitNodesList(); void InitCSAPoint(QComboBox *box); + void InitSAIncludeType(); QListWidgetItem *GetItemById(quint32 id); diff --git a/src/libs/vtools/dialogs/tools/dialogseamallowance.ui b/src/libs/vtools/dialogs/tools/dialogseamallowance.ui index 27f285d92..92caf7a2b 100644 --- a/src/libs/vtools/dialogs/tools/dialogseamallowance.ui +++ b/src/libs/vtools/dialogs/tools/dialogseamallowance.ui @@ -21,7 +21,7 @@ - 0 + 1 @@ -326,6 +326,16 @@ + + + + Include as: + + + + + + diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 2ed36f232..2f8bfa5d9 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -68,6 +68,7 @@ const QString VToolSeamAllowance::AttrUnited = QStringLiteral("united"); const QString VToolSeamAllowance::AttrStart = QStringLiteral("start"); const QString VToolSeamAllowance::AttrPath = QStringLiteral("path"); const QString VToolSeamAllowance::AttrEnd = QStringLiteral("end"); +const QString VToolSeamAllowance::AttrIncludeAs = QStringLiteral("includeAs"); //--------------------------------------------------------------------------------------------------------------------- VToolSeamAllowance::~VToolSeamAllowance() @@ -242,6 +243,7 @@ void VToolSeamAllowance::AddCSARecord(VAbstractPattern *doc, QDomElement &domEle doc->SetAttribute(recordNode, AttrPath, record.path); doc->SetAttribute(recordNode, AttrEnd, record.endPoint); doc->SetAttribute(recordNode, VAbstractPattern::AttrNodeReverse, record.reverse); + doc->SetAttribute(recordNode, AttrIncludeAs, static_cast(record.includeType)); domElement.appendChild(recordNode); } diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index 17d55b26e..03a53157d 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -65,6 +65,7 @@ public: static const QString AttrStart; static const QString AttrPath; static const QString AttrEnd; + static const QString AttrIncludeAs; void Remove(bool ask);