From b43962d40dca02fee0dc57aba452df7a9cdb13a0 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 16 Jan 2019 19:13:23 +0200 Subject: [PATCH] Speed optimization for switching "In layout" state. --HG-- branch : develop --- ChangeLog.txt | 1 + src/app/valentina/dialogs/vwidgetdetails.cpp | 32 +++++++++++++++---- src/app/valentina/dialogs/vwidgetdetails.h | 1 + src/libs/vtools/tools/vtoolseamallowance.cpp | 2 +- .../vtools/undocommands/togglepiecestate.cpp | 2 +- .../vtools/undocommands/togglepiecestate.h | 2 +- 6 files changed, 31 insertions(+), 9 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index adb80ad8d..23e844568 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -8,6 +8,7 @@ - Added ability to search measurements by regex. - [#927] Freeze prefix language on pattern/project creation. - [#929] New variable type: Separator. +- Speed optimization for switching "In layout" state. # Version 0.6.2 (unreleased) - [#903] Bug in tool Cut Spline path. diff --git a/src/app/valentina/dialogs/vwidgetdetails.cpp b/src/app/valentina/dialogs/vwidgetdetails.cpp index 398017b7b..deec3f1b1 100644 --- a/src/app/valentina/dialogs/vwidgetdetails.cpp +++ b/src/app/valentina/dialogs/vwidgetdetails.cpp @@ -81,6 +81,27 @@ void VWidgetDetails::SelectDetail(quint32 id) } } +//--------------------------------------------------------------------------------------------------------------------- +void VWidgetDetails::ToggledPiece(quint32 id) +{ + const QHash *details = m_data->DataPieces(); + const int rowCount = ui->tableWidget->rowCount(); + for (int row = 0; row < rowCount; ++row) + { + QTableWidgetItem *item = ui->tableWidget->item(row, 0); + + if (item->data(Qt::UserRole).toUInt() == id) + { + if (details->contains(id)) + { + details->value(id).IsInLayout() ? item->setIcon(QIcon("://icon/16x16/allow_detail.png")) : + item->setIcon(QIcon("://icon/16x16/forbid_detail.png")); + } + return; + } + } +} + //--------------------------------------------------------------------------------------------------------------------- void VWidgetDetails::InLayoutStateChanged(int row, int column) { @@ -97,7 +118,7 @@ void VWidgetDetails::InLayoutStateChanged(int row, int column) const bool inLayout = not allDetails->value(id).IsInLayout(); TogglePieceInLayout *togglePrint = new TogglePieceInLayout(id, inLayout, m_data, m_doc); - connect(togglePrint, &TogglePieceInLayout::UpdateList, this, &VWidgetDetails::UpdateList); + connect(togglePrint, &TogglePieceInLayout::Toggled, this, &VWidgetDetails::ToggledPiece); qApp->getUndoStack()->push(togglePrint); } @@ -105,7 +126,7 @@ void VWidgetDetails::InLayoutStateChanged(int row, int column) void VWidgetDetails::FillTable(const QHash *details) { const int selectedRow = ui->tableWidget->currentRow(); - ui->tableWidget->clear(); + ui->tableWidget->clearContents(); ui->tableWidget->setColumnCount(2); ui->tableWidget->setRowCount(details->size()); @@ -167,14 +188,13 @@ void VWidgetDetails::ToggleSectionDetails(bool select) for (int i = 0; itableWidget->rowCount(); ++i) { - QTableWidgetItem *item = ui->tableWidget->item(i, 0); - const quint32 id = item->data(Qt::UserRole).toUInt(); + const quint32 id = ui->tableWidget->item(i, 0)->data(Qt::UserRole).toUInt(); if (allDetails->contains(id)) { if (not (select == allDetails->value(id).IsInLayout())) { TogglePieceInLayout *togglePrint = new TogglePieceInLayout(id, select, m_data, m_doc); - connect(togglePrint, &TogglePieceInLayout::UpdateList, this, &VWidgetDetails::UpdateList); + connect(togglePrint, &TogglePieceInLayout::Toggled, this, &VWidgetDetails::ToggledPiece); qApp->getUndoStack()->push(togglePrint); } } @@ -251,7 +271,7 @@ void VWidgetDetails::ShowContextMenu(const QPoint &pos) select = not allDetails->value(id).IsInLayout(); TogglePieceInLayout *togglePrint = new TogglePieceInLayout(id, select, m_data, m_doc); - connect(togglePrint, &TogglePieceInLayout::UpdateList, this, &VWidgetDetails::UpdateList); + connect(togglePrint, &TogglePieceInLayout::Toggled, this, &VWidgetDetails::ToggledPiece); qApp->getUndoStack()->push(togglePrint); } } diff --git a/src/app/valentina/dialogs/vwidgetdetails.h b/src/app/valentina/dialogs/vwidgetdetails.h index 98081fb3f..65c405f31 100644 --- a/src/app/valentina/dialogs/vwidgetdetails.h +++ b/src/app/valentina/dialogs/vwidgetdetails.h @@ -54,6 +54,7 @@ signals: public slots: void UpdateList(); void SelectDetail(quint32 id); + void ToggledPiece(quint32 id); private slots: void InLayoutStateChanged(int row, int column); diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index d18921bc5..b1a371d11 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -1480,7 +1480,7 @@ void VToolSeamAllowance::ShowOptions() void VToolSeamAllowance::ToggleInLayout(bool checked) { TogglePieceInLayout *togglePrint = new TogglePieceInLayout(m_id, checked, &(VAbstractTool::data), doc); - connect(togglePrint, &TogglePieceInLayout::UpdateList, doc, &VAbstractPattern::CheckInLayoutList); + connect(togglePrint, &TogglePieceInLayout::Toggled, doc, &VAbstractPattern::CheckInLayoutList); qApp->getUndoStack()->push(togglePrint); } diff --git a/src/libs/vtools/undocommands/togglepiecestate.cpp b/src/libs/vtools/undocommands/togglepiecestate.cpp index 9f1fec22a..4ceae383c 100644 --- a/src/libs/vtools/undocommands/togglepiecestate.cpp +++ b/src/libs/vtools/undocommands/togglepiecestate.cpp @@ -87,7 +87,7 @@ void TogglePieceInLayout::Do(bool state) VPiece det = m_data->DataPieces()->value(m_id); det.SetInLayout(state); m_data->UpdatePiece(m_id, det); - emit UpdateList(); + emit Toggled(m_id); } else { diff --git a/src/libs/vtools/undocommands/togglepiecestate.h b/src/libs/vtools/undocommands/togglepiecestate.h index 3b9942e99..3d8799f57 100644 --- a/src/libs/vtools/undocommands/togglepiecestate.h +++ b/src/libs/vtools/undocommands/togglepiecestate.h @@ -47,7 +47,7 @@ public: virtual void undo() override; virtual void redo() override; signals: - void UpdateList(); + void Toggled(quint32 id); private: Q_DISABLE_COPY(TogglePieceInLayout) quint32 m_id;