silence dbus-send output
[harmattan/cameraplus] / src / settings.cpp
index 52c87d5..9c82c97 100644 (file)
 #include "settings.h"
 #include <QSettings>
 #include <QDir>
+#include "devicesettings.h"
 
 #define PATH QString("%1%2.config%2/cameraplus.conf").arg(QDir::homePath()).arg(QDir::separator())
 
 #define DEFAULT_MODE                    1
-#define DEFAULT_SCENE_MODE              6 // Auto
 #define DEFAULT_USE_GPS                 true
 #define DEFAULT_USE_GEOTAGS             true
-#define DEFAULT_COLOR_FILTER            0
-#define DEFAULT_WHITE_BALANCE           0
-#define DEFAULT_EV_COMP                 0.0
-#define DEFAULT_FLASH_MODE              0
-#define DEFAULT_IMAGE_ISO               0
 #define DEFAULT_SOUND_ENABLED           true
-#define DEFAULT_VIDEO_TORCH_ON          false
 #define DEFAULT_SHOW_TOOL_BAR           false
 #define DEFAULT_VIDEO_MUTE              false
 #define DEFAULT_GRID_ENABLED            false
 #define DEFAULT_FACE_DETECTION_ENABLED  true
 #define DEFAULT_ZOOM_AS_SHUTTER         false
+#define DEFAULT_PROXIMITY_AS_SHUTTER    false
 #define DEFAULT_DEVICE                  0
-
-#define DEFAULT_PRIMARY_IMAGE_RESOLUTION        "high"
-#define DEFAULT_PRIMARY_IMAGE_ASPECT_RATIO      "16:9"
-#define DEFAULT_PRIMARY_VIDEO_RESOLUTION        "high"
-#define DEFAULT_PRIMARY_VIDEO_ASPECT_RATIO      "16:9"
-
-#define DEFAULT_SECONDARY_IMAGE_RESOLUTION       "low"
-#define DEFAULT_SECONDARY_IMAGE_ASPECT_RATIO     "4:3"
-#define DEFAULT_SECONDARY_VIDEO_RESOLUTION       "low"
-#define DEFAULT_SECONDARY_VIDEO_ASPECT_RATIO     "4:3"
+#define DEFAULT_ENABLE_PREVIEW          true
+#define DEFAULT_FILE_NAMING_UTC         true
 
 Settings::Settings(QObject *parent) :
   QObject(parent),
