1616
1717#include " qgsrelationadddlg.h"
1818#include " qgsvectorlayer.h"
19+ #include " qgsmaplayerproxymodel.h"
1920
2021#include < QPushButton>
2122
@@ -24,45 +25,41 @@ QgsRelationAddDlg::QgsRelationAddDlg( QWidget *parent )
2425{
2526 setupUi ( this );
2627
27- mTxtRelationId ->setPlaceholderText ( tr ( " [Generated automatically]" ) );
28- checkDefinitionValid ();
28+ connect ( mCbxReferencingLayer , &QgsMapLayerComboBox::layerChanged, this , [=]( QgsMapLayer * layer ) { mCbxReferencingField ->setLayer ( layer ); }
29+ );
30+ connect ( mCbxReferencedLayer , &QgsMapLayerComboBox::layerChanged, this , [=]( QgsMapLayer * layer ) { mCbxReferencedField ->setLayer ( layer ); }
31+ );
2932
30- connect ( mCbxReferencingLayer , SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( checkDefinitionValid () ) );
31- connect ( mCbxReferencingField , SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( checkDefinitionValid () ) );
32- connect ( mCbxReferencedLayer , SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( checkDefinitionValid () ) );
33- connect ( mCbxReferencedField , SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( checkDefinitionValid () ) );
34- }
35-
36- void QgsRelationAddDlg::addLayers ( const QList< QgsVectorLayer* >& layers )
37- {
38- mCbxReferencingLayer ->addItem ( QLatin1String ( " " ), " " );
39- mCbxReferencedLayer ->addItem ( QLatin1String ( " " ), " " );
33+ mCbxReferencingLayer ->setFilters ( QgsMapLayerProxyModel::VectorLayer );
34+ mCbxReferencingField ->setLayer ( mCbxReferencingLayer ->currentLayer () );
35+ mCbxReferencedLayer ->setFilters ( QgsMapLayerProxyModel::VectorLayer );
36+ mCbxReferencedField ->setLayer ( mCbxReferencedLayer ->currentLayer () );
4037
41- Q_FOREACH ( QgsVectorLayer* layer, layers )
42- {
43- mCbxReferencingLayer ->addItem ( layer->name (), layer->id () );
44- mCbxReferencedLayer ->addItem ( layer->name (), layer->id () );
38+ mTxtRelationId ->setPlaceholderText ( tr ( " [Generated automatically]" ) );
39+ checkDefinitionValid ();
4540
46- mLayers .insert ( layer->id (), layer );
47- }
41+ connect ( mCbxReferencingLayer , &QgsMapLayerComboBox::layerChanged, this , &QgsRelationAddDlg::checkDefinitionValid );
42+ connect ( mCbxReferencingField , &QgsFieldComboBox::fieldChanged, this , &QgsRelationAddDlg::checkDefinitionValid );
43+ connect ( mCbxReferencedLayer , &QgsMapLayerComboBox::layerChanged, this , &QgsRelationAddDlg::checkDefinitionValid );
44+ connect ( mCbxReferencedField , &QgsFieldComboBox::fieldChanged, this , &QgsRelationAddDlg::checkDefinitionValid );
4845}
4946
5047QString QgsRelationAddDlg::referencingLayerId ()
5148{
52- return mCbxReferencingLayer ->currentData (). toString ();
49+ return mCbxReferencingLayer ->currentLayer ()-> id ();
5350}
5451
5552QString QgsRelationAddDlg::referencedLayerId ()
5653{
57- return mCbxReferencedLayer ->currentData (). toString ();
54+ return mCbxReferencedLayer ->currentLayer ()-> id ();
5855}
5956
6057QList< QPair< QString, QString > > QgsRelationAddDlg::references ()
6158{
6259 QList< QPair< QString, QString > > references;
6360
64- QString referencingField = mCbxReferencingField ->currentData (). toString ();
65- QString referencedField = mCbxReferencedField ->currentData (). toString ();
61+ QString referencingField = mCbxReferencingField ->currentField ();
62+ QString referencedField = mCbxReferencedField ->currentField ();
6663
6764 references.append ( QPair<QString, QString> ( referencingField, referencedField ) );
6865
@@ -79,15 +76,6 @@ QString QgsRelationAddDlg::relationName()
7976 return mTxtRelationName ->text ();
8077}
8178
82- void QgsRelationAddDlg::on_mCbxReferencingLayer_currentIndexChanged ( int index )
83- {
84- loadLayerAttributes ( mCbxReferencingField , mLayers [mCbxReferencingLayer ->itemData ( index ).toString ()] );
85- }
86-
87- void QgsRelationAddDlg::on_mCbxReferencedLayer_currentIndexChanged ( int index )
88- {
89- loadLayerAttributes ( mCbxReferencedField , mLayers [mCbxReferencedLayer ->itemData ( index ).toString ()] );
90- }
9179
9280void QgsRelationAddDlg::checkDefinitionValid ()
9381{
@@ -96,18 +84,3 @@ void QgsRelationAddDlg::checkDefinitionValid()
9684 && mCbxReferencingLayer ->currentIndex () != -1
9785 && mCbxReferencingField ->currentIndex () != -1 );
9886}
99-
100- void QgsRelationAddDlg::loadLayerAttributes ( QComboBox* cbx, QgsVectorLayer* layer )
101- {
102- cbx->clear ();
103-
104- if ( !layer )
105- {
106- return ;
107- }
108-
109- Q_FOREACH ( const QgsField& fld, layer->fields ().toList () )
110- {
111- cbx->addItem ( fld.name (), fld.name () );
112- }
113- }
0 commit comments