[vlc-commits] qt: add a selectedCount property SelectableListModel to track the number of selected items
Pierre Lamot
git at videolan.org
Tue Nov 19 16:50:04 CET 2019
vlc | branch: master | Pierre Lamot <pierre at videolabs.io> | Mon Nov 18 13:47:32 2019 +0100| [fc212e346ba9a028211ddf3341102db157350355] | committer: Jean-Baptiste Kempf
qt: add a selectedCount property SelectableListModel to track the number of selected items
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fc212e346ba9a028211ddf3341102db157350355
---
modules/gui/qt/components/playlist/playlist_model.cpp | 2 ++
modules/gui/qt/components/selectable_list_model.cpp | 15 +++++++++++++++
modules/gui/qt/components/selectable_list_model.hpp | 7 +++++++
3 files changed, 24 insertions(+)
diff --git a/modules/gui/qt/components/playlist/playlist_model.cpp b/modules/gui/qt/components/playlist/playlist_model.cpp
index 49b8aaad22..1b571ae2ae 100644
--- a/modules/gui/qt/components/playlist/playlist_model.cpp
+++ b/modules/gui/qt/components/playlist/playlist_model.cpp
@@ -180,6 +180,7 @@ void PlaylistListModelPrivate::onItemsReset(const QVector<PlaylistItem>& newCont
q->endResetModel();
emit q->countChanged(m_items.size());
+ emit q->selectedCountChanged();
}
void PlaylistListModelPrivate::onItemsAdded(const QVector<PlaylistItem>& added, size_t index)
@@ -224,6 +225,7 @@ void PlaylistListModelPrivate::onItemsRemoved(size_t index, size_t count)
q->endRemoveRows();
emit q->countChanged(m_items.size());
+ emit q->selectedCountChanged();
}
diff --git a/modules/gui/qt/components/selectable_list_model.cpp b/modules/gui/qt/components/selectable_list_model.cpp
index d9564a9ee6..cf6711761d 100644
--- a/modules/gui/qt/components/selectable_list_model.cpp
+++ b/modules/gui/qt/components/selectable_list_model.cpp
@@ -30,6 +30,7 @@ void SelectableListModel::setSelected(int row, bool selected)
QModelIndex modelIndex = index(row);
emit dataChanged(modelIndex, modelIndex, { getSelectedRole() });
+ emit selectedCountChanged();
}
bool SelectableListModel::isSelected(int row) const
@@ -43,6 +44,7 @@ void SelectableListModel::toggleSelected(int row)
QModelIndex modelIndex = index(row);
emit dataChanged(modelIndex, modelIndex, { getSelectedRole() });
+ emit selectedCountChanged();
}
void SelectableListModel::setSelection(const QList<int> &sortedIndexes)
@@ -71,6 +73,7 @@ void SelectableListModel::setSelection(const QList<int> &sortedIndexes)
QModelIndex first = index(0);
QModelIndex last = index(itemsCount - 1);
emit dataChanged(first, last, { getSelectedRole() });
+ emit selectedCountChanged();
}
QList<int> SelectableListModel::getSelection() const
@@ -94,6 +97,7 @@ void SelectableListModel::setRangeSelected(int start, int count, bool selected)
QModelIndex first = index(start);
QModelIndex last = index(start + count - 1);
emit dataChanged(first, last, { getSelectedRole() });
+ emit selectedCountChanged();
}
void SelectableListModel::selectAll()
@@ -116,4 +120,15 @@ void SelectableListModel::deselectAll()
setRangeSelected(0, count, false);
}
+int SelectableListModel::getSelectedCount() const
+{
+ int itemsCount = rowCount();
+ int count = 0;
+ for (int i = 0 ; i < itemsCount; i++) {
+ if (isRowSelected(i))
+ count++;
+ }
+ return count;
+}
+
} // namespace vlc
diff --git a/modules/gui/qt/components/selectable_list_model.hpp b/modules/gui/qt/components/selectable_list_model.hpp
index 9795ff6dcf..11375a09e4 100644
--- a/modules/gui/qt/components/selectable_list_model.hpp
+++ b/modules/gui/qt/components/selectable_list_model.hpp
@@ -26,6 +26,8 @@ namespace vlc {
class SelectableListModel : public QAbstractListModel
{
Q_OBJECT
+
+ Q_PROPERTY(int selectedCount READ getSelectedCount NOTIFY selectedCountChanged)
public:
SelectableListModel(QObject *parent = nullptr) :
QAbstractListModel(parent) {}
@@ -39,6 +41,11 @@ public:
Q_INVOKABLE void selectAll();
Q_INVOKABLE void deselectAll();
+ virtual int getSelectedCount() const;
+
+signals:
+ void selectedCountChanged();
+
protected:
virtual bool isRowSelected(int row) const = 0;
virtual void setRowSelected(int row, bool selected) = 0;
More information about the vlc-commits
mailing list