camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp
changeset 43 0e652f8f1fbd
parent 28 3075d9b614e6
equal deleted inserted replaced
28:3075d9b614e6 43:0e652f8f1fbd
    16 */
    16 */
    17 
    17 
    18 #include <QSize>
    18 #include <QSize>
    19 #include <QMetaType>
    19 #include <QMetaType>
    20 #include <QVariant>
    20 #include <QVariant>
       
    21 #include <hbparameterlengthlimiter.h>
    21 
    22 
    22 #include "cxutils.h"
    23 #include "cxutils.h"
    23 #include "cxuienums.h"
    24 #include "cxuienums.h"
    24 #include "cxeengine.h"
    25 #include "cxeengine.h"
    25 #include "cxesettings.h"
    26 #include "cxesettings.h"
    81 
    82 
    82 /*!
    83 /*!
    83 * CxuiSettingsInfo::CxuiSettingsInfo
    84 * CxuiSettingsInfo::CxuiSettingsInfo
    84 */
    85 */
    85 CxuiSettingsInfo::CxuiSettingsInfo(CxeEngine *engine)
    86 CxuiSettingsInfo::CxuiSettingsInfo(CxeEngine *engine)
    86 : mEngine(engine)
    87     : mMode(-1), mEngine(engine)
    87 {
    88 {
    88     CX_DEBUG_ENTER_FUNCTION();
    89     CX_DEBUG_ENTER_FUNCTION();
    89     CX_ASSERT_ALWAYS(engine);
    90     CX_ASSERT_ALWAYS(engine);
    90 
    91 
    91     mXmlReader = new CxuiSettingXmlReader();
    92     mXmlReader = new CxuiSettingXmlReader();
    92 
       
    93     // Initialize for the mode already so that the UI
       
    94     // can already use the settings info even if engine isn't ready yet.
       
    95     initForCurrentMode(CxeError::None);
       
    96 
       
    97     // Follow engine mode changes
       
    98     connect(&engine->cameraDeviceControl(), SIGNAL(initModeComplete(CxeError::Id)),
       
    99             this, SLOT(initForCurrentMode(CxeError::Id)));
       
   100 
       
   101     CX_DEBUG_EXIT_FUNCTION();
    93     CX_DEBUG_EXIT_FUNCTION();
   102 }
    94 }
   103 
    95 
   104 /*!
    96 /*!
   105 * CxuiSettingsInfo::~CxuiSettingsInfo
    97 * CxuiSettingsInfo::~CxuiSettingsInfo
   122 */
   114 */
   123 bool CxuiSettingsInfo::getSettingsContent(const QString &key,
   115 bool CxuiSettingsInfo::getSettingsContent(const QString &key,
   124                                           RadioButtonListParams &settings)
   116                                           RadioButtonListParams &settings)
   125 {
   117 {
   126     CX_DEBUG_ENTER_FUNCTION();
   118     CX_DEBUG_ENTER_FUNCTION();
       
   119 
       
   120     // Check that right content is loaded. Load now if not.
       
   121     checkMode();
   127 
   122 
   128     bool found(false);
   123     bool found(false);
   129 
   124 
   130     if (key == CxeSettingIds::IMAGE_QUALITY ||
   125     if (key == CxeSettingIds::IMAGE_QUALITY ||
   131         key == CxeSettingIds::VIDEO_QUALITY) {
   126         key == CxeSettingIds::VIDEO_QUALITY) {
   152 bool CxuiSettingsInfo::getSettingsContent(const QString &key,
   147 bool CxuiSettingsInfo::getSettingsContent(const QString &key,
   153                                           SliderParams &settings)
   148                                           SliderParams &settings)
   154 {
   149 {
   155     CX_DEBUG_ENTER_FUNCTION();
   150     CX_DEBUG_ENTER_FUNCTION();
   156 
   151 
       
   152     // Check that right content is loaded. Load now if not.
       
   153     checkMode();
       
   154 
   157     bool found(false);
   155     bool found(false);
   158 
   156 
   159     if (mXmlReader) {
   157     if (mXmlReader) {
   160         settings = mXmlReader->getSliderSettingInfo(key, found);
   158         settings = mXmlReader->getSliderSettingInfo(key, found);
   161     }
   159     }
   207                 mEngine->stillCaptureControl().supportedImageQualities();
   205                 mEngine->stillCaptureControl().supportedImageQualities();
   208 
   206 
   209     int index = 0;
   207     int index = 0;
   210 
   208 
   211     // get the localized possible strings for each image quality setting
   209     // get the localized possible strings for each image quality setting
   212     QString vga = hbTrId("txt_cam_dblist_vga");
   210     QString vga = "txt_cam_dblist_vga";
   213     QString normal = hbTrId("txt_cam_dblist_ln_mpix");
   211     QString normal = "txt_cam_dblist_ln_mpix";
   214     QString imagesLeft = hbTrId("txt_cam_dblist_hd_720p_val_ln_images_left");
   212     QString imagesLeft = "txt_cam_dblist_hd_720p_val_ln_images_left";
   215     QString widescreen = hbTrId("txt_cam_dblist_ln_mpix_widescreen");
   213     QString widescreen = "txt_cam_dblist_ln_mpix_widescreen";
   216 
   214 
   217     foreach(CxeImageDetails quality, list) {
   215     foreach(CxeImageDetails quality, list) {
   218         // mapping the right value for each quality
   216         // mapping the right value for each quality
   219 
   217 
   220         QString settingString;
   218         QString settingString;
   221         QString qualityIcon = "";
   219         QString qualityIcon = "";
       
   220         qreal pxCount = quality.mMpxCount.toDouble();
   222 
   221 
   223         if (quality.mWidth == KResVGA.width() && quality.mHeight == KResVGA.height()) {
   222         if (quality.mWidth == KResVGA.width() && quality.mHeight == KResVGA.height()) {
   224             settingString.append(vga);
   223             settingString.append(hbTrId(vga.toAscii().constData()));
   225             settingString.append(" ");
   224             settingString.append(" ");
   226         }
   225         }
   227 
   226 
   228         if (quality.mAspectRatio == Cxe::AspectRatio16to9) {
   227         if (quality.mAspectRatio == Cxe::AspectRatio16to9) {
   229             settingString.append(widescreen.arg(quality.mMpxCount));
   228              settingString.append(hbTrId(widescreen.toAscii().constData()).arg(pxCount,0,'g',3));
   230         } else {
   229         } else {
   231             settingString.append(normal.arg(quality.mMpxCount));
   230             settingString.append(hbTrId(normal.toAscii().constData()).arg(pxCount,0,'g',3));
   232         }
   231         }
   233 
   232 
   234         settingString.append(",");
   233         settingString.append(NEW_LINE_CHAR);
   235         settingString.append(imagesLeft.arg(quality.mPossibleImages));
   234         settingString.append(HbParameterLengthLimiter(imagesLeft.toAscii().constData(), quality.mPossibleImages));
   236         CX_DEBUG(( "Image quality setting string: %s", settingString.toAscii().constData()));
   235         CX_DEBUG(( "Image quality setting string: %s", settingString.toAscii().constData()));
   237 
   236 
   238         if (quality.mMpxCount == "12") {
   237         if (quality.mMpxCount == "12") {
   239             qualityIcon = "qtg_mono_12mp";
   238             qualityIcon = "qtg_mono_12mp";
   240         } else if (quality.mMpxCount == "9") {
   239         } else if (quality.mMpxCount == "9") {
   305                   quality.mHeight == KResWideVGA.height()) {
   304                   quality.mHeight == KResWideVGA.height()) {
   306             settingString.append(wideVga);
   305             settingString.append(wideVga);
   307             qualityIcon = "qtg_mono_vga_wide";
   306             qualityIcon = "qtg_mono_vga_wide";
   308         }
   307         }
   309 
   308 
   310         settingString.append(",");
   309         settingString.append(NEW_LINE_CHAR);
   311         time.sprintf("%02d:%02d", quality.mRemainingTime / 60, quality.mRemainingTime % 60);
   310         time.sprintf("%02d:%02d", quality.mRemainingTime / 60, quality.mRemainingTime % 60);
   312         settingString.append(timeleft.arg(time));
   311         settingString.append(timeleft.arg(time));
   313 
   312 
   314 
   313 
   315 
   314 
   324     }
   323     }
   325 
   324 
   326     CX_DEBUG_EXIT_FUNCTION();
   325     CX_DEBUG_EXIT_FUNCTION();
   327 }
   326 }
   328 
   327 
   329 /**
   328 /*!
   330 * Load new setting content based on the new mode.
   329 * Check that the right content for current mode is loaded.
   331 */
   330 *
   332 void CxuiSettingsInfo::initForCurrentMode(CxeError::Id status)
   331 * UI gets "settings changed" / "scene changed" events quite
   333 {
   332 * early when switching mode (image / video). We cannot rely
   334     CX_DEBUG_ENTER_FUNCTION();
   333 * on CxeCameraDeviceControl::initModeComplete signal since
   335 
   334 * that would be coming too late. (We would be using setting XML
   336     if (status == CxeError::None) {
   335 * for the old mode, and setting keys/values/icons would not
       
   336 * be found.) Better check this whenever UI requests for
       
   337 * content for a setting, and reload the XML when needed.
       
   338 * @see CxuiSettingsInfo::getSettingsContent(const QString &, RadioButtonListParams &)
       
   339 * @see CxuiSettingsInfo::getSettingsContent(const QString &, SliderParams &)
       
   340 * @see CxeCameraDeviceControl::initModeComplete(CxeError::Id)
       
   341 */
       
   342 void CxuiSettingsInfo::checkMode()
       
   343 {
       
   344     CX_DEBUG_ENTER_FUNCTION();
       
   345 
       
   346     int oldMode = mMode;
       
   347     mMode = mEngine->cameraDeviceControl().mode();
       
   348     if (mMode != oldMode) {
   337         // Select the setting XML file based on mode.
   349         // Select the setting XML file based on mode.
   338         QString sourceXml(mEngine->cameraDeviceControl().mode() == Cxe::ImageMode
   350         QString sourceXml(mEngine->cameraDeviceControl().mode() == Cxe::ImageMode
   339                          ? CxUiSettings::IMAGE_SETTING_MAPPING_FILE
   351                          ? CxUiSettings::IMAGE_SETTING_MAPPING_FILE
   340                          : CxUiSettings::VIDEO_SETTING_MAPPING_FILE);
   352                          : CxUiSettings::VIDEO_SETTING_MAPPING_FILE);
   341 
   353 
   342         mXmlReader->setXmlSource(sourceXml);
   354         mXmlReader->setXmlSource(sourceXml);
   343     } else {
       
   344         // Clear XML reader content on error.
       
   345         mXmlReader->setXmlSource(QString());
       
   346     }
   355     }
   347 
   356 
   348     CX_DEBUG_EXIT_FUNCTION();
   357     CX_DEBUG_EXIT_FUNCTION();
   349 }
   358 }
   350 
   359