ows data items: population of children already runs in a thread - don't use subthreads for each provider (fixes #12507)

This commit is contained in:
Juergen E. Fischer 2015-06-08 14:09:33 +02:00
parent ef6261632d
commit 402df0323e
5 changed files with 11 additions and 41 deletions

View File

@ -7051,6 +7051,9 @@ void QgisApp::showMouseCoordinate( const QgsPoint & p )
{
if ( mMapCanvas->mapUnits() == QGis::Degrees )
{
if ( !mMapCanvas->mapSettings().destinationCrs().isValid() )
return;
QgsPoint geo = p;
if ( !mMapCanvas->mapSettings().destinationCrs().geographicFlag() )
{

View File

@ -350,14 +350,14 @@ QVector<QgsDataItem*> QgsDataItem::createChildren()
return QVector<QgsDataItem*>();
}
void QgsDataItem::populate()
void QgsDataItem::populate( bool foreground )
{
if ( state() == Populated || state() == Populating )
return;
QgsDebugMsg( "mPath = " + mPath );
if ( capabilities2() & QgsDataItem::Fast )
if ( capabilities2() & QgsDataItem::Fast || foreground )
{
populate( createChildren() );
}
@ -390,7 +390,7 @@ QVector<QgsDataItem*> QgsDataItem::runCreateChildren( QgsDataItem* item )
QgsDebugMsg( "moveToThread child " + child->path() );
child->moveToThread( QApplication::instance()->thread() ); // moves also children
}
QgsDebugMsg( "finished path = " + item->path() );
QgsDebugMsg( QString( "finished path %1: %2 children" ).arg( item->path() ).arg( children.size() ) );
return children;
}

View File

@ -241,7 +241,8 @@ class CORE_EXPORT QgsDataItem : public QObject
virtual void deleteLater();
// Populate children using children vector created by createChildren()
virtual void populate();
// @param foreground run createChildren in foreground
virtual void populate( bool foreground = false );
/** Remove children recursively and set as not populated. This is used when refreshing collapsed items. */
virtual void depopulate();

View File

@ -69,7 +69,7 @@ QVector<QgsDataItem*> QgsOWSConnectionItem::createChildren()
continue;
}
item->populate();
item->populate( true ); // populate in foreground - this is already run in a thread
layerCount += item->rowCount();
if ( item->rowCount() > 0 )

View File

@ -20,13 +20,9 @@
#include "qgswmscapabilities.h"
#include "qgswmsconnection.h"
#include "qgswmssourceselect.h"
#include "qgsnewhttpconnection.h"
#include "qgstilescalewidget.h"
#include "qgsapplication.h"
// ---------------------------------------------------------------------------
QgsWMSConnectionItem::QgsWMSConnectionItem( QgsDataItem* parent, QString name, QString path, QString uri )
: QgsDataCollectionItem( parent, name, path )
@ -46,19 +42,7 @@ QVector<QgsDataItem*> QgsWMSConnectionItem::createChildren()
QgsDataSourceURI uri;
uri.setEncodedUri( mUri );
#if 0
if ( mPath.contains( "url=" ) )
{
encodedUri = mPath;
uri.setEncodedUri( encodedUri );
}
else
{
QgsWMSConnection connection( mName );
uri = connection.uri();
encodedUri = uri.encodedUri();
}
#endif
QgsDebugMsg( "mUri = " + mUri );
QgsWmsSettings wmsSettings;
@ -70,25 +54,6 @@ QVector<QgsDataItem*> QgsWMSConnectionItem::createChildren()
QgsWmsCapabilitiesDownload capDownload( wmsSettings.baseUrl(), wmsSettings.authorization() );
#if 0
QWidget *mainWindow = 0;
QWidgetList topLevelWidgets = qApp->topLevelWidgets();
for ( QWidgetList::iterator it = topLevelWidgets.begin(); it != topLevelWidgets.end(); ++it )
{
if (( *it )->objectName() == "QgisApp" )
{
mainWindow = *it;
break;
}
}
if ( mainWindow )
{
connect( &capDownload, SIGNAL( statusChanged( QString ) ), mainWindow, SLOT( showStatusMessage( QString ) ) );
}
#endif
bool res = capDownload.downloadCapabilities();
if ( !res )
@ -402,6 +367,7 @@ QWidget * QgsWMSRootItem::paramWidget()
connect( select, SIGNAL( connectionsChanged() ), this, SLOT( connectionsChanged() ) );
return select;
}
void QgsWMSRootItem::connectionsChanged()
{
refresh();