From 5924b24782895a955b44481e6f0ba98ad5f375a3 Mon Sep 17 00:00:00 2001 From: Andre Jochems Date: Mon, 9 Nov 2015 13:08:38 +0100 Subject: [PATCH] Revert "Adverts widget supports population from web and from local files." This reverts commit 85a611ed1967fbaf743722bde28de4ea8ca9b773. --- src/qt/CSCPublicAPI/casinocoinwebapi.cpp | 13 +++-- src/qt/CSCPublicAPI/casinocoinwebapi.h | 5 +- .../CSCPublicAPI/casinocoinwebapiparser.cpp | 53 ------------------- src/qt/CSCPublicAPI/casinocoinwebapiparser.h | 10 +--- .../jsonactivepromotionsparser.cpp | 18 ++----- .../CSCPublicAPI/jsonactivepromotionsparser.h | 8 +-- .../jsonsingleactivepromotion.cpp | 29 ++++++++-- .../CSCPublicAPI/jsonsingleactivepromotion.h | 15 ++---- .../qtquick_controls/cpp/guibannercontrol.cpp | 12 ++++- .../qtquick_controls/cpp/guibannercontrol.h | 3 +- .../qtquick_controls/cpp/guibannerwidget.cpp | 29 +++++----- src/qt/qtquick_controls/cpp/guibannerwidget.h | 6 +-- .../cpp/qmlbannerlistitem.cpp | 2 +- .../qtquick_controls/cpp/qmlimageprovider.cpp | 43 ++++++++------- .../qtquick_controls/cpp/qmlimageprovider.h | 28 +++++----- .../qml/QmlGUIBannerListView.qml | 9 +++- 16 files changed, 116 insertions(+), 167 deletions(-) diff --git a/src/qt/CSCPublicAPI/casinocoinwebapi.cpp b/src/qt/CSCPublicAPI/casinocoinwebapi.cpp index 149755c..18732ef 100644 --- a/src/qt/CSCPublicAPI/casinocoinwebapi.cpp +++ b/src/qt/CSCPublicAPI/casinocoinwebapi.cpp @@ -13,22 +13,22 @@ CasinoCoinWebAPI::CasinoCoinWebAPI( QObject*a_pParent ) void CasinoCoinWebAPI::GetActivePromotions() { - Get( s_strServerAddress + s_strServerEndpoint + "/ActivePromotions" ); + Get( s_strServerAddress + "/" + s_strServerEndpoint + "/ActivePromotions" ); } void CasinoCoinWebAPI::GetActiveCasinos() { - Get( s_strServerAddress + s_strServerEndpoint + "/ActiveCasinos" ); + Get( s_strServerAddress + "/" + s_strServerEndpoint + "/ActiveCasinos" ); } void CasinoCoinWebAPI::GetActiveNewsItems() { - Get( s_strServerAddress + s_strServerEndpoint + "/ActiveNewsItems" ); + Get( s_strServerAddress + "/" + s_strServerEndpoint + "/ActiveNewsItems" ); } void CasinoCoinWebAPI::GetActiveExchanges() { - Get( s_strServerAddress + s_strServerEndpoint + "/ActiveExchanges" ); + Get( s_strServerAddress + "/" + s_strServerEndpoint + "/ActiveExchanges" ); } void CasinoCoinWebAPI::Get( const QString& a_rUrl ) @@ -43,11 +43,10 @@ void CasinoCoinWebAPI::slotParseNetworkResponse( QNetworkReply *finished ) if ( finished->error() != QNetworkReply::NoError ) { // A communication error has occurred - qDebug() << finished->request().url(); - emit signalNetworkError( finished->error(), finished->request().url() ); + emit signalNetworkError( finished->error() ); return; } - QByteArray data = finished->readAll(); + QByteArray data = finished->readAll(); emit signalResponseReady( data ); } diff --git a/src/qt/CSCPublicAPI/casinocoinwebapi.h b/src/qt/CSCPublicAPI/casinocoinwebapi.h index e3b2dc4..38359eb 100644 --- a/src/qt/CSCPublicAPI/casinocoinwebapi.h +++ b/src/qt/CSCPublicAPI/casinocoinwebapi.h @@ -23,10 +23,7 @@ public: signals: void signalResponseReady( const QByteArray& a_rJsonFile ); - void signalNetworkError - ( QNetworkReply::NetworkError a_eError - , const QUrl a_rFailedUrl - ); + void signalNetworkError( QNetworkReply::NetworkError a_eError ); public slots: void slotParseNetworkResponse( QNetworkReply *finished ); diff --git a/src/qt/CSCPublicAPI/casinocoinwebapiparser.cpp b/src/qt/CSCPublicAPI/casinocoinwebapiparser.cpp index bd75e9b..05202a7 100644 --- a/src/qt/CSCPublicAPI/casinocoinwebapiparser.cpp +++ b/src/qt/CSCPublicAPI/casinocoinwebapiparser.cpp @@ -5,8 +5,6 @@ #include #include -#include -#include CasinoCoinWebAPIParser::CasinoCoinWebAPIParser( QObject* a_pParent ) : QObject(a_pParent) @@ -25,37 +23,24 @@ void CasinoCoinWebAPIParser::slotParseAnswer( const QByteArray& a_rJsonFile ) QJsonObject jsonObjectResult = docAsObject.find( "Result" ).value().toObject(); if ( jsonObjectResult.find( "ActivePromotions" ).value().isArray() ) { - StoreFile( "ActivePromotions", a_rJsonFile ); ParsePromotions( docAsObject ); } else if ( jsonObjectResult.find( "ActiveNewsItems" ).value().isArray() ) { - StoreFile( "ActiveNewsItems", a_rJsonFile ); ParseNewsItems( docAsObject ); } else if ( jsonObjectResult.find( "ActiveCasinos" ).value().isArray() ) { - StoreFile( "ActiveCasinos", a_rJsonFile ); ParseCasinos( docAsObject ); } else if ( jsonObjectResult.find( "ActiveExchanges" ).value().isArray() ) { - StoreFile( "ActiveExchanges", a_rJsonFile ); ParseExchanges( docAsObject ); } } } } -void CasinoCoinWebAPIParser::slotNetworkError( QNetworkReply::NetworkError a_eError - , const QUrl a_rFailedUrl - ) -{ - qDebug() << "network error: " << a_eError; - QString strAccessedUrl = a_rFailedUrl.toString().split("/").last(); - slotParseAnswer( ReadFile( strAccessedUrl ) ); -} - void CasinoCoinWebAPIParser::ParsePromotions( const QJsonObject& a_rJsonPromotions ) { qDebug() << "ParsePromotions"; @@ -79,41 +64,3 @@ void CasinoCoinWebAPIParser::ParseNewsItems( const QJsonObject& a_rJsonNewsItems qDebug() << "Coming soon - ParseNewsItems"; qDebug() << a_rJsonNewsItems; } - -QByteArray CasinoCoinWebAPIParser::ReadFile( QString a_strSourcePath ) -{ - QByteArray strAnswer; - if ( !QDir( "offlineData" ).exists() ) - { - QDir().mkdir( "offlineData" ); - } - QFile fileOutput( QDir( "offlineData" ).absoluteFilePath( a_strSourcePath ) ); - if ( !fileOutput.open( QIODevice::ReadOnly ) ) - { - qWarning() << "cannot open file to read: " << QDir::current().relativeFilePath( a_strSourcePath ); - } - else - { - strAnswer = fileOutput.readAll(); - fileOutput.close(); - } - return strAnswer; -} - -void CasinoCoinWebAPIParser::StoreFile( QString a_strDestinationPath, const QByteArray& a_rJsonFile ) -{ - if ( !QDir( "offlineData" ).exists() ) - { - QDir().mkdir( "offlineData" ); - } - QFile fileOutput( QDir( "offlineData" ).absoluteFilePath( a_strDestinationPath ) ); - if ( !fileOutput.open( QIODevice::WriteOnly | QIODevice::Truncate ) ) - { - qWarning() << "cannot open file to write: " << QDir::current().relativeFilePath( a_strDestinationPath ); - } - else - { - fileOutput.write( a_rJsonFile ); - fileOutput.close(); - } -} diff --git a/src/qt/CSCPublicAPI/casinocoinwebapiparser.h b/src/qt/CSCPublicAPI/casinocoinwebapiparser.h index c13f9b5..3ca8bb4 100644 --- a/src/qt/CSCPublicAPI/casinocoinwebapiparser.h +++ b/src/qt/CSCPublicAPI/casinocoinwebapiparser.h @@ -6,8 +6,6 @@ #include "jsonactivepromotionsparser.h" #include "jsonsingleactivepromotion.h" -#include - class CasinoCoinWebAPIParser : public QObject { Q_OBJECT @@ -23,18 +21,12 @@ signals: public slots: void slotParseAnswer( const QByteArray& a_rJsonFile ); - void slotNetworkError - ( QNetworkReply::NetworkError a_eError - , const QUrl a_rFailedUrl - ); + private: void ParsePromotions( const QJsonObject& a_rJsonPromotions ); void ParseCasinos ( const QJsonObject& a_rJsonCasinos ); void ParseExchanges ( const QJsonObject& a_rJsonExchanges ); void ParseNewsItems ( const QJsonObject& a_rJsonNewsItems ); - - QByteArray ReadFile( QString a_strSourcePath ); - void StoreFile( QString a_strDestinationPath, const QByteArray& a_rJsonFile ); }; #endif // CASINOCOINWEBAPIPARSER_H diff --git a/src/qt/CSCPublicAPI/jsonactivepromotionsparser.cpp b/src/qt/CSCPublicAPI/jsonactivepromotionsparser.cpp index a200460..0cfb464 100644 --- a/src/qt/CSCPublicAPI/jsonactivepromotionsparser.cpp +++ b/src/qt/CSCPublicAPI/jsonactivepromotionsparser.cpp @@ -1,5 +1,4 @@ #include "jsonactivepromotionsparser.h" -#include "../qtquick_controls/cpp/qmlimageprovider.h" #include @@ -25,7 +24,7 @@ void JsonActivePromotionsParser::ResolvePromotionsArray() { if ( singleCasinoDescriptor.isObject() ) { - m_aActivePromotions.append( JsonSingleActivePromotion( singleCasinoDescriptor.toObject() ) ); + m_aActiveCasinos.append( JsonSingleActivePromotion( singleCasinoDescriptor.toObject() ) ); } } } @@ -34,21 +33,10 @@ void JsonActivePromotionsParser::ResolvePromotionsArray() const QList& JsonActivePromotionsParser::GetPromotions() const { - return m_aActivePromotions; + return m_aActiveCasinos; } QList& JsonActivePromotionsParser::GetPromotions() { - return m_aActivePromotions; -} - -void JsonActivePromotionsParser::AddImagesToPool( QmlImageProvider* a_pImageProvider ) -{ - if ( a_pImageProvider ) - { - foreach( JsonSingleActivePromotion oPromotion, m_aActivePromotions ) - { - a_pImageProvider->AddToImagePool( oPromotion.GetImageName(), oPromotion.GetAdvertImage() ); - } - } + return m_aActiveCasinos; } diff --git a/src/qt/CSCPublicAPI/jsonactivepromotionsparser.h b/src/qt/CSCPublicAPI/jsonactivepromotionsparser.h index 03ae710..bad1b23 100644 --- a/src/qt/CSCPublicAPI/jsonactivepromotionsparser.h +++ b/src/qt/CSCPublicAPI/jsonactivepromotionsparser.h @@ -8,8 +8,6 @@ #include "jsonsingleactivepromotion.h" -class QmlImageProvider; - class JsonActivePromotionsParser : public QJsonObject { public: @@ -19,13 +17,11 @@ public: const QList& GetPromotions() const; QList& GetPromotions(); - - void AddImagesToPool( QmlImageProvider* a_pImageProvider ); - private: + void ResolvePromotionsArray(); - QList m_aActivePromotions; + QList m_aActiveCasinos; }; #endif // JSONACTIVEPROMOTIONSPARSER_H diff --git a/src/qt/CSCPublicAPI/jsonsingleactivepromotion.cpp b/src/qt/CSCPublicAPI/jsonsingleactivepromotion.cpp index 52c8c05..3f7ae8d 100644 --- a/src/qt/CSCPublicAPI/jsonsingleactivepromotion.cpp +++ b/src/qt/CSCPublicAPI/jsonsingleactivepromotion.cpp @@ -14,21 +14,40 @@ JsonSingleActivePromotion::JsonSingleActivePromotion() JsonSingleActivePromotion::JsonSingleActivePromotion( const QJsonObject& a_rOther ) : QJsonObject( a_rOther ) { - m_strImageName = find( "promotion_title" ).value().toString().remove( GetRestrictedCharacters() ); StoreImage(); } -QRegExp JsonSingleActivePromotion::GetRestrictedCharacters() +QString JsonSingleActivePromotion::GetImagePath() const { - return QRegExp( "[<,>|\\:()&;#?*% ]" ); + return QString( "file://" + QDir::currentPath() + "/" + GetImageRelativePath() ); } -void JsonSingleActivePromotion::StoreImage() +QString JsonSingleActivePromotion::GetImageRelativePath() const { + return QString( "adverts/" + find( "promotion_title" ).value().toString().remove( " " ) + "." + find( "image_mime_type" ).value().toString().split( "/" ).last() ); +} + +QString JsonSingleActivePromotion::StoreImage() +{ + QString strReturn = QString(); if ( find( "image_mime_type" ).value().toString().split( "/" ).first().contains( "image" ) ) { + QString strFileName = GetImageRelativePath(); QByteArray binaryData = QByteArray::fromBase64( find( "promotion_image" ).value().toString().toLocal8Bit() ); - m_oAdvertImage = QImage::fromData( binaryData ); + + if ( !QDir( "adverts" ).exists() ) + { + QDir().mkdir( "adverts" ); + } + QFile imageOutputFile( strFileName ); + QImage outputImage = QImage::fromData( binaryData, "JPEG" ); + if ( imageOutputFile.open( QIODevice::WriteOnly | QIODevice::Truncate ) ) + { + outputImage.save( &imageOutputFile, 0 ); + imageOutputFile.close(); + strReturn = strFileName; + } } + return strReturn; } diff --git a/src/qt/CSCPublicAPI/jsonsingleactivepromotion.h b/src/qt/CSCPublicAPI/jsonsingleactivepromotion.h index 8c995c8..b2429b1 100644 --- a/src/qt/CSCPublicAPI/jsonsingleactivepromotion.h +++ b/src/qt/CSCPublicAPI/jsonsingleactivepromotion.h @@ -5,8 +5,6 @@ #include #include -#include - class JsonSingleActivePromotion : public QJsonObject { public: @@ -14,16 +12,11 @@ public: JsonSingleActivePromotion( const QJsonObject& a_rOther ); virtual ~JsonSingleActivePromotion(){} - QString GetImageName() const{ return m_strImageName; } - QImage GetAdvertImage() const { return m_oAdvertImage; } + QString GetImagePath() const; + private: - void StoreImage(); - - static QRegExp GetRestrictedCharacters(); - - QString m_strImageName; - QImage m_oAdvertImage; - + QString GetImageRelativePath() const; + QString StoreImage(); }; #endif // JSONSINGLEACTIVEPROMOTION_H diff --git a/src/qt/qtquick_controls/cpp/guibannercontrol.cpp b/src/qt/qtquick_controls/cpp/guibannercontrol.cpp index eaee5dd..50cd75a 100644 --- a/src/qt/qtquick_controls/cpp/guibannercontrol.cpp +++ b/src/qt/qtquick_controls/cpp/guibannercontrol.cpp @@ -30,7 +30,7 @@ void GUIBannerControl::InitializeAdvertsView( GUIBannerListView* a_pView ) } } -void GUIBannerControl::slotPopulateListView( JsonActivePromotionsParser* a_pActivePromotions ) +void GUIBannerControl::slotPopulateFromWeb( JsonActivePromotionsParser* a_pActivePromotions ) { if ( m_pAdvertsView ) { @@ -39,3 +39,13 @@ void GUIBannerControl::slotPopulateListView( JsonActivePromotionsParser* a_pActi } } +void GUIBannerControl::slotPopulateLocally() +{ + if ( m_pAdvertsView ) + { + QmlBannerListModel* pAdvertsModel = new QmlBannerListModel( 0 ); + m_pAdvertsView->SetModel( pAdvertsModel ); + qDebug() << "Coming soon"; + } +} + diff --git a/src/qt/qtquick_controls/cpp/guibannercontrol.h b/src/qt/qtquick_controls/cpp/guibannercontrol.h index b013449..3812814 100644 --- a/src/qt/qtquick_controls/cpp/guibannercontrol.h +++ b/src/qt/qtquick_controls/cpp/guibannercontrol.h @@ -18,7 +18,8 @@ public: GUIBannerListView* GetAdvertsView() const { return m_pAdvertsView; } public slots: - void slotPopulateListView( JsonActivePromotionsParser* a_pActivePromotions ); + void slotPopulateFromWeb( JsonActivePromotionsParser* a_pActivePromotions ); + void slotPopulateLocally(); signals: diff --git a/src/qt/qtquick_controls/cpp/guibannerwidget.cpp b/src/qt/qtquick_controls/cpp/guibannerwidget.cpp index f466877..9127f30 100644 --- a/src/qt/qtquick_controls/cpp/guibannerwidget.cpp +++ b/src/qt/qtquick_controls/cpp/guibannerwidget.cpp @@ -20,12 +20,10 @@ GUIBannerWidget::GUIBannerWidget(QWidget *parent) , m_pBannerControl( 0 ) , m_pWebApiParserTemporary( new CasinoCoinWebAPIParser( this ) ) , m_pWebApiTemporary( new CasinoCoinWebAPI( this ) ) - , m_pQmlImageProvider( 0 ) { registerCustomQmlTypes(); connect( m_pWebApiTemporary, SIGNAL( signalResponseReady(const QByteArray&)), m_pWebApiParserTemporary, SLOT( slotParseAnswer(const QByteArray&)), Qt::UniqueConnection ); - connect( m_pWebApiTemporary, SIGNAL( signalNetworkError(QNetworkReply::NetworkError,const QUrl)), m_pWebApiParserTemporary, SLOT( slotNetworkError(QNetworkReply::NetworkError,const QUrl)), Qt::UniqueConnection ); - connect( m_pWebApiParserTemporary, SIGNAL( signalActivePromotionsParsed(JsonActivePromotionsParser*)), this, SLOT( slotPopulateFromWeb(JsonActivePromotionsParser*)), Qt::UniqueConnection ); + connect( m_pWebApiTemporary, SIGNAL( signalNetworkError(QNetworkReply::NetworkError)), this, SLOT( slotNetworkError(QNetworkReply::NetworkError)), Qt::UniqueConnection ); } GUIBannerWidget::~GUIBannerWidget() @@ -38,18 +36,14 @@ void GUIBannerWidget::registerCustomQmlTypes() qmlRegisterType("CasinoCoinControls", 1, 0, "GUIBannerControl" ); qmlRegisterType("CasinoCoinControls", 1, 0, "GUIBannerListView" ); qmlRegisterType("CasinoCoinControls", 1, 0, "QmlBannerListModel" ); + qmlRegisterType("CasinoCoinControls", 1, 0, "QmlImageProvider" ); } QWidget* GUIBannerWidget::dockQmlToWidget() { QQuickView* pBannerWindow = new QQuickView; pBannerWindow->setSource( QUrl( QStringLiteral( "qrc:/qml/qtquick_controls/qml/QmlGUIBannerWindow.qml" ) ) ); - QQmlEngine* pEngine = pBannerWindow->engine(); - if ( pEngine ) - { - m_pQmlImageProvider = new QmlImageProvider(); - pEngine->addImageProvider( "advertImages", m_pQmlImageProvider ); - } + QWidget* pPlaceHolder = QWidget::createWindowContainer( pBannerWindow, this ); pPlaceHolder->setMinimumSize( 445, 120 ); pPlaceHolder->setMaximumSize( 445, 120 ); @@ -60,6 +54,10 @@ QWidget* GUIBannerWidget::dockQmlToWidget() m_pBannerControl = pRootObject->findChild(); if ( m_pBannerControl ) { + if ( m_pWebApiParserTemporary ) + { + connect( m_pWebApiParserTemporary, SIGNAL( signalActivePromotionsParsed(JsonActivePromotionsParser*)), m_pBannerControl, SLOT( slotPopulateFromWeb(JsonActivePromotionsParser*)), Qt::UniqueConnection ); + } m_pBannerControl->setWidth( ( 115 * 3 ) + ( 4 * 10 ) + 60 ); m_pBannerControl->setHeight( 115 ); } @@ -76,14 +74,15 @@ void GUIBannerWidget::PopulateBannerFromWeb() } } -void GUIBannerWidget::slotPopulateFromWeb( JsonActivePromotionsParser* a_pPromotionsParser ) +void GUIBannerWidget::PopulateBannerLocally() { - if ( a_pPromotionsParser ) - { - a_pPromotionsParser->AddImagesToPool( m_pQmlImageProvider ); - } if ( m_pBannerControl ) { - m_pBannerControl->slotPopulateListView( a_pPromotionsParser ); + m_pBannerControl->slotPopulateLocally(); } } + +void GUIBannerWidget::slotNetworkError( QNetworkReply::NetworkError a_eError ) +{ + PopulateBannerLocally(); +} diff --git a/src/qt/qtquick_controls/cpp/guibannerwidget.h b/src/qt/qtquick_controls/cpp/guibannerwidget.h index 0d4da0a..e3a4e3e 100644 --- a/src/qt/qtquick_controls/cpp/guibannerwidget.h +++ b/src/qt/qtquick_controls/cpp/guibannerwidget.h @@ -7,8 +7,6 @@ class CasinoCoinWebAPIParser; class CasinoCoinWebAPI; class GUIBannerControl; -class QmlImageProvider; -class JsonActivePromotionsParser; class GUIBannerWidget : public QWidget { @@ -30,9 +28,9 @@ private: CasinoCoinWebAPIParser* m_pWebApiParserTemporary; CasinoCoinWebAPI* m_pWebApiTemporary; - QmlImageProvider* m_pQmlImageProvider; + private slots: - void slotPopulateFromWeb( JsonActivePromotionsParser* a_pPromotionsParser ); + void slotNetworkError( QNetworkReply::NetworkError a_eError ); }; #endif // GUIBANNERWIDGET_H diff --git a/src/qt/qtquick_controls/cpp/qmlbannerlistitem.cpp b/src/qt/qtquick_controls/cpp/qmlbannerlistitem.cpp index 6b01164..e1245fe 100644 --- a/src/qt/qtquick_controls/cpp/qmlbannerlistitem.cpp +++ b/src/qt/qtquick_controls/cpp/qmlbannerlistitem.cpp @@ -8,7 +8,7 @@ QmlBannerListItem::QmlBannerListItem(QString a_strImageSource, QString a_strDest } QmlBannerListItem::QmlBannerListItem( const JsonSingleActivePromotion& a_rCasinoDescription, QObject* a_pParent ) - : QmlListItem( QVariant( a_rCasinoDescription.GetImageName() ), a_rCasinoDescription.find( "access_url" ).value().toVariant(), a_rCasinoDescription.find( "description" ).value().toVariant(), a_pParent ) + : QmlListItem( QVariant( a_rCasinoDescription.GetImagePath() ), a_rCasinoDescription.find( "access_url" ).value().toVariant(), a_rCasinoDescription.find( "description" ).value().toVariant(), a_pParent ) { } diff --git a/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp b/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp index 35eedbe..fc052c8 100644 --- a/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp +++ b/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp @@ -1,34 +1,39 @@ #include "qmlimageprovider.h" -#include +QmlImageProvider::QmlImageProvider( QQuickItem* a_pParent ) + : QQuickPaintedItem( a_pParent ) +{ -QmlImageProvider::QmlImageProvider() - : QQuickImageProvider( QQuickImageProvider::Image ) +} + +QmlImageProvider::QmlImageProvider( const QImage& a_rImage, QQuickItem* a_pParent ) + : QQuickPaintedItem( a_pParent ) + , m_oImage( a_rImage ) { } -void QmlImageProvider::AddToImagePool( QString a_strImageID, const QImage& a_rImage ) +void QmlImageProvider::SetImage( const QImage& a_rImage ) { - m_aImagePool.insert( a_strImageID, a_rImage ); -} - -void QmlImageProvider::AddToImagePool( const QMap& a_aImages ) -{ - QMapIterator iter( a_aImages ); - while( iter.hasNext() ) + if ( a_rImage != m_oImage ) { - iter.next(); - AddToImagePool( iter.key(), iter.value() ); + m_oImage = QImage( a_rImage ); + emit signalImageChanged(); } } -QImage QmlImageProvider::requestImage( const QString& a_rImageID, QSize* a_pSize, const QSize& a_ra_rRequestedSize ) +void QmlImageProvider::paint( QPainter* a_pPainter ) { - QImage oImage( m_aImagePool.value( a_rImageID ) ); - if ( a_pSize ) + if ( a_pPainter ) { - a_pSize->setWidth( oImage.width() ); - a_pSize->setHeight( oImage.height() ); + a_pPainter->drawImage( QPoint( 0, 0 ), m_oImage ); + } +} + +void QmlImageProvider::paintImage( const QImage& a_rImage, QPainter* a_pPainter ) +{ + SetImage( a_rImage ); + if ( a_pPainter ) + { + a_pPainter->drawImage( QPoint( 0, 0 ), m_oImage ); } - return oImage; } diff --git a/src/qt/qtquick_controls/cpp/qmlimageprovider.h b/src/qt/qtquick_controls/cpp/qmlimageprovider.h index 330a3ee..e7b7c8d 100644 --- a/src/qt/qtquick_controls/cpp/qmlimageprovider.h +++ b/src/qt/qtquick_controls/cpp/qmlimageprovider.h @@ -1,28 +1,26 @@ #ifndef QMLIMAGEPROVIDER_H #define QMLIMAGEPROVIDER_H -#include +#include #include +#include -class QmlImageProvider : public QQuickImageProvider +class QmlImageProvider : public QQuickPaintedItem { + Q_OBJECT + + Q_PROPERTY( QImage p_oImage MEMBER m_oImage NOTIFY signalImageChanged ) public: - explicit QmlImageProvider(); + explicit QmlImageProvider( QQuickItem* a_pParent = 0 ); + explicit QmlImageProvider( const QImage& a_rImage, QQuickItem* a_pParent = 0 ); - void AddToImagePool( QString a_strImageID, const QImage& a_rImage ); - void AddToImagePool( const QMap& a_aImages ); - - virtual QImage requestImage - ( const QString& a_rImageID - , QSize* a_pSize - , const QSize& a_rRequestedSize - ); + void SetImage( const QImage& a_rImage ); + virtual void paint( QPainter* a_pPainter ); + void paintImage( const QImage& a_rImage, QPainter* a_pPainter ); signals: - -public slots: - + void signalImageChanged(); private: - QMap m_aImagePool; + QImage m_oImage; }; #endif // QMLIMAGEPROVIDER_H diff --git a/src/qt/qtquick_controls/qml/QmlGUIBannerListView.qml b/src/qt/qtquick_controls/qml/QmlGUIBannerListView.qml index 273baa7..ce2ee41 100644 --- a/src/qt/qtquick_controls/qml/QmlGUIBannerListView.qml +++ b/src/qt/qtquick_controls/qml/QmlGUIBannerListView.qml @@ -46,11 +46,18 @@ GUIBannerListView Image { id: id_advertisementImage - source: "image://advertImages/" + m_imageSource + source: m_imageSource scale: ( id_listElement.width / width ) anchors.centerIn: id_listElement } + // coming soon +// QmlImageProvider +// { +// id: id_advertisementImage +// scale: ( id_listElement.width / width ) +// anchors.centerIn: id_listElement +// } MouseArea { id: id_leftItemMouseArea