Skip to content

Commit

Permalink
Use structs instead of pairs
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Mar 22, 2019
1 parent 6afc6e6 commit 8d3f710
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 44 deletions.
8 changes: 4 additions & 4 deletions src/app/qgsdatumtransformtablewidget.cpp
Expand Up @@ -200,9 +200,9 @@ void QgsDatumTransformTableWidget::addDatumTransform()
QgsDatumTransformDialog dlg( QgsCoordinateReferenceSystem(), QgsCoordinateReferenceSystem(), true, false, false ); QgsDatumTransformDialog dlg( QgsCoordinateReferenceSystem(), QgsCoordinateReferenceSystem(), true, false, false );
if ( dlg.exec() ) if ( dlg.exec() )
{ {
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg.selectedDatumTransforms(); const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
QgsCoordinateTransformContext context = mModel->transformContext(); QgsCoordinateTransformContext context = mModel->transformContext();
context.addSourceDestinationDatumTransform( dt.first.first, dt.second.first, dt.first.second, dt.second.second ); context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
mModel->setTransformContext( context ); mModel->setTransformContext( context );
selectionChanged(); selectionChanged();
} }
Expand Down Expand Up @@ -253,10 +253,10 @@ void QgsDatumTransformTableWidget::editDatumTransform()
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ) ); QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ) );
if ( dlg.exec() ) if ( dlg.exec() )
{ {
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg.selectedDatumTransforms(); const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
QgsCoordinateTransformContext context = mModel->transformContext(); QgsCoordinateTransformContext context = mModel->transformContext();
// QMap::insert takes care of replacing existing value // QMap::insert takes care of replacing existing value
context.addSourceDestinationDatumTransform( sourceCrs, destinationCrs, dt.first.second, dt.second.second ); context.addSourceDestinationDatumTransform( sourceCrs, destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
mModel->setTransformContext( context ); mModel->setTransformContext( context );
} }
} }
Expand Down
76 changes: 38 additions & 38 deletions src/gui/qgsdatumtransformdialog.cpp
Expand Up @@ -43,9 +43,9 @@ bool QgsDatumTransformDialog::run( const QgsCoordinateReferenceSystem &sourceCrs
{ {
if ( dlg.exec() ) if ( dlg.exec() )
{ {
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg.selectedDatumTransforms(); const TransformInfo dt = dlg.selectedDatumTransform();
QgsCoordinateTransformContext context = QgsProject::instance()->transformContext(); QgsCoordinateTransformContext context = QgsProject::instance()->transformContext();
context.addSourceDestinationDatumTransform( dt.first.first, dt.second.first, dt.first.second, dt.second.second ); context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
QgsProject::instance()->setTransformContext( context ); QgsProject::instance()->setTransformContext( context );
return true; return true;
} }
Expand Down Expand Up @@ -255,15 +255,15 @@ void QgsDatumTransformDialog::accept()
QgsSettings settings; QgsSettings settings;
settings.beginGroup( QStringLiteral( "/Projections" ) ); settings.beginGroup( QStringLiteral( "/Projections" ) );


QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = selectedDatumTransforms(); const TransformInfo dt = selectedDatumTransform();


QString srcAuthId = dt.first.first.authid(); QString srcAuthId = dt.sourceCrs.authid();
QString destAuthId = dt.second.first.authid(); QString destAuthId = dt.destinationCrs.authid();
int sourceDatumTransform = dt.first.second; int sourceDatumTransform = dt.sourceTransformId;
QString sourceDatumProj; QString sourceDatumProj;
if ( sourceDatumTransform >= 0 ) if ( sourceDatumTransform >= 0 )
sourceDatumProj = QgsDatumTransform::datumTransformToProj( sourceDatumTransform ); sourceDatumProj = QgsDatumTransform::datumTransformToProj( sourceDatumTransform );
int destinationDatumTransform = dt.second.second; int destinationDatumTransform = dt.destinationTransformId;
QString destinationDatumProj; QString destinationDatumProj;
if ( destinationDatumTransform >= 0 ) if ( destinationDatumTransform >= 0 )
destinationDatumProj = QgsDatumTransform::datumTransformToProj( destinationDatumTransform ); destinationDatumProj = QgsDatumTransform::datumTransformToProj( destinationDatumTransform );
Expand Down Expand Up @@ -292,23 +292,23 @@ bool QgsDatumTransformDialog::shouldAskUserForSelection() const
return false; return false;
} }


QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > QgsDatumTransformDialog::defaultDatumTransform() const QgsDatumTransformDialog::TransformInfo QgsDatumTransformDialog::defaultDatumTransform() const
{ {
QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > preferredNonDeprecated; TransformInfo preferredNonDeprecated;
preferredNonDeprecated.first.first = mSourceCrs; preferredNonDeprecated.sourceCrs = mSourceCrs;
preferredNonDeprecated.second.first = mDestinationCrs; preferredNonDeprecated.destinationCrs = mDestinationCrs;
bool foundPreferredNonDeprecated = false; bool foundPreferredNonDeprecated = false;
QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > preferred; TransformInfo preferred;
preferred.first.first = mSourceCrs; preferred.sourceCrs = mSourceCrs;
preferred.second.first = mDestinationCrs; preferred.destinationCrs = mDestinationCrs;
bool foundPreferred = false; bool foundPreferred = false;
QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > nonDeprecated; TransformInfo nonDeprecated;
nonDeprecated.first.first = mSourceCrs; nonDeprecated.sourceCrs = mSourceCrs;
nonDeprecated.second.first = mDestinationCrs; nonDeprecated.destinationCrs = mDestinationCrs;
bool foundNonDeprecated = false; bool foundNonDeprecated = false;
QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > fallback; TransformInfo fallback;
fallback.first.first = mSourceCrs; fallback.sourceCrs = mSourceCrs;
fallback.second.first = mDestinationCrs; fallback.destinationCrs = mDestinationCrs;
bool foundFallback = false; bool foundFallback = false;


for ( const QgsDatumTransform::TransformPair &transform : qgis::as_const( mDatumTransforms ) ) for ( const QgsDatumTransform::TransformPair &transform : qgis::as_const( mDatumTransforms ) )
Expand All @@ -321,28 +321,28 @@ QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSyst
if ( !foundPreferredNonDeprecated && ( ( srcInfo.preferred && !srcInfo.deprecated ) || transform.sourceTransformId == -1 ) if ( !foundPreferredNonDeprecated && ( ( srcInfo.preferred && !srcInfo.deprecated ) || transform.sourceTransformId == -1 )
&& ( ( destInfo.preferred && !destInfo.deprecated ) || transform.destinationTransformId == -1 ) ) && ( ( destInfo.preferred && !destInfo.deprecated ) || transform.destinationTransformId == -1 ) )
{ {
preferredNonDeprecated.first.second = transform.sourceTransformId; preferredNonDeprecated.sourceTransformId = transform.sourceTransformId;
preferredNonDeprecated.second.second = transform.destinationTransformId; preferredNonDeprecated.destinationTransformId = transform.destinationTransformId;
foundPreferredNonDeprecated = true; foundPreferredNonDeprecated = true;
} }
else if ( !foundPreferred && ( srcInfo.preferred || transform.sourceTransformId == -1 ) && else if ( !foundPreferred && ( srcInfo.preferred || transform.sourceTransformId == -1 ) &&
( destInfo.preferred || transform.destinationTransformId == -1 ) ) ( destInfo.preferred || transform.destinationTransformId == -1 ) )
{ {
preferred.first.second = transform.sourceTransformId; preferred.sourceTransformId = transform.sourceTransformId;
preferred.second.second = transform.destinationTransformId; preferred.destinationTransformId = transform.destinationTransformId;
foundPreferred = true; foundPreferred = true;
} }
else if ( !foundNonDeprecated && ( !srcInfo.deprecated || transform.sourceTransformId == -1 ) else if ( !foundNonDeprecated && ( !srcInfo.deprecated || transform.sourceTransformId == -1 )
&& ( !destInfo.deprecated || transform.destinationTransformId == -1 ) ) && ( !destInfo.deprecated || transform.destinationTransformId == -1 ) )
{ {
nonDeprecated.first.second = transform.sourceTransformId; nonDeprecated.sourceTransformId = transform.sourceTransformId;
nonDeprecated.second.second = transform.destinationTransformId; nonDeprecated.destinationTransformId = transform.destinationTransformId;
foundNonDeprecated = true; foundNonDeprecated = true;
} }
else if ( !foundFallback ) else if ( !foundFallback )
{ {
fallback.first.second = transform.sourceTransformId; fallback.sourceTransformId = transform.sourceTransformId;
fallback.second.second = transform.destinationTransformId; fallback.destinationTransformId = transform.destinationTransformId;
foundFallback = true; foundFallback = true;
} }
} }
Expand All @@ -361,30 +361,30 @@ void QgsDatumTransformDialog::applyDefaultTransform()
if ( mDatumTransforms.count() > 0 ) if ( mDatumTransforms.count() > 0 )
{ {
QgsCoordinateTransformContext context = QgsProject::instance()->transformContext(); QgsCoordinateTransformContext context = QgsProject::instance()->transformContext();
const QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > dt = defaultDatumTransform(); const TransformInfo dt = defaultDatumTransform();
context.addSourceDestinationDatumTransform( dt.first.first, dt.second.first, dt.first.second, dt.second.second ); context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
QgsProject::instance()->setTransformContext( context ); QgsProject::instance()->setTransformContext( context );
} }
} }


