1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-07 06:36:55 +02:00

* Support filtering out dupe items in PlayableProxyModel.

This commit is contained in:
Christian Muehlhaeuser
2012-06-16 08:46:58 +02:00
parent fe8149ee8a
commit 9b89f36387
2 changed files with 40 additions and 2 deletions

View File

@@ -34,6 +34,7 @@ PlayableProxyModel::PlayableProxyModel( QObject* parent )
: QSortFilterProxyModel( parent ) : QSortFilterProxyModel( parent )
, m_model( 0 ) , m_model( 0 )
, m_showOfflineResults( true ) , m_showOfflineResults( true )
, m_hideDupeItems( false )
, m_maxVisibleItems( -1 ) , m_maxVisibleItems( -1 )
{ {
setFilterCaseSensitivity( Qt::CaseInsensitive ); setFilterCaseSensitivity( Qt::CaseInsensitive );
@@ -101,6 +102,23 @@ PlayableProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourcePa
if ( m_maxVisibleItems >= 0 && sourceRow > m_maxVisibleItems - 1 ) if ( m_maxVisibleItems >= 0 && sourceRow > m_maxVisibleItems - 1 )
return false; return false;
if ( m_hideDupeItems )
{
for ( int i = 0; i < sourceRow; i++ )
{
PlayableItem* di = itemFromIndex( sourceModel()->index( i, 0, sourceParent ) );
if ( !di )
continue;
bool b = ( pi->query() && pi->query()->equals( di->query() ) ) ||
( pi->album() && pi->album() == di->album() ) ||
( pi->artist() && pi->artist()->name() == di->artist()->name() );
if ( b && filterAcceptsRow( i, sourceParent ) )
return false;
}
}
if ( pi->query() ) if ( pi->query() )
{ {
@@ -215,6 +233,22 @@ PlayableProxyModel::remove( const QList< QPersistentModelIndex >& indexes )
} }
void
PlayableProxyModel::setShowOfflineResults( bool b )
{
m_showOfflineResults = b;
invalidateFilter();
}
void
PlayableProxyModel::setHideDupeItems( bool b )
{
m_hideDupeItems = b;
invalidateFilter();
}
void void
PlayableProxyModel::setMaxVisibleItems( int items ) PlayableProxyModel::setMaxVisibleItems( int items )
{ {

View File

@@ -49,8 +49,11 @@ public:
virtual void remove( const QList< QPersistentModelIndex >& indexes ); virtual void remove( const QList< QPersistentModelIndex >& indexes );
virtual bool showOfflineResults() const { return m_showOfflineResults; } virtual bool showOfflineResults() const { return m_showOfflineResults; }
virtual void setShowOfflineResults( bool b ) { m_showOfflineResults = b; } virtual void setShowOfflineResults( bool b );
virtual bool hideDupeItems() const { return m_hideDupeItems; }
virtual void setHideDupeItems( bool b );
virtual int maxVisibleItems() const { return m_maxVisibleItems; } virtual int maxVisibleItems() const { return m_maxVisibleItems; }
virtual void setMaxVisibleItems( int items ); virtual void setMaxVisibleItems( int items );
@@ -81,6 +84,7 @@ private:
PlayableModel* m_model; PlayableModel* m_model;
bool m_showOfflineResults; bool m_showOfflineResults;
bool m_hideDupeItems;
int m_maxVisibleItems; int m_maxVisibleItems;
}; };