diff --git a/QtAndroidTools/QtAndroidTools.cpp b/QtAndroidTools/QtAndroidTools.cpp index 4b1b3c3..2731323 100644 --- a/QtAndroidTools/QtAndroidTools.cpp +++ b/QtAndroidTools/QtAndroidTools.cpp @@ -72,12 +72,49 @@ #endif #include "QtAndroidTools.h" +QtAndroidTools *QtAndroidTools::m_pInstance = nullptr; + QtAndroidTools::QtAndroidTools() { + m_pInstance = this; +} + +QObject* QtAndroidTools::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(engine); + Q_UNUSED(scriptEngine); + + QtAndroidTools *pAndroidTools = new QtAndroidTools(); + engine->addImageProvider("QtAndroidTools", new PhotoImageProvider(&pAndroidTools->m_PhotoMap)); + return pAndroidTools; +} + +QtAndroidTools* QtAndroidTools::instance() +{ + return m_pInstance; +} + +bool QtAndroidTools::insertImage(const QString &Name, const QByteArray &Data) +{ + QPixmap DataImage; + + if(DataImage.loadFromData(Data) == true) + { + m_PhotoMap.insert(Name, DataImage); + return true; + } + + return false; +} + +bool QtAndroidTools::removeImage(const QString &Name) +{ + return (m_PhotoMap.remove(Name) > 0) ? true : false; } void QtAndroidTools::InitializeQmlTools() { + qmlRegisterSingletonType("QtAndroidTools", 1, 0, "QtAndroidTools", &QtAndroidTools::qmlInstance); #ifdef QTAT_APP_PERMISSIONS qmlRegisterSingletonType("QtAndroidTools", 1, 0, "QtAndroidAppPermissions", &QAndroidAppPermissions::qmlInstance); #endif diff --git a/QtAndroidTools/QtAndroidTools.h b/QtAndroidTools/QtAndroidTools.h index 4f6fffa..6980514 100644 --- a/QtAndroidTools/QtAndroidTools.h +++ b/QtAndroidTools/QtAndroidTools.h @@ -23,10 +23,56 @@ */ #pragma once -class QtAndroidTools -{ -public: - explicit QtAndroidTools(); +#include +#include +#include +#include +#include +class QtAndroidTools : public QObject +{ + Q_DISABLE_COPY(QtAndroidTools) + Q_OBJECT + + class PhotoImageProvider : public QQuickImageProvider + { + public: + PhotoImageProvider(QMap *pPhotoMap) : QQuickImageProvider(QQuickImageProvider::Pixmap), m_pPhotoMap(pPhotoMap) {} + + QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) + { + QMap::const_iterator PhotoIterator = m_pPhotoMap->find(id); + + if(PhotoIterator != m_pPhotoMap->constEnd()) + { + const QPixmap Photo = PhotoIterator.value(); + + if(size) *size = Photo.size(); + + if(requestedSize.width() > 0 && requestedSize.height() > 0) + return Photo.scaled(requestedSize); + else + return Photo; + } + + return QPixmap(); + } + + private: + const QMap *const m_pPhotoMap; + }; + + QtAndroidTools(); + +public: + static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine); + static QtAndroidTools* instance(); static void InitializeQmlTools(); + + Q_INVOKABLE bool insertImage(const QString &Name, const QByteArray &Data); + Q_INVOKABLE bool removeImage(const QString &Name); + +private: + static QtAndroidTools *m_pInstance; + QMap m_PhotoMap; };