QPair<QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int> > QgsDatumTransformDialog::selectedDatumTransforms() QgsDatumTransformDialog::TransformInfo QgsDatumTransformDialog::selectedDatumTransform()
{ {
int row = mDatumTransformTableWidget->currentRow(); int row = mDatumTransformTableWidget->currentRow();
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > sdt; TransformInfo sdt;
sdt.first.first = mSourceCrs; sdt.sourceCrs = mSourceCrs;
sdt.second.first = mDestinationCrs; sdt.destinationCrs = mDestinationCrs;


if ( row >= 0 ) if ( row >= 0 )
{ {
QTableWidgetItem *srcItem = mDatumTransformTableWidget->item( row, 0 ); QTableWidgetItem *srcItem = mDatumTransformTableWidget->item( row, 0 );
sdt.first.second = srcItem ? srcItem->data( Qt::UserRole ).toInt() : -1; sdt.sourceTransformId = srcItem ? srcItem->data( Qt::UserRole ).toInt() : -1;
QTableWidgetItem *destItem = mDatumTransformTableWidget->item( row, 1 ); QTableWidgetItem *destItem = mDatumTransformTableWidget->item( row, 1 );
sdt.second.second = destItem ? destItem->data( Qt::UserRole ).toInt() : -1; sdt.destinationTransformId = destItem ? destItem->data( Qt::UserRole ).toInt() : -1;
} }
else else
{ {
sdt.first.second = -1; sdt.sourceTransformId = -1;
sdt.second.second = -1; sdt.destinationTransformId = -1;
} }
return sdt; return sdt;
} }
Expand Down
20 changes: 18 additions & 2 deletions src/gui/qgsdatumtransformdialog.h
Expand Up @@ -37,6 +37,22 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
Q_OBJECT Q_OBJECT
public: public:


