@@ -151,9 +151,9 @@ const QIcon &QgsZipItem::iconZip()
151
151
152
152
QMap<QString, QIcon> QgsDataItem::mIconMap = QMap<QString, QIcon>();
153
153
154
- int QgsDataItem::mLoadingCount = 0 ;
155
- QMovie * QgsDataItem::mLoadingMovie = 0 ;
156
- QIcon QgsDataItem::mLoadingIcon = QIcon();
154
+ int QgsDataItem::mPopulatingCount = 0 ;
155
+ QMovie * QgsDataItem::mPopulatingMovie = 0 ;
156
+ QIcon QgsDataItem::mPopulatingIcon = QIcon();
157
157
158
158
QgsDataItem::QgsDataItem ( QgsDataItem::Type type, QgsDataItem* parent, QString name, QString path )
159
159
// Do not pass parent to QObject, Qt would delete this when parent is deleted
@@ -177,7 +177,7 @@ QgsDataItem::~QgsDataItem()
177
177
QIcon QgsDataItem::icon ()
178
178
{
179
179
if ( state () == Populating )
180
- return mLoadingIcon ;
180
+ return mPopulatingIcon ;
181
181
182
182
if ( !mIcon .isNull () )
183
183
return mIcon ;
@@ -215,6 +215,14 @@ void QgsDataItem::emitDataChanged()
215
215
emit dataChanged ( this );
216
216
}
217
217
218
+ void QgsDataItem::emitStateChanged ( QgsDataItem* item, QgsDataItem::State oldState )
219
+ {
220
+ if ( !item )
221
+ return ;
222
+ QgsDebugMsg ( QString ( " item %1 state changed %2 -> %3" ).arg ( item->path () ).arg ( oldState ).arg ( item->state () ) );
223
+ emit stateChanged ( item, oldState );
224
+ }
225
+
218
226
QVector<QgsDataItem*> QgsDataItem::createChildren ()
219
227
{
220
228
return QVector<QgsDataItem*>();
@@ -248,10 +256,10 @@ void QgsDataItem::populate()
248
256
QVector<QgsDataItem*> QgsDataItem::runCreateChildren ( QgsDataItem* item )
249
257
{
250
258
QgsDebugMsg ( " path = " + item->path () );
251
- // QTime time;
252
- // time.start();
259
+ QTime time ;
260
+ time .start ();
253
261
QVector <QgsDataItem*> children = item->createChildren ();
254
- // QgsDebugMsg( QString( "%1 children created in %2 ms" ).arg( children.size() ).arg( time.elapsed() ) );
262
+ QgsDebugMsg ( QString ( " %1 children created in %2 ms" ).arg ( children.size () ).arg ( time .elapsed () ) );
255
263
// Children objects must be pushed to main thread.
256
264
foreach ( QgsDataItem* child, children )
257
265
{
@@ -425,6 +433,8 @@ void QgsDataItem::addChildItem( QgsDataItem * child, bool refresh )
425
433
this , SLOT ( emitEndRemoveItems () ) );
426
434
connect ( child, SIGNAL ( dataChanged ( QgsDataItem* ) ),
427
435
this , SLOT ( emitDataChanged ( QgsDataItem* ) ) );
436
+ connect ( child, SIGNAL ( stateChanged ( QgsDataItem*, QgsDataItem::State ) ),
437
+ this , SLOT ( emitStateChanged ( QgsDataItem*, QgsDataItem::State ) ) );
428
438
429
439
if ( refresh )
430
440
emit endInsertItems ();
@@ -458,6 +468,8 @@ QgsDataItem * QgsDataItem::removeChildItem( QgsDataItem * child )
458
468
this , SLOT ( emitEndRemoveItems () ) );
459
469
disconnect ( child, SIGNAL ( dataChanged ( QgsDataItem* ) ),
460
470
this , SLOT ( emitDataChanged ( QgsDataItem* ) ) );
471
+ disconnect ( child, SIGNAL ( stateChanged ( QgsDataItem*, QgsDataItem::State ) ),
472
+ this , SLOT ( emitStateChanged ( QgsDataItem*, QgsDataItem::State ) ) );
461
473
child->setParent ( 0 );
462
474
return child;
463
475
}
@@ -483,9 +495,9 @@ bool QgsDataItem::equal( const QgsDataItem *other )
483
495
return false ;
484
496
}
485
497
486
- void QgsDataItem::setLoadingIcon ()
498
+ void QgsDataItem::setPopulatingIcon ()
487
499
{
488
- mLoadingIcon = QIcon ( mLoadingMovie ->currentPixmap () );
500
+ mPopulatingIcon = QIcon ( mPopulatingMovie ->currentPixmap () );
489
501
}
490
502
491
503
QgsDataItem::State QgsDataItem::state () const
@@ -499,37 +511,42 @@ QgsDataItem::State QgsDataItem::state() const
499
511
500
512
void QgsDataItem::setState ( State state )
501
513
{
514
+ QgsDebugMsg ( QString ( " item %1 set state %2 -> %3" ).arg ( path () ).arg ( this ->state () ).arg ( state ) );
502
515
if ( state == mState )
503
516
return ;
504
517
518
+ State oldState = mState ;
519
+
505
520
if ( state == Populating ) // start loading
506
521
{
507
- if ( !mLoadingMovie )
522
+ if ( !mPopulatingMovie )
508
523
{
509
524
// QApplication as parent to ensure that it is deleted before QApplication
510
- mLoadingMovie = new QMovie ( QApplication::instance () );
511
- mLoadingMovie ->setFileName ( QgsApplication::iconPath ( " /mIconLoading.gif" ) );
512
- mLoadingMovie ->setCacheMode ( QMovie::CacheAll );
513
- connect ( mLoadingMovie , SIGNAL ( frameChanged ( int ) ), SLOT ( setLoadingIcon () ) );
525
+ mPopulatingMovie = new QMovie ( QApplication::instance () );
526
+ mPopulatingMovie ->setFileName ( QgsApplication::iconPath ( " /mIconLoading.gif" ) );
527
+ mPopulatingMovie ->setCacheMode ( QMovie::CacheAll );
528
+ connect ( mPopulatingMovie , SIGNAL ( frameChanged ( int ) ), SLOT ( setPopulatingIcon () ) );
514
529
}
515
- connect ( mLoadingMovie , SIGNAL ( frameChanged ( int ) ), SLOT ( emitDataChanged () ) );
516
- mLoadingCount ++;
517
- mLoadingMovie ->setPaused ( false );
530
+ connect ( mPopulatingMovie , SIGNAL ( frameChanged ( int ) ), SLOT ( emitDataChanged () ) );
531
+ mPopulatingCount ++;
532
+ mPopulatingMovie ->setPaused ( false );
518
533
}
519
- else if ( mState == Populating && mLoadingMovie ) // stop loading
534
+ else if ( mState == Populating && mPopulatingMovie ) // stop loading
520
535
{
521
- disconnect ( mLoadingMovie , SIGNAL ( frameChanged ( int ) ), this , SLOT ( emitDataChanged () ) );
522
- mLoadingCount --;
523
- if ( mLoadingCount == 0 )
536
+ disconnect ( mPopulatingMovie , SIGNAL ( frameChanged ( int ) ), this , SLOT ( emitDataChanged () ) );
537
+ mPopulatingCount --;
538
+ if ( mPopulatingCount == 0 )
524
539
{
525
- mLoadingMovie ->setPaused ( true );
540
+ mPopulatingMovie ->setPaused ( true );
526
541
}
527
542
}
528
543
529
544
mState = state;
530
545
// for backward compatibility (if subclass access mPopulated directly)
531
546
// TODO: remove in 3.0
532
547
mPopulated = state == Populated;
548
+
549
+ emit stateChanged ( this , oldState );
533
550
}
534
551
535
552
// ---------------------------------------------------------------------
@@ -657,6 +674,8 @@ QgsDirectoryItem::~QgsDirectoryItem()
657
674
658
675
QIcon QgsDirectoryItem::icon ()
659
676
{
677
+ if ( state () == Populating )
678
+ return populatingIcon ();
660
679
return iconDir ();
661
680
}
662
681
@@ -969,13 +988,13 @@ QVector<dataItem_t *> QgsZipItem::mDataItemPtr = QVector<dataItem_t*>();
969
988
QgsZipItem::QgsZipItem ( QgsDataItem* parent, QString name, QString path )
970
989
: QgsDataCollectionItem( parent, name, path )
971
990
{
972
- mDirPath = path;
991
+ mFilePath = path;
973
992
init ();
974
993
}
975
994
976
- QgsZipItem::QgsZipItem ( QgsDataItem* parent, QString name, QString dirPath , QString path )
995
+ QgsZipItem::QgsZipItem ( QgsDataItem* parent, QString name, QString filePath , QString path )
977
996
: QgsDataCollectionItem( parent, name, path )
978
- , mDirPath( dirPath )
997
+ , mFilePath( filePath )
979
998
{
980
999
init ();
981
1000
}
@@ -984,7 +1003,7 @@ void QgsZipItem::init()
984
1003
{
985
1004
mType = Collection; // Zip??
986
1005
mIconName = " /mIconZip.png" ;
987
- mVsiPrefix = vsiPrefix ( mDirPath );
1006
+ mVsiPrefix = vsiPrefix ( mFilePath );
988
1007
989
1008
if ( mProviderNames .size () == 0 )
990
1009
{
@@ -1137,7 +1156,7 @@ QVector<QgsDataItem*> QgsZipItem::createChildren()
1137
1156
foreach ( QString fileName, mZipFileList )
1138
1157
{
1139
1158
QFileInfo info ( fileName );
1140
- tmpPath = mVsiPrefix + path () + " /" + fileName;
1159
+ tmpPath = mVsiPrefix + mFilePath + " /" + fileName;
1141
1160
QgsDebugMsgLevel ( " tmpPath = " + tmpPath, 3 );
1142
1161
1143
1162
// foreach( dataItem_t *dataItem, mDataItemPtr )
@@ -1295,7 +1314,7 @@ const QStringList & QgsZipItem::getZipFileList()
1295
1314
QSettings settings;
1296
1315
QString scanZipSetting = settings.value ( " /qgis/scanZipInBrowser2" , " basic" ).toString ();
1297
1316
1298
- QgsDebugMsgLevel ( QString ( " mDirPath = %1 name= %2 scanZipSetting= %3 vsiPrefix= %4" ).arg ( mDirPath ).arg ( name () ).arg ( scanZipSetting ).arg ( mVsiPrefix ), 3 );
1317
+ QgsDebugMsgLevel ( QString ( " mFIlePath = %1 name= %2 scanZipSetting= %3 vsiPrefix= %4" ).arg ( mFilePath ).arg ( name () ).arg ( scanZipSetting ).arg ( mVsiPrefix ), 3 );
1299
1318
1300
1319
// if scanZipBrowser == no: skip to the next file
1301
1320
if ( scanZipSetting == " no" )
@@ -1305,7 +1324,7 @@ const QStringList & QgsZipItem::getZipFileList()
1305
1324
1306
1325
// get list of files inside zip file
1307
1326
QgsDebugMsgLevel ( QString ( " Open file %1 with gdal vsi" ).arg ( mVsiPrefix + path () ), 3 );
1308
- char **papszSiblingFiles = VSIReadDirRecursive1 ( QString ( mVsiPrefix + mDirPath ).toLocal8Bit ().constData () );
1327
+ char **papszSiblingFiles = VSIReadDirRecursive1 ( QString ( mVsiPrefix + mFilePath ).toLocal8Bit ().constData () );
1309
1328
if ( papszSiblingFiles )
1310
1329
{
1311
1330
for ( int i = 0 ; i < CSLCount ( papszSiblingFiles ); i++ )
@@ -1320,7 +1339,7 @@ const QStringList & QgsZipItem::getZipFileList()
1320
1339
}
1321
1340
else
1322
1341
{
1323
- QgsDebugMsg ( QString ( " Error reading %1" ).arg ( mDirPath ) );
1342
+ QgsDebugMsg ( QString ( " Error reading %1" ).arg ( mFilePath ) );
1324
1343
}
1325
1344
1326
1345
return mZipFileList ;
0 commit comments