19
19
#include < QBuffer>
20
20
#include < QUrl>
21
21
#include < QList>
22
+ #include < QProgressDialog>
22
23
#include < QSet>
23
24
24
25
// just for a test
@@ -92,6 +93,21 @@ int QgsWFSData::getWFSData()
92
93
93
94
QgsHttpTransaction::applyProxySettings ( mHttp , mUri );
94
95
96
+ // find out if there is a QGIS main window. If yes, display a progress dialog
97
+ QProgressDialog* progressDialog = 0 ;
98
+ QWidget* mainWindow = findMainWindow ();
99
+
100
+ if (mainWindow)
101
+ {
102
+ progressDialog = new QProgressDialog (tr (" Loading WFS data" ), tr (" Abort" ), 0 , 0 , mainWindow);
103
+ progressDialog->setWindowModality (Qt::ApplicationModal);
104
+ connect (&mHttp , SIGNAL (dataReadProgress (int , int )), this , SLOT (handleProgressEvent (int , int )));
105
+ connect (this , SIGNAL (dataReadProgress (int )), progressDialog, SLOT (setValue (int )));
106
+ connect (this , SIGNAL (totalStepsUpdate (int )), progressDialog, SLOT (setMaximum (int )));
107
+ connect (progressDialog, SIGNAL (canceled ()), &mHttp , SLOT (abort ()));
108
+ progressDialog->show ();
109
+ }
110
+
95
111
// mHttp.get( mUri );
96
112
mHttp .get ( requestUrl.path () + " ?" + QString ( requestUrl.encodedQuery () ) );
97
113
@@ -111,9 +127,11 @@ int QgsWFSData::getWFSData()
111
127
readData = mHttp .readAll ();
112
128
XML_Parse ( p, readData.data (), readData.size (), atEnd );
113
129
}
114
- qApp->processEvents ( QEventLoop::ExcludeUserInputEvents );
130
+ qApp->processEvents ();
115
131
}
116
- qWarning ( " Left loop" );
132
+
133
+ delete progressDialog;
134
+
117
135
return 0 ; // soon
118
136
}
119
137
@@ -131,6 +149,12 @@ void QgsWFSData::setFinished( bool error )
131
149
mFinished = true ;
132
150
}
133
151
152
+ void QgsWFSData::handleProgressEvent (int progress, int totalSteps)
153
+ {
154
+ emit dataReadProgress (progress);
155
+ emit totalStepsUpdate (totalSteps);
156
+ }
157
+
134
158
void QgsWFSData::startElement ( const XML_Char* el, const XML_Char** attr )
135
159
{
136
160
QString elementName ( el );
@@ -755,3 +779,20 @@ int QgsWFSData::totalWKBFragmentSize() const
755
779
}
756
780
return result;
757
781
}
782
+
783
+ QWidget* QgsWFSData::findMainWindow () const
784
+ {
785
+ QWidget* mainWindow = 0 ;
786
+
787
+ QWidgetList topLevelWidgets = qApp->topLevelWidgets ();
788
+ QWidgetList::iterator it = topLevelWidgets.begin ();
789
+ for ( ; it != topLevelWidgets.end (); ++it )
790
+ {
791
+ if (( *it )->objectName () == " QgisApp" )
792
+ {
793
+ mainWindow = *it;
794
+ break ;
795
+ }
796
+ }
797
+ return mainWindow;
798
+ }
0 commit comments