22 #include "qgssettings.h"
29 #include <QPushButton>
36 if ( sourceCrs == destinationCrs )
45 QgsDatumTransformDialog dlg( sourceCrs, destinationCrs,
false,
true,
false, qMakePair( -1, -1 ), parent, Qt::WindowFlags(), QString(), mapCanvas );
46 if ( !windowTitle.isEmpty() )
47 dlg.setWindowTitle( windowTitle );
49 if ( dlg.shouldAskUserForSelection() )
69 dlg.applyDefaultTransform();
76 QPair<int, int> selectedDatumTransforms,
78 Qt::WindowFlags f,
const QString &selectedProj,
QgsMapCanvas *mapCanvas,
bool allowFallback )
79 : QDialog( parent, f )
89 if ( !showMakeDefault )
90 mCoordinateOperationsWidget->setShowMakeDefault(
false );
94 mButtonBox->removeButton( mButtonBox->button( QDialogButtonBox::Cancel ) );
95 setWindowFlags( windowFlags() | Qt::CustomizeWindowHint );
96 setWindowFlags( windowFlags() & ~Qt::WindowCloseButtonHint );
103 if ( !destinationCrs.
isValid() )
105 if ( !destinationCrs.
isValid() )
111 mSourceProjectionSelectionWidget->setCrs( sourceCrs );
112 mDestinationProjectionSelectionWidget->setCrs( destinationCrs );
113 if ( !allowCrsChanges )
115 mCrsStackedWidget->setCurrentIndex( 1 );
116 mSourceProjectionSelectionWidget->setEnabled(
false );
117 mDestinationProjectionSelectionWidget->setEnabled(
false );
122 mCoordinateOperationsWidget->setMapCanvas( mapCanvas );
127 mCoordinateOperationsWidget->setSourceCrs( sourceCrs );
128 mCoordinateOperationsWidget->setDestinationCrs( destinationCrs );
130 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, [ = ]
132 QgsHelp::openHelp( QStringLiteral(
"working_with_projections/working_with_projections.html" ) );
137 deets.
proj = selectedProj;
141 mCoordinateOperationsWidget->setSelectedOperation( deets );
145 if ( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid()
146 && mCoordinateOperationsWidget->selectedOperation().isAvailable )
151 void QgsDatumTransformDialog::setOKButtonEnabled()
153 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid()
154 && mCoordinateOperationsWidget->selectedOperation().isAvailable );
159 if ( mCoordinateOperationsWidget->makeDefaultSelected() && mCoordinateOperationsWidget->hasSelection() )
161 QgsSettings settings;
162 settings.beginGroup( QStringLiteral(
"/Projections" ) );
169 QString sourceDatumProj;
171 if ( sourceDatumTransform >= 0 )
174 QString destinationDatumProj;
175 if ( destinationDatumTransform >= 0 )
178 settings.setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_srcTransform" ), sourceDatumProj );
179 settings.setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_destTransform" ), destinationDatumProj );
180 settings.setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_coordinateOp" ), dt.
proj );
181 settings.setValue( srcAuthId + QStringLiteral(
"//" ) + destAuthId + QStringLiteral(
"_allowFallback" ), dt.
allowFallback );
188 if ( !mButtonBox->button( QDialogButtonBox::Cancel ) )
194 bool QgsDatumTransformDialog::shouldAskUserForSelection()
const
196 if ( mCoordinateOperationsWidget->availableOperations().count() > 1 )
198 return QgsSettings().value( QStringLiteral(
"/projections/promptWhenMultipleTransformsExist" ),
false, QgsSettings::App ).toBool();
206 TransformInfo preferred;
207 preferred.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
208 preferred.destinationCrs = mCoordinateOperationsWidget->destinationCrs();
212 preferred.proj = defaultOp.
proj;
216 void QgsDatumTransformDialog::applyDefaultTransform()
218 if ( mCoordinateOperationsWidget->availableOperations().count() > 0 )
221 const TransformInfo dt = defaultDatumTransform();
236 sdt.
sourceCrs = mCoordinateOperationsWidget->sourceCrs();
237 sdt.
destinationCrs = mCoordinateOperationsWidget->destinationCrs();
245 bool QgsDatumTransformDialog::gridShiftTransformation(
const QString &itemText )
const
247 return !itemText.isEmpty() && !itemText.contains( QLatin1String(
"towgs84" ), Qt::CaseInsensitive );
250 void QgsDatumTransformDialog::operationChanged()
252 setOKButtonEnabled();
257 mCoordinateOperationsWidget->setSourceCrs( sourceCrs );
258 setOKButtonEnabled();
263 mCoordinateOperationsWidget->setDestinationCrs( destinationCrs );
264 setOKButtonEnabled();
This class represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
QString authid() const
Returns the authority identifier for the CRS.
Contains information about the context in which a coordinate transform is executed.
Q_DECL_DEPRECATED bool addSourceDestinationDatumTransform(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, int sourceTransformId, int destinationTransformId)
Adds a new sourceTransform and destinationTransform to use when projecting coordinates from the speci...
bool addCoordinateOperation(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, const QString &coordinateOperationProjString, bool allowFallback=true)
Adds a new coordinateOperationProjString to use when projecting coordinates from the specified source...
void removeCoordinateOperation(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs)
Removes the coordinate operation for the specified sourceCrs and destinationCrs.
bool hasTransform(const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination) const
Returns true if the context has a valid coordinate operation to use when transforming from the specif...
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
Map canvas is a class for displaying all GIS data types on a canvas.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsCoordinateTransformContext transformContext
QgsCoordinateReferenceSystem crs
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the project's coordinate transform context, which stores various information regarding which dat...
Temporarily removes all cursor overrides for the QApplication for the lifetime of the object.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH