Skip to content

Commit

Permalink
Group and sort providers in browser listing by type then name
Browse files Browse the repository at this point in the history
  • Loading branch information
dakcarto committed Jul 12, 2013
1 parent 20e969e commit c80a1f4
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions src/core/qgsbrowsermodel.cpp
Expand Up @@ -28,6 +28,12 @@

#include <QSettings>

// sort function for QList<QgsDataItem*>, e.g. sorted/grouped provider listings
static bool cmpByDataItemName_( QgsDataItem* a, QgsDataItem* b )
{
return QString::localeAwareCompare( a->name(), b->name() ) < 0;
}

QgsBrowserModel::QgsBrowserModel( QObject *parent )
: QAbstractItemModel( parent )
, mFavourites( 0 )
Expand Down Expand Up @@ -109,7 +115,10 @@ void QgsBrowserModel::addRootItems()

// Add non file top level items
QStringList providersList = QgsProviderRegistry::instance()->providerList();
providersList.sort();

// container for displaying providers as sorted groups (by QgsDataProvider::DataCapability enum)
QMap<int, QgsDataItem *> providerMap;

foreach ( QString key, providersList )
{
QLibrary *library = QgsProviderRegistry::instance()->providerLibrary( key );
Expand Down Expand Up @@ -142,7 +151,22 @@ void QgsBrowserModel::addRootItems()
{
QgsDebugMsg( "Add new top level item : " + item->name() );
connectItem( item );
mRootItems << item;
providerMap.insertMulti( capabilities, item );
}
}

// add as sorted groups by QgsDataProvider::DataCapability enum
foreach ( int key, providerMap.uniqueKeys() )
{
QList<QgsDataItem *> providerGroup = providerMap.values( key );
if ( providerGroup.size() > 1 )
{
qSort( providerGroup.begin(), providerGroup.end(), cmpByDataItemName_ );
}

foreach ( QgsDataItem * ditem, providerGroup )
{
mRootItems << ditem;
}
}
}
Expand Down

0 comments on commit c80a1f4

Please sign in to comment.