[QGIS Commit] r10090 - trunk/qgis/src/providers/wfs
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Feb 2 10:08:08 EST 2009
Author: mhugent
Date: 2009-02-02 10:08:08 -0500 (Mon, 02 Feb 2009)
New Revision: 10090
Modified:
trunk/qgis/src/providers/wfs/qgswfsdata.cpp
trunk/qgis/src/providers/wfs/qgswfsdata.h
Log:
Show a progress dialog for wfs if there is a main window (to not crash non-graphical applications using wfs provider)
Modified: trunk/qgis/src/providers/wfs/qgswfsdata.cpp
===================================================================
--- trunk/qgis/src/providers/wfs/qgswfsdata.cpp 2009-02-02 07:44:46 UTC (rev 10089)
+++ trunk/qgis/src/providers/wfs/qgswfsdata.cpp 2009-02-02 15:08:08 UTC (rev 10090)
@@ -19,6 +19,7 @@
#include <QBuffer>
#include <QUrl>
#include <QList>
+#include <QProgressDialog>
#include <QSet>
//just for a test
@@ -92,6 +93,21 @@
QgsHttpTransaction::applyProxySettings( mHttp, mUri );
+ //find out if there is a QGIS main window. If yes, display a progress dialog
+ QProgressDialog* progressDialog = 0;
+ QWidget* mainWindow = findMainWindow();
+
+ if(mainWindow)
+ {
+ progressDialog = new QProgressDialog(tr("Loading WFS data"), tr("Abort"), 0, 0, mainWindow);
+ progressDialog->setWindowModality(Qt::ApplicationModal);
+ connect(&mHttp, SIGNAL(dataReadProgress(int, int)), this, SLOT(handleProgressEvent(int, int)));
+ connect(this, SIGNAL(dataReadProgress(int)), progressDialog, SLOT(setValue(int)));
+ connect(this, SIGNAL(totalStepsUpdate(int)), progressDialog, SLOT(setMaximum(int)));
+ connect(progressDialog, SIGNAL(canceled()), &mHttp, SLOT(abort()));
+ progressDialog->show();
+ }
+
//mHttp.get( mUri );
mHttp.get( requestUrl.path() + "?" + QString( requestUrl.encodedQuery() ) );
@@ -111,9 +127,11 @@
readData = mHttp.readAll();
XML_Parse( p, readData.data(), readData.size(), atEnd );
}
- qApp->processEvents( QEventLoop::ExcludeUserInputEvents );
+ qApp->processEvents();
}
- qWarning( "Left loop" );
+
+ delete progressDialog;
+
return 0; //soon
}
@@ -131,6 +149,12 @@
mFinished = true;
}
+void QgsWFSData::handleProgressEvent(int progress, int totalSteps)
+{
+ emit dataReadProgress(progress);
+ emit totalStepsUpdate(totalSteps);
+}
+
void QgsWFSData::startElement( const XML_Char* el, const XML_Char** attr )
{
QString elementName( el );
@@ -755,3 +779,20 @@
}
return result;
}
+
+QWidget* QgsWFSData::findMainWindow() const
+{
+ QWidget* mainWindow = 0;
+
+ QWidgetList topLevelWidgets = qApp->topLevelWidgets();
+ QWidgetList::iterator it = topLevelWidgets.begin();
+ for ( ; it != topLevelWidgets.end(); ++it )
+ {
+ if (( *it )->objectName() == "QgisApp" )
+ {
+ mainWindow = *it;
+ break;
+ }
+ }
+ return mainWindow;
+}
Modified: trunk/qgis/src/providers/wfs/qgswfsdata.h
===================================================================
--- trunk/qgis/src/providers/wfs/qgswfsdata.h 2009-02-02 07:44:46 UTC (rev 10089)
+++ trunk/qgis/src/providers/wfs/qgswfsdata.h 2009-02-02 15:08:08 UTC (rev 10090)
@@ -57,6 +57,13 @@
private slots:
void setFinished( bool error );
+ /**Takes progress value and total steps and emit signals 'dataReadProgress' and 'totalStepUpdate'*/
+ void handleProgressEvent(int progress, int totalSteps);
+
+ signals:
+ void dataReadProgress(int progress);
+ void totalStepsUpdate(int totalSteps);
+
private:
enum parseMode
@@ -126,6 +133,9 @@
/**Adds all the integers contained in mCurrentWKBFragmentSizes*/
int totalWKBFragmentSize() const;
+ /**Returns pointer to main window or 0 if it does not exist*/
+ QWidget* findMainWindow() const;
+
QString mUri;
//results are members such that handler routines are able to manipulate them
/**Bounding box of the layer*/
More information about the QGIS-commit
mailing list