diff --git a/images/images.qrc b/images/images.qrc index 662537fe45a..8807413f9cc 100644 --- a/images/images.qrc +++ b/images/images.qrc @@ -326,6 +326,7 @@ <file>themes/default/mIconFirst.png</file> <file>themes/default/mIconGeometryLayer.png</file> <file>themes/default/mIconInfo.png</file> + <file>themes/default/mIconImport.gif</file> <file>themes/default/mIconLabelQuadrantCenter.svg</file> <file>themes/default/mIconLabelQuadrantOffset.svg</file> <file>themes/default/mIconLast.png</file> diff --git a/images/themes/default/mIconImport.gif b/images/themes/default/mIconImport.gif new file mode 100644 index 00000000000..be37ec959b1 Binary files /dev/null and b/images/themes/default/mIconImport.gif differ diff --git a/src/providers/grass/qgsgrassprovidermodule.cpp b/src/providers/grass/qgsgrassprovidermodule.cpp index 1574a3e2e93..48d80365cf1 100644 --- a/src/providers/grass/qgsgrassprovidermodule.cpp +++ b/src/providers/grass/qgsgrassprovidermodule.cpp @@ -678,7 +678,40 @@ QIcon QgsGrassRasterItem::icon() return QgsDataItem::icon(); } + //----------------------- QgsGrassImportItem ------------------------------ +QgsGrassImportItemIcon::QgsGrassImportItemIcon() + : QObject() + , mCount( 0 ) + , mMovie( 0 ) +{ + // QApplication as parent to ensure that it is deleted before QApplication + mMovie = new QMovie( QApplication::instance() ); + mMovie->setFileName( QgsApplication::iconPath( "/mIconImport.gif" ) ); + mMovie->setCacheMode( QMovie::CacheAll ); + connect( mMovie, SIGNAL( frameChanged( int ) ), SLOT( onFrameChanged() ) ); +} + +void QgsGrassImportItemIcon::onFrameChanged() +{ + mIcon = QIcon( mMovie->currentPixmap() ); +} + +void QgsGrassImportItemIcon::addListener() +{ + mCount++; + mMovie->setPaused( mCount == 0 ); +} + +void QgsGrassImportItemIcon::removeListener() +{ + mCount++; + mMovie->setPaused( mCount == 0 ); +} + +//----------------------- QgsGrassImportItem ------------------------------ + +QgsGrassImportItemIcon QgsGrassImportItem::mImportIcon; QgsGrassImportItem::QgsGrassImportItem( QgsDataItem* parent, const QString& name, const QString& path, QgsGrassImport* import ) : QgsDataItem( QgsDataItem::Layer, parent, name, path ) @@ -687,6 +720,14 @@ QgsGrassImportItem::QgsGrassImportItem( QgsDataItem* parent, const QString& name { setCapabilities( QgsDataItem::NoCapabilities ); // disable fertility setState( Populating ); + + connect( &mImportIcon, SIGNAL( frameChanged( int ) ), SLOT( emitDataChanged() ) ); + mImportIcon.addListener(); +} + +QgsGrassImportItem::~QgsGrassImportItem() +{ + mImportIcon.removeListener(); } QList<QAction*> QgsGrassImportItem::actions() @@ -710,6 +751,11 @@ void QgsGrassImportItem::cancel() mImport->cancel(); } +QIcon QgsGrassImportItem::icon() +{ + return mImportIcon.icon(); +} + //------------------------------------------------------------------------- QGISEXTERN int dataCapabilities() diff --git a/src/providers/grass/qgsgrassprovidermodule.h b/src/providers/grass/qgsgrassprovidermodule.h index 836cea5de88..f52f29ee460 100644 --- a/src/providers/grass/qgsgrassprovidermodule.h +++ b/src/providers/grass/qgsgrassprovidermodule.h @@ -157,17 +157,42 @@ class QgsGrassRasterItem : public QgsGrassObjectItem bool mExternal; }; +// icon movie +class QgsGrassImportItemIcon : public QObject +{ + Q_OBJECT + public: + QgsGrassImportItemIcon(); + + QIcon icon() { return mIcon; } + void addListener(); + void removeListener(); + + public slots: + void onFrameChanged(); + + signals: + void frameChanged(); + + private: + void resetMovie(); + int mCount; + QMovie * mMovie; + QIcon mIcon; +}; + // item representing a layer being imported class QgsGrassImportItem : public QgsDataItem, public QgsGrassObjectItemBase { Q_OBJECT public: QgsGrassImportItem( QgsDataItem* parent, const QString& name, const QString& path, QgsGrassImport* import ); - + ~QgsGrassImportItem(); //virtual void setState( State state ) override { // QgsDataItem::setState(state); //} // do nothing to keep Populating virtual QList<QAction*> actions() override; + virtual QIcon icon() override; public slots: virtual void refresh() override {} @@ -178,6 +203,9 @@ class QgsGrassImportItem : public QgsDataItem, public QgsGrassObjectItemBase virtual void refresh( QVector<QgsDataItem*> children ) override { Q_UNUSED( children )}; //bool mDeleteAction; QgsGrassImport* mImport; + + private: + static QgsGrassImportItemIcon mImportIcon; }; #endif // QGSGRASSPROVIDERMODULE_H