17
17
18
18
#include " qgsdatumtransformdialog.h"
19
19
#include " qgscoordinatetransform.h"
20
+ #include < QDir>
20
21
21
22
QgsDatumTransformDialog::QgsDatumTransformDialog ( const QString& layerName, const QList< QList< int > >& dt, QWidget* parent, Qt::WindowFlags f ): QDialog( parent, f )
22
23
{
@@ -26,6 +27,8 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, cons
26
27
for ( ; it != dt.constEnd (); ++it )
27
28
{
28
29
QTreeWidgetItem* item = new QTreeWidgetItem ();
30
+ bool itemDisabled = false ;
31
+
29
32
for ( int i = 0 ; i < 2 ; ++i )
30
33
{
31
34
if ( i >= it->size () )
@@ -39,7 +42,13 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, cons
39
42
{
40
43
item->setText ( i, QgsCoordinateTransform::datumTransformString ( nr ) );
41
44
}
45
+
46
+ if ( gridShiftTransformation ( item->text ( i ) ) && !testGridShiftFileAvailability ( item, i ) )
47
+ {
48
+ itemDisabled = true ;
49
+ }
42
50
}
51
+ item->setDisabled ( itemDisabled );
43
52
mDatumTransformTreeWidget ->addTopLevelItem ( item );
44
53
}
45
54
}
@@ -75,3 +84,57 @@ bool QgsDatumTransformDialog::rememberSelection() const
75
84
{
76
85
return mRememberSelectionCheckBox ->isChecked ();
77
86
}
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
+ }
0 commit comments