@@ -164,11 +164,10 @@ void QgsGrassModuleInputModel::addMapset( const QString & mapset )
164
164
{
165
165
QgsDebugMsg ( " mapset = " + mapset );
166
166
167
-
168
167
QStandardItem *mapsetItem = new QStandardItem ( mapset );
169
168
mapsetItem->setData ( mapset, MapsetRole );
170
169
mapsetItem->setData ( mapset, Qt::EditRole );
171
- mapsetItem->setData ( QgsGrassObject::None , TypeRole );
170
+ mapsetItem->setData ( QgsGrassObject::Mapset , TypeRole );
172
171
mapsetItem->setSelectable ( false );
173
172
174
173
refreshMapset ( mapsetItem, mapset );
@@ -183,7 +182,7 @@ void QgsGrassModuleInputModel::refreshMapset( QStandardItem *mapsetItem, const Q
183
182
{
184
183
return ;
185
184
}
186
- bool currentMapset = mapset == QgsGrass::getDefaultMapset ();
185
+
187
186
QList<QgsGrassObject::Type> types;
188
187
types << QgsGrassObject::Raster << QgsGrassObject::Vector;
189
188
foreach ( QgsGrassObject::Type type, types )
@@ -197,12 +196,6 @@ void QgsGrassModuleInputModel::refreshMapset( QStandardItem *mapsetItem, const Q
197
196
continue ;
198
197
}
199
198
QString mapName = map;
200
- // For now, for completer popup simplicity
201
- // TODO: implement tree view in popup
202
- if ( !currentMapset )
203
- {
204
- mapName += " @" + mapset;
205
- }
206
199
207
200
bool found = false ;
208
201
for ( int i = 0 ; i < mapsetItem->rowCount (); i++ )
@@ -218,7 +211,7 @@ void QgsGrassModuleInputModel::refreshMapset( QStandardItem *mapsetItem, const Q
218
211
{
219
212
QgsDebugMsg ( " add map : " + mapName );
220
213
QStandardItem *mapItem = new QStandardItem ( mapName );
221
- mapItem->setData ( mapName, Qt::EditRole );
214
+ mapItem->setData ( mapName , Qt::EditRole );
222
215
mapItem->setData ( map, MapRole );
223
216
mapItem->setData ( mapset, MapsetRole );
224
217
mapItem->setData ( type, TypeRole );
@@ -251,10 +244,6 @@ void QgsGrassModuleInputModel::reload()
251
244
{
252
245
clear ();
253
246
QStringList mapsets = QgsGrass::mapsets ( QgsGrass::getDefaultGisdbase (), QgsGrass::getDefaultLocation () );
254
- // Put current mapset on top
255
- mapsets.removeOne ( QgsGrass::getDefaultMapset () );
256
- mapsets.prepend ( QgsGrass::getDefaultMapset () );
257
-
258
247
foreach ( QString mapset, mapsets )
259
248
{
260
249
addMapset ( mapset );
@@ -272,11 +261,32 @@ QgsGrassModuleInputModel *QgsGrassModuleInputModel::instance()
272
261
return &sInstance ;
273
262
}
274
263
264
+ QVariant QgsGrassModuleInputModel::data ( const QModelIndex & index, int role ) const
265
+ {
266
+ QgsDebugMsg ( " entered" );
267
+ QVariant data = QStandardItemModel::data ( index, role );
268
+ if ( role == Qt::DisplayRole || role == Qt::EditRole ) // EditRole for combo
269
+ {
270
+ int type = QStandardItemModel::data ( index, QgsGrassModuleInputModel::TypeRole ).toInt ();
271
+ if ( type == QgsGrassObject::Raster || type == QgsGrassObject::Vector )
272
+ {
273
+ QString mapset = QStandardItemModel::data ( index, QgsGrassModuleInputModel::MapsetRole ).toString ();
274
+ if ( mapset != QgsGrass::getDefaultMapset () )
275
+ {
276
+ data = data.toString () + " @" + mapset;
277
+ }
278
+ }
279
+ }
280
+ return data;
281
+ }
282
+
275
283
/* *************************** QgsGrassModuleInputProxy ****************************/
276
- QgsGrassModuleInputProxy::QgsGrassModuleInputProxy ( QgsGrassObject::Type type, QObject *parent )
284
+ QgsGrassModuleInputProxy::QgsGrassModuleInputProxy ( QgsGrassModuleInputModel *sourceModel, QgsGrassObject::Type type, QObject *parent )
277
285
: QSortFilterProxyModel( parent )
286
+ , mSourceModel( sourceModel )
278
287
, mType( type )
279
288
{
289
+ setSourceModel ( mSourceModel );
280
290
setDynamicSortFilter ( true );
281
291
}
282
292
@@ -289,10 +299,30 @@ bool QgsGrassModuleInputProxy::filterAcceptsRow( int sourceRow, const QModelInde
289
299
QModelIndex sourceIndex = sourceModel ()->index ( sourceRow, 0 , sourceParent );
290
300
291
301
QgsDebugMsg ( QString ( " mType = %1 item type = %2" ).arg ( mType ).arg ( sourceModel ()->data ( sourceIndex, QgsGrassModuleInputModel::TypeRole ).toInt () ) );
292
- // return true;
293
302
QgsGrassObject::Type itemType = ( QgsGrassObject::Type )( sourceModel ()->data ( sourceIndex, QgsGrassModuleInputModel::TypeRole ).toInt () );
294
303
// TODO: filter out mapsets without given type? May be confusing.
295
- return itemType == QgsGrassObject::None || mType == itemType; // None for mapsets
304
+ return itemType == QgsGrassObject::Mapset || mType == itemType;
305
+ }
306
+
307
+ bool QgsGrassModuleInputProxy::lessThan ( const QModelIndex & left, const QModelIndex & right ) const
308
+ {
309
+ Q_UNUSED ( right )
310
+ if ( mSourceModel )
311
+ {
312
+ // keep current mapset on top
313
+ if ( mSourceModel ->data ( left, QgsGrassModuleInputModel::TypeRole ).toInt () == QgsGrassObject::Mapset )
314
+ {
315
+ if ( mSourceModel ->data ( left ).toString () == QgsGrass::getDefaultMapset () )
316
+ {
317
+ return true ;
318
+ }
319
+ else if ( mSourceModel ->data ( right ).toString () == QgsGrass::getDefaultMapset () )
320
+ {
321
+ return false ;
322
+ }
323
+ }
324
+ }
325
+ return QSortFilterProxyModel::lessThan ( left, right );
296
326
}
297
327
298
328
/* *************************** QgsGrassModuleInputTreeView ****************************/
@@ -404,6 +434,8 @@ void QgsGrassModuleInputCompleterProxy::map( const QModelIndex & parent, int lev
404
434
}
405
435
406
436
/* *************************** QgsGrassModuleInputCompleter ****************************/
437
+ // TODO: implement tree view in popup
438
+
407
439
QgsGrassModuleInputCompleter::QgsGrassModuleInputCompleter ( QAbstractItemModel * model, QWidget * parent )
408
440
: QCompleter( model, parent )
409
441
{
@@ -439,11 +471,12 @@ QgsGrassModuleInputComboBox::QgsGrassModuleInputComboBox( QgsGrassObject::Type t
439
471
setInsertPolicy ( QComboBox::NoInsert );
440
472
441
473
mModel = QgsGrassModuleInputModel::instance ();
442
- mProxy = new QgsGrassModuleInputProxy ( mType , this );
443
- mProxy ->setSourceModel ( mModel );
474
+ mProxy = new QgsGrassModuleInputProxy ( mModel , mType , this );
444
475
setModel ( mProxy );
445
476
446
477
mTreeView = new QgsGrassModuleInputTreeView ( this );
478
+ mTreeView ->setSortingEnabled ( true );
479
+ mTreeView ->sortByColumn ( 0 , Qt::AscendingOrder );
447
480
mTreeView ->setSelectionMode ( QAbstractItemView::SingleSelection );
448
481
// mTreeView->setSelectionMode(QAbstractItemView::MultiSelection); // does not work
449
482
mTreeView ->viewport ()->installEventFilter ( this );
0 commit comments