@@ -34,19 +34,24 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSy
3434{
3535 setupUi ( this );
3636
37+ mDatumTransformTableWidget ->setColumnCount ( 2 );
38+ QStringList headers;
39+ headers << tr ( " Source transform" ) << tr ( " Destination transform" ) ;
40+ mDatumTransformTableWidget ->setHorizontalHeaderLabels ( headers );
41+
3742 mSourceProjectionSelectionWidget ->setCrs ( sourceCrs );
3843 mDestinationProjectionSelectionWidget ->setCrs ( destinationCrs );
3944
4045 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 );
4247
4348 connect ( mSourceProjectionSelectionWidget , &QgsProjectionSelectionWidget::crsChanged, this , &QgsDatumTransformDialog::setSourceCrs );
4449 connect ( mDestinationProjectionSelectionWidget , &QgsProjectionSelectionWidget::crsChanged, this , &QgsDatumTransformDialog::setDestinationCrs );
4550
4651 // get list of datum transforms
4752 mSourceCrs = sourceCrs;
4853 mDestinationCrs = destinationCrs;
49- mDatumTransforms = QgsDatumTransform ::datumTransformations ( sourceCrs, destinationCrs );
54+ mDatumTransforms = QgsCoordinateTransform ::datumTransformations ( sourceCrs, destinationCrs );
5055
5156 QApplication::setOverrideCursor ( Qt::ArrowCursor );
5257
@@ -59,32 +64,30 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSy
5964 mLabelSrcDescription ->clear ();
6065 mLabelDstDescription ->clear ();
6166
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-
6767 load ( selectedDatumTransforms );
6868}
6969
7070void QgsDatumTransformDialog::load ( const QPair<int , int > &selectedDatumTransforms )
7171{
72- mDatumTransformTreeWidget ->clear ();
72+ mDatumTransformTableWidget ->setRowCount ( 0 );
73+
74+ int row = 0 ;
7375
7476 for ( const QgsDatumTransform::TransformPair &transform : qgis::as_const ( mDatumTransforms ) )
7577 {
76- QTreeWidgetItem *item = new QTreeWidgetItem ();
7778 bool itemDisabled = false ;
7879 bool itemHidden = false ;
7980
81+ if ( transform.sourceTransformId == -1 || transform.destinationTransformId == -1 )
82+ continue ;
83+
8084 for ( int i = 0 ; i < 2 ; ++i )
8185 {
86+ QTableWidgetItem *item = new QTableWidgetItem ();
8287 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 );
8689
87- item->setText ( i, QgsDatumTransform::datumTransformToProj ( nr ) );
90+ item->setText ( QgsDatumTransform::datumTransformToProj ( nr ) );
8891
8992 // Describe datums in a tooltip
9093 QgsDatumTransform::TransformInfo info = QgsDatumTransform::datumTransformInfo ( nr );
@@ -97,7 +100,7 @@ void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransfor
97100 }
98101
99102 QString toolTipString;
100- if ( gridShiftTransformation ( item->text ( i ) ) )
103+ if ( gridShiftTransformation ( item->text () ) )
101104 {
102105 toolTipString.append ( QStringLiteral ( " <p><b>NTv2</b></p>" ) );
103106 }
@@ -116,36 +119,45 @@ void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransfor
116119 if ( info.deprecated )
117120 toolTipString.append ( " <p><b>Deprecated transformation</b></p>" );
118121
119- item->setToolTip ( i, toolTipString );
122+ item->setToolTip ( toolTipString );
120123
121- if ( gridShiftTransformation ( item->text ( i ) ) && !testGridShiftFileAvailability ( item, i ) )
124+ if ( gridShiftTransformation ( item->text () ) && !testGridShiftFileAvailability ( item ) )
122125 {
123126 itemDisabled = true ;
124127 }
125- }
126128
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
133139 {
134- mDatumTransformTreeWidget -> setCurrentItem ( item ) ;
140+ delete item;
135141 }
136142 }
137- else
143+
144+ if ( transform.sourceTransformId == selectedDatumTransforms.first &&
145+ transform.destinationTransformId == selectedDatumTransforms.second )
138146 {
139- delete item ;
147+ mDatumTransformTableWidget -> selectRow ( row ) ;
140148 }
149+
150+ row++;
141151 }
142152
153+ mDatumTransformTableWidget ->resizeColumnsToContents ();
154+
143155 setOKButtonEnabled ();
144156}
145157
146158void QgsDatumTransformDialog::setOKButtonEnabled ()
147159{
148- QTreeWidgetItem *item = mDatumTransformTreeWidget ->currentItem ();
160+ QTableWidgetItem *item = mDatumTransformTableWidget ->currentItem ();
149161 mButtonBox ->button ( QDialogButtonBox::Ok )->setEnabled ( mSourceCrs .isValid () && mDestinationCrs .isValid () && item );
150162}
151163
@@ -157,7 +169,7 @@ QgsDatumTransformDialog::~QgsDatumTransformDialog()
157169
158170 for ( int i = 0 ; i < 2 ; i++ )
159171 {
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 ) );
161173 }
162174
163175 QApplication::restoreOverrideCursor ();
@@ -171,15 +183,15 @@ int QgsDatumTransformDialog::availableTransformationCount()
171183
172184QPair<QPair<QgsCoordinateReferenceSystem, int >, QPair<QgsCoordinateReferenceSystem, int > > QgsDatumTransformDialog::selectedDatumTransforms ()
173185{
174- QTreeWidgetItem *item = mDatumTransformTreeWidget -> currentItem ();
186+ int row = mDatumTransformTableWidget -> currentRow ();
175187 QPair< QPair<QgsCoordinateReferenceSystem, int >, QPair<QgsCoordinateReferenceSystem, int > > sdt;
176188 sdt.first .first = mSourceCrs ;
177189 sdt.second .first = mDestinationCrs ;
178190
179- if ( item )
191+ if ( row >= 0 )
180192 {
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 ();
183195 }
184196 else
185197 {
@@ -194,14 +206,14 @@ bool QgsDatumTransformDialog::gridShiftTransformation( const QString &itemText )
194206 return !itemText.isEmpty () && !itemText.contains ( QLatin1String ( " towgs84" ), Qt::CaseInsensitive );
195207}
196208
197- bool QgsDatumTransformDialog::testGridShiftFileAvailability ( QTreeWidgetItem *item, int col ) const
209+ bool QgsDatumTransformDialog::testGridShiftFileAvailability ( QTableWidgetItem *item ) const
198210{
199211 if ( !item )
200212 {
201213 return true ;
202214 }
203215
204- QString itemText = item->text ( col );
216+ QString itemText = item->text ();
205217 if ( itemText.isEmpty () )
206218 {
207219 return true ;
@@ -241,7 +253,7 @@ bool QgsDatumTransformDialog::testGridShiftFileAvailability( QTreeWidgetItem *it
241253 return true ;
242254 }
243255 }
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 () ) );
245257 return false ; // not found in PROJ_LIB directory
246258 }
247259 return true ;
@@ -252,13 +264,16 @@ void QgsDatumTransformDialog::mHideDeprecatedCheckBox_stateChanged( int )
252264 load ();
253265}
254266
255- void QgsDatumTransformDialog::mDatumTransformTreeWidget_currentItemChanged ( QTreeWidgetItem *current, QTreeWidgetItem * )
267+ void QgsDatumTransformDialog::tableCurrentItemChanged ( QTableWidgetItem *, QTableWidgetItem * )
256268{
257- if ( !current )
269+ int row = mDatumTransformTableWidget ->currentRow ();
270+ if ( row < 0 )
258271 return ;
259272
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 () );
262277
263278 setOKButtonEnabled ();
264279}
0 commit comments