-  m_settings(new QSettings(PATH, QSettings::IniFormat, this)) {
+  m_settings(new QSettings(PATH, QSettings::IniFormat, this)),
+  m_device(0) {
 
 }
 
 Settings::~Settings() {
   delete m_settings; m_settings = 0;
+  delete m_device; m_device = 0;
 }
 
 int Settings::mode() const {
@@ -110,307 +99,363 @@ void Settings::setUseGeotags(bool enable) {
   }
 }
 
-int Settings::imageSceneMode() const {
-  return m_settings->value("image/sceneMode", DEFAULT_SCENE_MODE).toInt();
+bool Settings::isSoundEnabled() const {
+  return m_settings->value("camera/soundEnabled", DEFAULT_SOUND_ENABLED).toBool();
 }
 
-void Settings::setImageSceneMode(int mode) {
-  if (mode != imageSceneMode()) {
-    m_settings->setValue("image/sceneMode", mode);
+void Settings::setSoundEnabled(bool enabled) {
+  if (isSoundEnabled() != enabled) {
+    m_settings->setValue("camera/soundEnabled", enabled);
+    emit soundEnabledChanged();
   }
-
-  emit imageSceneModeChanged();
 }
 
-int Settings::imageColorFilter() const {
-  return m_settings->value("image/colorFilter", DEFAULT_COLOR_FILTER).toInt();
+bool Settings::isToolBarShown() const {
+  return m_settings->value("camera/showToolBar", DEFAULT_SHOW_TOOL_BAR).toBool();
 }
 
-void Settings::setImageColorFilter(int filter) {
-  if (filter != imageColorFilter()) {
-    m_settings->setValue("image/colorFilter", filter);
+void Settings::setToolBarShown(bool shown) {
+  if (isToolBarShown() != shown) {
+    m_settings->setValue("camera/showToolBar", shown);
 
-    emit imageColorFilterChanged();
+    emit toolBarShownChanged();
   }
 }
 
-int Settings::imageWhiteBalance() const {
-  return m_settings->value("image/whiteBalance", DEFAULT_WHITE_BALANCE).toInt();
+bool Settings::isVideoMuted() const {
+  return m_settings->value("video/mute", DEFAULT_VIDEO_MUTE).toBool();
 }
 
-void Settings::setImageWhiteBalance(int wb) {
-  if (wb != imageWhiteBalance()) {
-    m_settings->setValue("image/whiteBalance", wb);
-
-    emit imageWhiteBalanceChanged();
+void Settings::setVideoMuted(bool muted) {
+  if (isVideoMuted() != muted) {
+    m_settings->setValue("video/mute", muted);
+    emit videoMutedChanged();
   }
 }
 
-qreal Settings::imageEvComp() const {
-  return m_settings->value("image/evComp", DEFAULT_EV_COMP).toReal();
+bool Settings::isGridEnabled() const {
+  return m_settings->value("camera/gridEnabled", DEFAULT_GRID_ENABLED).toBool();
 }
 
-void Settings::setImageEvComp(qreal ev) {
-  if (!qFuzzyCompare(ev, imageEvComp())) {
-    m_settings->setValue("image/evComp", ev);
-
-    emit imageEvCompChanged();
+void Settings::setGridEnabled(bool enabled) {
+  if (enabled != isGridEnabled()) {
+    m_settings->setValue("camera/gridEnabled", enabled);
+    emit gridEnabledChanged();
   }
 }
 
-int Settings::videoSceneMode() const {
-  return m_settings->value("video/sceneMode", DEFAULT_SCENE_MODE).toInt();
+bool Settings::isFaceDetectionEnabled() const {
+  return m_settings->value("image/faceDetectionEnabled", DEFAULT_FACE_DETECTION_ENABLED).toBool();
 }
 
-void Settings::setVideoSceneMode(int mode) {
-  if (mode != videoSceneMode()) {
-    m_settings->setValue("video/sceneMode", mode);
+void Settings::setFaceDetectionEnabled(bool enabled) {
+  if (isFaceDetectionEnabled() != enabled) {
+    m_settings->setValue("image/faceDetectionEnabled", enabled);
+    emit faceDetectionEnabledChanged();
   }
-
-  emit videoSceneModeChanged();
 }
 
-int Settings::videoColorFilter() const {
-  return m_settings->value("video/colorFilter", DEFAULT_COLOR_FILTER).toInt();
+bool Settings::isZoomAsShutterEnabled() const {
+  return m_settings->value("camera/zoomAsShutter", DEFAULT_ZOOM_AS_SHUTTER).toBool();
 }
 
-void Settings::setVideoColorFilter(int filter) {
-  if (filter != videoColorFilter()) {
-    m_settings->setValue("video/colorFilter", filter);
+void Settings::setZoomAsShutterEnabled(bool enabled) {
+  if (isZoomAsShutterEnabled() != enabled) {
+    m_settings->setValue("camera/zoomAsShutter", enabled);
 
-    emit videoColorFilterChanged();
+    emit zoomAsShutterChanged();
   }
 }
 
-int Settings::videoWhiteBalance() const {
-  return m_settings->value("video/whiteBalance", DEFAULT_WHITE_BALANCE).toInt();
+bool Settings::isProximityAsShutterEnabled() const {
+  return m_settings->value("camera/proximityAsShutter", DEFAULT_PROXIMITY_AS_SHUTTER).toBool();
 }
 
-void Settings::setVideoWhiteBalance(int wb) {
-  if (wb != videoWhiteBalance()) {
-    m_settings->setValue("video/whiteBalance", wb);
+void Settings::setProximityAsShutterEnabled(bool enabled) {
+  if (isProximityAsShutterEnabled() != enabled) {
+    m_settings->setValue("camera/proximityAsShutter", enabled);
 
-    emit videoWhiteBalanceChanged();
+    emit proximityAsShutterChanged();
   }
 }
 
-qreal Settings::videoEvComp() const {
-  return m_settings->value("video/evComp", DEFAULT_EV_COMP).toReal();
+int Settings::device() const {
+  return m_settings->value("camera/device", DEFAULT_DEVICE).toInt();
 }
 
-void Settings::setVideoEvComp(qreal ev) {
-  if (!qFuzzyCompare(ev, videoEvComp())) {
-    m_settings->setValue("video/evComp", ev);
+void Settings::setDevice(int device) {
+  if (device != Settings::device()) {
+    emit deviceAboutToChange();
 
-    emit videoEvCompChanged();
+    m_settings->setValue("camera/device", device);
+
+    delete m_device; m_device = 0;
+
+    if (mode() == DEFAULT_MODE) {
+      // image
+      emit imageSceneModeChanged();
+      emit imageColorFilterChanged();
+      emit imageWhiteBalanceChanged();
+      emit imageEvCompChanged();
+      emit imageFlashModeChanged();
+      emit imageIsoChanged();
+      emit imageAspectRatioChanged();
+      emit imageResolutionChanged();
+    }
+    else {
+      // video
+      emit videoSceneModeChanged();
+      emit videoColorFilterChanged();
+      emit videoWhiteBalanceChanged();
+      emit videoEvCompChanged();
+      emit videoAspectRatioChanged();
+      emit videoResolutionChanged();
+      emit videoTorchOnChanged();
+    }
+
+    emit deviceChanged();
   }
 }
 
-int Settings::imageFlashMode() const {
-  return m_settings->value("image/flashMode", DEFAULT_FLASH_MODE).toInt();
-}
+DeviceSettings *Settings::deviceSettings() {
+  if (m_device) {
+    return m_device;
+  }
 
-void Settings::setImageFlashMode(int mode) {
-  if (mode != imageFlashMode()) {
-    m_settings->setValue("image/flashMode", mode);
+  int device = Settings::device();
 
-    emit imageFlashModeChanged();
+  if (device == 0) {
+    m_device = new PrimaryDeviceSettings;
   }
+  else {
+    m_device = new SecondaryDeviceSettings;
+  }
+
+  return m_device;
 }
 
-int Settings::imageIso() const {
-  return m_settings->value("image/iso", DEFAULT_IMAGE_ISO).toInt();
+QVariant Settings::deviceValue(const char *key, const QVariant& defaultValue) {
+  QString k = QString("%1/%2").arg(deviceSettings()->id()).arg(key);
+
+  return m_settings->value(k, defaultValue);
 }
 
-void Settings::setImageIso(int iso) {
-  if (imageIso() != iso) {
-    m_settings->setValue("image/iso", iso);
-    emit imageIsoChanged();
-  }
+void Settings::setDeviceValue(const char *key, const QVariant& value) {
+  QString k = QString("%1/%2").arg(deviceSettings()->id()).arg(key);
+
+  m_settings->setValue(k, value);
 }
 
-bool Settings::isSoundEnabled() const {
-  return m_settings->value("camera/soundEnabled", DEFAULT_SOUND_ENABLED).toBool();
+// Device dependant settings
+
+int Settings::imageSceneMode() {
+  return deviceValue("image/sceneMode", deviceSettings()->defaultImageSceneMode()).toInt();
 }
 
-void Settings::setSoundEnabled(bool enabled) {
-  if (isSoundEnabled() != enabled) {
-    m_settings->setValue("camera/soundEnabled", enabled);
-    emit soundEnabledChanged();
+void Settings::setImageSceneMode(int mode) {
+  if (mode != imageSceneMode()) {
+    setDeviceValue("image/sceneMode", mode);
   }
+
+  // We always emit the signal to reset scene and all scene associated values
+  emit imageSceneModeChanged();
 }
 
-bool Settings::isVideoTorchOn() const {
-  return m_settings->value("video/torchOn", DEFAULT_VIDEO_TORCH_ON).toBool();
+int Settings::imageColorFilter() {
+  return deviceValue("image/colorFilter", deviceSettings()->defaultImageColorFilter()).toInt();
 }
 
-void Settings::setVideoTorchOn(bool on) {
-  if (isVideoTorchOn() != on) {
-    m_settings->setValue("video/torchOn", on);
-    emit videoTorchOnChanged();
+void Settings::setImageColorFilter(int filter) {
+  if (filter != imageColorFilter()) {
+    setDeviceValue("image/colorFilter", filter);
+
+    emit imageColorFilterChanged();
   }
 }
 
-bool Settings::isToolBarShown() const {
-  return m_settings->value("camera/showToolBar", DEFAULT_SHOW_TOOL_BAR).toBool();
+int Settings::imageWhiteBalance() {
+  return deviceValue("image/whiteBalance", deviceSettings()->defaultImageWhiteBalance()).toInt();
 }
 
-void Settings::setToolBarShown(bool shown) {
-  if (isToolBarShown() != shown) {
-    m_settings->setValue("camera/showToolBar", shown);
+void Settings::setImageWhiteBalance(int wb) {
+  if (wb != imageWhiteBalance()) {
+    setDeviceValue("image/whiteBalance", wb);
 
-    emit toolBarShownChanged();
+    emit imageWhiteBalanceChanged();
   }
 }
 
-bool Settings::isVideoMuted() const {
-  return m_settings->value("video/mute", DEFAULT_VIDEO_MUTE).toBool();
+qreal Settings::imageEvComp() {
+  return deviceValue("image/evComp", deviceSettings()->defaultImageEvComp()).toReal();
 }
 
-void Settings::setVideoMuted(bool muted) {
-  if (isVideoMuted() != muted) {
-    m_settings->setValue("video/mute", muted);
-    emit videoMutedChanged();
+void Settings::setImageEvComp(qreal ev) {
+  if (!qFuzzyCompare(ev, imageEvComp())) {
+    setDeviceValue("image/evComp", ev);
+
+    emit imageEvCompChanged();
   }
 }
 
-bool Settings::isGridEnabled() const {
-  return m_settings->value("camera/gridEnabled", DEFAULT_GRID_ENABLED).toBool();
+int Settings::videoSceneMode() {
+  return deviceValue("video/sceneMode", deviceSettings()->defaultVideoSceneMode()).toInt();
 }
 
-void Settings::setGridEnabled(bool enabled) {
-  if (enabled != isGridEnabled()) {
-    m_settings->setValue("camera/gridEnabled", enabled);
-    emit gridEnabledChanged();
+void Settings::setVideoSceneMode(int mode) {
+  if (mode != videoSceneMode()) {
+    setDeviceValue("video/sceneMode", mode);
   }
+
+  emit videoSceneModeChanged();
 }
 
-bool Settings::isFaceDetectionEnabled() const {
-  return m_settings->value("image/faceDetectionEnabled", DEFAULT_FACE_DETECTION_ENABLED).toBool();
+int Settings::videoColorFilter() {
+  return deviceValue("video/colorFilter", deviceSettings()->defaultVideoColorFilter()).toInt();
 }
 
-void Settings::setFaceDetectionEnabled(bool enabled) {
-  if (isFaceDetectionEnabled() != enabled) {
-    m_settings->setValue("image/faceDetectionEnabled", enabled);
-    emit faceDetectionEnabledChanged();
+void Settings::setVideoColorFilter(int filter) {
+  if (filter != videoColorFilter()) {
+    setDeviceValue("video/colorFilter", filter);
+
+    emit videoColorFilterChanged();
   }
 }
 
-bool Settings::isZoomAsShutterEnabled() {
-  return m_settings->value("camera/zoomAsShutter", DEFAULT_ZOOM_AS_SHUTTER).toBool();
+int Settings::videoWhiteBalance() {
+  return deviceValue("video/whiteBalance", deviceSettings()->defaultVideoWhiteBalance()).toInt();
 }
 
-void Settings::setZoomAsShutterEnabled(bool enabled) {
-  if (isZoomAsShutterEnabled() != enabled) {
-    m_settings->setValue("camera/zoomAsShutter", enabled);
+void Settings::setVideoWhiteBalance(int wb) {
+  if (wb != videoWhiteBalance()) {
+    setDeviceValue("video/whiteBalance", wb);
 
-    emit zoomAsShutterChanged();
+    emit videoWhiteBalanceChanged();
   }
 }
 
-int Settings::device() const {
-  return m_settings->value("camera/device", DEFAULT_DEVICE).toInt();
+qreal Settings::videoEvComp() {
+  return deviceValue("video/evComp", deviceSettings()->defaultVideoEvComp()).toReal();
 }
 
-void Settings::setDevice(int device) {
-  if (device != Settings::device()) {
-    m_settings->setValue("camera/device", device);
-    emit deviceChanged();
+void Settings::setVideoEvComp(qreal ev) {
+  if (!qFuzzyCompare(ev, videoEvComp())) {
+    setDeviceValue("video/evComp", ev);
+
+    emit videoEvCompChanged();
   }
 }
 
-QString Settings::primaryImageAspectRatio() const {
-  return m_settings->value("image/primaryAspectRatio",
-                          DEFAULT_PRIMARY_IMAGE_ASPECT_RATIO).toString();
+int Settings::imageFlashMode() {
+  return deviceValue("image/flashMode", deviceSettings()->defaultImageFlashMode()).toInt();
 }
 
-void Settings::setPrimaryImageAspectRatio(const QString& aspectRatio) {
-  if (primaryImageAspectRatio() != aspectRatio) {
-    m_settings->setValue("image/primaryAspectRatio", aspectRatio);
-    emit primaryImageAspectRatioChanged();
+void Settings::setImageFlashMode(int mode) {
+  if (mode != imageFlashMode()) {
+    setDeviceValue("image/flashMode", mode);
+
+    emit imageFlashModeChanged();
   }
 }
 
-QString Settings::primaryImageResolution() const {
-  return m_settings->value("image/primaryResolution",
-                          DEFAULT_PRIMARY_IMAGE_RESOLUTION).toString();
+int Settings::imageIso() {
+  return deviceValue("image/iso", deviceSettings()->defaultImageIso()).toInt();
 }
 
-void Settings::setPrimaryImageResolution(const QString& resolution) {
-  if (primaryImageResolution() != resolution) {
-    m_settings->setValue("image/primaryResolution", resolution);
-    emit primaryImageResolutionChanged();
+void Settings::setImageIso(int iso) {
+  if (imageIso() != iso) {
+    setDeviceValue("image/iso", iso);
+    emit imageIsoChanged();
   }
 }
 
-QString Settings::primaryVideoAspectRatio() const {
-  return m_settings->value("video/primaryAspectRatio",
-                          DEFAULT_PRIMARY_VIDEO_ASPECT_RATIO).toString();
+QString Settings::imageAspectRatio() {
+  return deviceValue("image/aspectRatio", deviceSettings()->defaultImageAspectRatio()).toString();
 }
 
-void Settings::setPrimaryVideoAspectRatio(const QString& aspectRatio) {
-  if (primaryVideoAspectRatio() != aspectRatio) {
-    m_settings->setValue("video/primaryAspectRatio", aspectRatio);
-    emit primaryVideoAspectRatioChanged();
+void Settings::setImageAspectRatio(const QString& aspectRatio) {
+  if (aspectRatio != imageAspectRatio()) {
+    setDeviceValue("image/aspectRatio", aspectRatio);
+    emit imageAspectRatioChanged();
   }
 }
 
-QString Settings::primaryVideoResolution() const {
-  return m_settings->value("video/primaryResolution",
-                          DEFAULT_PRIMARY_VIDEO_RESOLUTION).toString();
+QString Settings::imageResolution() {
+  return deviceValue("image/resolution", deviceSettings()->defaultImageResolution()).toString();
 }
 
-void Settings::setPrimaryVideoResolution(const QString& resolution) {
-  if (primaryVideoResolution() != resolution) {
-    m_settings->setValue("video/primaryResolution", resolution);
-    emit primaryVideoResolutionChanged();
+void Settings::setImageResolution(const QString& resolution) {
+  if (resolution != imageResolution()) {
+    setDeviceValue("image/resolution", resolution);
+    emit imageResolutionChanged();
   }
 }
 
-QString Settings::secondaryImageAspectRatio() const {
-  return m_settings->value("image/secondaryAspectRatio",
-                          DEFAULT_SECONDARY_IMAGE_ASPECT_RATIO).toString();
+QString Settings::videoAspectRatio() {
+  return deviceValue("video/aspectRatio", deviceSettings()->defaultVideoAspectRatio()).toString();
 }
 
-void Settings::setSecondaryImageAspectRatio(const QString& aspectRatio) {
-  if (secondaryImageAspectRatio() != aspectRatio) {
-    m_settings->setValue("image/secondaryAspectRatio", aspectRatio);
-    emit secondaryImageAspectRatioChanged();
+
+void Settings::setVideoAspectRatio(const QString& aspectRatio) {
+  if (Settings::videoAspectRatio() != aspectRatio) {
+    setDeviceValue("video/aspectRatio", aspectRatio);
+    emit videoAspectRatioChanged();
   }
 }
 
-QString Settings::secondaryImageResolution() const {
-  return m_settings->value("image/secondaryResolution",
-                          DEFAULT_SECONDARY_IMAGE_RESOLUTION).toString();
+QString Settings::videoResolution() {
+  return deviceValue("video/resolution", deviceSettings()->defaultVideoResolution()).toString();
 }
 
-void Settings::setSecondaryImageResolution(const QString& resolution) {
-  if (secondaryImageResolution() != resolution) {
-    m_settings->setValue("image/secondaryResolution", resolution);
-    emit secondaryImageResolutionChanged();
+void Settings::setVideoResolution(const QString& resolution) {
+  if (resolution != videoResolution()) {
+    setDeviceValue("video/resolution", resolution);
+    emit videoResolutionChanged();
   }
 }
 
-QString Settings::secondaryVideoAspectRatio() const {
-  return m_settings->value("video/secondaryAspectRatio",
-                          DEFAULT_SECONDARY_VIDEO_ASPECT_RATIO).toString();
+bool Settings::isVideoTorchOn() {
+  return deviceValue("video/torchOn", deviceSettings()->defaultVideoTorchOn()).toBool();
 }
 
-void Settings::setSecondaryVideoAspectRatio(const QString& aspectRatio) {
-  if (secondaryVideoAspectRatio() != aspectRatio) {
-    m_settings->setValue("video/secondaryAspectRatio", aspectRatio);
-    emit secondaryVideoAspectRatioChanged();
+void Settings::setVideoTorchOn(bool on) {
+  if (isVideoTorchOn() != on) {
+    setDeviceValue("video/torchOn", on);
+    emit videoTorchOnChanged();
   }
 }
 
-QString Settings::secondaryVideoResolution() const {
-  return m_settings->value("video/secondaryResolution",
-                          DEFAULT_SECONDARY_VIDEO_RESOLUTION).toString();
+QString Settings::fileNamingStamp(const QString& id) const {
+  QString key = QString("fileNaming/%1").arg(id);
+  return m_settings->value(key).toString();
 }
 
-void Settings::setSecondaryVideoResolution(const QString& resolution) {
-  if (secondaryVideoResolution() != resolution) {
-    m_settings->setValue("video/secondaryResolution", resolution);
-    emit secondaryVideoResolutionChanged();
+void Settings::setFileNamingStamp(const QString& id, const QString& stamp) {
+  QString key = QString("fileNaming/%1").arg(id);
+  m_settings->setValue(key, stamp);
+}
+
+int Settings::fileNamingCounter(const QString& id) const {
+  QString key = QString("fileNaming/%1").arg(id);
+  return m_settings->value(key).toInt();
+}
+
+void Settings::setFileNamingCounter(const QString& id, int counter) {
+  QString key = QString("fileNaming/%1").arg(id);
+  m_settings->setValue(key, counter);
+}
+
+bool Settings::isPreviewEnabled() const {
+  return m_settings->value("camera/enablePreview", DEFAULT_ENABLE_PREVIEW).toBool();
+}
+
+void Settings::setPreviewEnabled(bool enabled) {
+  if (enabled != isPreviewEnabled()) {
+    m_settings->setValue("camera/enablePreview", enabled);
+
+    emit previewEnabledChanged();
   }
 }
+
+bool Settings::isUtcForFileNamingUsed() const {
+  return m_settings->value("fileNaming/useUtc", DEFAULT_FILE_NAMING_UTC).toBool();
+}