From 02c4c8a47ae3bc8bec7a3fb53430f68f525c71dd Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Mon, 23 Jan 2023 21:35:34 -0600 Subject: [PATCH] multi select for service item --- src/cpp/serviceitemmodel.cpp | 29 +++++++++++++++++++++++++++++ src/cpp/serviceitemmodel.h | 1 + src/qml/presenter/ServiceList.qml | 22 +++++++++++++++++++--- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/cpp/serviceitemmodel.cpp b/src/cpp/serviceitemmodel.cpp index ff88a39..02feb09 100644 --- a/src/cpp/serviceitemmodel.cpp +++ b/src/cpp/serviceitemmodel.cpp @@ -510,6 +510,35 @@ bool ServiceItemModel::select(int id) { return true; } +bool ServiceItemModel::selectItems(QVariantList items) { + qDebug() << "Let's select some items!"; + for (int i = 0; i < m_items.length(); i++) { + QModelIndex idx = index(i); + ServiceItem *item = m_items[idx.row()]; + if (item->selected()) { + item->setSelected(false); + qDebug() << "################"; + qDebug() << "deselected" << item->name(); + qDebug() << "################"; + emit dataChanged(idx, idx, QVector() << SelectedRole); + } + } + qDebug() << "All things have been deselected"; + foreach (QVariant it, items) { + int i = it.toInt(); + QModelIndex idx = index(i); + ServiceItem *item = m_items[idx.row()]; + if (!item->selected()) { + item->setSelected(true); + qDebug() << "################"; + qDebug() << "selected" << item->name(); + qDebug() << "################"; + emit dataChanged(idx, idx, QVector() << SelectedRole); + } + } + return true; +} + bool ServiceItemModel::activate(int id) { QModelIndex idx = index(id); ServiceItem *item = m_items[idx.row()]; diff --git a/src/cpp/serviceitemmodel.h b/src/cpp/serviceitemmodel.h index 9c20b96..4fa3ae0 100644 --- a/src/cpp/serviceitemmodel.h +++ b/src/cpp/serviceitemmodel.h @@ -99,6 +99,7 @@ public: Q_INVOKABLE bool moveDown(int index); Q_INVOKABLE bool moveUp(int index); Q_INVOKABLE bool select(int id); + Q_INVOKABLE bool selectItems(QVariantList items); Q_INVOKABLE bool activate(int id); Q_INVOKABLE bool deactivate(int id); Q_INVOKABLE QVariantMap getItem(int index) const; diff --git a/src/qml/presenter/ServiceList.qml b/src/qml/presenter/ServiceList.qml index ef99ab9..6539b77 100644 --- a/src/qml/presenter/ServiceList.qml +++ b/src/qml/presenter/ServiceList.qml @@ -240,7 +240,9 @@ Item { onClicked: { if (mouse.button === Qt.RightButton) rightClickMenu.popup(mouse); - else { + else if ((mouse.button === Qt.LeftButton) && (mouse.modifiers === Qt.ShiftModifier)) { + selectItems(index); + } else { serviceItemList.currentIndex = index; ServiceItemModel.select(index); } @@ -577,7 +579,21 @@ Item { /* totalServiceItems++; */ } - function changeItem() { + function selectItems(index) { + if (index === serviceItemList.currentIndex) + return; + var arr = []; + if (index > serviceItemList.currentIndex) { + for (let i = serviceItemList.currentIndex; i < index + 1; i++) { + arr.push(i); + console.log("Select all these here items..." + arr); + } + } else { + for (let i = serviceItemList.currentIndex; i > index - 1; i--) { + arr.push(i); + console.log("Select all these here items..." + arr); + } + } + ServiceItemModel.selectItems(arr); } - }