Added ImageSettings::currentResolution and methods to find ImageResolution and set it
authorMohammed Sameer <msameer@foolab.org>
Tue, 13 Aug 2013 18:19:06 +0000 (21:19 +0300)
committerMohammed Sameer <msameer@foolab.org>
Tue, 13 Aug 2013 18:19:06 +0000 (21:19 +0300)
declarative/imagesettings.cpp
declarative/imagesettings.h
qml/ImageOverlay.qml

index 327b8da..3f71d85 100644 (file)
 #include "qtcamdevice.h"
 #include "qtcamimagemode.h"
 #include "imageresolutionmodel.h"
+#include "imageresolution.h"
 #include <QDebug>
 
 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<QtCamImageResolution> 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;
 }
index 9a7b485..48c32cf 100644 (file)
@@ -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 */
index a41d838..56a8cf4 100644 (file)
@@ -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