Skip to content

Commit b78f268

Browse files
committed
use table widget instead of tree for better column display
1 parent e5499d0 commit b78f268

File tree

3 files changed

+69
-63
lines changed

3 files changed

+69
-63
lines changed

src/gui/qgsdatumtransformdialog.cpp

+54-39
Original file line numberDiff line numberDiff line change
@@ -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

7070
void 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

146158
void 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

172184
QPair<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
}

src/gui/qgsdatumtransformdialog.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
5959

6060
private slots:
6161
void mHideDeprecatedCheckBox_stateChanged( int state );
62-
void mDatumTransformTreeWidget_currentItemChanged( QTreeWidgetItem *, QTreeWidgetItem * );
62+
void tableCurrentItemChanged( QTableWidgetItem *, QTableWidgetItem * );
6363
void setSourceCrs( const QgsCoordinateReferenceSystem &sourceCrs );
6464
void setDestinationCrs( const QgsCoordinateReferenceSystem &destinationCrs );
6565

6666
private:
6767
bool gridShiftTransformation( const QString &itemText ) const;
6868
//! Returns false if the location of the grid shift files is known (PROJ_LIB) and the shift file is not there
69-
bool testGridShiftFileAvailability( QTreeWidgetItem *item, int col ) const;
69+
bool testGridShiftFileAvailability( QTableWidgetItem *item ) const;
7070
void load( const QPair<int, int> &selectedDatumTransforms = qMakePair( -1, -1 ) );
7171
void setOKButtonEnabled();
7272

src/ui/qgsdatumtransformdialogbase.ui

+13-22
Original file line numberDiff line numberDiff line change
@@ -74,25 +74,6 @@
7474
</property>
7575
</widget>
7676
</item>
77-
<item row="3" column="0" colspan="2">
78-
<widget class="QTreeWidget" name="mDatumTransformTreeWidget">
79-
<column>
80-
<property name="text">
81-
<string>src transform</string>
82-
</property>
83-
</column>
84-
<column>
85-
<property name="text">
86-
<string>dst transform</string>
87-
</property>
88-
</column>
89-
<column>
90-
<property name="text">
91-
<string/>
92-
</property>
93-
</column>
94-
</widget>
95-
</item>
9677
<item row="0" column="0" colspan="2">
9778
<layout class="QHBoxLayout" name="horizontalLayout_2">
9879
<item>
@@ -103,7 +84,7 @@
10384
</widget>
10485
</item>
10586
<item>
106-
<widget class="QgsProjectionSelectionWidget" name="mSourceProjectionSelectionWidget"/>
87+
<widget class="QgsProjectionSelectionWidget" name="mSourceProjectionSelectionWidget" native="true"/>
10788
</item>
10889
</layout>
10990
</item>
@@ -117,10 +98,20 @@
11798
</widget>
11899
</item>
119100
<item>
120-
<widget class="QgsProjectionSelectionWidget" name="mDestinationProjectionSelectionWidget"/>
101+
<widget class="QgsProjectionSelectionWidget" name="mDestinationProjectionSelectionWidget" native="true"/>
121102
</item>
122103
</layout>
123104
</item>
105+
<item row="3" column="0" colspan="2">
106+
<widget class="QTableWidget" name="mDatumTransformTableWidget">
107+
<property name="selectionMode">
108+
<enum>QAbstractItemView::SingleSelection</enum>
109+
</property>
110+
<property name="selectionBehavior">
111+
<enum>QAbstractItemView::SelectRows</enum>
112+
</property>
113+
</widget>
114+
</item>
124115
</layout>
125116
</widget>
126117
<customwidgets>
@@ -132,7 +123,7 @@
132123
</customwidget>
133124
</customwidgets>
134125
<tabstops>
135-
<tabstop>mDatumTransformTreeWidget</tabstop>
126+
<tabstop>mDatumTransformTableWidget</tabstop>
136127
<tabstop>mHideDeprecatedCheckBox</tabstop>
137128
<tabstop>mButtonBox</tabstop>
138129
</tabstops>

0 commit comments

Comments
 (0)