From: Mohammed Sameer Date: Tue, 13 Aug 2013 18:19:06 +0000 (+0300) Subject: Added ImageSettings::currentResolution and methods to find ImageResolution and set it X-Git-Url: http://cgit.sxemacs.org/?p=harmattan%2Fcameraplus;a=commitdiff_plain;h=37a6b9527e0cd85c1db2b420d08f43248db98eab Added ImageSettings::currentResolution and methods to find ImageResolution and set it --- diff --git a/declarative/imagesettings.cpp b/declarative/imagesettings.cpp index 327b8da..3f71d85 100644 --- a/declarative/imagesettings.cpp +++ b/declarative/imagesettings.cpp @@ -24,15 +24,25 @@ #include "qtcamdevice.h" #include "qtcamimagemode.h" #include "imageresolutionmodel.h" +#include "imageresolution.h" #include ImageSettings::ImageSettings(QObject *parent) : - QObject(parent), m_cam(0), m_settings(0), m_resolutions(0) { + QObject(parent), + m_cam(0), + m_settings(0), + m_resolutions(0), + m_currentResolution(0) { } ImageSettings::~ImageSettings() { m_settings = 0; + + if (m_currentResolution) { + delete m_currentResolution; + m_currentResolution = 0; + } } QString ImageSettings::suffix() const { @@ -67,6 +77,11 @@ void ImageSettings::setCamera(Camera *camera) { if (m_cam->device()) { deviceChanged(); } + else { + delete m_currentResolution; + m_currentResolution = 0; + emit currentResolutionChanged(); + } } void ImageSettings::deviceChanged() { @@ -79,8 +94,12 @@ void ImageSettings::deviceChanged() { delete m_resolutions; m_resolutions = 0; + delete m_currentResolution; + m_currentResolution = 0; + emit aspectRatioCountChanged(); emit resolutionsChanged(); + emit currentResolutionChanged(); } ImageResolutionModel *ImageSettings::resolutions() { @@ -108,12 +127,7 @@ bool ImageSettings::setResolution(const QString& aspectRatio, const QString& res foreach (const QtCamImageResolution& r, res) { if (r.name() == resolution) { - bool set = m_cam->device()->imageMode()->setResolution(r); - if (set) { - emit currentResolutionMegapixelChanged(); - } - - return set; + return setResolution(r); } } @@ -124,10 +138,58 @@ int ImageSettings::aspectRatioCount() const { return aspectRatios().count(); } -QString ImageSettings::currentResolutionMegapixel() const { +ImageResolution *ImageSettings::currentResolution() { + if (m_currentResolution) { + return m_currentResolution; + } + + if (!m_cam || !m_cam->device()) { + return 0; + } + + m_currentResolution = new ImageResolution(m_cam->device()->imageMode()->currentResolution()); + + return m_currentResolution; +} + +ImageResolution *ImageSettings::findResolution(const QString& aspectRatio, + const QString& name) { + if (!isReady()) { + return 0; + } + + QList res = m_settings->resolutions(aspectRatio); + + foreach (const QtCamImageResolution& r, res) { + if (r.name() == name) { + return new ImageResolution(r); + } + } + + return 0; +} + +bool ImageSettings::setResolution(ImageResolution *resolution) { + return setResolution(resolution->resolution()); +} + +bool ImageSettings::setResolution(const QtCamImageResolution& resolution) { + if (!isReady()) { + return false; + } + if (!m_cam || !m_cam->device()) { - return QString(); + return false; } - return QString("%1").arg(m_cam->device()->imageMode()->currentResolution().megaPixels()); + if (m_cam->device()->imageMode()->setResolution(resolution)) { + delete m_currentResolution; + m_currentResolution = 0; + + emit currentResolutionChanged(); + + return true; + } + + return false; } diff --git a/declarative/imagesettings.h b/declarative/imagesettings.h index 9a7b485..48c32cf 100644 --- a/declarative/imagesettings.h +++ b/declarative/imagesettings.h @@ -29,6 +29,8 @@ class Camera; class QtCamImageSettings; class ImageResolutionModel; +class ImageResolution; +class QtCamImageResolution; class ImageSettings : public QObject { Q_OBJECT @@ -39,7 +41,7 @@ class ImageSettings : public QObject { Q_PROPERTY(int aspectRatioCount READ aspectRatioCount NOTIFY aspectRatioCountChanged); Q_PROPERTY(ImageResolutionModel *resolutions READ resolutions NOTIFY resolutionsChanged); Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged); - Q_PROPERTY(QString currentResolutionMegapixel READ currentResolutionMegapixel NOTIFY currentResolutionMegapixelChanged); + Q_PROPERTY(ImageResolution *currentResolution READ currentResolution NOTIFY currentResolutionChanged); public: ImageSettings(QObject *parent = 0); @@ -55,27 +57,34 @@ public: bool isReady() const; + ImageResolution *currentResolution(); + + Q_INVOKABLE ImageResolution *findResolution(const QString& aspectRatio, + const QString& name); + Q_INVOKABLE bool setResolution(ImageResolution *resolution); + Q_INVOKABLE bool setResolution(const QString& aspectRatio, const QString& resolution); int aspectRatioCount() const; - QString currentResolutionMegapixel() const; - signals: void settingsChanged(); void cameraChanged(); void resolutionsChanged(); void readyChanged(); void aspectRatioCountChanged(); - void currentResolutionMegapixelChanged(); + void currentResolutionChanged(); private slots: void deviceChanged(); private: + bool setResolution(const QtCamImageResolution& resolution); + Camera *m_cam; QtCamImageSettings *m_settings; ImageResolutionModel *m_resolutions; + ImageResolution *m_currentResolution; }; #endif /* IMAGE_SETTINGS_H */ diff --git a/qml/ImageOverlay.qml b/qml/ImageOverlay.qml index a41d838..56a8cf4 100644 --- a/qml/ImageOverlay.qml +++ b/qml/ImageOverlay.qml @@ -185,8 +185,7 @@ Item { anchors.rightMargin: 5 anchors.topMargin: 5 anchors.bottomMargin: 5 - property string mp: imageSettings.currentResolutionMegapixel == "" ? "?" : imageSettings.currentResolutionMegapixel - text: qsTr("%1M").arg(mp) + text: imageSettings.currentResolution ? qsTr("%1M").arg(imageSettings.currentResolution.megaPixels) : qsTr("?M") font.bold: true verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter