@@ -34,19 +34,24 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSy
34
34
{
35
35
setupUi ( this );
36
36
37
+ mDatumTransformTableWidget ->setColumnCount ( 2 );
38
+ QStringList headers;
39
+ headers << tr ( " Source transform" ) << tr ( " Destination transform" ) ;
40
+ mDatumTransformTableWidget ->setHorizontalHeaderLabels ( headers );
41
+
37
42
mSourceProjectionSelectionWidget ->setCrs ( sourceCrs );
38
43
mDestinationProjectionSelectionWidget ->setCrs ( destinationCrs );
39
44
40
45
connect ( mHideDeprecatedCheckBox , &QCheckBox::stateChanged, this , &QgsDatumTransformDialog::mHideDeprecatedCheckBox_stateChanged );
41
- connect ( mDatumTransformTreeWidget , &QTreeWidget ::currentItemChanged, this , &QgsDatumTransformDialog::mDatumTransformTreeWidget_currentItemChanged );
46
+ connect ( mDatumTransformTableWidget , &QTableWidget ::currentItemChanged, this , &QgsDatumTransformDialog::tableCurrentItemChanged );
42
47
43
48
connect ( mSourceProjectionSelectionWidget , &QgsProjectionSelectionWidget::crsChanged, this , &QgsDatumTransformDialog::setSourceCrs );
44
49
connect ( mDestinationProjectionSelectionWidget , &QgsProjectionSelectionWidget::crsChanged, this , &QgsDatumTransformDialog::setDestinationCrs );
45
50
46
51
// get list of datum transforms
47
52
mSourceCrs = sourceCrs;
48
53
mDestinationCrs = destinationCrs;
49
- mDatumTransforms = QgsDatumTransform ::datumTransformations ( sourceCrs, destinationCrs );
54
+ mDatumTransforms = QgsCoordinateTransform ::datumTransformations ( sourceCrs, destinationCrs );
50
55
51
56
QApplication::setOverrideCursor ( Qt::ArrowCursor );
52
57
@@ -59,32 +64,30 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSy
59
64
mLabelSrcDescription ->clear ();
60
65
mLabelDstDescription ->clear ();
61
66
62
- for ( int i = 0 ; i < 2 ; i++ )
63
- {
64
- mDatumTransformTreeWidget ->setColumnWidth ( i, settings.value ( QStringLiteral ( " Windows/DatumTransformDialog/columnWidths/%1" ).arg ( i ), mDatumTransformTreeWidget ->columnWidth ( i ) ).toInt () );
65
- }
66
-
67
67
load ( selectedDatumTransforms );
68
68
}
69
69
70
70
void QgsDatumTransformDialog::load ( const QPair<int , int > &selectedDatumTransforms )
71
71
{
72
- mDatumTransformTreeWidget ->clear ();
72
+ mDatumTransformTableWidget ->setRowCount ( 0 );
73
+
74
+ int row = 0 ;
73
75
74
76
for ( const QgsDatumTransform::TransformPair &transform : qgis::as_const ( mDatumTransforms ) )
75
77
{
76
- QTreeWidgetItem *item = new QTreeWidgetItem ();
77
78
bool itemDisabled = false ;
78
79
bool itemHidden = false ;
79
80
81
+ if ( transform.sourceTransformId == -1 || transform.destinationTransformId == -1 )
82
+ continue ;
83
+
80
84
for ( int i = 0 ; i < 2 ; ++i )
81
85
{
86
+ QTableWidgetItem *item = new QTableWidgetItem ();
82
87
int nr = i == 0 ? transform.sourceTransformId : transform.destinationTransformId ;
83
- item->setData ( i, Qt::UserRole, nr );
84
- if ( nr == -1 )
85
- continue ;
88
+ item->setData ( Qt::UserRole, nr );
86
89
87
- item->setText ( i, QgsDatumTransform::datumTransformToProj ( nr ) );
90
+ item->setText ( QgsDatumTransform::datumTransformToProj ( nr ) );
88
91
89
92
// Describe datums in a tooltip
90
93
QgsDatumTransform::TransformInfo info = QgsDatumTransform::datumTransformInfo ( nr );
@@ -97,7 +100,7 @@ void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransfor
97
100
}
98
101
99
102
QString toolTipString;
100
- if ( gridShiftTransformation ( item->text ( i ) ) )
103
+ if ( gridShiftTransformation ( item->text () ) )
101
104
{
102
105
toolTipString.append ( QStringLiteral ( " <p><b>NTv2</b></p>" ) );
103
106
}
@@ -116,36 +119,45 @@ void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransfor
116
119
if ( info.deprecated )
117
120
toolTipString.append ( " <p><b>Deprecated transformation</b></p>" );
118
121
119
- item->setToolTip ( i, toolTipString );
122
+ item->setToolTip ( toolTipString );
120
123
121
- if ( gridShiftTransformation ( item->text ( i ) ) && !testGridShiftFileAvailability ( item, i ) )
124
+ if ( gridShiftTransformation ( item->text () ) && !testGridShiftFileAvailability ( item ) )
122
125
{
123
126
itemDisabled = true ;
124
127
}
125
- }
126
128
127
- if ( !itemHidden )
128
- {
129
- item->setDisabled ( itemDisabled );
130
- mDatumTransformTreeWidget ->addTopLevelItem ( item );
131
- if ( transform.sourceTransformId == selectedDatumTransforms.first &&
132
- transform.destinationTransformId == selectedDatumTransforms.second )
129
+ if ( !itemHidden )
130
+ {
131
+ if ( itemDisabled )
132
+ {
133
+ item->setFlags ( Qt::NoItemFlags );
134
+ }
135
+ mDatumTransformTableWidget ->setRowCount ( row + 1 );
136
+ mDatumTransformTableWidget ->setItem ( row, i, item );
137
+ }
138
+ else
133
139
{
134
- mDatumTransformTreeWidget -> setCurrentItem ( item ) ;
140
+ delete item;
135
141
}
136
142
}
137
- else
143
+
144
+ if ( transform.sourceTransformId == selectedDatumTransforms.first &&
145
+ transform.destinationTransformId == selectedDatumTransforms.second )
138
146
{
139
- delete item ;
147
+ mDatumTransformTableWidget -> selectRow ( row ) ;
140
148
}
149
+
150
+ row++;
141
151
}
142
152
153
+ mDatumTransformTableWidget ->resizeColumnsToContents ();
154
+
143
155
setOKButtonEnabled ();
144
156
}
145
157
146
158
void QgsDatumTransformDialog::setOKButtonEnabled ()
147
159
{
148
- QTreeWidgetItem *item = mDatumTransformTreeWidget ->currentItem ();
160
+ QTableWidgetItem *item = mDatumTransformTableWidget ->currentItem ();
149
161
mButtonBox ->button ( QDialogButtonBox::Ok )->setEnabled ( mSourceCrs .isValid () && mDestinationCrs .isValid () && item );
150
162
}
151
163
@@ -157,7 +169,7 @@ QgsDatumTransformDialog::~QgsDatumTransformDialog()
157
169
158
170
for ( int i = 0 ; i < 2 ; i++ )
159
171
{
160
- settings.setValue ( QStringLiteral ( " Windows/DatumTransformDialog/columnWidths/%1" ).arg ( i ), mDatumTransformTreeWidget ->columnWidth ( i ) );
172
+ settings.setValue ( QStringLiteral ( " Windows/DatumTransformDialog/columnWidths/%1" ).arg ( i ), mDatumTransformTableWidget ->columnWidth ( i ) );
161
173
}
162
174
163
175
QApplication::restoreOverrideCursor ();
@@ -171,15 +183,15 @@ int QgsDatumTransformDialog::availableTransformationCount()
171
183
172
184
QPair<QPair<QgsCoordinateReferenceSystem, int >, QPair<QgsCoordinateReferenceSystem, int > > QgsDatumTransformDialog::selectedDatumTransforms ()
173
185
{
174
- QTreeWidgetItem *item = mDatumTransformTreeWidget -> currentItem ();
186
+ int row = mDatumTransformTableWidget -> currentRow ();
175
187
QPair< QPair<QgsCoordinateReferenceSystem, int >, QPair<QgsCoordinateReferenceSystem, int > > sdt;
176
188
sdt.first .first = mSourceCrs ;
177
189
sdt.second .first = mDestinationCrs ;
178
190
179
- if ( item )
191
+ if ( row >= 0 )
180
192
{
181
- sdt.first .second = item-> data ( 0 , Qt::UserRole ).toInt ();
182
- sdt.second .second = item-> data ( 1 , Qt::UserRole ).toInt ();
193
+ sdt.first .second = mDatumTransformTableWidget -> item ( row, 0 )-> data ( Qt::UserRole ).toInt ();
194
+ sdt.second .second = mDatumTransformTableWidget -> item ( row, 1 )-> data ( Qt::UserRole ).toInt ();
183
195
}
184
196
else
185
197
{
@@ -194,14 +206,14 @@ bool QgsDatumTransformDialog::gridShiftTransformation( const QString &itemText )
194
206
return !itemText.isEmpty () && !itemText.contains ( QLatin1String ( " towgs84" ), Qt::CaseInsensitive );
195
207
}
196
208
197
- bool QgsDatumTransformDialog::testGridShiftFileAvailability ( QTreeWidgetItem *item, int col ) const
209
+ bool QgsDatumTransformDialog::testGridShiftFileAvailability ( QTableWidgetItem *item ) const
198
210
{
199
211
if ( !item )
200
212
{
201
213
return true ;
202
214
}
203
215
204
- QString itemText = item->text ( col );
216
+ QString itemText = item->text ();
205
217
if ( itemText.isEmpty () )
206
218
{
207
219
return true ;
@@ -241,7 +253,7 @@ bool QgsDatumTransformDialog::testGridShiftFileAvailability( QTreeWidgetItem *it
241
253
return true ;
242
254
}
243
255
}
244
- item->setToolTip ( col, tr ( " File '%1' not found in directory '%2'" ).arg ( filename, projDir.absolutePath () ) );
256
+ item->setToolTip ( tr ( " File '%1' not found in directory '%2'" ).arg ( filename, projDir.absolutePath () ) );
245
257
return false ; // not found in PROJ_LIB directory
246
258
}
247
259
return true ;
@@ -252,13 +264,16 @@ void QgsDatumTransformDialog::mHideDeprecatedCheckBox_stateChanged( int )
252
264
load ();
253
265
}
254
266
255
- void QgsDatumTransformDialog::mDatumTransformTreeWidget_currentItemChanged ( QTreeWidgetItem *current, QTreeWidgetItem * )
267
+ void QgsDatumTransformDialog::tableCurrentItemChanged ( QTableWidgetItem *, QTableWidgetItem * )
256
268
{
257
- if ( !current )
269
+ int row = mDatumTransformTableWidget ->currentRow ();
270
+ if ( row < 0 )
258
271
return ;
259
272
260
- mLabelSrcDescription ->setText ( current->toolTip ( 0 ) );
261
- mLabelDstDescription ->setText ( current->toolTip ( 1 ) );
273
+ QTableWidgetItem *srcItem = mDatumTransformTableWidget ->item ( row, 0 );
274
+ mLabelSrcDescription ->setText ( srcItem ? srcItem->toolTip () : QString () );
275
+ QTableWidgetItem *destItem = mDatumTransformTableWidget ->item ( row, 1 );
276
+ mLabelDstDescription ->setText ( destItem ? destItem->toolTip () : QString () );
262
277
263
278
setOKButtonEnabled ();
264
279
}
0 commit comments