From c47664d86c104ddf9772893fc427977ff850a79b Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 23 Jan 2021 21:11:21 +0200 Subject: [PATCH] Allow insertion of multiple nodes by setting their number. Closes #88. Ref #80 --- ChangeLog.txt | 1 + .../dialogs/tools/piece/dialoginsertnode.cpp | 44 ++++++++++++++++++- .../dialogs/tools/piece/dialoginsertnode.h | 4 ++ .../dialogs/tools/piece/dialoginsertnode.ui | 21 ++++++++- 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 1051c7182..e7efbc488 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -11,6 +11,7 @@ - Improve multisize measurements format. Allow excluding combinations inside min/max range. - New warning. Grainline is not valid. - [smart-pattern/valentina#87] Add support for TIFF format. +- [smart-pattern/valentina#88] Allow insertion of multiple nodes by setting their number. # Version 0.7.41 Dec 4, 2020 - Bug fixes. diff --git a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp index a833b1d08..ecb6f78e7 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.cpp @@ -48,6 +48,9 @@ DialogInsertNode::DialogInsertNode(const VContainer *data, quint32 toolId, QWidg }); connect(ui->listWidget, &QListWidget::customContextMenuRequested, this, &DialogInsertNode::ShowContextMenu); + connect(ui->listWidget, &QListWidget::itemSelectionChanged, this, &DialogInsertNode::NodeSelected); + connect(ui->spinBoxNodeNumber, QOverload::of(&QSpinBox::valueChanged), this, + &DialogInsertNode::NodeNumberChanged); } //--------------------------------------------------------------------------------------------------------------------- @@ -101,7 +104,11 @@ QVector DialogInsertNode::GetNodes() const QVector nodes; for (qint32 i = 0; i < ui->listWidget->count(); ++i) { - nodes.append(qvariant_cast(ui->listWidget->item(i)->data(Qt::UserRole))); + VPieceNode node = qvariant_cast(ui->listWidget->item(i)->data(Qt::UserRole)); + for(int n = 1; n <= nodeNumbers.value(node.GetId(), 1); ++n) + { + nodes.append(node); + } } return nodes; } @@ -224,6 +231,41 @@ void DialogInsertNode::ShowContextMenu(const QPoint &pos) CheckNodes(); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogInsertNode::NodeSelected() +{ + QListWidgetItem *item = ui->listWidget->currentItem(); + + if (item == nullptr) + { + ui->spinBoxNodeNumber->setDisabled(true); + ui->spinBoxNodeNumber->blockSignals(true); + ui->spinBoxNodeNumber->setValue(1); + ui->spinBoxNodeNumber->blockSignals(false); + return; + } + + VPieceNode node = qvariant_cast(item->data(Qt::UserRole)); + ui->spinBoxNodeNumber->setEnabled(true); + ui->spinBoxNodeNumber->blockSignals(true); + ui->spinBoxNodeNumber->setValue(nodeNumbers.value(node.GetId(), 1)); + ui->spinBoxNodeNumber->blockSignals(false); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogInsertNode::NodeNumberChanged(int val) +{ + QListWidgetItem *item = ui->listWidget->currentItem(); + + if (item == nullptr) + { + return; + } + + VPieceNode node = qvariant_cast(item->data(Qt::UserRole)); + nodeNumbers[node.GetId()] = val; +} + //--------------------------------------------------------------------------------------------------------------------- void DialogInsertNode::CheckPieces() { diff --git a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h index 428b6c8bc..831a51678 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h +++ b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.h @@ -62,6 +62,8 @@ protected: private slots: void ShowContextMenu(const QPoint &pos); + void NodeSelected(); + void NodeNumberChanged(int val); private: Q_DISABLE_COPY(DialogInsertNode) @@ -71,6 +73,8 @@ private: bool m_flagNodes{false}; bool m_flagError{false}; + QMap nodeNumbers{}; + void CheckPieces(); void CheckNodes(); }; diff --git a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.ui b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.ui index 1219877a7..21e4c089b 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.ui +++ b/src/libs/vtools/dialogs/tools/piece/dialoginsertnode.ui @@ -26,16 +26,33 @@ QFormLayout::ExpandingFieldsGrow - + Piece: - + + + + + Number: + + + + + + + 1 + + + 50 + + +