diff options
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/multimedia/multimedia.cpp | 2 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecameraflash.cpp | 51 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecameraflash_p.h | 6 |
3 files changed, 57 insertions, 2 deletions
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index ced83a5b2..19e932fb9 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -145,6 +145,8 @@ public: qmlRegisterType<QDeclarativeAudio, 2>(uri, 5, 9, "MediaPlayer"); qmlRegisterUncreatableType<QDeclarativeCameraCapture, 1>(uri, 5, 9, "CameraCapture", trUtf8("CameraCapture is provided by Camera")); + qmlRegisterUncreatableType<QDeclarativeCameraFlash, 1>(uri, 5, 9, "CameraFlash", + trUtf8("CameraFlash is provided by Camera")); qmlRegisterType<QDeclarativeMediaMetaData>(); qmlRegisterType<QAbstractVideoFilter>(); diff --git a/src/imports/multimedia/qdeclarativecameraflash.cpp b/src/imports/multimedia/qdeclarativecameraflash.cpp index f8adc5e71..551b88aef 100644 --- a/src/imports/multimedia/qdeclarativecameraflash.cpp +++ b/src/imports/multimedia/qdeclarativecameraflash.cpp @@ -73,11 +73,13 @@ QT_BEGIN_NAMESPACE /*! Construct a declarative camera flash object using \a parent object. */ -QDeclarativeCameraFlash::QDeclarativeCameraFlash(QCamera *camera, QObject *parent) : - QObject(parent) +QDeclarativeCameraFlash::QDeclarativeCameraFlash(QCamera *camera, QObject *parent) + : QObject(parent) { m_exposure = camera->exposure(); connect(m_exposure, SIGNAL(flashReady(bool)), this, SIGNAL(flashReady(bool))); + connect(camera, SIGNAL(statusChanged(QCamera::Status)), + this, SLOT(_q_cameraStatusChanged(QCamera::Status))); } QDeclarativeCameraFlash::~QDeclarativeCameraFlash() @@ -133,6 +135,51 @@ void QDeclarativeCameraFlash::setFlashMode(QDeclarativeCameraFlash::FlashMode mo } } +void QDeclarativeCameraFlash::_q_cameraStatusChanged(QCamera::Status status) +{ + if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus && + status != QCamera::ActiveStatus) + return; + + emit supportedModesChanged(); +} + +/*! + \qmlproperty list<FlashMode> QtMultimedia::CameraFlash::supportedModes + + This property holds the supported flash modes of the camera. If the list + only contains Camera.FlashOff, no flash is supported. + + \code + Camera { + id: camera + flash { + onSupportedModesChanged { + if (flash.supportedModes.length == 1) { + // no flash supported + } else { + // some flash is supported + } + } + } + } + \endcode + + \since 5.9 + \sa mode + */ +QVariantList QDeclarativeCameraFlash::supportedModes() const +{ + QVariantList supportedModes; + + for (int i=1; i <= (int) QCameraExposure::FlashManual; i = (i << 1)) { + if (m_exposure->isFlashModeSupported((QCameraExposure::FlashMode) i)) + supportedModes.append(QVariant(i)); + } + + return supportedModes; +} + /*! \qmlsignal QtMultimedia::CameraFlash::flashModeChanged(int) This signal is emitted when the \c flashMode property is changed. diff --git a/src/imports/multimedia/qdeclarativecameraflash_p.h b/src/imports/multimedia/qdeclarativecameraflash_p.h index 9247c7202..df037c4d6 100644 --- a/src/imports/multimedia/qdeclarativecameraflash_p.h +++ b/src/imports/multimedia/qdeclarativecameraflash_p.h @@ -63,6 +63,7 @@ class QDeclarativeCameraFlash : public QObject Q_OBJECT Q_PROPERTY(bool ready READ isFlashReady NOTIFY flashReady) Q_PROPERTY(FlashMode mode READ flashMode WRITE setFlashMode NOTIFY flashModeChanged) + Q_PROPERTY(QVariantList supportedModes READ supportedModes NOTIFY supportedModesChanged REVISION 1) Q_ENUMS(FlashMode) public: @@ -83,6 +84,7 @@ public: FlashMode flashMode() const; bool isFlashReady() const; + QVariantList supportedModes() const; public Q_SLOTS: void setFlashMode(FlashMode); @@ -90,6 +92,10 @@ public Q_SLOTS: Q_SIGNALS: void flashReady(bool status); void flashModeChanged(FlashMode); + void supportedModesChanged(); + +private slots: + void _q_cameraStatusChanged(QCamera::Status status); private: friend class QDeclarativeCamera; |