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:
@@ -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 )
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user