Skip to content

Commit c04d4fa

Browse files
committedDec 20, 2019
Allow double-clicking on coordinate operation to quickly select them
1 parent 9664526 commit c04d4fa

File tree

6 files changed

+66
-52
lines changed

6 files changed

+66
-52
lines changed
 

‎python/gui/auto_generated/qgscoordinateoperationwidget.sip.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ Sets the details of the ``operation`` currently selected within the widget.
127127
void operationChanged();
128128
%Docstring
129129
Emitted when the operation selected in the dialog is changed.
130+
%End
131+
132+
void operationDoubleClicked();
133+
%Docstring
134+
Emitted when an operation is double-clicked in the widget.
130135
%End
131136

132137
};

‎src/app/qgsdatumtransformtablewidget.cpp

Lines changed: 41 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,21 @@ QgsDatumTransformTableWidget::QgsDatumTransformTableWidget( QWidget *parent )
221221
mTableView->setAlternatingRowColors( true );
222222
connect( mAddButton, &QToolButton::clicked, this, &QgsDatumTransformTableWidget::addDatumTransform );
223223
connect( mRemoveButton, &QToolButton::clicked, this, &QgsDatumTransformTableWidget::removeDatumTransform );
224-
connect( mEditButton, &QToolButton::clicked, this, &QgsDatumTransformTableWidget::editDatumTransform );
224+
connect( mEditButton, &QToolButton::clicked, this, [ = ]
225+
{
226+
QModelIndexList selectedIndexes = mTableView->selectionModel()->selectedIndexes();
227+
if ( selectedIndexes.count() > 0 )
228+
{
229+
editDatumTransform( selectedIndexes.at( 0 ) );
230+
}
231+
} );
225232

226233
connect( mTableView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &QgsDatumTransformTableWidget::selectionChanged );
234+
235+
connect( mTableView, &QTableView::doubleClicked, this, [ = ]( const QModelIndex & index )
236+
{
237+
editDatumTransform( index );
238+
} );
227239
mEditButton->setEnabled( false );
228240
}
229241

@@ -253,69 +265,47 @@ void QgsDatumTransformTableWidget::removeDatumTransform()
253265
}
254266
}
255267

256-
void QgsDatumTransformTableWidget::editDatumTransform()
268+
void QgsDatumTransformTableWidget::editDatumTransform( const QModelIndex &index )
257269
{
258-
QModelIndexList selectedIndexes = mTableView->selectionModel()->selectedIndexes();
259-
if ( selectedIndexes.count() > 0 )
260-
{
261-
QgsCoordinateReferenceSystem sourceCrs;
262-
QgsCoordinateReferenceSystem destinationCrs;
263-
QString proj;
264-
int sourceTransform = -1;
265-
int destinationTransform = -1;
266-
for ( QModelIndexList::const_iterator it = selectedIndexes.constBegin(); it != selectedIndexes.constEnd(); it ++ )
267-
{
268-
switch ( it->column() )
269-
{
270-
case QgsDatumTransformTableModel::SourceCrsColumn:
271-
sourceCrs = QgsCoordinateReferenceSystem( mModel->data( *it, Qt::DisplayRole ).toString() );
272-
break;
273-
case QgsDatumTransformTableModel::DestinationCrsColumn:
274-
destinationCrs = QgsCoordinateReferenceSystem( mModel->data( *it, Qt::DisplayRole ).toString() );
275-
break;
270+
QString proj;
271+
int sourceTransform = -1;
272+
int destinationTransform = -1;
273+
274+
QgsCoordinateReferenceSystem sourceCrs = QgsCoordinateReferenceSystem( mModel->data( mModel->index( index.row(), QgsDatumTransformTableModel::SourceCrsColumn ), Qt::DisplayRole ).toString() );
275+
QgsCoordinateReferenceSystem destinationCrs = QgsCoordinateReferenceSystem( mModel->data( mModel->index( index.row(), QgsDatumTransformTableModel::DestinationCrsColumn ), Qt::DisplayRole ).toString() );
276+
276277
#if PROJ_VERSION_MAJOR>=6
277-
case QgsDatumTransformTableModel::ProjDefinitionColumn:
278-
proj = mModel->data( *it, Qt::UserRole ).toString();
279-
break;
278+
proj = mModel->data( mModel->index( index.row(), QgsDatumTransformTableModel::ProjDefinitionColumn ), Qt::UserRole ).toString();
280279
#else
281-
case QgsDatumTransformTableModel::SourceTransformColumn:
282-
sourceTransform = mModel->data( *it, Qt::UserRole ).toInt();
283-
break;
284-
case QgsDatumTransformTableModel::DestinationTransformColumn:
285-
destinationTransform = mModel->data( *it, Qt::UserRole ).toInt();
286-
break;
280+
sourceTransform = mModel->data( mModel->index( index.row(), QgsDatumTransformTableModel::SourceTransformColumn ), Qt::UserRole ).toInt();
281+
destinationTransform = mModel->data( mModel->index( index.row(), QgsDatumTransformTableModel::DestinationTransformColumn ), Qt::UserRole ).toInt();
287282
#endif
288-
default:
289-
break;
290-
}
291-
}
292283

293284
#if PROJ_VERSION_MAJOR>=6
294-
if ( sourceCrs.isValid() && destinationCrs.isValid() && !proj.isEmpty() )
285+
if ( sourceCrs.isValid() && destinationCrs.isValid() && !proj.isEmpty() )
295286
#else
296-
if ( sourceCrs.isValid() && destinationCrs.isValid() &&
297-
( sourceTransform != -1 || destinationTransform != -1 ) )
287+
if ( sourceCrs.isValid() && destinationCrs.isValid() &&
288+
( sourceTransform != -1 || destinationTransform != -1 ) )
298289
#endif
290+
{
291+
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ), nullptr, nullptr, proj, QgisApp::instance()->mapCanvas() );
292+
if ( dlg.exec() )
299293
{
300-
QgsDatumTransformDialog dlg( sourceCrs, destinationCrs, true, false, false, qMakePair( sourceTransform, destinationTransform ), nullptr, nullptr, proj, QgisApp::instance()->mapCanvas() );
301-
if ( dlg.exec() )
294+
const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
295+
QgsCoordinateTransformContext context = mModel->transformContext();
296+
if ( sourceCrs != dt.sourceCrs || destinationCrs != dt.destinationCrs )
302297
{
303-
const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
304-
QgsCoordinateTransformContext context = mModel->transformContext();
305-
if ( sourceCrs != dt.sourceCrs || destinationCrs != dt.destinationCrs )
306-
{
307-
context.removeCoordinateOperation( sourceCrs, destinationCrs );
308-
Q_NOWARN_DEPRECATED_PUSH
309-
context.removeSourceDestinationDatumTransform( sourceCrs, destinationCrs );
310-
Q_NOWARN_DEPRECATED_POP
311-
}
312-
// QMap::insert takes care of replacing existing value
298+
context.removeCoordinateOperation( sourceCrs, destinationCrs );
313299
Q_NOWARN_DEPRECATED_PUSH
314-
context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
300+
context.removeSourceDestinationDatumTransform( sourceCrs, destinationCrs );
315301
Q_NOWARN_DEPRECATED_POP
316-
context.addCoordinateOperation( dt.sourceCrs, dt.destinationCrs, dt.proj );
317-
mModel->setTransformContext( context );
318302
}
303+
// QMap::insert takes care of replacing existing value
304+
Q_NOWARN_DEPRECATED_PUSH
305+
context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
306+
Q_NOWARN_DEPRECATED_POP
307+
context.addCoordinateOperation( dt.sourceCrs, dt.destinationCrs, dt.proj );
308+
mModel->setTransformContext( context );
319309
}
320310
}
321311
}

‎src/app/qgsdatumtransformtablewidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class APP_EXPORT QgsDatumTransformTableWidget : public QWidget, private Ui::QgsD
9999
void removeDatumTransform();
100100

101101
//! edit currently selected datum transform
102-
void editDatumTransform();
102+
void editDatumTransform( const QModelIndex &index );
103103

104104
private slots:
105105

‎src/gui/qgscoordinateoperationwidget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ QgsCoordinateOperationWidget::QgsCoordinateOperationWidget( QWidget *parent )
7979
connect( mHideDeprecatedCheckBox, &QCheckBox::stateChanged, this, [ = ] { loadAvailableOperations(); } );
8080
connect( mShowSupersededCheckBox, &QCheckBox::toggled, this, &QgsCoordinateOperationWidget::showSupersededToggled );
8181
connect( mCoordinateOperationTableWidget, &QTableWidget::currentItemChanged, this, &QgsCoordinateOperationWidget::tableCurrentItemChanged );
82+
connect( mCoordinateOperationTableWidget, &QTableWidget::itemDoubleClicked, this, &QgsCoordinateOperationWidget::operationDoubleClicked );
8283

8384
mLabelSrcDescription->clear();
8485
mLabelDstDescription->clear();

‎src/gui/qgscoordinateoperationwidget.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ class GUI_EXPORT QgsCoordinateOperationWidget : public QWidget, private Ui::QgsC
140140
*/
141141
void operationChanged();
142142

143+
/**
144+
* Emitted when an operation is double-clicked in the widget.
145+
*/
146+
void operationDoubleClicked();
147+
143148
private slots:
144149

145150
void tableCurrentItemChanged( QTableWidgetItem *, QTableWidgetItem * );

‎src/gui/qgsdatumtransformdialog.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,19 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSy
142142
deets.sourceTransformId = selectedDatumTransforms.first;
143143
deets.destinationTransformId = selectedDatumTransforms.second;
144144
mCoordinateOperationsWidget->setSelectedOperation( deets );
145+
146+
connect( mCoordinateOperationsWidget, &QgsCoordinateOperationWidget::operationDoubleClicked, this, [ = ]
147+
{
148+
149+
#if PROJ_VERSION_MAJOR>=6
150+
if ( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid()
151+
&& mCoordinateOperationsWidget->selectedOperation().isAvailable )
152+
accept();
153+
#else
154+
if ( mCoordinateOperationsWidget->sourceCrs().isValid() && mCoordinateOperationsWidget->destinationCrs().isValid() && mCoordinateOperationsWidget->hasSelection() )
155+
accept();
156+
#endif
157+
} );
145158
}
146159

147160
void QgsDatumTransformDialog::setOKButtonEnabled()

0 commit comments

Comments
 (0)
Please sign in to comment.