diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp Fri Apr 16 14:51:30 2010 +0300 @@ -0,0 +1,355 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include + +#include "cxutils.h" +#include "cxuienums.h" +#include "cxeengine.h" +#include "cxesettings.h" +#include "cxenamespace.h" +#include "cxuisettingsinfo.h" +#include "cxequalitydetails.h" +#include "cxestillcapturecontrol.h" +#include "cxevideocapturecontrol.h" +#include "cxecameradevicecontrol.h" +#include "cxuisettingradiobuttonlist.h" +#include "cxuisettingxmlreader.h" + +using namespace Cxe; +using namespace CxUiSettings; + +namespace +{ + const QSize KResVGA = QSize(640, 480); + const QSize KResHD = QSize(1280, 720); + const QSize KResWideVGA = QSize(864, 480); + const QSize KResSharing = QSize(176,144); +} + +RadioButtonListParams& RadioButtonListParams::operator=(const RadioButtonListParams& other) +{ + CX_DEBUG_ENTER_FUNCTION(); + // Protect against self-assignment + if (this != &other) + { + mHeading = other.mHeading; + mSettingId = other.mSettingId; + mHeadingIcon = other.mHeadingIcon; + mSettingPairList = other.mSettingPairList; + mPreview = other.mPreview; + mListboxType = other.mListboxType; + } + CX_DEBUG_EXIT_FUNCTION(); + return *this; +} + +SliderParams& SliderParams::operator=(const SliderParams& other) +{ + CX_DEBUG_ENTER_FUNCTION(); + // Protect against self-assignment + if (this != &other) + { + mHeading = other.mHeading; + mSettingId = other.mSettingId; + mHeadingIcon = other.mHeadingIcon; + mSettingStrings = other.mSettingStrings; + mRange = other.mRange; + mStep = other.mStep; + } + CX_DEBUG_EXIT_FUNCTION(); + return *this; +} + + +/*! +* CxuiSettingsInfo::CxuiSettingsInfo +*/ +CxuiSettingsInfo::CxuiSettingsInfo(CxeEngine *engine) +: mEngine(engine) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_ASSERT_ALWAYS(engine); + + mXmlReader = new CxuiSettingXmlReader(); + + // Initialize for the mode already so that the UI + // can already use the settings info even if engine isn't ready yet. + initForCurrentMode(CxeError::None); + + // Follow engine mode changes + connect(&engine->cameraDeviceControl(), SIGNAL(initModeComplete(CxeError::Id)), + this, SLOT(initForCurrentMode(CxeError::Id))); + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* CxuiSettingsInfo::~CxuiSettingsInfo +*/ +CxuiSettingsInfo::~CxuiSettingsInfo() +{ + CX_DEBUG_ENTER_FUNCTION(); + + delete mXmlReader; + + CX_DEBUG_EXIT_FUNCTION(); +} + + +/*! +* Fetches the settings content for radio button list +* @param key specifies the settings key +* @param settings on return contains all the data required for radiobutton list +* @return Was the setting supported or not +*/ +bool CxuiSettingsInfo::getSettingsContent(const QString &key, + RadioButtonListParams &settings) +{ + CX_DEBUG_ENTER_FUNCTION(); + + bool found(false); + + if (key == CxeSettingIds::IMAGE_QUALITY || + key == CxeSettingIds::VIDEO_QUALITY) { + handleQualitySettings(key, settings); + found = true; + } else { + // load settings from xml loader + if (mXmlReader) { + settings = mXmlReader->getListSettingInfo(key, found); + } + } + + CX_DEBUG_EXIT_FUNCTION(); + return found; +} + + + +/*! +* Fetches the settings content for slider +* @Param key specifies the settings key +* @param settings on return contains all the data required for slider +*/ +bool CxuiSettingsInfo::getSettingsContent(const QString &key, + SliderParams &settings) +{ + CX_DEBUG_ENTER_FUNCTION(); + + bool found(false); + + if (mXmlReader) { + settings = mXmlReader->getSliderSettingInfo(key, found); + } + + CX_DEBUG_EXIT_FUNCTION(); + return found; +} + + + + + +/*! +* Helper function to prepare image/video quality settings list +*/ +void CxuiSettingsInfo::handleQualitySettings(const QString &key, + CxUiSettings::RadioButtonListParams &settings) +{ + CX_DEBUG_ENTER_FUNCTION(); + + settings.mSettingId = key; + settings.mPreview = false; + settings.mListboxType = CxuiSettingRadioButtonList::TwoLine; + + if (key == CxeSettingIds::IMAGE_QUALITY) { + settings.mHeading = hbTrId("txt_cam_title_image_quality"); + getImageQualitySettings(settings); + } else { + settings.mHeading = hbTrId("txt_cam_title_video_quality"); + getVideoQualitySettings(settings); + } + + CX_DEBUG_EXIT_FUNCTION(); + +} + + + +/*! +* Prepares Image quality settings. +*/ +void CxuiSettingsInfo::getImageQualitySettings(RadioButtonListParams &settings) +{ + CX_DEBUG_ENTER_FUNCTION(); + + settings.mSettingPairList.clear(); + + QList list = + mEngine->stillCaptureControl().supportedImageQualities(); + + int index = 0; + + // get the localized possible strings for each image quality setting + QString vga = hbTrId("txt_cam_dblist_vga"); + QString normal = QString("%L1 Mpix"); + QString imagesLeft = QString("%L1 images left"); + QString widescreen = QString("%L1 Mpix widescreen"); + + foreach(CxeImageDetails quality, list) { + // mapping the right value for each quality + QString index2String; + index2String.setNum(index); + + QString settingString; + QString qualityIcon = ""; + + if (quality.mWidth == KResVGA.width() && quality.mHeight == KResVGA.height()) { + settingString.append(vga); + settingString.append(" "); + } + + if (quality.mAspectRatio == Cxe::AspectRatio16to9) { + settingString.append(widescreen.arg(quality.mMpxCount)); + } else { + settingString.append(normal.arg(quality.mMpxCount)); + } + + settingString.append(","); + settingString.append(imagesLeft.arg(quality.mPossibleImages)); + CX_DEBUG(( "Image quality setting string: %s", settingString.toAscii().constData())); + + if (quality.mMpxCount == "12") { + qualityIcon = "qtg_mono_12mp"; + } else if (quality.mMpxCount == "9") { + qualityIcon = "qtg_mono_9mp"; + } else if (quality.mMpxCount == "3") { + qualityIcon = "qtg_mono_3mp"; + } else if (quality.mMpxCount == "1.2") { + qualityIcon = "qtg_mono_1_3mp"; + } else if (quality.mMpxCount == "0.3") { + qualityIcon = "qtg_mono_qcif"; //correct icon missing + } + + SettingItem setting; + setting.mItem = settingString; + setting.mValue = qVariantFromValue(index2String); + setting.mIcon = qualityIcon; + settings.mSettingPairList.append(setting); + + index++; + } + + CX_DEBUG_EXIT_FUNCTION(); +} + + + +/*! +* Prepares video quality settings. +*/ +void CxuiSettingsInfo::getVideoQualitySettings(RadioButtonListParams &settings) +{ + CX_DEBUG_ENTER_FUNCTION(); + + settings.mSettingPairList.clear(); + + QList list = + mEngine->videoCaptureControl().supportedVideoQualities(); + + int index = 0; + + // get the localized possible strings for each video quality setting + QString timeleft = QString("%L1 recording time left"); + QString hdString = hbTrId("txt_cam_dblist_hd_720p_169_widescreen"); + QString vga = hbTrId("txt_cam_dblist_vga_43"); + QString wideVga = hbTrId("txt_cam_dblist_vga_169_widescreen"); //VGA 16:9 widescreen + QString sharing = hbTrId("txt_cam_dblist_qcif_sharing"); + + foreach(CxeVideoDetails quality, list) { + // mapping the right value for each quality + QString index2String; + index2String.setNum(index); + + QString settingString = ""; + QString time = ""; + QString qualityIcon = ""; + + if (quality.mWidth == KResHD.width() && + quality.mHeight == KResHD.height()) { + settingString.append(hdString); + qualityIcon = "qtg_mono_hd"; + } else if (quality.mWidth == KResVGA.width() && + quality.mHeight == KResVGA.height()) { + settingString.append(vga); + qualityIcon = "qtg_mono_vga"; + } else if (quality.mWidth == KResSharing.width() && + quality.mHeight == KResSharing.height()){ + settingString.append(sharing); + qualityIcon = "qtg_mono_qcif"; + } else if (quality.mWidth == KResWideVGA.width() && + quality.mHeight == KResWideVGA.height()) { + settingString.append(wideVga); + qualityIcon = "qtg_mono_12mp"; //correct icon missing + } + + settingString.append(","); + time.sprintf("%02d:%02d", quality.mRemainingTime / 60, quality.mRemainingTime % 60); + settingString.append(timeleft.arg(time)); + + + + CX_DEBUG(( "video quality setting string: %s", settingString.toAscii().constData())); + SettingItem setting; + setting.mItem = settingString; + setting.mValue = qVariantFromValue(index2String); + setting.mIcon = qualityIcon; + settings.mSettingPairList.append(setting); + + index++; + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/** +* Load new setting content based on the new mode. +*/ +void CxuiSettingsInfo::initForCurrentMode(CxeError::Id status) +{ + CX_DEBUG_ENTER_FUNCTION(); + + if (status == CxeError::None) { + // Select the setting XML file based on mode. + QString sourceXml(mEngine->cameraDeviceControl().mode() == Cxe::ImageMode + ? CxUiSettings::IMAGE_SETTING_MAPPING_FILE + : CxUiSettings::VIDEO_SETTING_MAPPING_FILE); + + mXmlReader->setXmlSource(sourceXml); + } else { + // Clear XML reader content on error. + mXmlReader->setXmlSource(QString()); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + + +// end of file