From: Luciano Montanaro Date: Fri, 27 Dec 2013 02:23:12 +0000 (+0100) Subject: Add editable favorite role to StationListModel X-Git-Tag: 0.8.0~1^2~16 X-Git-Url: http://vcs.maemo.org/git/?p=quandoparte;a=commitdiff_plain;h=f38eb06ee22a446640d02687fb46998613380623 Add editable favorite role to StationListModel --- diff --git a/application/stationlistmodel.cpp b/application/stationlistmodel.cpp index d7b6561..abd9613 100644 --- a/application/stationlistmodel.cpp +++ b/application/stationlistmodel.cpp @@ -136,7 +136,7 @@ QVariant StationListModel::data(const QModelIndex &index, int role) const } } -bool StationListModel::setData(const QModelIndex &index, QVariant &value, int role) +bool StationListModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid()) return false; @@ -153,9 +153,6 @@ bool StationListModel::setData(const QModelIndex &index, QVariant &value, int ro } Settings *settings = Settings::instance(); settings->setFavoriteStations(QStringList::fromSet(m_favorites)); - QVector changedRoles; - changedRoles << FavoriteIndicatorRole; - //emit dataChanged(index, index, changedRoles); emit dataChanged(index, index); } return true; diff --git a/application/stationlistmodel.h b/application/stationlistmodel.h index 2f68d41..aaca57f 100644 --- a/application/stationlistmodel.h +++ b/application/stationlistmodel.h @@ -57,7 +57,7 @@ public: Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const; Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const; Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const; - Q_INVOKABLE bool setData(const QModelIndex &index, QVariant &value, int role = Qt::EditRole); + Q_INVOKABLE bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); signals: diff --git a/application/stationlistproxymodel.cpp b/application/stationlistproxymodel.cpp index 07fa3fc..146d3a7 100644 --- a/application/stationlistproxymodel.cpp +++ b/application/stationlistproxymodel.cpp @@ -27,6 +27,7 @@ Boston, MA 02110-1301, USA. #include #include #include +#include #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) QTM_USE_NAMESPACE @@ -45,6 +46,7 @@ StationListProxyModel::StationListProxyModel(QObject *parent) : setFilterCaseSensitivity(Qt::CaseInsensitive); setSortCaseSensitivity(Qt::CaseInsensitive); setDynamicSortFilter(true); + qRegisterMetaType(); if (positionInfoSource) { qDebug() << "position info source available"; connect(positionInfoSource, SIGNAL(positionUpdated(QGeoPositionInfo)), @@ -53,11 +55,24 @@ StationListProxyModel::StationListProxyModel(QObject *parent) : } else { qDebug() << "No position info source available"; } + connect(settings, SIGNAL(favoriteStationsChanged()), + this, SLOT(updateFavoriteStations())); + updateFavoriteStations(); connect(settings, SIGNAL(recentStationsChanged()), this, SLOT(updateRecentStations())); updateRecentStations(); } +Qt::ItemFlags StationListProxyModel::flags(const QModelIndex &index) const +{ + return QSortFilterProxyModel::flags(index); +} + +bool StationListProxyModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return QSortFilterProxyModel::setData(index, value, role); +} + bool StationListProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { @@ -106,6 +121,20 @@ void StationListProxyModel::updateRecentStations(void) setRecentStations(settings->recentStations()); } +void StationListProxyModel::setFavoriteStations(const QStringList &stations) +{ + qDebug() << "Favorite stations are now" << stations; + if (sortingMode() == StationListProxyModel::AlphaSorting) { + invalidate(); + } +} + +void StationListProxyModel::updateFavoriteStations(void) +{ + Settings *settings = Settings::instance(); + setFavoriteStations(settings->favoriteStations()); +} + bool StationListProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { diff --git a/application/stationlistproxymodel.h b/application/stationlistproxymodel.h index 5ab5260..f07bf13 100644 --- a/application/stationlistproxymodel.h +++ b/application/stationlistproxymodel.h @@ -49,6 +49,9 @@ public: explicit StationListProxyModel(QObject *parent = 0); + Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const; + Q_INVOKABLE bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + QString searchPattern() const; void setSearchPattern(const QString &pattern); @@ -58,6 +61,7 @@ public: Q_INVOKABLE void setUserPosition(const QGeoCoordinate &pos); Q_INVOKABLE void setRecentStations(const QStringList &stations); Q_INVOKABLE void setRecentOnlyFilter(bool); + Q_INVOKABLE void setFavoriteStations(const QStringList &stations); signals: void sortingModeChanged(SortingMode mode); @@ -73,6 +77,7 @@ private: private slots: void updatePosition(const QGeoPositionInfo &update); void updateRecentStations(void); + void updateFavoriteStations(void); private: QString m_searchPattern; QGeoPositionInfoSource *positionInfoSource;