@@ -500,22 +500,32 @@ void QgsGrassTools::addModules( QStandardItem *parent, QDomElement &element, QSt
500500 item->setData ( pixmap, Qt::DecorationRole );
501501 item->setCheckable ( false );
502502 item->setEditable ( false );
503- QStandardItem * listItem = item->clone ();
504- listItem->setText ( name + " \n " + description.label );
505-
506503 appendItem ( treeModel, parent, item );
507504
508- // setData in the delegate with a variantised QgsDetailedItemData
509- QgsDetailedItemData myData;
510- myData.setTitle ( name );
511- myData.setDetail ( label );
512- myData.setIcon ( pixmap );
513- myData.setCheckable ( false );
514- myData.setRenderAsWidget ( false );
515- QVariant myVariant = qVariantFromValue ( myData );
516- listItem->setData ( myVariant, Qt::UserRole );
517-
518- modulesListModel->appendRow ( listItem );
505+ bool exists = false ;
506+ for ( int i = 0 ; i < modulesListModel->rowCount (); i++ )
507+ {
508+ if ( modulesListModel->item ( i )->data ( Qt::UserRole + Name ).toString () == name )
509+ {
510+ exists = true ;
511+ break ;
512+ }
513+ }
514+ if ( !exists )
515+ {
516+ QStandardItem * listItem = item->clone ();
517+ listItem->setText ( name + " \n " + description.label );
518+ // setData in the delegate with a variantised QgsDetailedItemData
519+ QgsDetailedItemData myData;
520+ myData.setTitle ( name );
521+ myData.setDetail ( label );
522+ myData.setIcon ( pixmap );
523+ myData.setCheckable ( false );
524+ myData.setRenderAsWidget ( false );
525+ QVariant myVariant = qVariantFromValue ( myData );
526+ listItem->setData ( myVariant, Qt::UserRole );
527+ modulesListModel->appendRow ( listItem );
528+ }
519529 }
520530 }
521531 }
0 commit comments