From a067b19d8f904db470d662b72869a71473219468 Mon Sep 17 00:00:00 2001 From: Valentina Zhuravska Date: Wed, 31 Aug 2016 16:18:34 +0300 Subject: [PATCH 1/3] Added "All/None" menu in detail list area for easier handling of many parts. --HG-- branch : feature --- src/app/valentina/dialogs/vwidgetdetails.cpp | 36 ++++++++++++++++++++ src/app/valentina/dialogs/vwidgetdetails.h | 1 + 2 files changed, 37 insertions(+) diff --git a/src/app/valentina/dialogs/vwidgetdetails.cpp b/src/app/valentina/dialogs/vwidgetdetails.cpp index 315d84997..d03c363a0 100644 --- a/src/app/valentina/dialogs/vwidgetdetails.cpp +++ b/src/app/valentina/dialogs/vwidgetdetails.cpp @@ -33,6 +33,7 @@ #include "../vmisc/vabstractapplication.h" #include "../vtools/undocommands/toggledetailinlayout.h" +#include #include //--------------------------------------------------------------------------------------------------------------------- @@ -46,7 +47,10 @@ VWidgetDetails::VWidgetDetails(VContainer *data, VAbstractPattern *doc, QWidget FillTable(m_data->DataDetails()); + ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->tableWidget, &QTableWidget::cellClicked, this, &VWidgetDetails::InLayoutStateChanged); + connect(ui->tableWidget, &QTableWidget::customContextMenuRequested, this, &VWidgetDetails::ShowContextMenu); } //--------------------------------------------------------------------------------------------------------------------- @@ -132,3 +136,35 @@ void VWidgetDetails::FillTable(const QHash *details) ui->tableWidget->setCurrentCell(selectedRow, 0); } + +//--------------------------------------------------------------------------------------------------------------------- +void VWidgetDetails::ShowContextMenu(const QPoint &pos) +{ + QMenu *menu = new QMenu; + QAction *actionSelectAll = menu->addAction(tr("Select all")); + QAction *actionSelectNone = menu->addAction(tr("Select none")); + QAction *selectedAction = menu->exec(ui->tableWidget->viewport()->mapToGlobal(pos)); + + bool select; + if (selectedAction == actionSelectAll) + { + select = true; + } + else if (selectedAction == actionSelectNone) + { + select = false; + } + else + { + return; + } + + for (int i = 0; itableWidget->rowCount(); ++i) + { + QTableWidgetItem *item = ui->tableWidget->item(i, 0); + const quint32 id = item->data(Qt::UserRole).toUInt(); + ToggleDetailInLayout *togglePrint = new ToggleDetailInLayout(id, select, m_data, m_doc); + connect(togglePrint, &ToggleDetailInLayout::NeedLiteParsing, m_doc, &VAbstractPattern::LiteParseTree); + qApp->getUndoStack()->push(togglePrint); + } +} diff --git a/src/app/valentina/dialogs/vwidgetdetails.h b/src/app/valentina/dialogs/vwidgetdetails.h index c59147007..431cbd0ac 100644 --- a/src/app/valentina/dialogs/vwidgetdetails.h +++ b/src/app/valentina/dialogs/vwidgetdetails.h @@ -53,6 +53,7 @@ public slots: private slots: void InLayoutStateChanged(int row, int column); + void ShowContextMenu(const QPoint &pos); private: Q_DISABLE_COPY(VWidgetDetails) From d13bf23bf7acb564f7d98c94a8fdb13069c01e99 Mon Sep 17 00:00:00 2001 From: Valentina Zhuravska Date: Wed, 31 Aug 2016 16:33:31 +0300 Subject: [PATCH 2/3] Updated Changelog.txt. --HG-- branch : feature --- ChangeLog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index 4fac8d9b1..e5970b86a 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -37,6 +37,7 @@ - [#520] Improve Union tool. An option to select about original pieces. - [#262] Automatic Update notification. - [#424] Improve Formula Wizard dialog. +- Added "All/None" menu in detail list area for easier handling of many parts. # Version 0.4.5 - [#435] Valentina doesn't change the cursor. From 4283cc8ef22e507fbfb91c21d62e303f5a9eb7b6 Mon Sep 17 00:00:00 2001 From: Valentina Zhuravska Date: Tue, 6 Sep 2016 12:37:20 +0300 Subject: [PATCH 3/3] Used QUndoStack::beginMacro and QUndoStack::endMacro. --HG-- branch : feature --- src/app/valentina/dialogs/vwidgetdetails.cpp | 69 +++++++++++++++----- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/src/app/valentina/dialogs/vwidgetdetails.cpp b/src/app/valentina/dialogs/vwidgetdetails.cpp index d03c363a0..103729fe4 100644 --- a/src/app/valentina/dialogs/vwidgetdetails.cpp +++ b/src/app/valentina/dialogs/vwidgetdetails.cpp @@ -143,28 +143,63 @@ void VWidgetDetails::ShowContextMenu(const QPoint &pos) QMenu *menu = new QMenu; QAction *actionSelectAll = menu->addAction(tr("Select all")); QAction *actionSelectNone = menu->addAction(tr("Select none")); - QAction *selectedAction = menu->exec(ui->tableWidget->viewport()->mapToGlobal(pos)); - bool select; - if (selectedAction == actionSelectAll) + const QHash *allDetails = m_data->DataDetails(); + if (not allDetails->count() == 0) { - select = true; - } - else if (selectedAction == actionSelectNone) - { - select = false; + int selectedDetails = 0; + + QHash::const_iterator iter = allDetails->constBegin(); + while (iter != allDetails->constEnd()) + { + if(iter.value().IsInLayout()) + { + selectedDetails++; + } + ++iter; + } + if (selectedDetails == 0) + { + actionSelectNone->setDisabled(true); + } + else if (selectedDetails == allDetails->size()) + { + actionSelectAll->setDisabled(true); + } + + QAction *selectedAction = menu->exec(ui->tableWidget->viewport()->mapToGlobal(pos)); + + bool select; + if (selectedAction == actionSelectAll) + { + select = true; + qApp->getUndoStack()->beginMacro(tr("select all details")); + } + else if (selectedAction == actionSelectNone) + { + select = false; + qApp->getUndoStack()->beginMacro(tr("select none details")); + } + else + { + return; + } + + for (int i = 0; itableWidget->rowCount(); ++i) + { + QTableWidgetItem *item = ui->tableWidget->item(i, 0); + const quint32 id = item->data(Qt::UserRole).toUInt(); + if (not select == m_data->DataDetails()->value(id).IsInLayout()) + { + ToggleDetailInLayout *togglePrint = new ToggleDetailInLayout(id, select, m_data, m_doc); + connect(togglePrint, &ToggleDetailInLayout::NeedLiteParsing, m_doc, &VAbstractPattern::LiteParseTree); + qApp->getUndoStack()->push(togglePrint); + } + } + qApp->getUndoStack()->endMacro(); } else { return; } - - for (int i = 0; itableWidget->rowCount(); ++i) - { - QTableWidgetItem *item = ui->tableWidget->item(i, 0); - const quint32 id = item->data(Qt::UserRole).toUInt(); - ToggleDetailInLayout *togglePrint = new ToggleDetailInLayout(id, select, m_data, m_doc); - connect(togglePrint, &ToggleDetailInLayout::NeedLiteParsing, m_doc, &VAbstractPattern::LiteParseTree); - qApp->getUndoStack()->push(togglePrint); - } }