//! Dialog transformation entry info
struct TransformInfo
{
//! Source coordinate reference system
QgsCoordinateReferenceSystem sourceCrs;

//! Source transform ID
int sourceTransformId = -1;

//! Destination coordinate reference system
QgsCoordinateReferenceSystem destinationCrs;

//! Destination transform ID
int destinationTransformId = -1;
};

/** /**
* Runs the dialog (if required) prompting for the desired transform to use from \a sourceCrs to * Runs the dialog (if required) prompting for the desired transform to use from \a sourceCrs to
* \a destinationCrs, updating the current project transform context as required * \a destinationCrs, updating the current project transform context as required
Expand Down Expand Up @@ -72,7 +88,7 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
* Returns the source and destination transforms, each being a pair of QgsCoordinateReferenceSystems and datum transform code * Returns the source and destination transforms, each being a pair of QgsCoordinateReferenceSystems and datum transform code
* \since 3.0 * \since 3.0
*/ */
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > selectedDatumTransforms(); TransformInfo selectedDatumTransform();


private slots: private slots:


Expand Down Expand Up @@ -101,7 +117,7 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
* \see shouldAskUserForSelection() * \see shouldAskUserForSelection()
* \see applyDefaultTransform() * \see applyDefaultTransform()
*/ */
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > defaultDatumTransform() const; TransformInfo defaultDatumTransform() const;


/** /**
* Applies the defaultDatumTransform(), adding it to the current QgsProject instance. * Applies the defaultDatumTransform(), adding it to the current QgsProject instance.
Expand Down

0 comments on commit 8d3f710

Please sign in to comment.