From 4d012b156a4d40c4bd485f5d9a255d6b835302f7 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 17 Aug 2011 00:15:08 +0200 Subject: [PATCH] * Fixed sidebar sorting. --- src/sourcetree/items/playlistitems.cpp | 6 ++++-- src/sourcetree/sourcesproxymodel.cpp | 30 +++++++++++++++++++++++++- src/sourcetree/sourcesproxymodel.h | 1 + 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/sourcetree/items/playlistitems.cpp b/src/sourcetree/items/playlistitems.cpp index 89707abe9..a67cd1f13 100644 --- a/src/sourcetree/items/playlistitems.cpp +++ b/src/sourcetree/items/playlistitems.cpp @@ -82,7 +82,8 @@ PlaylistItem::onPlaylistChanged() int PlaylistItem::peerSortValue() const { - return m_playlist->createdOn(); +// return m_playlist->createdOn(); + return 0; } @@ -238,7 +239,8 @@ DynamicPlaylistItem::onDynamicPlaylistLoaded( DynamicPlaylistRevision revision ) int DynamicPlaylistItem::peerSortValue() const { - return m_dynplaylist->createdOn(); +// return m_dynplaylist->createdOn(); + return 0; } diff --git a/src/sourcetree/sourcesproxymodel.cpp b/src/sourcetree/sourcesproxymodel.cpp index b449455cc..c3f15684d 100644 --- a/src/sourcetree/sourcesproxymodel.cpp +++ b/src/sourcetree/sourcesproxymodel.cpp @@ -20,6 +20,7 @@ #include +#include "sourcelist.h" #include "sourcesmodel.h" #include "sourcetree/items/collectionitem.h" @@ -51,13 +52,13 @@ SourcesProxyModel::showOfflineSources( bool offlineSourcesShown ) invalidateFilter(); } + bool SourcesProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const { if ( !m_filtered ) return true; - CollectionItem* sti = qobject_cast< CollectionItem* >( m_model->data( sourceModel()->index( sourceRow, 0, sourceParent ), SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >() ); if ( sti ) { @@ -70,6 +71,7 @@ SourcesProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourcePar return true; } + void SourcesProxyModel::selectRequested( const QModelIndex& idx ) { @@ -77,6 +79,7 @@ SourcesProxyModel::selectRequested( const QModelIndex& idx ) emit selectRequest( mapFromSource( idx ) ); } + void SourcesProxyModel::expandRequested( const QModelIndex& idx ) { @@ -84,3 +87,28 @@ SourcesProxyModel::expandRequested( const QModelIndex& idx ) emit expandRequest( mapFromSource( idx ) ); } + +bool +SourcesProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) const +{ + CollectionItem* ciL = qobject_cast< CollectionItem* >( m_model->data( left, SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >() ); + CollectionItem* ciR = qobject_cast< CollectionItem* >( m_model->data( right, SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >() ); + + if ( ciL && ciR ) + { + if ( ciL->source().isNull() ) + return true; + if ( ciR->source().isNull() ) + return false; + + if ( ciL->source() == SourceList::instance()->getLocal() ) + return true; + if ( ciR->source() == SourceList::instance()->getLocal() ) + return false; + } + + if ( m_model->data( left, SourcesModel::SortRole ) != m_model->data( right, SourcesModel::SortRole ) ) + return ( m_model->data( left, SourcesModel::SortRole ).toInt() < m_model->data( right, SourcesModel::SortRole ).toInt() ); + + return QString::localeAwareCompare( left.data().toString().toLower(), right.data().toString().toLower() ) < 0; +} diff --git a/src/sourcetree/sourcesproxymodel.h b/src/sourcetree/sourcesproxymodel.h index 57917d815..01c0a9f87 100644 --- a/src/sourcetree/sourcesproxymodel.h +++ b/src/sourcetree/sourcesproxymodel.h @@ -42,6 +42,7 @@ signals: protected: bool filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const; + bool lessThan( const QModelIndex& left, const QModelIndex& right ) const; private: SourcesModel* m_model;