24 : QAbstractItemModel( parent )
28 const QList< QgsNewsFeedParser::Entry > initialEntries = mParser->
entries();
69 case Qt::DecorationRole:
70 if ( entry.
image.isNull() )
79 Qt::ItemFlags
flags = QAbstractItemModel::flags(
index );
85 if ( !hasIndex( row, column,
parent ) )
90 return createIndex( row, column );
106 return mEntries.count();
118 beginInsertRows( QModelIndex(), mEntries.count(), mEntries.count() );
119 mEntries.append( entry );
126 const auto findIter = std::find_if( mEntries.begin(), mEntries.end(), [entry](
const QgsNewsFeedParser::Entry & candidate )
128 return candidate.key == entry.key;
130 if ( findIter == mEntries.end() )
133 const int entryIndex =
static_cast< int >( std::distance( mEntries.begin(), findIter ) );
134 beginRemoveRows( QModelIndex(), entryIndex, entryIndex );
135 mEntries.removeAt( entryIndex );
139 void QgsNewsFeedModel::onImageFetched(
const int key,
const QPixmap &pixmap )
142 const auto findIter = std::find_if( mEntries.begin(), mEntries.end(), [key](
const QgsNewsFeedParser::Entry & candidate )
144 return candidate.key == key;
146 if ( findIter == mEntries.end() )
149 const int entryIndex =
static_cast< int >( std::distance( mEntries.begin(), findIter ) );
150 mEntries[ entryIndex ].image = pixmap;
151 emit dataChanged(
index( entryIndex, 0, QModelIndex() ),
index( entryIndex, 0, QModelIndex() ) );
160 : QSortFilterProxyModel( parent )
163 setSortCaseSensitivity( Qt::CaseInsensitive );
164 setSourceModel( mModel );
165 setDynamicSortFilter(
true );
175 if ( leftSticky && !rightSticky )
177 if ( rightSticky && !leftSticky )
183 return rightKey < leftKey;