1+ /* **************************************************************************
2+ qgsdiscoverrelationsdlg.cpp
3+ ---------------------
4+ begin : September 2016
5+ copyright : (C) 2016 by Patrick Valsecchi
6+ email : patrick dot valsecchi at camptocamp dot com
7+ ***************************************************************************
8+ * *
9+ * This program is free software; you can redistribute it and/or modify *
10+ * it under the terms of the GNU General Public License as published by *
11+ * the Free Software Foundation; either version 2 of the License, or *
12+ * (at your option) any later version. *
13+ * *
14+ ***************************************************************************/
15+ #include " qgsdiscoverrelationsdlg.h"
16+ #include " qgsvectorlayer.h"
17+ #include " qgsrelationmanager.h"
18+
19+ #include < QPushButton>
20+
21+ QgsDiscoverRelationsDlg::QgsDiscoverRelationsDlg ( const QList<QgsRelation>& existingRelations, const QList<QgsVectorLayer*>& layers, QWidget *parent )
22+ : QDialog( parent )
23+ , mLayers( layers )
24+ {
25+ setupUi ( this );
26+
27+ mButtonBox ->button ( QDialogButtonBox::Ok )->setEnabled ( false );
28+ connect ( mRelationsTable ->selectionModel (), &QItemSelectionModel::selectionChanged, this , &QgsDiscoverRelationsDlg::onSelectionChanged );
29+
30+ mFoundRelations = QgsRelationManager::discoverRelations ( existingRelations, layers );
31+ Q_FOREACH ( const QgsRelation& relation, mFoundRelations ) addRelation ( relation );
32+
33+ mRelationsTable ->resizeColumnsToContents ();
34+
35+ }
36+
37+ void QgsDiscoverRelationsDlg::addRelation ( const QgsRelation &rel )
38+ {
39+ const int row = mRelationsTable ->rowCount ();
40+ mRelationsTable ->insertRow ( row );
41+ mRelationsTable ->setItem ( row, 0 , new QTableWidgetItem ( rel.name () ) );
42+ mRelationsTable ->setItem ( row, 1 , new QTableWidgetItem ( rel.referencingLayer ()->name () ) );
43+ mRelationsTable ->setItem ( row, 2 , new QTableWidgetItem ( rel.fieldPairs ().at ( 0 ).referencingField () ) );
44+ mRelationsTable ->setItem ( row, 3 , new QTableWidgetItem ( rel.referencedLayer ()->name () ) );
45+ mRelationsTable ->setItem ( row, 4 , new QTableWidgetItem ( rel.fieldPairs ().at ( 0 ).referencedField () ) );
46+ }
47+
48+ QList<QgsRelation> QgsDiscoverRelationsDlg::relations () const
49+ {
50+ QList<QgsRelation> result;
51+ Q_FOREACH ( const QModelIndex& row, mRelationsTable ->selectionModel ()->selectedRows () )
52+ {
53+ result.append ( mFoundRelations .at ( row.row () ) );
54+ }
55+ return result;
56+ }
57+
58+ void QgsDiscoverRelationsDlg::onSelectionChanged ()
59+ {
60+ mButtonBox ->button ( QDialogButtonBox::Ok )->setEnabled ( mRelationsTable ->selectionModel ()->hasSelection () );
61+ }
0 commit comments