From 787b0eea42e3fbf2d8507f91599bb3a70632fa28 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 23 Feb 2023 14:54:43 -0600 Subject: [PATCH] no selectionModel in c++ --- src/cpp/songsqlmodel.cpp | 109 +++++++++++++++++++++++++-------------- src/cpp/songsqlmodel.h | 15 +++--- 2 files changed, 79 insertions(+), 45 deletions(-) diff --git a/src/cpp/songsqlmodel.cpp b/src/cpp/songsqlmodel.cpp index 01b633b..c67e087 100644 --- a/src/cpp/songsqlmodel.cpp +++ b/src/cpp/songsqlmodel.cpp @@ -716,8 +716,8 @@ SongProxyModel::SongProxyModel(QObject *parent) :QSortFilterProxyModel(parent) { m_songModel = new SongSqlModel; - m_selectionModel = new QItemSelectionModel; - m_selectionModel->setModel(this); + // m_selectionModel = new QItemSelectionModel; + // m_selectionModel->setModel(this); setSourceModel(m_songModel); setDynamicSortFilter(true); setFilterRole(Qt::UserRole + 1); @@ -728,9 +728,35 @@ SongSqlModel *SongProxyModel::songModel() { return m_songModel; } +// QVariant SongProxyModel::data(const QModelIndex &index, int role) const { +// if (role == Qt::UserRole + 13) +// return selected(index.row()); +// return m_songModel->data(index, role); +// } + +// QHash SongProxyModel::roleNames() const +// { +// QHash names; +// names[Qt::UserRole] = "id"; +// names[Qt::UserRole + 1] = "title"; +// names[Qt::UserRole + 2] = "lyrics"; +// names[Qt::UserRole + 3] = "author"; +// names[Qt::UserRole + 4] = "ccli"; +// names[Qt::UserRole + 5] = "audio"; +// names[Qt::UserRole + 6] = "vorder"; +// names[Qt::UserRole + 7] = "background"; +// names[Qt::UserRole + 8] = "backgroundType"; +// names[Qt::UserRole + 9] = "horizontalTextAlignment"; +// names[Qt::UserRole + 10] = "verticalTextAlignment"; +// names[Qt::UserRole + 11] = "font"; +// names[Qt::UserRole + 12] = "fontSize"; +// names[Qt::UserRole + 13] = "selected"; +// return names; +// } + QModelIndex SongProxyModel::idx(int row) { QModelIndex idx = index(row, 0); - qDebug() << idx; + // qDebug() << idx; return idx; } @@ -745,43 +771,50 @@ void SongProxyModel::deleteSong(const int &row) { model->deleteSong(row); } -bool SongProxyModel::selected(int row) { - QModelIndex idx = index(row, 0); - return m_selectionModel->isSelected(idx); -} +// bool SongProxyModel::selected(const int &row) { +// QModelIndex idx = index(row, 0); +// return m_selectionModel->isSelected(idx); +// } -bool SongProxyModel::setSelected(int row, bool select) { - if (selected(row) == select) - return false; - QModelIndex idx = index(row, 0); - if (select) - m_selectionModel->select(idx, QItemSelectionModel::SelectCurrent); - else - m_selectionModel->select(idx, QItemSelectionModel::Deselect); - emit selectedChanged(select); - return true; -} +// bool SongProxyModel::setSelected(const int &row, const bool &select) { +// if (selected(row) == select) +// return false; +// QModelIndex idx = index(row, 0); +// if (select) +// m_selectionModel->select(idx, QItemSelectionModel::SelectCurrent); +// else +// m_selectionModel->select(idx, QItemSelectionModel::Deselect); +// emit selectedChanged(select); +// return true; +// } -void SongProxyModel::select(int id) { - QModelIndex idx = index(id, 0); - //check to make sure this item isn't already selected - if (m_selectionModel->isSelected(idx)) - return; +// void SongProxyModel::select(int id) { +// QModelIndex idx = index(id, 0); +// //check to make sure this item isn't already selected +// if (m_selectionModel->isSelected(idx)) +// return; - // deselect all items - QModelIndex first = index(0, 0); - QModelIndex last = index(rowCount() - 1, 0); - QItemSelection all = new QItemSelection(first, last); - m_selectionModel->select(all, QItemSelectionModel::Deselect); +// // deselect all items +// QModelIndex first = index(0, 0); +// QModelIndex last = index(rowCount() - 1, 0); +// QItemSelection all(first, last); +// m_selectionModel->select(all, QItemSelectionModel::Deselect); - m_selectionModel->select(idx, QItemSelectionModel::SelectCurrent); -} +// m_selectionModel->select(idx, QItemSelectionModel::SelectCurrent); +// emit selectedChanged(true); +// } -void SongProxyModel::selectSongs(int row) { - auto model = qobject_cast(m_selectionModel); - // deselect all items - QModelIndex first = index(0, 0); - QModelIndex last = index(rowCount() - 1, 0); - QItemSelection all = new QItemSelection(first, last); - m_selectionModel->select(all, QItemSelectionModel::Deselect); -} +// void SongProxyModel::selectSongs(int row) { +// auto model = qobject_cast(m_selectionModel); +// // deselect all items +// QModelIndex first = index(0, 0); +// QModelIndex last = index(rowCount() - 1, 0); +// QItemSelection all(first, last); +// m_selectionModel->select(all, QItemSelectionModel::Deselect); + +// emit selectedChanged(true); +// } + +// bool SongProxyModel::hasSelection() { +// return m_selectionModel->hasSelection(); +// } diff --git a/src/cpp/songsqlmodel.h b/src/cpp/songsqlmodel.h index 909bc8e..d355510 100644 --- a/src/cpp/songsqlmodel.h +++ b/src/cpp/songsqlmodel.h @@ -113,7 +113,7 @@ class SongProxyModel : public QSortFilterProxyModel { Q_OBJECT Q_PROPERTY(SongSqlModel *songModel READ songModel) - Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectedChanged) + // Q_PROPERTY(bool hasSelection READ hasSelection NOTIFY selectedChanged) public: explicit SongProxyModel(QObject *parent = nullptr); @@ -121,8 +121,7 @@ public: SongSqlModel *songModel(); Q_INVOKABLE QModelIndex idx(int row); - bool selected(int row); - bool setSelected(int row, bool select); + // Q_INVOKABLE bool selected(const int &row); // QVariant data(const QModelIndex &index, int role) const override; // QHash roleNames() const override; @@ -130,15 +129,17 @@ public: public slots: Q_INVOKABLE QVariantMap getSong(const int &row); Q_INVOKABLE void deleteSong(const int &row); - Q_INVOKABLE void select(int row); - Q_INVOKABLE void selectSongs(int row); + // Q_INVOKABLE void select(int row); + // Q_INVOKABLE void selectSongs(int row); + // Q_INVOKABLE bool setSelected(const int &row, const bool &select); + // Q_INVOKABLE bool hasSelection(); signals: - void selectedChanged(bool selected); + // Q_INVOKABLE void selectedChanged(bool selected); private: SongSqlModel *m_songModel; - QItemSelectionModel *m_selectionModel; + // QItemSelectionModel *m_selectionModel; // bool m_selected; };