#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 {
if (m_cam->device()) {
deviceChanged();
}
+ else {
+ delete m_currentResolution;
+ m_currentResolution = 0;
+ emit currentResolutionChanged();
+ }
}
void ImageSettings::deviceChanged() {
delete m_resolutions;
m_resolutions = 0;
+ delete m_currentResolution;
+ m_currentResolution = 0;
+
emit aspectRatioCountChanged();
emit resolutionsChanged();
+ emit currentResolutionChanged();
}
ImageResolutionModel *ImageSettings::resolutions() {
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);
}
}
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;
}
class Camera;
class QtCamImageSettings;
class ImageResolutionModel;
+class ImageResolution;
+class QtCamImageResolution;
class ImageSettings : public QObject {
Q_OBJECT
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);
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 */