|
28 | 28 |
|
29 | 29 | #include <QSettings>
|
30 | 30 |
|
| 31 | +// sort function for QList<QgsDataItem*>, e.g. sorted/grouped provider listings |
| 32 | +static bool cmpByDataItemName_( QgsDataItem* a, QgsDataItem* b ) |
| 33 | +{ |
| 34 | + return QString::localeAwareCompare( a->name(), b->name() ) < 0; |
| 35 | +} |
| 36 | + |
31 | 37 | QgsBrowserModel::QgsBrowserModel( QObject *parent )
|
32 | 38 | : QAbstractItemModel( parent )
|
33 | 39 | , mFavourites( 0 )
|
@@ -109,7 +115,10 @@ void QgsBrowserModel::addRootItems()
|
109 | 115 |
|
110 | 116 | // Add non file top level items
|
111 | 117 | QStringList providersList = QgsProviderRegistry::instance()->providerList();
|
112 |
| - providersList.sort(); |
| 118 | + |
| 119 | + // container for displaying providers as sorted groups (by QgsDataProvider::DataCapability enum) |
| 120 | + QMap<int, QgsDataItem *> providerMap; |
| 121 | + |
113 | 122 | foreach ( QString key, providersList )
|
114 | 123 | {
|
115 | 124 | QLibrary *library = QgsProviderRegistry::instance()->providerLibrary( key );
|
@@ -142,7 +151,22 @@ void QgsBrowserModel::addRootItems()
|
142 | 151 | {
|
143 | 152 | QgsDebugMsg( "Add new top level item : " + item->name() );
|
144 | 153 | connectItem( item );
|
145 |
| - mRootItems << item; |
| 154 | + providerMap.insertMulti( capabilities, item ); |
| 155 | + } |
| 156 | + } |
| 157 | + |
| 158 | + // add as sorted groups by QgsDataProvider::DataCapability enum |
| 159 | + foreach ( int key, providerMap.uniqueKeys() ) |
| 160 | + { |
| 161 | + QList<QgsDataItem *> providerGroup = providerMap.values( key ); |
| 162 | + if ( providerGroup.size() > 1 ) |
| 163 | + { |
| 164 | + qSort( providerGroup.begin(), providerGroup.end(), cmpByDataItemName_ ); |
| 165 | + } |
| 166 | + |
| 167 | + foreach ( QgsDataItem * ditem, providerGroup ) |
| 168 | + { |
| 169 | + mRootItems << ditem; |
146 | 170 | }
|
147 | 171 | }
|
148 | 172 | }
|
|
0 commit comments