1919#include " qgsattributetypedialog.h"
2020#include " qgsattributetypeloaddialog.h"
2121#include " qgsvectordataprovider.h"
22+ #include " qgsmaplayerregistry.h"
2223
2324#include " qgslogger.h"
2425
@@ -42,6 +43,17 @@ QgsAttributeTypeDialog::QgsAttributeTypeDialog( QgsVectorLayer *vl )
4243 connect ( loadFromLayerButton, SIGNAL ( clicked () ), this , SLOT ( loadFromLayerButtonPushed () ) );
4344 connect ( loadFromCSVButton, SIGNAL ( clicked () ), this , SLOT ( loadFromCSVButtonPushed () ) );
4445 connect ( tableWidget, SIGNAL ( cellChanged ( int , int ) ), this , SLOT ( vCellChanged ( int , int ) ) );
46+
47+ valueRelationLayer->clear ();
48+ foreach ( QgsMapLayer *l, QgsMapLayerRegistry::instance ()->mapLayers () )
49+ {
50+ QgsVectorLayer *vl = qobject_cast< QgsVectorLayer * >( l );
51+ if ( vl )
52+ valueRelationLayer->addItem ( vl->name (), vl->id () );
53+ }
54+
55+ connect ( valueRelationLayer, SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( updateLayerColumns ( int ) ) );
56+ valueRelationLayer->setCurrentIndex ( -1 );
4557}
4658
4759QgsAttributeTypeDialog::~QgsAttributeTypeDialog ()
@@ -59,6 +71,11 @@ QgsVectorLayer::RangeData QgsAttributeTypeDialog::rangeData()
5971 return mRangeData ;
6072}
6173
74+ QgsVectorLayer::ValueRelationData QgsAttributeTypeDialog::valueRelationData ()
75+ {
76+ return mValueRelationData ;
77+ }
78+
6279QMap<QString, QVariant> &QgsAttributeTypeDialog::valueMap ()
6380{
6481 return mValueMap ;
@@ -258,6 +275,10 @@ void QgsAttributeTypeDialog::setPageForEditType( QgsVectorLayer::EditType editTy
258275 case QgsVectorLayer::Calendar:
259276 setPage ( 11 );
260277 break ;
278+
279+ case QgsVectorLayer::ValueRelation:
280+ setPage ( 12 );
281+ break ;
261282 }
262283}
263284
@@ -271,6 +292,11 @@ void QgsAttributeTypeDialog::setRange( QgsVectorLayer::RangeData range )
271292 mRangeData = range;
272293}
273294
295+ void QgsAttributeTypeDialog::setValueRelation ( QgsVectorLayer::ValueRelationData valueRelation )
296+ {
297+ mValueRelationData = valueRelation;
298+ }
299+
274300void QgsAttributeTypeDialog::setIndex ( int index, QgsVectorLayer::EditType editType )
275301{
276302 mIndex = index;
@@ -396,6 +422,13 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
396422 editableUniqueValues->setChecked ( editType == QgsVectorLayer::UniqueValuesEditable );
397423 break ;
398424
425+ case QgsVectorLayer::ValueRelation:
426+ valueRelationLayer->setCurrentIndex ( valueRelationLayer->findData ( mValueRelationData .mLayer ) );
427+ valueRelationKeyColumn->setCurrentIndex ( valueRelationKeyColumn->findText ( mValueRelationData .mKey ) );
428+ valueRelationValueColumn->setCurrentIndex ( valueRelationValueColumn->findText ( mValueRelationData .mValue ) );
429+ valueRelationAllowNull->setChecked ( mValueRelationData .mAllowNull );
430+ break ;
431+
399432 case QgsVectorLayer::LineEdit:
400433 case QgsVectorLayer::UniqueValues:
401434 case QgsVectorLayer::Classification:
@@ -558,6 +591,13 @@ void QgsAttributeTypeDialog::accept()
558591 case 11 :
559592 mEditType = QgsVectorLayer::Calendar;
560593 break ;
594+ case 12 :
595+ mEditType = QgsVectorLayer::ValueRelation;
596+ mValueRelationData .mLayer = valueRelationLayer->itemData ( valueRelationLayer->currentIndex () ).toString ();
597+ mValueRelationData .mKey = valueRelationKeyColumn->currentText ();
598+ mValueRelationData .mValue = valueRelationValueColumn->currentText ();
599+ mValueRelationData .mAllowNull = valueRelationAllowNull->isChecked ();
600+ break ;
561601 }
562602
563603 QDialog::accept ();
@@ -567,3 +607,24 @@ QString QgsAttributeTypeDialog::defaultWindowTitle()
567607{
568608 return tr ( " Attribute Edit Dialog" );
569609}
610+
611+ void QgsAttributeTypeDialog::updateLayerColumns ( int idx )
612+ {
613+ valueRelationKeyColumn->clear ();
614+ valueRelationValueColumn->clear ();
615+
616+ QString id = valueRelationLayer->itemData ( idx ).toString ();
617+
618+ QgsVectorLayer *vl = qobject_cast< QgsVectorLayer *>( QgsMapLayerRegistry::instance ()->mapLayer ( id ) );
619+ if ( !vl )
620+ return ;
621+
622+ foreach ( const QgsField &f, vl->pendingFields () )
623+ {
624+ valueRelationKeyColumn->addItem ( f.name () );
625+ valueRelationValueColumn->addItem ( f.name () );
626+ }
627+
628+ valueRelationKeyColumn->setCurrentIndex ( valueRelationKeyColumn->findText ( mValueRelationData .mKey ) );
629+ valueRelationValueColumn->setCurrentIndex ( valueRelationValueColumn->findText ( mValueRelationData .mValue ) );
630+ }
0 commit comments