Skip to content

Commit 8b1d247

Browse files
committed
FORCE users to make a choice in the transformation selection dialog
We don't want users to fallback to a "don't know what this means, I'll click 'Cancel'" behaviour here. Doing so results in the worst possible inaccurate transformations used. Literally, picking ANYTHING in the dialog is a better selection then allowing them to click cancel. Sponsored by ICSM
1 parent 785c033 commit 8b1d247

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/app/qgsdatumtransformtablewidget.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ QgsDatumTransformTableWidget::QgsDatumTransformTableWidget( QWidget *parent )
197197

198198
void QgsDatumTransformTableWidget::addDatumTransform()
199199
{
200-
QgsDatumTransformDialog dlg( QgsCoordinateReferenceSystem(), QgsCoordinateReferenceSystem(), true, false );
200+
QgsDatumTransformDialog dlg( QgsCoordinateReferenceSystem(), QgsCoordinateReferenceSystem(), true, false, false );
201201
if ( dlg.exec() )
202202
{
203203
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg.selectedDatumTransforms();
@@ -250,7 +250,7 @@ void QgsDatumTransformTableWidget::editDatumTransform()
250250
if ( sourceCrs.isValid() && destinationCrs.isValid() &&
251251
( sourceTransform != -1 || destinationTransform != -1 ) )
252252
{
253-
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, qMakePair( sourceTransform, destinationTransform ) );
253+
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ) );
254254
if ( dlg.exec() )
255255
{
256256
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg.selectedDatumTransforms();

src/gui/qgsdatumtransformdialog.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ bool QgsDatumTransformDialog::run( const QgsCoordinateReferenceSystem &sourceCrs
3838
return true;
3939
}
4040

41-
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, false, true, qMakePair( -1, -1 ), parent );
41+
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, false, true, true, qMakePair( -1, -1 ), parent );
4242
if ( dlg.shouldAskUserForSelection() )
4343
{
4444
if ( dlg.exec() )
@@ -62,7 +62,7 @@ bool QgsDatumTransformDialog::run( const QgsCoordinateReferenceSystem &sourceCrs
6262
}
6363

6464
QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSystem &sourceCrs,
65-
const QgsCoordinateReferenceSystem &destinationCrs, const bool allowCrsChanges, const bool showMakeDefault,
65+
const QgsCoordinateReferenceSystem &destinationCrs, const bool allowCrsChanges, const bool showMakeDefault, const bool forceChoice,
6666
QPair<int, int> selectedDatumTransforms,
6767
QWidget *parent,
6868
Qt::WindowFlags f )
@@ -76,6 +76,13 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSy
7676
if ( !showMakeDefault )
7777
mMakeDefaultCheckBox->setVisible( false );
7878

79+
if ( forceChoice )
80+
{
81+
mButtonBox->removeButton( mButtonBox->button( QDialogButtonBox::Cancel ) );
82+
setWindowFlags( windowFlags() | Qt::CustomizeWindowHint );
83+
setWindowFlags( windowFlags() & ~Qt::WindowCloseButtonHint );
84+
}
85+
7986
mDatumTransformTableWidget->setColumnCount( 2 );
8087
QStringList headers;
8188
headers << tr( "Source Transform" ) << tr( "Destination Transform" ) ;
@@ -253,6 +260,14 @@ void QgsDatumTransformDialog::accept()
253260
QDialog::accept();
254261
}
255262

263+
void QgsDatumTransformDialog::reject()
264+
{
265+
if ( !mButtonBox->button( QDialogButtonBox::Cancel ) )
266+
return; // users HAVE to make a choice, no click on the dialog "x" to avoid this!
267+
268+
QDialog::reject();
269+
}
270+
256271
bool QgsDatumTransformDialog::shouldAskUserForSelection()
257272
{
258273
if ( mDatumTransforms.count() > 1 )

src/gui/qgsdatumtransformdialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
5959
const QgsCoordinateReferenceSystem &destinationCrs = QgsCoordinateReferenceSystem(),
6060
bool allowCrsChanges = false,
6161
bool showMakeDefault = true,
62+
bool forceChoice = true,
6263
QPair<int, int> selectedDatumTransforms = qMakePair( -1, -1 ),
6364
QWidget *parent = nullptr,
6465
Qt::WindowFlags f = nullptr );
6566
~QgsDatumTransformDialog() override;
6667

6768
void accept() override;
69+
void reject() override;
6870

6971
/**
7072
* Returns the source and destination transforms, each being a pair of QgsCoordinateReferenceSystems and datum transform code

0 commit comments

Comments
 (0)