diff --git a/src/plugins/grass/modules-common/v.what.vect.qgm b/src/plugins/grass/modules-common/v.what.vect.qgm index 42696904697..f5f1ad733c5 100644 --- a/src/plugins/grass/modules-common/v.what.vect.qgm +++ b/src/plugins/grass/modules-common/v.what.vect.qgm @@ -5,5 +5,5 @@ <option key="vector" layeroption="layer" typemask="point"/> <field key="column" layer="vector" type="integer,double,string"/> <option key="qvector" layeroption="layer" typemask="area"/> - <option key="qcolumn" layer="qvector" type="string"/> + <field key="qcolumn" layer="qvector" type="string"/> </qgisgrassmodule> diff --git a/src/plugins/grass/qgsgrassmodule.cpp b/src/plugins/grass/qgsgrassmodule.cpp index eff126261cd..13ccb2f6240 100644 --- a/src/plugins/grass/qgsgrassmodule.cpp +++ b/src/plugins/grass/qgsgrassmodule.cpp @@ -562,6 +562,23 @@ QStringList QgsGrassModuleStandardOptions::arguments() return arg; } +// id is not used in fact, was intended for field, but key is used instead +QgsGrassModuleItem *QgsGrassModuleStandardOptions::itemByKey( QString key ) +{ + QgsDebugMsg( "key = " + key ); + + for ( unsigned int i = 0; i < mItems.size(); i++ ) + { + if ( mItems[i]->key() == key ) + { + return mItems[i]; + } + } + + QMessageBox::warning( 0, tr( "Warning" ), tr( "Item with key %1 not found" ).arg( key ) ); + return 0; +} + QgsGrassModuleItem *QgsGrassModuleStandardOptions::item( QString id ) { QgsDebugMsg( "id = " + id ); @@ -2908,16 +2925,19 @@ QgsGrassModuleField::QgsGrassModuleField( QDomElement promptElem = promptNode.toElement(); QString element = promptElem.attribute( "element" ); - mLayerId = qdesc.attribute( "layerid" ); - mType = qdesc.attribute( "type" ); - QgsGrassModuleItem *item = mModuleStandardOptions->item( mLayerId ); - // TODO check type - if ( item ) - { - mLayerInput = dynamic_cast<QgsGrassModuleInput *>( item ); - connect( mLayerInput, SIGNAL( valueChanged() ), this, SLOT( updateFields() ) ); + mLayerKey = qdesc.attribute( "layer" ); + if ( mLayerKey.isNull() || mLayerKey.length() == 0 ) { + QMessageBox::warning( 0, tr( "Warning" ), tr( "'layer' attribute in field tag with key= %1 is missing." ).arg( mKey ) ); + } else { + QgsGrassModuleItem *item = mModuleStandardOptions->itemByKey( mLayerKey ); + // TODO check type + if ( item ) + { + mLayerInput = dynamic_cast<QgsGrassModuleInput *>( item ); + connect( mLayerInput, SIGNAL( valueChanged() ), this, SLOT( updateFields() ) ); + } } QHBoxLayout *l = new QHBoxLayout( this ); diff --git a/src/plugins/grass/qgsgrassmodule.h b/src/plugins/grass/qgsgrassmodule.h index 60cab288061..b16693630c8 100644 --- a/src/plugins/grass/qgsgrassmodule.h +++ b/src/plugins/grass/qgsgrassmodule.h @@ -256,6 +256,9 @@ class QgsGrassModuleStandardOptions: QWidget, public QgsGrassModuleOptions // ! Get item by ID QgsGrassModuleItem *item( QString id ); + // ! Get item by key + QgsGrassModuleItem *itemByKey( QString key ); + // Reimplemented methods from QgsGrassModuleOptions QStringList checkOutput(); void freezeOutput(); @@ -749,7 +752,7 @@ class QgsGrassModuleField: public QgsGrassModuleGroupBoxItem QgsGrassModuleStandardOptions *mModuleStandardOptions; //! Layer key - QString mLayerId; + QString mLayerKey; //! Pointer to layer input QgsGrassModuleInput *mLayerInput;