Skip to content

Commit faea634

Browse files
committed
In case PROJ_LIB is set, disable grid shifts if .gsb file are not there
1 parent 7c7d837 commit faea634

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/gui/qgsdatumtransformdialog.cpp

+63
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "qgsdatumtransformdialog.h"
1919
#include "qgscoordinatetransform.h"
20+
#include <QDir>
2021

2122
QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, const QList< QList< int > >& dt, QWidget* parent, Qt::WindowFlags f ): QDialog( parent, f )
2223
{
@@ -26,6 +27,8 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, cons
2627
for ( ; it != dt.constEnd(); ++it )
2728
{
2829
QTreeWidgetItem* item = new QTreeWidgetItem();
30+
bool itemDisabled = false;
31+
2932
for ( int i = 0; i < 2; ++i )
3033
{
3134
if ( i >= it->size() )
@@ -39,7 +42,13 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, cons
3942
{
4043
item->setText( i, QgsCoordinateTransform::datumTransformString( nr ) );
4144
}
45+
46+
if ( gridShiftTransformation( item->text( i ) ) && !testGridShiftFileAvailability( item, i ) )
47+
{
48+
itemDisabled = true;
49+
}
4250
}
51+
item->setDisabled( itemDisabled );
4352
mDatumTransformTreeWidget->addTopLevelItem( item );
4453
}
4554
}
@@ -75,3 +84,57 @@ bool QgsDatumTransformDialog::rememberSelection() const
7584
{
7685
return mRememberSelectionCheckBox->isChecked();
7786
}
87+
88+
bool QgsDatumTransformDialog::gridShiftTransformation( const QString& itemText ) const
89+
{
90+
return ( !itemText.isEmpty() && !itemText.contains( "towgs84", Qt::CaseInsensitive ) );
91+
}
92+
93+
bool QgsDatumTransformDialog::testGridShiftFileAvailability( QTreeWidgetItem* item, int col ) const
94+
{
95+
if ( !item )
96+
{
97+
return true;
98+
}
99+
100+
QString itemText = item->text( col );
101+
if ( itemText.isEmpty() )
102+
{
103+
return true;
104+
}
105+
106+
char* projLib = getenv( "PROJ_LIB" );
107+
if ( !projLib ) //no information about installation directory
108+
{
109+
return true;
110+
}
111+
112+
QStringList itemEqualSplit = itemText.split( "=" );
113+
QString filename;
114+
for ( int i = 1; i < itemEqualSplit.size(); ++i )
115+
{
116+
if ( i > 1 )
117+
{
118+
filename.append( "=" );
119+
}
120+
filename.append( itemEqualSplit.at( i ) );
121+
}
122+
123+
QDir projDir( projLib );
124+
if ( projDir.exists() )
125+
{
126+
//look if filename in directory
127+
QStringList fileList = projDir.entryList();
128+
QStringList::const_iterator fileIt = fileList.constBegin();
129+
for ( ; fileIt != fileList.constEnd(); ++fileIt )
130+
{
131+
if ( *fileIt == filename )
132+
{
133+
return true;
134+
}
135+
}
136+
item->setToolTip( col, tr( "File '%1' not found in directory '%2'" ).arg( filename ).arg( projDir.absolutePath() ) );
137+
return false; //not found in PROJ_LIB directory
138+
}
139+
return true;
140+
}

src/gui/qgsdatumtransformdialog.h

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ class GUI_EXPORT QgsDatumTransformDialog: public QDialog, private Ui::QgsDatumTr
3232

3333
private:
3434
QgsDatumTransformDialog();
35+
bool gridShiftTransformation( const QString& itemText ) const;
36+
/**Returns false if the location of the grid shift files is known (PROJ_LIB) and the shift file is not there*/
37+
bool testGridShiftFileAvailability( QTreeWidgetItem* item, int col ) const;
3538
};
3639

3740
#endif // QGSDATUMTRANSFORMDIALOG_H

0 commit comments

Comments
 (0)