Skip to content

Commit

Permalink
Merge pull request #31178 from 3nids/relation_composite_gui
Browse files Browse the repository at this point in the history
[FEATURE] allow to define multiple field pairs for relations (composite keys)
  • Loading branch information
3nids committed Aug 13, 2019
2 parents 6d1c87c + bb775dd commit 9b4cb6f
Show file tree
Hide file tree
Showing 8 changed files with 313 additions and 209 deletions.
4 changes: 2 additions & 2 deletions src/app/CMakeLists.txt
Expand Up @@ -34,7 +34,7 @@ SET(QGIS_APP_SRCS
qgscustomization.cpp
qgscustomprojectiondialog.cpp
qgsdatumtransformtablewidget.cpp
qgsdiscoverrelationsdlg.cpp
qgsdiscoverrelationsdialog.cpp
qgsdxfexportdialog.cpp
qgsformannotationdialog.cpp
qgsguivectorlayertools.cpp
Expand Down Expand Up @@ -277,7 +277,7 @@ SET (QGIS_APP_MOC_HDRS
qgsdatumtransformtablewidget.h
qgsdelattrdialog.h
qgsdiagramproperties.h
qgsdiscoverrelationsdlg.h
qgsdiscoverrelationsdialog.h
qgsdisplayangle.h
qgsdxfexportdialog.h
qgsfeatureaction.h
Expand Down
Expand Up @@ -12,20 +12,20 @@
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgsdiscoverrelationsdlg.h"
#include "qgsdiscoverrelationsdialog.h"
#include "qgsvectorlayer.h"
#include "qgsrelationmanager.h"

#include <QPushButton>

QgsDiscoverRelationsDlg::QgsDiscoverRelationsDlg( const QList<QgsRelation> &existingRelations, const QList<QgsVectorLayer *> &layers, QWidget *parent )
QgsDiscoverRelationsDialog::QgsDiscoverRelationsDialog( const QList<QgsRelation> &existingRelations, const QList<QgsVectorLayer *> &layers, QWidget *parent )
: QDialog( parent )
, mLayers( layers )
{
setupUi( this );

mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( false );
connect( mRelationsTable->selectionModel(), &QItemSelectionModel::selectionChanged, this, &QgsDiscoverRelationsDlg::onSelectionChanged );
connect( mRelationsTable->selectionModel(), &QItemSelectionModel::selectionChanged, this, &QgsDiscoverRelationsDialog::onSelectionChanged );

mFoundRelations = QgsRelationManager::discoverRelations( existingRelations, layers );
for ( const QgsRelation &relation : qgis::as_const( mFoundRelations ) )
Expand All @@ -34,15 +34,22 @@ QgsDiscoverRelationsDlg::QgsDiscoverRelationsDlg( const QList<QgsRelation> &exis
mRelationsTable->resizeColumnsToContents();
}

void QgsDiscoverRelationsDlg::addRelation( const QgsRelation &rel )
void QgsDiscoverRelationsDialog::addRelation( const QgsRelation &rel )
{
QString referencingFields, referencedFields;
for ( int i = 0; i < rel.fieldPairs().count(); i++ )
{
referencingFields.append( QStringLiteral( "%1%2" ).arg( referencingFields.isEmpty() ? "" : ", " ).arg( rel.fieldPairs().at( i ).referencingField() ) );
referencedFields.append( QStringLiteral( "%1%2" ).arg( referencedFields.isEmpty() ? "" : ", " ).arg( rel.fieldPairs().at( i ).referencedField() ) );
}

const int row = mRelationsTable->rowCount();
mRelationsTable->insertRow( row );
mRelationsTable->setItem( row, 0, new QTableWidgetItem( rel.name() ) );
mRelationsTable->setItem( row, 1, new QTableWidgetItem( rel.referencingLayer()->name() ) );
mRelationsTable->setItem( row, 2, new QTableWidgetItem( rel.fieldPairs().at( 0 ).referencingField() ) );
mRelationsTable->setItem( row, 2, new QTableWidgetItem( referencingFields ) );
mRelationsTable->setItem( row, 3, new QTableWidgetItem( rel.referencedLayer()->name() ) );
mRelationsTable->setItem( row, 4, new QTableWidgetItem( rel.fieldPairs().at( 0 ).referencedField() ) );
mRelationsTable->setItem( row, 4, new QTableWidgetItem( referencedFields ) );
if ( rel.strength() == QgsRelation::RelationStrength::Composition )
{
mRelationsTable->setItem( row, 5, new QTableWidgetItem( QStringLiteral( "Composition" ) ) );
Expand All @@ -55,7 +62,7 @@ void QgsDiscoverRelationsDlg::addRelation( const QgsRelation &rel )
mRelationsTable->item( row, 5 )->setToolTip( QStringLiteral( "Composition (child features will be copied too) or Association" ) );
}

QList<QgsRelation> QgsDiscoverRelationsDlg::relations() const
QList<QgsRelation> QgsDiscoverRelationsDialog::relations() const
{
QList<QgsRelation> result;
const auto constSelectedRows = mRelationsTable->selectionModel()->selectedRows();
Expand All @@ -66,7 +73,7 @@ QList<QgsRelation> QgsDiscoverRelationsDlg::relations() const
return result;
}

void QgsDiscoverRelationsDlg::onSelectionChanged()
void QgsDiscoverRelationsDialog::onSelectionChanged()
{
mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( mRelationsTable->selectionModel()->hasSelection() );
}
Expand Up @@ -16,7 +16,7 @@
#define QGSDISCOVERRELATIONSDLG_H

#include <QDialog>
#include "ui_qgsdiscoverrelationsdlgbase.h"
#include "ui_qgsdiscoverrelationsdialogbase.h"
#include "qgsrelation.h"
#include "qgis_app.h"

Expand All @@ -28,12 +28,12 @@ class QgsVectorLayer;
*
* The user can select some of them to add them to his project.
*/
class APP_EXPORT QgsDiscoverRelationsDlg : public QDialog, private Ui::QgsDiscoverRelationsDlgBase
class APP_EXPORT QgsDiscoverRelationsDialog : public QDialog, private Ui::QgsDiscoverRelationsDialogBase
{
Q_OBJECT

public:
explicit QgsDiscoverRelationsDlg( const QList<QgsRelation> &existingRelations, const QList<QgsVectorLayer *> &layers, QWidget *parent = nullptr );
explicit QgsDiscoverRelationsDialog( const QList<QgsRelation> &existingRelations, const QList<QgsVectorLayer *> &layers, QWidget *parent = nullptr );

/**
* Gets the selected relations.
Expand Down

0 comments on commit 9b4cb6f

Please sign in to comment.