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   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 )
 
  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;